ETH Price: $3,458.67 (-0.71%)
Gas: 3 Gwei

Token

AI Technology (AITEK)
 

Overview

Max Total Supply

10,000,000 AITEK

Holders

1,469

Market

Price

$0.01 @ 0.000004 ETH

Onchain Market Cap

$138,441.60

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
759.742868935017374764 AITEK

Value
$10.52 ( ~0.00304163267354514 Eth) [0.0076%]
0xd63401c9773De4f6e637336f65FB78f33a3A4c53
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TEK aims to enable users to engage in leverage trading with lower market cap tokens. With AI Technology Leverage, users can take both long and short positions on low-cap meme tokens well before they are listed on centralized exchanges.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AITEK

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-31
*/

// SPDX-License-Identifier: MIT
/**
https://t.me/aitechnologyportal
https://linktr.ee/ai_technology

 */
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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint 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
        );
}

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

contract AITEK is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public marketingAddress;
    address public leveragePoolAddress;
    address public devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping (address => bool) public bot;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

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

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

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

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    uint256 public percentForOperations = 20;
    uint256 public percentForMarketing = 30;
    uint256 public percentForLeveragePool = 30;
    uint256 public percentForDev = 20;

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

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

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

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20(unicode"AI Technology", unicode"AITEK") {

        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        uint256 totalSupply = 10 * 1e6 * 1e18;

        maxBuyAmount = totalSupply * 5 / 1000;
        maxSellAmount = totalSupply * 5 / 1000;
        maxWalletAmount = totalSupply * 5 / 1000;
        swapTokensAtAmount = totalSupply * 5 / 1000;

        buyOperationsFee = 15;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 35;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

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

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

        operationsAddress = address(0x087292b0BaBC093b589beBa584827bACb11E9127);
        marketingAddress = address(0x502090f92543d06da4C9e6e9902B378A6FCD3081);
        leveragePoolAddress = address(0x5477AB232e0654a5799a4027Cb65C7f3bF73e341);
        devAddress = address(0x87E48Fec14285AA5eEcF99C0B512696C2058A6d3);

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

    receive() external payable {}

    function enableTrading() payable external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
        
        _approve(address(this), address(dexRouter), totalSupply());
        dexRouter.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(lpPair).approve(address(dexRouter), type(uint).max);

        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;

        emit EnabledTrading();
    }

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

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

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

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

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

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

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

    // 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 <= 20, "Must keep fees at 40% or less");
    }

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

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

    function operatorUpdateSwapTokensAtAmount(uint256 newAmount) external {
        require(msg.sender == address(operationsAddress), "Must be operator");
  	    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 operatorExcludeFromFees(address account, bool excluded) external {
        require(msg.sender == address(operationsAddress), "Must be operator");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function operatorExcludeFromMaxTransaction(address updAds, bool isEx) external {
        require(msg.sender == address(operationsAddress), "Must be operator");
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        require(!bot[from] && !bot[to], "Bots cannot transfer tokens in or out except to owner or dead address.");

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
    
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //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) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] && 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){
            // on sell
            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 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(operationsAddress),
            block.timestamp
        );
    }

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

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

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

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

        if(address(this).balance > 0){

            uint256 bal = address(this).balance;

            (success,) = address(operationsAddress).call{value: bal * percentForOperations / 100}("");
            (success,) = address(marketingAddress).call{value: bal * percentForMarketing / 100}("");
            (success,) = address(leveragePoolAddress).call{value: bal * percentForLeveragePool / 100}("");
            (success,) = address(devAddress).call{value: bal * percentForDev / 100}("");
        }
    }

    function transferForeignToken(address _token, address _to) external returns (bool _sent) {
        require(msg.sender == address(operationsAddress), "Must be operator");
        require(_token != address(0), "_token address cannot be 0");
        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 {
        require(msg.sender == address(operationsAddress), "Must be operator");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function removeFees() external {
        require(msg.sender == address(operationsAddress), "Must be operator");
        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyTotalFees = 0;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellTotalFees = 0;
    }

    function setOperationsAddress(address _operationsAddress) external {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        require(msg.sender == address(operationsAddress), "Must be operator");
        operationsAddress = payable(_operationsAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external {
        require(msg.sender == address(operationsAddress), "Must be operator");
        require(balanceOf(address(this)) >= 0, "No tokens to swap");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"bot","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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"payable","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leveragePoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"operatorExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"operatorExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"operatorUpdateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLeveragePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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"}]

608060405260006010556012805462ffffff191660019081179091556014805460ff19169091178155601d819055601e808055601f556020553480156200004557600080fd5b506040518060400160405280600d81526020016c414920546563686e6f6c6f677960981b81525060405180604001604052806005815260200164414954454b60d81b81525081600390816200009b919062000679565b506004620000aa828262000679565b5050506000620000bf620002dd60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003eac833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915533906a084595161401484a0000006103e8620001438260056200075b565b6200014f91906200077b565b6006556103e8620001628260056200075b565b6200016e91906200077b565b6007556103e8620001818260056200075b565b6200018d91906200077b565b6008556103e8620001a08260056200075b565b620001ac91906200077b565b600b55600f601681905560006017819055620001c8916200079e565b601555602360198190556000601a819055620001e4916200079e565b601855620001f4836001620002e1565b62000201306001620002e1565b6200021061dead6001620002e1565b6200021d83600162000344565b6200022a30600162000344565b6200023961dead600162000344565b600c80546001600160a01b031990811673087292b0babc093b589beba584827bacb11e912717909155600d8054821673502090f92543d06da4c9e6e9902b378a6fcd3081179055600e80548216735477ab232e0654a5799a4027cb65c7f3bf73e341179055600f80549091167387e48fec14285aa5eecf99c0b512696c2058a6d3179055620002c98382620003f2565b620002d483620004d7565b505050620007b4565b3390565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620003935760405162461bcd60e51b8152602060048201819052602482015260008051602062003e8c83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200044a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200038a565b80600260008282546200045e91906200079e565b90915550506001600160a01b038216600090815260208190526040812080548392906200048d9084906200079e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620005225760405162461bcd60e51b8152602060048201819052602482015260008051602062003e8c83398151915260448201526064016200038a565b6001600160a01b038116620005895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200038a565b6005546040516001600160a01b0380841692169060008051602062003eac83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ff57607f821691505b6020821081036200062057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067457600081815260208120601f850160051c810160208610156200064f5750805b601f850160051c820191505b8181101562000670578281556001016200065b565b5050505b505050565b81516001600160401b03811115620006955762000695620005d4565b620006ad81620006a68454620005ea565b8462000626565b602080601f831160018114620006e55760008415620006cc5750858301515b600019600386901b1c1916600185901b17855562000670565b600085815260208120601f198616915b828110156200071657888601518255948401946001909101908401620006f5565b5085821015620007355787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000775576200077562000745565b92915050565b6000826200079957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000775576200077562000745565b6136c880620007c46000396000f3fe6080604052600436106103dd5760003560e01c806388e765ff116101fd578063c876d0b911610118578063e884f260116100ab578063f2fde38b1161007a578063f2fde38b14610b1b578063f5648a4f14610b3b578063f637434214610b50578063f6b20c3b14610b66578063fb002c9714610b7b57600080fd5b8063e884f26014610aba578063ea4cfe1214610acf578063ee40166e14610aef578063f11a24d314610b0557600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a1e578063dd62ed3e14610a3e578063e2f4560514610a84578063e800dff714610a9a57600080fd5b8063c876d0b9146109b8578063cc5ac165146109d2578063d257b34f146109e8578063d85ba06314610a0857600080fd5b8063a5ece94111610190578063b9c5cd741161015f578063b9c5cd7414610939578063bbc0c74214610959578063c024666814610978578063c18bc1951461099857600080fd5b8063a5ece941146108b3578063a9059cbb146108d3578063aa4bde28146108f3578063b62496f51461090957600080fd5b806395d89b41116101cc57806395d89b4114610848578063984f02d31461085d5780639a7a23d614610873578063a457c2d71461089357600080fd5b806388e765ff146107ec57806389832225146108025780638a8c523c146108225780638da5cb5b1461082a57600080fd5b8063452ed4f1116102f857806366d602ae1161028b57806370a082311161025a57806370a0823114610762578063715018a614610782578063751039fc146107975780637571336a146107ac5780638366e79a146107cc57600080fd5b806366d602ae146107005780636a486a8e146107165780636ddd17131461072c5780636fc387241461074c57600080fd5b806351f205e4116102c757806351f205e41461069557806356d55bb3146106aa5780635a139dd4146106ca57806366ca9b83146106e057600080fd5b8063452ed4f114610625578063499b8394146106455780634a62bb65146106655780634f77f6c01461067f57600080fd5b8063221247dc11610370578063353f23451161033f578063353f2345146105955780633747cab7146105c557806339509351146105e55780633ad10ef61461060557600080fd5b8063221247dc1461052357806323b872dd146105395780632be32b6114610559578063313ce5671461057957600080fd5b806310d5de53116103ac57806310d5de531461049e578063130a2c3c146104ce57806318160ddd146104ee5780631a8145bb1461050d57600080fd5b806302dbd8f8146103e957806306fdde031461040b5780630758d92414610436578063095ea7b31461046e57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613173565b610b91565b005b34801561041757600080fd5b50610420610c31565b60405161042d9190613195565b60405180910390f35b34801561044257600080fd5b50600954610456906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b34801561047a57600080fd5b5061048e6104893660046131fb565b610cc3565b604051901515815260200161042d565b3480156104aa57600080fd5b5061048e6104b9366004613227565b60226020526000908152604090205460ff1681565b3480156104da57600080fd5b506104096104e9366004613259565b610cda565b3480156104fa57600080fd5b506002545b60405190815260200161042d565b34801561051957600080fd5b506104ff601c5481565b34801561052f57600080fd5b506104ff60205481565b34801561054557600080fd5b5061048e6105543660046132df565b610d7b565b34801561056557600080fd5b50610409610574366004613320565b610e25565b34801561058557600080fd5b506040516012815260200161042d565b3480156105a157600080fd5b5061048e6105b0366004613227565b60116020526000908152604090205460ff1681565b3480156105d157600080fd5b506104096105e0366004613339565b610f32565b3480156105f157600080fd5b5061048e6106003660046131fb565b610fbb565b34801561061157600080fd5b50600f54610456906001600160a01b031681565b34801561063157600080fd5b50600a54610456906001600160a01b031681565b34801561065157600080fd5b50610409610660366004613227565b610ff7565b34801561067157600080fd5b5060125461048e9060ff1681565b34801561068b57600080fd5b506104ff60195481565b3480156106a157600080fd5b506104096110a8565b3480156106b657600080fd5b506104096106c5366004613320565b61117c565b3480156106d657600080fd5b506104ff60165481565b3480156106ec57600080fd5b506104096106fb366004613173565b6112c7565b34801561070c57600080fd5b506104ff60075481565b34801561072257600080fd5b506104ff60185481565b34801561073857600080fd5b5060125461048e9062010000900460ff1681565b34801561075857600080fd5b506104ff601d5481565b34801561076e57600080fd5b506104ff61077d366004613227565b61135a565b34801561078e57600080fd5b50610409611375565b3480156107a357600080fd5b506104096113e9565b3480156107b857600080fd5b506104096107c7366004613339565b611454565b3480156107d857600080fd5b5061048e6107e7366004613372565b61151c565b3480156107f857600080fd5b506104ff60065481565b34801561080e57600080fd5b5061040961081d366004613339565b6116cd565b6104096116f7565b34801561083657600080fd5b506005546001600160a01b0316610456565b34801561085457600080fd5b50610420611a97565b34801561086957600080fd5b506104ff601e5481565b34801561087f57600080fd5b5061040961088e366004613339565b611aa6565b34801561089f57600080fd5b5061048e6108ae3660046131fb565b611b9a565b3480156108bf57600080fd5b50600d54610456906001600160a01b031681565b3480156108df57600080fd5b5061048e6108ee3660046131fb565b611c33565b3480156108ff57600080fd5b506104ff60085481565b34801561091557600080fd5b5061048e610924366004613227565b60236020526000908152604090205460ff1681565b34801561094557600080fd5b50600e54610456906001600160a01b031681565b34801561096557600080fd5b5060125461048e90610100900460ff1681565b34801561098457600080fd5b50610409610993366004613339565b611c40565b3480156109a457600080fd5b506104096109b3366004613320565b611c6a565b3480156109c457600080fd5b5060145461048e9060ff1681565b3480156109de57600080fd5b506104ff601f5481565b3480156109f457600080fd5b50610409610a03366004613320565b611d73565b348015610a1457600080fd5b506104ff60155481565b348015610a2a57600080fd5b50610409610a39366004613320565b611d9d565b348015610a4a57600080fd5b506104ff610a59366004613372565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a9057600080fd5b506104ff600b5481565b348015610aa657600080fd5b50610409610ab5366004613339565b611ea4565b348015610ac657600080fd5b50610409611ef9565b348015610adb57600080fd5b50600c54610456906001600160a01b031681565b348015610afb57600080fd5b506104ff60105481565b348015610b1157600080fd5b506104ff60175481565b348015610b2757600080fd5b50610409610b36366004613227565b611f2f565b348015610b4757600080fd5b5061040961201a565b348015610b5c57600080fd5b506104ff601a5481565b348015610b7257600080fd5b50610409612086565b348015610b8757600080fd5b506104ff601b5481565b6005546001600160a01b03163314610bc45760405162461bcd60e51b8152600401610bbb906133a0565b60405180910390fd5b6019829055601a819055610bd881836133eb565b601881905560281015610c2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610bbb565b5050565b606060038054610c40906133fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c906133fe565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120d0565b5060015b92915050565b6005546001600160a01b03163314610d045760405162461bcd60e51b8152600401610bbb906133a0565b60005b82811015610d75578160116000868685818110610d2657610d26613438565b9050602002016020810190610d3b9190613227565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d6d8161344e565b915050610d07565b50505050565b6000610d888484846121f4565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e0d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bbb565b610e1a85338584036120d0565b506001949350505050565b6005546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8610e6460025490565b610e6f906002613467565b610e79919061347e565b610e83919061347e565b811015610ee45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bbb565b610ef681670de0b6b3a7640000613467565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b600c546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bbb906134a0565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd0918590610ff29086906133eb565b6120d0565b6001600160a01b03811661105c5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bbb565b600c546001600160a01b031633146110865760405162461bcd60e51b8152600401610bbb906134a0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146110d25760405162461bcd60e51b8152600401610bbb906134a0565b60006110dd3061135a565b101561111f5760405162461bcd60e51b815260206004820152601160248201527004e6f20746f6b656e7320746f207377617607c1b6044820152606401610bbb565b600a805460ff60a01b1916600160a01b17905561113a612ac7565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146111a65760405162461bcd60e51b8152600401610bbb906134a0565b620186a06111b360025490565b6111be906001613467565b6111c8919061347e565b8110156112355760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bbb565b6103e861124160025490565b61124c906001613467565b611256919061347e565b8111156112c25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bbb565b600b55565b6005546001600160a01b031633146112f15760405162461bcd60e51b8152600401610bbb906133a0565b6016829055601781905561130581836133eb565b601581905560141015610c2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610bbb565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461139f5760405162461bcd60e51b8152600401610bbb906133a0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114135760405162461bcd60e51b8152600401610bbb906133a0565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bbb906133a0565b806114f157600a546001600160a01b03908116908316036114f15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bbb565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600c546000906001600160a01b031633146115495760405162461bcd60e51b8152600401610bbb906134a0565b6001600160a01b03831661159f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bbb565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a91906134ca565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561165d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168191906134e3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600c546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bbb906134a0565b6005546001600160a01b031633146117215760405162461bcd60e51b8152600401610bbb906133a0565b601254610100900460ff16156117795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bbb565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f09190613500565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118769190613500565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190613500565b600a80546001600160a01b0319166001600160a01b03929092169182179055611911906001612d91565b600a54611928906001600160a01b03166001612df4565b6009546119439030906001600160a01b0316610ff260025490565b6009546001600160a01b031663f305d719473061195f8161135a565b6000806119746005546001600160a01b031690565b426040518863ffffffff1660e01b81526004016119969695949392919061351d565b60606040518083038185885af11580156119b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119d99190613558565b5050600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906134e3565b506012805462ffff00191662010100179055436010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610c40906133fe565b6005546001600160a01b03163314611ad05760405162461bcd60e51b8152600401610bbb906133a0565b600a546001600160a01b0390811690831603611b545760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bbb565b611b5e8282612df4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611c1c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bbb565b611c2933858584036120d0565b5060019392505050565b6000610cd03384846121f4565b6005546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bbb906133a0565b6005546001600160a01b03163314611c945760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8611ca960025490565b611cb4906003613467565b611cbe919061347e565b611cc8919061347e565b811015611d2c5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bbb565b611d3e81670de0b6b3a7640000613467565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f27565b6005546001600160a01b031633146111a65760405162461bcd60e51b8152600401610bbb906133a0565b6005546001600160a01b03163314611dc75760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8611ddc60025490565b611de7906002613467565b611df1919061347e565b611dfb919061347e565b811015611e5d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bbb565b611e6f81670de0b6b3a7640000613467565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f27565b6005546001600160a01b03163314611ece5760405162461bcd60e51b8152600401610bbb906133a0565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f235760405162461bcd60e51b8152600401610bbb906133a0565b6014805460ff19169055565b6005546001600160a01b03163314611f595760405162461bcd60e51b8152600401610bbb906133a0565b6001600160a01b038116611fbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146120445760405162461bcd60e51b8152600401610bbb906134a0565b604051600090339047908381818185875af1925050503d8060008114610d75576040519150601f19603f3d011682016040523d82523d6000602084013e610d75565b600c546001600160a01b031633146120b05760405162461bcd60e51b8152600401610bbb906134a0565b60006016819055601781905560158190556019819055601a819055601855565b6001600160a01b0383166121325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166121935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661221a5760405162461bcd60e51b8152600401610bbb90613586565b6001600160a01b0382166122405760405162461bcd60e51b8152600401610bbb906135cb565b600081116122905760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bbb565b601254610100900460ff16612323576001600160a01b03831660009081526021602052604090205460ff16806122de57506001600160a01b03821660009081526021602052604090205460ff165b6123235760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bbb565b6001600160a01b03831660009081526011602052604090205460ff1615801561236557506001600160a01b03821660009081526011602052604090205460ff16155b6123e65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bbb565b60125460ff16156127e2576005546001600160a01b0384811691161480159061241d57506005546001600160a01b03838116911614155b801561243157506001600160a01b03821615155b801561244857506001600160a01b03821661dead14155b801561246d57506001600160a01b03831660009081526021602052604090205460ff16155b801561249257506001600160a01b03821660009081526021602052604090205460ff16155b156127e25760145460ff16156125ab576009546001600160a01b038381169116148015906124ce5750600a546001600160a01b03838116911614155b156125ab576124de60024361360e565b3260009081526013602052604090205410801561251c575061250160024361360e565b6001600160a01b038316600090815260136020526040902054105b6125865760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bbb565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff1680156125ec57506001600160a01b03821660009081526022602052604090205460ff16155b156126b8576006548111156126545760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bbb565b6008546126608361135a565b61266a90836133eb565b11156126b35760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bbb565b6127e2565b6001600160a01b03821660009081526023602052604090205460ff1680156126f957506001600160a01b03831660009081526022602052604090205460ff16155b15612763576007548111156126b35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bbb565b6001600160a01b03821660009081526022602052604090205460ff166127e25760085461278f8361135a565b61279990836133eb565b11156127e25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bbb565b60006127ed3061135a565b600b549091508110801590819061280c575060125462010000900460ff165b80156128225750600a54600160a01b900460ff16155b801561284757506001600160a01b03851660009081526023602052604090205460ff16155b801561286c57506001600160a01b03851660009081526021602052604090205460ff16155b801561289157506001600160a01b03841660009081526021602052604090205460ff16155b80156128b557506001600160a01b03841660009081526023602052604090205460ff165b156128e357600a805460ff60a01b1916600160a01b1790556128d5612ac7565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff168061292557506001600160a01b03851660009081526021602052604090205460ff165b1561292e575060005b60008115612ab3576001600160a01b03861660009081526023602052604090205460ff16801561296057506000601854115b156129e8576064601854866129759190613467565b61297f919061347e565b9050601854601a54826129929190613467565b61299c919061347e565b601c60008282546129ad91906133eb565b90915550506018546019546129c29083613467565b6129cc919061347e565b601b60008282546129dd91906133eb565b90915550612a959050565b6001600160a01b03871660009081526023602052604090205460ff168015612a1257506000601554115b15612a9557606460155486612a279190613467565b612a31919061347e565b905060155460175482612a449190613467565b612a4e919061347e565b601c6000828254612a5f91906133eb565b9091555050601554601654612a749083613467565b612a7e919061347e565b601b6000828254612a8f91906133eb565b90915550505b8015612aa657612aa6873083612e22565b612ab0818661360e565b94505b612abe878787612e22565b50505050505050565b6000612ad23061135a565b90506000601b54601c54612ae691906133eb565b9050811580612af3575080155b15612afc575050565b600b54612b0b906103e8613467565b821115612b2457600b54612b21906103e8613467565b91505b600080600283601c5486612b389190613467565b612b42919061347e565b612b4c919061347e565b9050612b60612b5b828661360e565b612f77565b601c5447908190600090612b769060029061347e565b612b80908761360e565b601b54612b8d9085613467565b612b97919061347e565b9050612ba3818361360e565b6000601c819055601b5591508315801590612bbe5750600082115b15612bcd57612bcd84836130d1565b4715612abe57600c54601d5447916001600160a01b031690606490612bf29084613467565b612bfc919061347e565b604051600081818185875af1925050503d8060008114612c38576040519150601f19603f3d011682016040523d82523d6000602084013e612c3d565b606091505b5050600d54601e549197506001600160a01b031690606490612c5f9084613467565b612c69919061347e565b604051600081818185875af1925050503d8060008114612ca5576040519150601f19603f3d011682016040523d82523d6000602084013e612caa565b606091505b5050600e54601f549197506001600160a01b031690606490612ccc9084613467565b612cd6919061347e565b604051600081818185875af1925050503d8060008114612d12576040519150601f19603f3d011682016040523d82523d6000602084013e612d17565b606091505b5050600f546020549197506001600160a01b031690606490612d399084613467565b612d43919061347e565b604051600081818185875af1925050503d8060008114612d7f576040519150601f19603f3d011682016040523d82523d6000602084013e612d84565b606091505b5050505050505050505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611b5e8282612d91565b6001600160a01b038316612e485760405162461bcd60e51b8152600401610bbb90613586565b6001600160a01b038216612e6e5760405162461bcd60e51b8152600401610bbb906135cb565b6001600160a01b03831660009081526020819052604090205481811015612ee65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bbb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f1d9084906133eb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f6991815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fac57612fac613438565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130299190613500565b8160018151811061303c5761303c613438565b6001600160a01b03928316602091820292909201015260095461306291309116846120d0565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061309b908590600090869030904290600401613621565b600060405180830381600087803b1580156130b557600080fd5b505af11580156130c9573d6000803e3d6000fd5b505050505050565b6009546130e99030906001600160a01b0316846120d0565b600954600c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613129923092899260009283921690429060040161351d565b60606040518083038185885af1158015613147573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316c9190613558565b5050505050565b6000806040838503121561318657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156131c2578581018301518582016040015282016131a6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131f857600080fd5b50565b6000806040838503121561320e57600080fd5b8235613219816131e3565b946020939093013593505050565b60006020828403121561323957600080fd5b8135613244816131e3565b9392505050565b80151581146131f857600080fd5b60008060006040848603121561326e57600080fd5b833567ffffffffffffffff8082111561328657600080fd5b818601915086601f83011261329a57600080fd5b8135818111156132a957600080fd5b8760208260051b85010111156132be57600080fd5b602092830195509350508401356132d48161324b565b809150509250925092565b6000806000606084860312156132f457600080fd5b83356132ff816131e3565b9250602084013561330f816131e3565b929592945050506040919091013590565b60006020828403121561333257600080fd5b5035919050565b6000806040838503121561334c57600080fd5b8235613357816131e3565b915060208301356133678161324b565b809150509250929050565b6000806040838503121561338557600080fd5b8235613390816131e3565b91506020830135613367816131e3565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610cd457610cd46133d5565b600181811c9082168061341257607f821691505b60208210810361343257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613460576134606133d5565b5060010190565b8082028115828204841417610cd457610cd46133d5565b60008261349b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526010908201526f26bab9ba1031329037b832b930ba37b960811b604082015260600190565b6000602082840312156134dc57600080fd5b5051919050565b6000602082840312156134f557600080fd5b81516132448161324b565b60006020828403121561351257600080fd5b8151613244816131e3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561356d57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cd457610cd46133d5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136715784516001600160a01b03168352938301939183019160010161364c565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122086cfbbe45fc46ee8307f0d258db8c6cddc17ee0ba03958a26dc9c4466d3ae15b64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c806388e765ff116101fd578063c876d0b911610118578063e884f260116100ab578063f2fde38b1161007a578063f2fde38b14610b1b578063f5648a4f14610b3b578063f637434214610b50578063f6b20c3b14610b66578063fb002c9714610b7b57600080fd5b8063e884f26014610aba578063ea4cfe1214610acf578063ee40166e14610aef578063f11a24d314610b0557600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a1e578063dd62ed3e14610a3e578063e2f4560514610a84578063e800dff714610a9a57600080fd5b8063c876d0b9146109b8578063cc5ac165146109d2578063d257b34f146109e8578063d85ba06314610a0857600080fd5b8063a5ece94111610190578063b9c5cd741161015f578063b9c5cd7414610939578063bbc0c74214610959578063c024666814610978578063c18bc1951461099857600080fd5b8063a5ece941146108b3578063a9059cbb146108d3578063aa4bde28146108f3578063b62496f51461090957600080fd5b806395d89b41116101cc57806395d89b4114610848578063984f02d31461085d5780639a7a23d614610873578063a457c2d71461089357600080fd5b806388e765ff146107ec57806389832225146108025780638a8c523c146108225780638da5cb5b1461082a57600080fd5b8063452ed4f1116102f857806366d602ae1161028b57806370a082311161025a57806370a0823114610762578063715018a614610782578063751039fc146107975780637571336a146107ac5780638366e79a146107cc57600080fd5b806366d602ae146107005780636a486a8e146107165780636ddd17131461072c5780636fc387241461074c57600080fd5b806351f205e4116102c757806351f205e41461069557806356d55bb3146106aa5780635a139dd4146106ca57806366ca9b83146106e057600080fd5b8063452ed4f114610625578063499b8394146106455780634a62bb65146106655780634f77f6c01461067f57600080fd5b8063221247dc11610370578063353f23451161033f578063353f2345146105955780633747cab7146105c557806339509351146105e55780633ad10ef61461060557600080fd5b8063221247dc1461052357806323b872dd146105395780632be32b6114610559578063313ce5671461057957600080fd5b806310d5de53116103ac57806310d5de531461049e578063130a2c3c146104ce57806318160ddd146104ee5780631a8145bb1461050d57600080fd5b806302dbd8f8146103e957806306fdde031461040b5780630758d92414610436578063095ea7b31461046e57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613173565b610b91565b005b34801561041757600080fd5b50610420610c31565b60405161042d9190613195565b60405180910390f35b34801561044257600080fd5b50600954610456906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b34801561047a57600080fd5b5061048e6104893660046131fb565b610cc3565b604051901515815260200161042d565b3480156104aa57600080fd5b5061048e6104b9366004613227565b60226020526000908152604090205460ff1681565b3480156104da57600080fd5b506104096104e9366004613259565b610cda565b3480156104fa57600080fd5b506002545b60405190815260200161042d565b34801561051957600080fd5b506104ff601c5481565b34801561052f57600080fd5b506104ff60205481565b34801561054557600080fd5b5061048e6105543660046132df565b610d7b565b34801561056557600080fd5b50610409610574366004613320565b610e25565b34801561058557600080fd5b506040516012815260200161042d565b3480156105a157600080fd5b5061048e6105b0366004613227565b60116020526000908152604090205460ff1681565b3480156105d157600080fd5b506104096105e0366004613339565b610f32565b3480156105f157600080fd5b5061048e6106003660046131fb565b610fbb565b34801561061157600080fd5b50600f54610456906001600160a01b031681565b34801561063157600080fd5b50600a54610456906001600160a01b031681565b34801561065157600080fd5b50610409610660366004613227565b610ff7565b34801561067157600080fd5b5060125461048e9060ff1681565b34801561068b57600080fd5b506104ff60195481565b3480156106a157600080fd5b506104096110a8565b3480156106b657600080fd5b506104096106c5366004613320565b61117c565b3480156106d657600080fd5b506104ff60165481565b3480156106ec57600080fd5b506104096106fb366004613173565b6112c7565b34801561070c57600080fd5b506104ff60075481565b34801561072257600080fd5b506104ff60185481565b34801561073857600080fd5b5060125461048e9062010000900460ff1681565b34801561075857600080fd5b506104ff601d5481565b34801561076e57600080fd5b506104ff61077d366004613227565b61135a565b34801561078e57600080fd5b50610409611375565b3480156107a357600080fd5b506104096113e9565b3480156107b857600080fd5b506104096107c7366004613339565b611454565b3480156107d857600080fd5b5061048e6107e7366004613372565b61151c565b3480156107f857600080fd5b506104ff60065481565b34801561080e57600080fd5b5061040961081d366004613339565b6116cd565b6104096116f7565b34801561083657600080fd5b506005546001600160a01b0316610456565b34801561085457600080fd5b50610420611a97565b34801561086957600080fd5b506104ff601e5481565b34801561087f57600080fd5b5061040961088e366004613339565b611aa6565b34801561089f57600080fd5b5061048e6108ae3660046131fb565b611b9a565b3480156108bf57600080fd5b50600d54610456906001600160a01b031681565b3480156108df57600080fd5b5061048e6108ee3660046131fb565b611c33565b3480156108ff57600080fd5b506104ff60085481565b34801561091557600080fd5b5061048e610924366004613227565b60236020526000908152604090205460ff1681565b34801561094557600080fd5b50600e54610456906001600160a01b031681565b34801561096557600080fd5b5060125461048e90610100900460ff1681565b34801561098457600080fd5b50610409610993366004613339565b611c40565b3480156109a457600080fd5b506104096109b3366004613320565b611c6a565b3480156109c457600080fd5b5060145461048e9060ff1681565b3480156109de57600080fd5b506104ff601f5481565b3480156109f457600080fd5b50610409610a03366004613320565b611d73565b348015610a1457600080fd5b506104ff60155481565b348015610a2a57600080fd5b50610409610a39366004613320565b611d9d565b348015610a4a57600080fd5b506104ff610a59366004613372565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a9057600080fd5b506104ff600b5481565b348015610aa657600080fd5b50610409610ab5366004613339565b611ea4565b348015610ac657600080fd5b50610409611ef9565b348015610adb57600080fd5b50600c54610456906001600160a01b031681565b348015610afb57600080fd5b506104ff60105481565b348015610b1157600080fd5b506104ff60175481565b348015610b2757600080fd5b50610409610b36366004613227565b611f2f565b348015610b4757600080fd5b5061040961201a565b348015610b5c57600080fd5b506104ff601a5481565b348015610b7257600080fd5b50610409612086565b348015610b8757600080fd5b506104ff601b5481565b6005546001600160a01b03163314610bc45760405162461bcd60e51b8152600401610bbb906133a0565b60405180910390fd5b6019829055601a819055610bd881836133eb565b601881905560281015610c2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610bbb565b5050565b606060038054610c40906133fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c906133fe565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120d0565b5060015b92915050565b6005546001600160a01b03163314610d045760405162461bcd60e51b8152600401610bbb906133a0565b60005b82811015610d75578160116000868685818110610d2657610d26613438565b9050602002016020810190610d3b9190613227565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d6d8161344e565b915050610d07565b50505050565b6000610d888484846121f4565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e0d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bbb565b610e1a85338584036120d0565b506001949350505050565b6005546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8610e6460025490565b610e6f906002613467565b610e79919061347e565b610e83919061347e565b811015610ee45760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bbb565b610ef681670de0b6b3a7640000613467565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b600c546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bbb906134a0565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd0918590610ff29086906133eb565b6120d0565b6001600160a01b03811661105c5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bbb565b600c546001600160a01b031633146110865760405162461bcd60e51b8152600401610bbb906134a0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146110d25760405162461bcd60e51b8152600401610bbb906134a0565b60006110dd3061135a565b101561111f5760405162461bcd60e51b815260206004820152601160248201527004e6f20746f6b656e7320746f207377617607c1b6044820152606401610bbb565b600a805460ff60a01b1916600160a01b17905561113a612ac7565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b600c546001600160a01b031633146111a65760405162461bcd60e51b8152600401610bbb906134a0565b620186a06111b360025490565b6111be906001613467565b6111c8919061347e565b8110156112355760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bbb565b6103e861124160025490565b61124c906001613467565b611256919061347e565b8111156112c25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bbb565b600b55565b6005546001600160a01b031633146112f15760405162461bcd60e51b8152600401610bbb906133a0565b6016829055601781905561130581836133eb565b601581905560141015610c2d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610bbb565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461139f5760405162461bcd60e51b8152600401610bbb906133a0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146114135760405162461bcd60e51b8152600401610bbb906133a0565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bbb906133a0565b806114f157600a546001600160a01b03908116908316036114f15760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bbb565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600c546000906001600160a01b031633146115495760405162461bcd60e51b8152600401610bbb906134a0565b6001600160a01b03831661159f5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bbb565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160a91906134ca565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561165d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168191906134e3565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600c546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610bbb906134a0565b6005546001600160a01b031633146117215760405162461bcd60e51b8152600401610bbb906133a0565b601254610100900460ff16156117795760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bbb565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f09190613500565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611852573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118769190613500565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156118c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e79190613500565b600a80546001600160a01b0319166001600160a01b03929092169182179055611911906001612d91565b600a54611928906001600160a01b03166001612df4565b6009546119439030906001600160a01b0316610ff260025490565b6009546001600160a01b031663f305d719473061195f8161135a565b6000806119746005546001600160a01b031690565b426040518863ffffffff1660e01b81526004016119969695949392919061351d565b60606040518083038185885af11580156119b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119d99190613558565b5050600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906134e3565b506012805462ffff00191662010100179055436010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610c40906133fe565b6005546001600160a01b03163314611ad05760405162461bcd60e51b8152600401610bbb906133a0565b600a546001600160a01b0390811690831603611b545760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bbb565b611b5e8282612df4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611c1c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bbb565b611c2933858584036120d0565b5060019392505050565b6000610cd03384846121f4565b6005546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bbb906133a0565b6005546001600160a01b03163314611c945760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8611ca960025490565b611cb4906003613467565b611cbe919061347e565b611cc8919061347e565b811015611d2c5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bbb565b611d3e81670de0b6b3a7640000613467565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f27565b6005546001600160a01b031633146111a65760405162461bcd60e51b8152600401610bbb906133a0565b6005546001600160a01b03163314611dc75760405162461bcd60e51b8152600401610bbb906133a0565b670de0b6b3a76400006103e8611ddc60025490565b611de7906002613467565b611df1919061347e565b611dfb919061347e565b811015611e5d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bbb565b611e6f81670de0b6b3a7640000613467565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f27565b6005546001600160a01b03163314611ece5760405162461bcd60e51b8152600401610bbb906133a0565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611f235760405162461bcd60e51b8152600401610bbb906133a0565b6014805460ff19169055565b6005546001600160a01b03163314611f595760405162461bcd60e51b8152600401610bbb906133a0565b6001600160a01b038116611fbe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bbb565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146120445760405162461bcd60e51b8152600401610bbb906134a0565b604051600090339047908381818185875af1925050503d8060008114610d75576040519150601f19603f3d011682016040523d82523d6000602084013e610d75565b600c546001600160a01b031633146120b05760405162461bcd60e51b8152600401610bbb906134a0565b60006016819055601781905560158190556019819055601a819055601855565b6001600160a01b0383166121325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bbb565b6001600160a01b0382166121935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bbb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661221a5760405162461bcd60e51b8152600401610bbb90613586565b6001600160a01b0382166122405760405162461bcd60e51b8152600401610bbb906135cb565b600081116122905760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bbb565b601254610100900460ff16612323576001600160a01b03831660009081526021602052604090205460ff16806122de57506001600160a01b03821660009081526021602052604090205460ff165b6123235760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bbb565b6001600160a01b03831660009081526011602052604090205460ff1615801561236557506001600160a01b03821660009081526011602052604090205460ff16155b6123e65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bbb565b60125460ff16156127e2576005546001600160a01b0384811691161480159061241d57506005546001600160a01b03838116911614155b801561243157506001600160a01b03821615155b801561244857506001600160a01b03821661dead14155b801561246d57506001600160a01b03831660009081526021602052604090205460ff16155b801561249257506001600160a01b03821660009081526021602052604090205460ff16155b156127e25760145460ff16156125ab576009546001600160a01b038381169116148015906124ce5750600a546001600160a01b03838116911614155b156125ab576124de60024361360e565b3260009081526013602052604090205410801561251c575061250160024361360e565b6001600160a01b038316600090815260136020526040902054105b6125865760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bbb565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526023602052604090205460ff1680156125ec57506001600160a01b03821660009081526022602052604090205460ff16155b156126b8576006548111156126545760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bbb565b6008546126608361135a565b61266a90836133eb565b11156126b35760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bbb565b6127e2565b6001600160a01b03821660009081526023602052604090205460ff1680156126f957506001600160a01b03831660009081526022602052604090205460ff16155b15612763576007548111156126b35760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bbb565b6001600160a01b03821660009081526022602052604090205460ff166127e25760085461278f8361135a565b61279990836133eb565b11156127e25760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bbb565b60006127ed3061135a565b600b549091508110801590819061280c575060125462010000900460ff165b80156128225750600a54600160a01b900460ff16155b801561284757506001600160a01b03851660009081526023602052604090205460ff16155b801561286c57506001600160a01b03851660009081526021602052604090205460ff16155b801561289157506001600160a01b03841660009081526021602052604090205460ff16155b80156128b557506001600160a01b03841660009081526023602052604090205460ff165b156128e357600a805460ff60a01b1916600160a01b1790556128d5612ac7565b600a805460ff60a01b191690555b6001600160a01b03851660009081526021602052604090205460019060ff168061292557506001600160a01b03851660009081526021602052604090205460ff165b1561292e575060005b60008115612ab3576001600160a01b03861660009081526023602052604090205460ff16801561296057506000601854115b156129e8576064601854866129759190613467565b61297f919061347e565b9050601854601a54826129929190613467565b61299c919061347e565b601c60008282546129ad91906133eb565b90915550506018546019546129c29083613467565b6129cc919061347e565b601b60008282546129dd91906133eb565b90915550612a959050565b6001600160a01b03871660009081526023602052604090205460ff168015612a1257506000601554115b15612a9557606460155486612a279190613467565b612a31919061347e565b905060155460175482612a449190613467565b612a4e919061347e565b601c6000828254612a5f91906133eb565b9091555050601554601654612a749083613467565b612a7e919061347e565b601b6000828254612a8f91906133eb565b90915550505b8015612aa657612aa6873083612e22565b612ab0818661360e565b94505b612abe878787612e22565b50505050505050565b6000612ad23061135a565b90506000601b54601c54612ae691906133eb565b9050811580612af3575080155b15612afc575050565b600b54612b0b906103e8613467565b821115612b2457600b54612b21906103e8613467565b91505b600080600283601c5486612b389190613467565b612b42919061347e565b612b4c919061347e565b9050612b60612b5b828661360e565b612f77565b601c5447908190600090612b769060029061347e565b612b80908761360e565b601b54612b8d9085613467565b612b97919061347e565b9050612ba3818361360e565b6000601c819055601b5591508315801590612bbe5750600082115b15612bcd57612bcd84836130d1565b4715612abe57600c54601d5447916001600160a01b031690606490612bf29084613467565b612bfc919061347e565b604051600081818185875af1925050503d8060008114612c38576040519150601f19603f3d011682016040523d82523d6000602084013e612c3d565b606091505b5050600d54601e549197506001600160a01b031690606490612c5f9084613467565b612c69919061347e565b604051600081818185875af1925050503d8060008114612ca5576040519150601f19603f3d011682016040523d82523d6000602084013e612caa565b606091505b5050600e54601f549197506001600160a01b031690606490612ccc9084613467565b612cd6919061347e565b604051600081818185875af1925050503d8060008114612d12576040519150601f19603f3d011682016040523d82523d6000602084013e612d17565b606091505b5050600f546020549197506001600160a01b031690606490612d399084613467565b612d43919061347e565b604051600081818185875af1925050503d8060008114612d7f576040519150601f19603f3d011682016040523d82523d6000602084013e612d84565b606091505b5050505050505050505050565b6001600160a01b038216600081815260226020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602360205260409020805460ff1916821515179055611b5e8282612d91565b6001600160a01b038316612e485760405162461bcd60e51b8152600401610bbb90613586565b6001600160a01b038216612e6e5760405162461bcd60e51b8152600401610bbb906135cb565b6001600160a01b03831660009081526020819052604090205481811015612ee65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bbb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612f1d9084906133eb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f6991815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fac57612fac613438565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130299190613500565b8160018151811061303c5761303c613438565b6001600160a01b03928316602091820292909201015260095461306291309116846120d0565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061309b908590600090869030904290600401613621565b600060405180830381600087803b1580156130b557600080fd5b505af11580156130c9573d6000803e3d6000fd5b505050505050565b6009546130e99030906001600160a01b0316846120d0565b600954600c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592613129923092899260009283921690429060040161351d565b60606040518083038185885af1158015613147573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061316c9190613558565b5050505050565b6000806040838503121561318657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156131c2578581018301518582016040015282016131a6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146131f857600080fd5b50565b6000806040838503121561320e57600080fd5b8235613219816131e3565b946020939093013593505050565b60006020828403121561323957600080fd5b8135613244816131e3565b9392505050565b80151581146131f857600080fd5b60008060006040848603121561326e57600080fd5b833567ffffffffffffffff8082111561328657600080fd5b818601915086601f83011261329a57600080fd5b8135818111156132a957600080fd5b8760208260051b85010111156132be57600080fd5b602092830195509350508401356132d48161324b565b809150509250925092565b6000806000606084860312156132f457600080fd5b83356132ff816131e3565b9250602084013561330f816131e3565b929592945050506040919091013590565b60006020828403121561333257600080fd5b5035919050565b6000806040838503121561334c57600080fd5b8235613357816131e3565b915060208301356133678161324b565b809150509250929050565b6000806040838503121561338557600080fd5b8235613390816131e3565b91506020830135613367816131e3565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610cd457610cd46133d5565b600181811c9082168061341257607f821691505b60208210810361343257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613460576134606133d5565b5060010190565b8082028115828204841417610cd457610cd46133d5565b60008261349b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526010908201526f26bab9ba1031329037b832b930ba37b960811b604082015260600190565b6000602082840312156134dc57600080fd5b5051919050565b6000602082840312156134f557600080fd5b81516132448161324b565b60006020828403121561351257600080fd5b8151613244816131e3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561356d57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cd457610cd46133d5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136715784516001600160a01b03168352938301939183019160010161364c565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122086cfbbe45fc46ee8307f0d258db8c6cddc17ee0ba03958a26dc9c4466d3ae15b64736f6c63430008110033

Deployed Bytecode Sourcemap

9575:18100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17799:321;;;;;;;;;;-1:-1:-1;17799:321:0;;;;;:::i;:::-;;:::i;:::-;;4022:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9725:27;;;;;;;;;;-1:-1:-1;9725:27:0;;;;-1:-1:-1;;;;;9725:27:0;;;;;;-1:-1:-1;;;;;1002:32:1;;;984:51;;972:2;957:18;9725:27:0;820:221:1;4936:169:0;;;;;;;;;;-1:-1:-1;4936:169:0;;;;;:::i;:::-;;:::i;:::-;;;1667:14:1;;1660:22;1642:41;;1630:2;1615:18;4936:169:0;1502:187:1;11112:64:0;;;;;;;;;;-1:-1:-1;11112:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14810:199;;;;;;;;;;-1:-1:-1;14810:199:0;;;;;:::i;:::-;;:::i;4343:108::-;;;;;;;;;;-1:-1:-1;4431:12:0;;4343:108;;;2970:25:1;;;2958:2;2943:18;4343:108:0;2824:177:1;10745:33:0;;;;;;;;;;;;;;;;10929;;;;;;;;;;;;;;;;5113:492;;;;;;;;;;-1:-1:-1;5113:492:0;;;;;:::i;:::-;;:::i;15176:269::-;;;;;;;;;;-1:-1:-1;15176:269:0;;;;;:::i;:::-;;:::i;4242:93::-;;;;;;;;;;-1:-1:-1;4242:93:0;;4325:2;3794:36:1;;3782:2;3767:18;4242:93:0;3652:184:1;10088:36:0;;;;;;;;;;-1:-1:-1;10088:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18750:262;;;;;;;;;;-1:-1:-1;18750:262:0;;;;;:::i;:::-;;:::i;5613:215::-;;;;;;;;;;-1:-1:-1;5613:215:0;;;;;:::i;:::-;;:::i;9977:25::-;;;;;;;;;;-1:-1:-1;9977:25:0;;;;-1:-1:-1;;;;;9977:25:0;;;9759:21;;;;;;;;;;-1:-1:-1;9759:21:0;;;;-1:-1:-1;;;;;9759:21:0;;;26993:307;;;;;;;;;;-1:-1:-1;26993:307:0;;;;;:::i;:::-;;:::i;10133:33::-;;;;;;;;;;-1:-1:-1;10133:33:0;;;;;;;;10625:32;;;;;;;;;;;;;;;;27352:318;;;;;;;;;;;;;:::i;18318:424::-;;;;;;;;;;-1:-1:-1;18318:424:0;;;;;:::i;:::-;;:::i;10513:31::-;;;;;;;;;;;;;;;;17477:314;;;;;;;;;;-1:-1:-1;17477:314:0;;;;;:::i;:::-;;:::i;9651:28::-;;;;;;;;;;;;;;;;10590;;;;;;;;;;;;;;;;10213:31;;;;;;;;;;-1:-1:-1;10213:31:0;;;;;;;;;;;10787:40;;;;;;;;;;;;;;;;4459:127;;;;;;;;;;-1:-1:-1;4459:127:0;;;;;:::i;:::-;;:::i;8099:150::-;;;;;;;;;;;;;:::i;14530:154::-;;;;;;;;;;;;;:::i;16658:260::-;;;;;;;;;;-1:-1:-1;16658:260:0;;;;;:::i;:::-;;:::i;25926:451::-;;;;;;;;;;-1:-1:-1;25926:451:0;;;;;:::i;:::-;;:::i;9617:27::-;;;;;;;;;;;;;;;;19020:338;;;;;;;;;;-1:-1:-1;19020:338:0;;;;;:::i;:::-;;:::i;13691:787::-;;;:::i;7885:79::-;;;;;;;;;;-1:-1:-1;7950:6:0;;-1:-1:-1;;;;;7950:6:0;7885:79;;4130:104;;;;;;;;;;;;;:::i;10834:39::-;;;;;;;;;;;;;;;;16926:295;;;;;;;;;;-1:-1:-1;16926:295:0;;;;;:::i;:::-;;:::i;5836:413::-;;;;;;;;;;-1:-1:-1;5836:413:0;;;;;:::i;:::-;;:::i;9898:31::-;;;;;;;;;;-1:-1:-1;9898:31:0;;;;-1:-1:-1;;;;;9898:31:0;;;4594:175;;;;;;;;;;-1:-1:-1;4594:175:0;;;;;:::i;:::-;;:::i;9686:30::-;;;;;;;;;;;;;;;;11334:58;;;;;;;;;;-1:-1:-1;11334:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9936:34;;;;;;;;;;-1:-1:-1;9936:34:0;;;;-1:-1:-1;;;;;9936:34:0;;;10173:33;;;;;;;;;;-1:-1:-1;10173:33:0;;;;;;;;;;;18128:182;;;;;;;;;;-1:-1:-1;18128:182:0;;;;;:::i;:::-;;:::i;15735:284::-;;;;;;;;;;-1:-1:-1;15735:284:0;;;;;:::i;:::-;;:::i;10431:39::-;;;;;;;;;;-1:-1:-1;10431:39:0;;;;;;;;10880:42;;;;;;;;;;;;;;;;16089:346;;;;;;;;;;-1:-1:-1;16089:346:0;;;;;:::i;:::-;;:::i;10479:27::-;;;;;;;;;;;;;;;;15453:274;;;;;;;;;;-1:-1:-1;15453:274:0;;;;;:::i;:::-;;:::i;4777:151::-;;;;;;;;;;-1:-1:-1;4777:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4893:18:0;;;4866:7;4893:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4777:151;9817:33;;;;;;;;;;;;;;;;14692:110;;;;;;;;;;-1:-1:-1;14692:110:0;;;;;:::i;:::-;;:::i;15070:98::-;;;;;;;;;;;;;:::i;9859:32::-;;;;;;;;;;-1:-1:-1;9859:32:0;;;;-1:-1:-1;;;;;9859:32:0;;;10011:37;;;;;;;;;;;;;;;;10551:30;;;;;;;;;;;;;;;;8257:244;;;;;;;;;;-1:-1:-1;8257:244:0;;;;;:::i;:::-;;:::i;26447:230::-;;;;;;;;;;;;;:::i;10664:31::-;;;;;;;;;;;;;;;;26685:300;;;;;;;;;;;;;:::i;10704:34::-;;;;;;;;;;;;;;;;17799:321;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;;;;;;;;;17900:17:::1;:34:::0;;;17945:16:::1;:32:::0;;;18004:36:::1;17964:13:::0;17920:14;18004:36:::1;:::i;:::-;17988:13;:52:::0;;;18076:2:::1;-1:-1:-1::0;18059:19:0::1;18051:61;;;::::0;-1:-1:-1;;;18051:61:0;;5654:2:1;18051:61:0::1;::::0;::::1;5636:21:1::0;5693:2;5673:18;;;5666:30;5732:31;5712:18;;;5705:59;5781:18;;18051:61:0::1;5452:353:1::0;18051:61:0::1;17799:321:::0;;:::o;4022:100::-;4076:13;4109:5;4102:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:100;:::o;4936:169::-;5019:4;5036:39;251:10;5059:7;5068:6;5036:8;:39::i;:::-;-1:-1:-1;5093:4:0;4936:169;;;;;:::o;14810:199::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;14914:9:::1;14910:92;14929:18:::0;;::::1;14910:92;;;14986:4;14968:3;:15;14972:7;;14980:1;14972:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14968:15:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14968:15:0;:22;;-1:-1:-1;;14968:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14949:3;::::1;::::0;::::1;:::i;:::-;;;;14910:92;;;;14810:199:::0;;;:::o;5113:492::-;5253:4;5270:36;5280:6;5288:9;5299:6;5270:9;:36::i;:::-;-1:-1:-1;;;;;5346:19:0;;5319:24;5346:19;;;:11;:19;;;;;;;;251:10;5346:33;;;;;;;;5398:26;;;;5390:79;;;;-1:-1:-1;;;5390:79:0;;6669:2:1;5390:79:0;;;6651:21:1;6708:2;6688:18;;;6681:30;6747:34;6727:18;;;6720:62;-1:-1:-1;;;6798:18:1;;;6791:38;6846:19;;5390:79:0;6467:404:1;5390:79:0;5505:57;5514:6;251:10;5555:6;5536:16;:25;5505:8;:57::i;:::-;-1:-1:-1;5593:4:0;;5113:492;-1:-1:-1;;;;5113:492:0:o;15176:269::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;15295:4:::1;15289;15269:13;4431:12:::0;;;4343:108;15269:13:::1;:17;::::0;15285:1:::1;15269:17;:::i;:::-;:24;;;;:::i;:::-;15268:31;;;;:::i;:::-;15258:6;:41;;15250:95;;;::::0;-1:-1:-1;;;15250:95:0;;7473:2:1;15250:95:0::1;::::0;::::1;7455:21:1::0;7512:2;7492:18;;;7485:30;7551:34;7531:18;;;7524:62;-1:-1:-1;;;7602:18:1;;;7595:39;7651:19;;15250:95:0::1;7271:405:1::0;15250:95:0::1;15371:17;:6:::0;15381::::1;15371:17;:::i;:::-;15356:12;:32:::0;;;15404:33:::1;::::0;2970:25:1;;;15404:33:0::1;::::0;2958:2:1;2943:18;15404:33:0::1;;;;;;;;15176:269:::0;:::o;18750:262::-;18865:17;;-1:-1:-1;;;;;18865:17:0;18843:10;:40;18835:69;;;;-1:-1:-1;;;18835:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18915:28:0;;;;;;:19;:28;;;;;;;;;:39;;-1:-1:-1;;18915:39:0;;;;;;;;;;18970:34;;1642:41:1;;;18970:34:0;;1615:18:1;18970:34:0;;;;;;;18750:262;;:::o;5613:215::-;251:10;5701:4;5750:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5750:34:0;;;;;;;;;;5701:4;;5718:80;;5741:7;;5750:47;;5787:10;;5750:47;:::i;:::-;5718:8;:80::i;26993:307::-;-1:-1:-1;;;;;27079:32:0;;27071:83;;;;-1:-1:-1;;;27071:83:0;;8228:2:1;27071:83:0;;;8210:21:1;8267:2;8247:18;;;8240:30;8306:34;8286:18;;;8279:62;-1:-1:-1;;;8357:18:1;;;8350:36;8403:19;;27071:83:0;8026:402:1;27071:83:0;27195:17;;-1:-1:-1;;;;;27195:17:0;27173:10;:40;27165:69;;;;-1:-1:-1;;;27165:69:0;;;;;;;:::i;:::-;27245:17;:47;;-1:-1:-1;;;;;;27245:47:0;-1:-1:-1;;;;;27245:47:0;;;;;;;;;;26993:307::o;27352:318::-;27427:17;;-1:-1:-1;;;;;27427:17:0;27405:10;:40;27397:69;;;;-1:-1:-1;;;27397:69:0;;;;;;;:::i;:::-;27513:1;27485:24;27503:4;27485:9;:24::i;:::-;:29;;27477:59;;;;-1:-1:-1;;;27477:59:0;;8635:2:1;27477:59:0;;;8617:21:1;8674:2;8654:18;;;8647:30;-1:-1:-1;;;8693:18:1;;;8686:47;8750:18;;27477:59:0;8433:341:1;27477:59:0;27547:8;:15;;-1:-1:-1;;;;27547:15:0;-1:-1:-1;;;27547:15:0;;;27573:10;:8;:10::i;:::-;27594:8;:16;;-1:-1:-1;;;;27594:16:0;;;27626:36;;27646:15;2970:25:1;;27626:36:0;;2958:2:1;2943:18;27626:36:0;;;;;;;27352:318::o;18318:424::-;18429:17;;-1:-1:-1;;;;;18429:17:0;18407:10;:40;18399:69;;;;-1:-1:-1;;;18399:69:0;;;;;;;:::i;:::-;18519:6;18499:13;4431:12;;;4343:108;18499:13;:17;;18515:1;18499:17;:::i;:::-;:26;;;;:::i;:::-;18486:9;:39;;18478:105;;;;-1:-1:-1;;;18478:105:0;;8981:2:1;18478:105:0;;;8963:21:1;9020:2;9000:18;;;8993:30;9059:34;9039:18;;;9032:62;-1:-1:-1;;;9110:18:1;;;9103:51;9171:19;;18478:105:0;8779:417:1;18478:105:0;18634:4;18614:13;4431:12;;;4343:108;18614:13;:17;;18630:1;18614:17;:::i;:::-;:24;;;;:::i;:::-;18601:9;:37;;18593:102;;;;-1:-1:-1;;;18593:102:0;;9403:2:1;18593:102:0;;;9385:21:1;9442:2;9422:18;;;9415:30;9481:34;9461:18;;;9454:62;-1:-1:-1;;;9532:18:1;;;9525:50;9592:19;;18593:102:0;9201:416:1;18593:102:0;18705:18;:30;18318:424::o;17477:314::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;17577:16:::1;:33:::0;;;17621:15:::1;:31:::0;;;17678:34:::1;17639:13:::0;17596:14;17678:34:::1;:::i;:::-;17663:12;:49:::0;;;17747:2:::1;-1:-1:-1::0;17731:18:0::1;17723:60;;;::::0;-1:-1:-1;;;17723:60:0;;5654:2:1;17723:60:0::1;::::0;::::1;5636:21:1::0;5693:2;5673:18;;;5666:30;5732:31;5712:18;;;5705:59;5781:18;;17723:60:0::1;5452:353:1::0;4459:127:0;-1:-1:-1;;;;;4560:18:0;4533:7;4560:18;;;;;;;;;;;;4459:127::o;8099:150::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;8192:6:::1;::::0;8171:40:::1;::::0;8208:1:::1;::::0;-1:-1:-1;;;;;8192:6:0::1;::::0;8171:40:::1;::::0;8208:1;;8171:40:::1;8222:6;:19:::0;;-1:-1:-1;;;;;;8222:19:0::1;::::0;;8099:150::o;14530:154::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;14584:14:::1;:22:::0;;-1:-1:-1;;14584:22:0;;::::1;::::0;;;14617:20:::1;:28:::0;;;;::::1;::::0;;14661:15:::1;::::0;::::1;::::0;14601:5:::1;::::0;14661:15:::1;14530:154::o:0;16658:260::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;16754:4:::1;16750:104;;16792:6;::::0;-1:-1:-1;;;;;16792:6:0;;::::1;16782:16:::0;;::::1;::::0;16774:68:::1;;;::::0;-1:-1:-1;;;16774:68:0;;9824:2:1;16774:68:0::1;::::0;::::1;9806:21:1::0;9863:2;9843:18;;;9836:30;9902:34;9882:18;;;9875:62;-1:-1:-1;;;9953:18:1;;;9946:37;10000:19;;16774:68:0::1;9622:403:1::0;16774:68:0::1;-1:-1:-1::0;;;;;16864:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16864:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16658:260::o;25926:451::-;26056:17;;26003:10;;-1:-1:-1;;;;;26056:17:0;26034:10;:40;26026:69;;;;-1:-1:-1;;;26026:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26114:20:0;;26106:59;;;;-1:-1:-1;;;26106:59:0;;10232:2:1;26106:59:0;;;10214:21:1;10271:2;10251:18;;;10244:30;10310:28;10290:18;;;10283:56;10356:18;;26106:59:0;10030:350:1;26106:59:0;26203:39;;-1:-1:-1;;;26203:39:0;;26236:4;26203:39;;;984:51:1;26176:24:0;;-1:-1:-1;;;;;26203:24:0;;;;;957:18:1;;26203:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26261:46;;-1:-1:-1;;;26261:46:0;;-1:-1:-1;;;;;10766:32:1;;;26261:46:0;;;10748:51:1;10815:18;;;10808:34;;;26176:66:0;;-1:-1:-1;26261:23:0;;;;;;10721:18:1;;26261:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26323;;;-1:-1:-1;;;;;10766:32:1;;10748:51;;10830:2;10815:18;;10808:34;;;26253:54:0;;-1:-1:-1;26323:46:0;;10721:18:1;26323:46:0;;;;;;;26015:362;25926:451;;;;:::o;19020:338::-;19140:17;;-1:-1:-1;;;;;19140:17:0;19118:10;:40;19110:69;;;;-1:-1:-1;;;19110:69:0;;;;;;;:::i;13691:787::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;13763:13:::1;::::0;::::1;::::0;::::1;;;13762:14;13754:50;;;::::0;-1:-1:-1;;;13754:50:0;;11305:2:1;13754:50:0::1;::::0;::::1;11287:21:1::0;11344:2;11324:18;;;11317:30;11383:25;11363:18;;;11356:53;11426:18;;13754:50:0::1;11103:347:1::0;13754:50:0::1;13862:9;;;;;;;;;-1:-1:-1::0;;;;;13862:9:0::1;-1:-1:-1::0;;;;;13862:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13850:43:0::1;;13902:4;13909:9;;;;;;;;;-1:-1:-1::0;;;;;13909:9:0::1;-1:-1:-1::0;;;;;13909:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13850:76;::::0;-1:-1:-1;;;;;;13850:76:0::1;::::0;;;;;;-1:-1:-1;;;;;11941:15:1;;;13850:76:0::1;::::0;::::1;11923:34:1::0;11993:15;;11973:18;;;11966:43;11858:18;;13850:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13841:6;:85:::0;;-1:-1:-1;;;;;;13841:85:0::1;-1:-1:-1::0;;;;;13841:85:0;;;::::1;::::0;;::::1;::::0;;13937:49:::1;::::0;-1:-1:-1;13937:26:0::1;:49::i;:::-;14034:6;::::0;13997:51:::1;::::0;-1:-1:-1;;;;;14034:6:0::1;::::0;13997:28:::1;:51::i;:::-;14101:9;::::0;14069:58:::1;::::0;14086:4:::1;::::0;-1:-1:-1;;;;;14101:9:0::1;14113:13;4431:12:::0;;;4343:108;14069:58:::1;14138:9;::::0;-1:-1:-1;;;;;14138:9:0::1;:25;14171:21;14202:4;14208:24;14202:4:::0;14208:9:::1;:24::i;:::-;14233:1;14235::::0;14237:7:::1;7950:6:::0;;-1:-1:-1;;;;;7950:6:0;;7885:79;14237:7:::1;14245:15;14138:123;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14279:6:0::1;::::0;14303:9:::1;::::0;14272:58:::1;::::0;-1:-1:-1;;;14272:58:0;;-1:-1:-1;;;;;14303:9:0;;::::1;14272:58;::::0;::::1;10748:51:1::0;-1:-1:-1;;10815:18:1;;;10808:34;14279:6:0;::::1;::::0;-1:-1:-1;14272:22:0::1;::::0;10721:18:1;;14272:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14343:13:0::1;:20:::0;;-1:-1:-1;;14374:18:0;;;;;14424:12:::1;14403:18;:33:::0;14454:16:::1;::::0;::::1;::::0;-1:-1:-1;;14454:16:0::1;13691:787::o:0;4130:104::-;4186:13;4219:7;4212:14;;;;;:::i;16926:295::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;17035:6:::1;::::0;-1:-1:-1;;;;;17035:6:0;;::::1;17027:14:::0;;::::1;::::0;17019:84:::1;;;::::0;-1:-1:-1;;;17019:84:0;;13145:2:1;17019:84:0::1;::::0;::::1;13127:21:1::0;13184:2;13164:18;;;13157:30;13223:34;13203:18;;;13196:62;13294:27;13274:18;;;13267:55;13339:19;;17019:84:0::1;12943:421:1::0;17019:84:0::1;17116:41;17145:4;17151:5;17116:28;:41::i;:::-;17173:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17173:40:0;::::1;::::0;::::1;::::0;;;::::1;16926:295:::0;;:::o;5836:413::-;251:10;5929:4;5973:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5973:34:0;;;;;;;;;;6026:35;;;;6018:85;;;;-1:-1:-1;;;6018:85:0;;13571:2:1;6018:85:0;;;13553:21:1;13610:2;13590:18;;;13583:30;13649:34;13629:18;;;13622:62;-1:-1:-1;;;13700:18:1;;;13693:35;13745:19;;6018:85:0;13369:401:1;6018:85:0;6139:67;251:10;6162:7;6190:15;6171:16;:34;6139:8;:67::i;:::-;-1:-1:-1;6237:4:0;;5836:413;-1:-1:-1;;;5836:413:0:o;4594:175::-;4680:4;4697:42;251:10;4721:9;4732:6;4697:9;:42::i;18128:182::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;15735:284::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;15857:4:::1;15851;15831:13;4431:12:::0;;;4343:108;15831:13:::1;:17;::::0;15847:1:::1;15831:17;:::i;:::-;:24;;;;:::i;:::-;15830:31;;;;:::i;:::-;15820:6;:41;;15812:98;;;::::0;-1:-1:-1;;;15812:98:0;;13977:2:1;15812:98:0::1;::::0;::::1;13959:21:1::0;14016:2;13996:18;;;13989:30;14055:34;14035:18;;;14028:62;-1:-1:-1;;;14106:18:1;;;14099:42;14158:19;;15812:98:0::1;13775:408:1::0;15812:98:0::1;15939:17;:6:::0;15949::::1;15939:17;:::i;:::-;15921:15;:35:::0;;;15972:39:::1;::::0;2970:25:1;;;15972:39:0::1;::::0;2958:2:1;2943:18;15972:39:0::1;2824:177:1::0;16089:346:0;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;15453:274::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;15573:4:::1;15567;15547:13;4431:12:::0;;;4343:108;15547:13:::1;:17;::::0;15563:1:::1;15547:17;:::i;:::-;:24;;;;:::i;:::-;15546:31;;;;:::i;:::-;15536:6;:41;;15528:96;;;::::0;-1:-1:-1;;;15528:96:0;;14390:2:1;15528:96:0::1;::::0;::::1;14372:21:1::0;14429:2;14409:18;;;14402:30;14468:34;14448:18;;;14441:62;-1:-1:-1;;;14519:18:1;;;14512:40;14569:19;;15528:96:0::1;14188:406:1::0;15528:96:0::1;15651:17;:6:::0;15661::::1;15651:17;:::i;:::-;15635:13;:33:::0;;;15684:35:::1;::::0;2970:25:1;;;15684:35:0::1;::::0;2958:2:1;2943:18;15684:35:0::1;2824:177:1::0;14692:110:0;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14776:11:0;;;::::1;;::::0;;;:3:::1;:11;::::0;;;;:18;;-1:-1:-1;;14776:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14692:110::o;15070:98::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;15132:20:::1;:28:::0;;-1:-1:-1;;15132:28:0::1;::::0;;15070:98::o;8257:244::-;8012:6;;-1:-1:-1;;;;;8012:6:0;251:10;8012:22;8004:67;;;;-1:-1:-1;;;8004:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8346:22:0;::::1;8338:73;;;::::0;-1:-1:-1;;;8338:73:0;;14801:2:1;8338:73:0::1;::::0;::::1;14783:21:1::0;14840:2;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;-1:-1:-1;;;14930:18:1;;;14923:36;14976:19;;8338:73:0::1;14599:402:1::0;8338:73:0::1;8448:6;::::0;8427:38:::1;::::0;-1:-1:-1;;;;;8427:38:0;;::::1;::::0;8448:6:::1;::::0;8427:38:::1;::::0;8448:6:::1;::::0;8427:38:::1;8476:6;:17:::0;;-1:-1:-1;;;;;;8476:17:0::1;-1:-1:-1::0;;;;;8476:17:0;;;::::1;::::0;;;::::1;::::0;;8257:244::o;26447:230::-;26525:17;;-1:-1:-1;;;;;26525:17:0;26503:10;:40;26495:69;;;;-1:-1:-1;;;26495:69:0;;;;;;;:::i;:::-;26611:58;;26575:12;;26619:10;;26643:21;;26575:12;26611:58;26575:12;26611:58;26643:21;26619:10;26611:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26685:300;26757:17;;-1:-1:-1;;;;;26757:17:0;26735:10;:40;26727:69;;;;-1:-1:-1;;;26727:69:0;;;;;;;:::i;:::-;26826:1;26807:16;:20;;;26838:15;:19;;;26868:12;:16;;;26897:17;:21;;;26929:16;:20;;;26960:13;:17;26685:300::o;7178:380::-;-1:-1:-1;;;;;7314:19:0;;7306:68;;;;-1:-1:-1;;;7306:68:0;;15418:2:1;7306:68:0;;;15400:21:1;15457:2;15437:18;;;15430:30;15496:34;15476:18;;;15469:62;-1:-1:-1;;;15547:18:1;;;15540:34;15591:19;;7306:68:0;15216:400:1;7306:68:0;-1:-1:-1;;;;;7393:21:0;;7385:68;;;;-1:-1:-1;;;7385:68:0;;15823:2:1;7385:68:0;;;15805:21:1;15862:2;15842:18;;;15835:30;15901:34;15881:18;;;15874:62;-1:-1:-1;;;15952:18:1;;;15945:32;15994:19;;7385:68:0;15621:398:1;7385:68:0;-1:-1:-1;;;;;7466:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7518:32;;2970:25:1;;;7518:32:0;;2943:18:1;7518:32:0;;;;;;;7178:380;;;:::o;19366:3837::-;-1:-1:-1;;;;;19464:18:0;;19456:68;;;;-1:-1:-1;;;19456:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19543:16:0;;19535:64;;;;-1:-1:-1;;;19535:64:0;;;;;;;:::i;:::-;19627:1;19618:6;:10;19610:52;;;;-1:-1:-1;;;19610:52:0;;17036:2:1;19610:52:0;;;17018:21:1;17075:2;17055:18;;;17048:30;17114:31;17094:18;;;17087:59;17163:18;;19610:52:0;16834:353:1;19610:52:0;19679:13;;;;;;;19675:132;;-1:-1:-1;;;;;19716:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19745:23:0;;;;;;:19;:23;;;;;;;;19716:52;19708:87;;;;-1:-1:-1;;;19708:87:0;;17394:2:1;19708:87:0;;;17376:21:1;17433:2;17413:18;;;17406:30;-1:-1:-1;;;17452:18:1;;;17445:52;17514:18;;19708:87:0;17192:346:1;19708:87:0;-1:-1:-1;;;;;19828:9:0;;;;;;:3;:9;;;;;;;;19827:10;:22;;;;-1:-1:-1;;;;;;19842:7:0;;;;;;:3;:7;;;;;;;;19841:8;19827:22;19819:105;;;;-1:-1:-1;;;19819:105:0;;17745:2:1;19819:105:0;;;17727:21:1;17784:2;17764:18;;;17757:30;17823:34;17803:18;;;17796:62;17894:34;17874:18;;;17867:62;-1:-1:-1;;;17945:19:1;;;17938:37;17992:19;;19819:105:0;17543:474:1;19819:105:0;19940:14;;;;19937:1653;;;7950:6;;-1:-1:-1;;;;;19974:15:0;;;7950:6;;19974:15;;;;:32;;-1:-1:-1;7950:6:0;;-1:-1:-1;;;;;19993:13:0;;;7950:6;;19993:13;;19974:32;:52;;;;-1:-1:-1;;;;;;20010:16:0;;;;19974:52;:77;;;;-1:-1:-1;;;;;;20030:21:0;;20044:6;20030:21;;19974:77;:107;;;;-1:-1:-1;;;;;;20056:25:0;;;;;;:19;:25;;;;;;;;20055:26;19974:107;:135;;;;-1:-1:-1;;;;;;20086:23:0;;;;;;:19;:23;;;;;;;;20085:24;19974:135;19970:1609;;;20267:20;;;;20263:506;;;20329:9;;-1:-1:-1;;;;;20315:24:0;;;20329:9;;20315:24;;;;:49;;-1:-1:-1;20357:6:0;;-1:-1:-1;;;;;20343:21:0;;;20357:6;;20343:21;;20315:49;20311:439;;;20442:16;20457:1;20442:12;:16;:::i;:::-;20429:9;20400:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;20497:16:0;20512:1;20497:12;:16;:::i;:::-;-1:-1:-1;;;;;20462:32:0;;;;;;:28;:32;;;;;;:51;20400:113;20392:179;;;;-1:-1:-1;;;20392:179:0;;18357:2:1;20392:179:0;;;18339:21:1;18396:2;18376:18;;;18369:30;18435:34;18415:18;;;18408:62;-1:-1:-1;;;18486:18:1;;;18479:51;18547:19;;20392:179:0;18155:417:1;20392:179:0;20627:9;20598:39;;;;:28;:39;;;;;;20640:12;20598:54;;;;-1:-1:-1;;;;;20679:32:0;;;;;;:47;20311:439;-1:-1:-1;;;;;20825:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20861:35:0;;;;;;:31;:35;;;;;;;;20860:36;20825:71;20821:743;;;20943:12;;20933:6;:22;;20925:75;;;;-1:-1:-1;;;20925:75:0;;18779:2:1;20925:75:0;;;18761:21:1;18818:2;18798:18;;;18791:30;18857:34;18837:18;;;18830:62;-1:-1:-1;;;18908:18:1;;;18901:38;18956:19;;20925:75:0;18577:404:1;20925:75:0;21061:15;;21044:13;21054:2;21044:9;:13::i;:::-;21035:22;;:6;:22;:::i;:::-;:41;;21027:78;;;;-1:-1:-1;;;21027:78:0;;19188:2:1;21027:78:0;;;19170:21:1;19227:2;19207:18;;;19200:30;-1:-1:-1;;;19246:18:1;;;19239:54;19310:18;;21027:78:0;18986:348:1;21027:78:0;20821:743;;;-1:-1:-1;;;;;21181:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;21215:37:0;;;;;;:31;:37;;;;;;;;21214:38;21181:71;21177:387;;;21299:13;;21289:6;:23;;21281:78;;;;-1:-1:-1;;;21281:78:0;;19541:2:1;21281:78:0;;;19523:21:1;19580:2;19560:18;;;19553:30;19619:34;19599:18;;;19592:62;-1:-1:-1;;;19670:18:1;;;19663:40;19720:19;;21281:78:0;19339:406:1;21177:387:0;-1:-1:-1;;;;;21407:35:0;;;;;;:31;:35;;;;;;;;21402:162;;21500:15;;21483:13;21493:2;21483:9;:13::i;:::-;21474:22;;:6;:22;:::i;:::-;:41;;21466:78;;;;-1:-1:-1;;;21466:78:0;;19188:2:1;21466:78:0;;;19170:21:1;19227:2;19207:18;;;19200:30;-1:-1:-1;;;19246:18:1;;;19239:54;19310:18;;21466:78:0;18986:348:1;21466:78:0;21602:28;21633:24;21651:4;21633:9;:24::i;:::-;21709:18;;21602:55;;-1:-1:-1;21685:42:0;;;;;;;21743:22;;-1:-1:-1;21754:11:0;;;;;;;21743:22;:35;;;;-1:-1:-1;21770:8:0;;-1:-1:-1;;;21770:8:0;;;;21769:9;21743:35;:71;;;;-1:-1:-1;;;;;;21783:31:0;;;;;;:25;:31;;;;;;;;21782:32;21743:71;:101;;;;-1:-1:-1;;;;;;21819:25:0;;;;;;:19;:25;;;;;;;;21818:26;21743:101;:129;;;;-1:-1:-1;;;;;;21849:23:0;;;;;;:19;:23;;;;;;;;21848:24;21743:129;:162;;;;-1:-1:-1;;;;;;21876:29:0;;;;;;:25;:29;;;;;;;;21743:162;21740:269;;;21922:8;:15;;-1:-1:-1;;;;21922:15:0;-1:-1:-1;;;21922:15:0;;;21954:10;:8;:10::i;:::-;21981:8;:16;;-1:-1:-1;;;;21981:16:0;;;21740:269;-1:-1:-1;;;;;22139:25:0;;22021:12;22139:25;;;:19;:25;;;;;;22036:4;;22139:25;;;:52;;-1:-1:-1;;;;;;22168:23:0;;;;;;:19;:23;;;;;;;;22139:52;22136:99;;;-1:-1:-1;22218:5:0;22136:99;22247:12;22351:7;22348:802;;;-1:-1:-1;;;;;22402:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22451:1;22435:13;;:17;22402:50;22398:608;;;22504:3;22488:13;;22479:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;22472:35;;22574:13;;22555:16;;22548:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22526:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22656:13:0;;22636:17;;22629:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;22606:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;22398:608:0;;-1:-1:-1;22398:608:0;;-1:-1:-1;;;;;22732:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22782:1;22767:12;;:16;22732:51;22729:277;;;22832:3;22817:12;;22808:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22801:34;;22898:12;;22880:15;;22873:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22851:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22978:12:0;;22959:16;;22952:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;22929:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22729:277:0;23025:8;;23022:89;;23053:42;23069:4;23083;23090;23053:15;:42::i;:::-;23124:14;23134:4;23124:14;;:::i;:::-;;;22348:802;23162:33;23178:4;23184:2;23188:6;23162:15;:33::i;:::-;19445:3758;;;;19366:3837;;;:::o;24324:1594::-;24363:23;24389:24;24407:4;24389:9;:24::i;:::-;24363:50;;24424:25;24473:19;;24452:18;;:40;;;;:::i;:::-;24424:68;-1:-1:-1;24508:20:0;;;:46;;-1:-1:-1;24532:22:0;;24508:46;24505:60;;;24557:7;;24324:1594::o;24505:60::-;24598:18;;:25;;24619:4;24598:25;:::i;:::-;24580:15;:43;24577:117;;;24657:18;;:25;;24678:4;24657:25;:::i;:::-;24639:43;;24577:117;24706:12;24780:23;24865:1;24845:17;24824:18;;24806:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24780:86;-1:-1:-1;24879:51:0;24896:33;24780:86;24896:15;:33;:::i;:::-;24879:16;:51::i;:::-;25129:18;;24964:21;;;;24943:18;;25129:20;;25148:1;;25129:20;:::i;:::-;25108:42;;:17;:42;:::i;:::-;25085:19;;25072:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;25045:106;-1:-1:-1;25164:35:0;25045:106;25164:35;;:::i;:::-;25233:1;25212:18;:22;;;25245:19;:23;25164:35;-1:-1:-1;25284:19:0;;;;;:42;;;25325:1;25307:15;:19;25284:42;25281:119;;;25342:46;25355:15;25372;25342:12;:46::i;:::-;25415:21;:25;25412:499;;25531:17;;25568:20;;25472:21;;-1:-1:-1;;;;;25531:17:0;;25591:3;;25562:26;;25472:21;25562:26;:::i;:::-;:32;;;;:::i;:::-;25523:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25635:16:0;;25671:19;;25510:89;;-1:-1:-1;;;;;;25635:16:0;;25693:3;;25665:25;;:3;:25;:::i;:::-;:31;;;;:::i;:::-;25627:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25737:19:0;;25776:22;;25614:87;;-1:-1:-1;;;;;;25737:19:0;;25801:3;;25770:28;;:3;:28;:::i;:::-;:34;;;;:::i;:::-;25729:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25845:10:0;;25875:13;;25716:93;;-1:-1:-1;;;;;;25845:10:0;;25891:3;;25869:19;;:3;:19;:::i;:::-;:25;;;;:::i;:::-;25837:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24324:1594:0:o;16443:207::-;-1:-1:-1;;;;;16531:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16531:52:0;;;;;;;;;;16599:43;;19918:51:1;;;19985:18;;;19978:50;16599:43:0;;19891:18:1;16599:43:0;;;;;;;16443:207;;:::o;17229:240::-;-1:-1:-1;;;;;17312:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17312:39:0;;;;;;;17364;17312:31;:39;17364:26;:39::i;6257:614::-;-1:-1:-1;;;;;6397:20:0;;6389:70;;;;-1:-1:-1;;;6389:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6478:23:0;;6470:71;;;;-1:-1:-1;;;6470:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6578:17:0;;6554:21;6578:17;;;;;;;;;;;6614:23;;;;6606:74;;;;-1:-1:-1;;;6606:74:0;;20241:2:1;6606:74:0;;;20223:21:1;20280:2;20260:18;;;20253:30;20319:34;20299:18;;;20292:62;-1:-1:-1;;;20370:18:1;;;20363:36;20416:19;;6606:74:0;20039:402:1;6606:74:0;-1:-1:-1;;;;;6716:17:0;;;:9;:17;;;;;;;;;;;6736:22;;;6716:42;;6780:20;;;;;;;;:30;;6752:6;;6716:9;6780:30;;6752:6;;6780:30;:::i;:::-;;;;;;;;6845:9;-1:-1:-1;;;;;6828:35:0;6837:6;-1:-1:-1;;;;;6828:35:0;;6856:6;6828:35;;;;2970:25:1;;2958:2;2943:18;;2824:177;6828:35:0;;;;;;;;6378:493;6257:614;;;:::o;23215:573::-;23367:16;;;23381:1;23367:16;;;;;;;;23343:21;;23367:16;;;;;;;;;;-1:-1:-1;23367:16:0;23343:40;;23412:4;23394;23399:1;23394:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23394:23:0;;;:7;;;;;;;;;;:23;;;;23438:9;;:16;;;-1:-1:-1;;;23438:16:0;;;;:9;;;;;:14;;:16;;;;;23394:7;;23438:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23428:4;23433:1;23428:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23428:26:0;;;:7;;;;;;;;;:26;23499:9;;23467:56;;23484:4;;23499:9;23511:11;23467:8;:56::i;:::-;23562:9;;:218;;-1:-1:-1;;;23562:218:0;;-1:-1:-1;;;;;23562:9:0;;;;:60;;:218;;23637:11;;23562:9;;23707:4;;23734;;23754:15;;23562:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23270:518;23215:573;:::o;23796:520::-;23976:9;;23944:56;;23961:4;;-1:-1:-1;;;;;23976:9:0;23988:11;23944:8;:56::i;:::-;24043:9;;24249:17;;24043:265;;-1:-1:-1;;;24043:265:0;;-1:-1:-1;;;;;24043:9:0;;;;:25;;24076:9;;24043:265;;24109:4;;24129:11;;24043:9;;;;24249:17;;24282:15;;24043:265;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23796:520;;:::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;1946:118::-;2032:5;2025:13;2018:21;2011:5;2008:32;1998:60;;2054:1;2051;2044:12;2069:750;2161:6;2169;2177;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;2286:9;2273:23;2315:18;2356:2;2348:6;2345:14;2342:34;;;2372:1;2369;2362:12;2342:34;2410:6;2399:9;2395:22;2385:32;;2455:7;2448:4;2444:2;2440:13;2436:27;2426:55;;2477:1;2474;2467:12;2426:55;2517:2;2504:16;2543:2;2535:6;2532:14;2529:34;;;2559:1;2556;2549:12;2529:34;2614:7;2607:4;2597:6;2594:1;2590:14;2586:2;2582:23;2578:34;2575:47;2572:67;;;2635:1;2632;2625:12;2572:67;2666:4;2658:13;;;;-1:-1:-1;2690:6:1;-1:-1:-1;;2731:20:1;;2718:34;2761:28;2718:34;2761:28;:::i;:::-;2808:5;2798:15;;;2069:750;;;;;:::o;3006:456::-;3083:6;3091;3099;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;3207:9;3194:23;3226:31;3251:5;3226:31;:::i;:::-;3276:5;-1:-1:-1;3333:2:1;3318:18;;3305:32;3346:33;3305:32;3346:33;:::i;:::-;3006:456;;3398:7;;-1:-1:-1;;;3452:2:1;3437:18;;;;3424:32;;3006:456::o;3467:180::-;3526:6;3579:2;3567:9;3558:7;3554:23;3550:32;3547:52;;;3595:1;3592;3585:12;3547:52;-1:-1:-1;3618:23:1;;3467:180;-1:-1:-1;3467:180:1:o;3841:382::-;3906:6;3914;3967:2;3955:9;3946:7;3942:23;3938:32;3935:52;;;3983:1;3980;3973:12;3935:52;4022:9;4009:23;4041:31;4066:5;4041:31;:::i;:::-;4091:5;-1:-1:-1;4148:2:1;4133:18;;4120:32;4161:30;4120:32;4161:30;:::i;:::-;4210:7;4200:17;;;3841:382;;;;;:::o;4436:388::-;4504:6;4512;4565:2;4553:9;4544:7;4540:23;4536:32;4533:52;;;4581:1;4578;4571:12;4533:52;4620:9;4607:23;4639:31;4664:5;4639:31;:::i;:::-;4689:5;-1:-1:-1;4746:2:1;4731:18;;4718:32;4759:33;4718:32;4759:33;:::i;4829:356::-;5031:2;5013:21;;;5050:18;;;5043:30;5109:34;5104:2;5089:18;;5082:62;5176:2;5161:18;;4829:356::o;5190:127::-;5251:10;5246:3;5242:20;5239:1;5232:31;5282:4;5279:1;5272:15;5306:4;5303:1;5296:15;5322:125;5387:9;;;5408:10;;;5405:36;;;5421:18;;:::i;5810:380::-;5889:1;5885:12;;;;5932;;;5953:61;;6007:4;5999:6;5995:17;5985:27;;5953:61;6060:2;6052:6;6049:14;6029:18;6026:38;6023:161;;6106:10;6101:3;6097:20;6094:1;6087:31;6141:4;6138:1;6131:15;6169:4;6166:1;6159:15;6023:161;;5810:380;;;:::o;6195:127::-;6256:10;6251:3;6247:20;6244:1;6237:31;6287:4;6284:1;6277:15;6311:4;6308:1;6301:15;6327:135;6366:3;6387:17;;;6384:43;;6407:18;;:::i;:::-;-1:-1:-1;6454:1:1;6443:13;;6327:135::o;6876:168::-;6949:9;;;6980;;6997:15;;;6991:22;;6977:37;6967:71;;7018:18;;:::i;7049:217::-;7089:1;7115;7105:132;;7159:10;7154:3;7150:20;7147:1;7140:31;7194:4;7191:1;7184:15;7222:4;7219:1;7212:15;7105:132;-1:-1:-1;7251:9:1;;7049:217::o;7681:340::-;7883:2;7865:21;;;7922:2;7902:18;;;7895:30;-1:-1:-1;;;7956:2:1;7941:18;;7934:46;8012:2;7997:18;;7681:340::o;10385:184::-;10455:6;10508:2;10496:9;10487:7;10483:23;10479:32;10476:52;;;10524:1;10521;10514:12;10476:52;-1:-1:-1;10547:16:1;;10385:184;-1:-1:-1;10385:184:1:o;10853:245::-;10920:6;10973:2;10961:9;10952:7;10948:23;10944:32;10941:52;;;10989:1;10986;10979:12;10941:52;11021:9;11015:16;11040:28;11062:5;11040:28;:::i;11455:251::-;11525:6;11578:2;11566:9;11557:7;11553:23;11549:32;11546:52;;;11594:1;11591;11584:12;11546:52;11626:9;11620:16;11645:31;11670:5;11645:31;:::i;12020:607::-;-1:-1:-1;;;;;12379:15:1;;;12361:34;;12426:2;12411:18;;12404:34;;;;12469:2;12454:18;;12447:34;;;;12512:2;12497:18;;12490:34;;;;12561:15;;;12555:3;12540:19;;12533:44;12341:3;12593:19;;12586:35;;;;12310:3;12295:19;;12020:607::o;12632:306::-;12720:6;12728;12736;12789:2;12777:9;12768:7;12764:23;12760:32;12757:52;;;12805:1;12802;12795:12;12757:52;12834:9;12828:16;12818:26;;12884:2;12873:9;12869:18;12863:25;12853:35;;12928:2;12917:9;12913:18;12907:25;12897:35;;12632:306;;;;;:::o;16024:401::-;16226:2;16208:21;;;16265:2;16245:18;;;16238:30;16304:34;16299:2;16284:18;;16277:62;-1:-1:-1;;;16370:2:1;16355:18;;16348:35;16415:3;16400:19;;16024:401::o;16430:399::-;16632:2;16614:21;;;16671:2;16651:18;;;16644:30;16710:34;16705:2;16690:18;;16683:62;-1:-1:-1;;;16776:2:1;16761:18;;16754:33;16819:3;16804:19;;16430:399::o;18022:128::-;18089:9;;;18110:11;;;18107:37;;;18124:18;;:::i;20578:980::-;20840:4;20888:3;20877:9;20873:19;20919:6;20908:9;20901:25;20945:2;20983:6;20978:2;20967:9;20963:18;20956:34;21026:3;21021:2;21010:9;21006:18;20999:31;21050:6;21085;21079:13;21116:6;21108;21101:22;21154:3;21143:9;21139:19;21132:26;;21193:2;21185:6;21181:15;21167:29;;21214:1;21224:195;21238:6;21235:1;21232:13;21224:195;;;21303:13;;-1:-1:-1;;;;;21299:39:1;21287:52;;21394:15;;;;21359:12;;;;21335:1;21253:9;21224:195;;;-1:-1:-1;;;;;;;21475:32:1;;;;21470:2;21455:18;;21448:60;-1:-1:-1;;;21539:3:1;21524:19;21517:35;21436:3;20578:980;-1:-1:-1;;;20578:980:1:o

Swarm Source

ipfs://86cfbbe45fc46ee8307f0d258db8c6cddc17ee0ba03958a26dc9c4466d3ae15b
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.