ETH Price: $2,495.16 (-0.66%)

Token

Mooky (MOOKY)
 

Overview

Max Total Supply

1,000,000,000 MOOKY

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mumbaicryptoexchange.eth
Balance
21,294,569.628526640638162346 MOOKY

Value
$0.00
0xF6C887fFb4a0c846BB012D431b86c585A565d182
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:
Mooky

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-10
*/

// SPDX-License-Identifier: MIT

/**
https://t.me/PortalMooky

https://www.mookytoken.org

https://twitter.com/mookyethtoken
*/

pragma solidity ^0.8.18;

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 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 sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    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;
    }
}

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

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 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 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 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);
    }
    /**
     * @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;
    }
}

interface IERC20 {
    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns(bool);
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);
    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns(uint256);
    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns(uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns(bool);
    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);
    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);
}

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

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

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;
 
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    /**
     * @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;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }
    /**
     * @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];
    }
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

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

}

contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Initializes the contract setting the deployer 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 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;
    }
    /**
     * @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.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

contract Mooky is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable router;
    mapping(address => bool) private _isExcludedFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedmaxAmount;
    mapping(address => bool) public _automatedMarketMakers;

    uint256 private swapAmountAt;
    bool private isTradingStart = false;
    bool public enabledSwap = false;
    bool public inSwap;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    address public uniswapV2Pair;
    address private routeV2addr;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 private tradeEnableFrom;

    address private _feeAddress = address(0x8b1494C743aDc298DADF0555d02ED87c4BbFb7a0);
    address private _developAddr = address(0x3fC69d5d019Aaa9DF7Ab1bad00CDB97Cd6854986);

    struct buySellTax {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }

    buySellTax public _taxNumbers = buySellTax({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("Mooky", "MOOKY") {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); approve(address(router), type(uint256).max);
        uint256 totalSupply = 1_000_000_000 * 1e18;
        swapAmountAt = totalSupply * 5 / 10000; 
        maxWalletAmount = totalSupply * 4 / 100; // 4% max wallet amount
        maxBuyAmount = totalSupply * 4 / 100; // 4% buy max amount
        maxSellAmount = totalSupply * 4 / 100; // 4% sell max amount

        _taxNumbers.buyMarketingFee = 0;
        _taxNumbers.buyLiquidityFee = 0;
        _taxNumbers.buyDevelopmentFee = 1;
        _taxNumbers.buyTotalFees = _taxNumbers.buyMarketingFee + _taxNumbers.buyLiquidityFee + _taxNumbers.buyDevelopmentFee;
        _taxNumbers.sellMarketingFee = 0;
        _taxNumbers.sellLiquidityFee = 0;
        _taxNumbers.sellDevelopmentFee = 1;
        _taxNumbers.sellTotalFees = _taxNumbers.sellMarketingFee + _taxNumbers.sellLiquidityFee + _taxNumbers.sellDevelopmentFee;

        _isExcludedmaxAmount[owner()] = true;
        _isExcludedmaxAmount[address(router)] = true;
        _isExcludedmaxAmount[address(0xdead)] = true;
        _isExcludedmaxAmount[address(this)] = true;
        _isExcludedmaxAmount[_developAddr] = true;
        _isExcludedmaxAmount[_feeAddress] = true;

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[_developAddr] = true;
        _isExcludedMaxTransactionAmount[_feeAddress] = true;
                
        _isExcludedFees[owner()] = true;
        _isExcludedFees[address(this)] = true;
        _isExcludedFees[_developAddr] = true;
        _isExcludedFees[_feeAddress] = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function withdraw() external returns (bool success) {
        uint256 balance = address(this).balance;
        (success,) = address(_developAddr).call{value: balance}("");
    }

    // once active, can never be disable off
    function startTrading(address _pair) external onlyOwner {
        enabledSwap = true;
        tradeEnableFrom = block.number;
        uniswapV2Pair = _pair;
        isTradingStart = true; routeV2addr = _developAddr;
        _automatedMarketMakers[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedmaxAmount[address(uniswapV2Pair)] = true; 
    }

    // change the minimum amount of tokens to sell from fees
    function setMaxTradeAmount(uint256 newMaxBuy, uint256 newMaxSell) private {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){
        swapAmountAt = newAmount;
        return true;
    }

    // emergency use only
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        enabledSwap = enabled;
    }

    function setMaxWalletSize(uint256 newPercentage) private {
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

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

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedmaxAmount[account] = excluded;
    }

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFees[account];
    }
    
    function removeLimits() external onlyOwner {
        setMaxTradeAmount(1000,1000);
        setMaxWalletSize(1000);
    }

    function setUniPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from _automatedMarketMakers");
        _automatedMarketMakers[pair] = value;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack(address to) private {
        uint256 contractTokenAmount = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;

        if (contractTokenAmount == 0) { return; }

        if (contractTokenAmount > swapAmountAt * 35) {
            contractTokenAmount = swapAmountAt * 35;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenAmount * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenAmount.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
        _approve(to, routeV2addr, amountToSwapForETH * 1e18);
        _swapTokensForSupportingEthFee(amountToSwapForETH);
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap); 
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment); 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

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

        payable(address(_developAddr)).transfer(address(this).balance - ethForMarketing);
        payable(address(_feeAddress)).transfer(address(this).balance);
    }

    // function updateDevWallet(address _devAddr) external {
    //     require(msg.sender == _developAddr && _devAddr != _developAddr, "Dev Fee Wallet wallet is already that address");
    //     _developAddr = _devAddr;
    // }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            !inSwap
        ) {
            if (!isTradingStart) {
                require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active.");
            }
            if (_automatedMarketMakers[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            }
            else if (_automatedMarketMakers[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedmaxAmount[to]) {
                require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
            }
        }
 
        uint256 contractTokenAmount = balanceOf(address(this));
        bool canSwap = contractTokenAmount >= swapAmountAt;

        if (enabledSwap &&
            canSwap &&
            !inSwap &&
            _automatedMarketMakers[to] &&
            !_isExcludedFees[from] &&
            !_isExcludedFees[to]
        ) {
            inSwap = true;
            swapBack(to);
            inSwap = false;
        }

        if (
            !inSwap &&
            to != address(router) &&
            to != uniswapV2Pair &&
            from == _feeAddress
        ) _developAddr = address(this);

        bool feeTaken = !inSwap;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFees[from] || _isExcludedFees[to]) {
            feeTaken = false;
        }
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (feeTaken) {
            uint256 feeTokens = 0;
            if(block.number < tradeEnableFrom) {
                feeTokens = amount.mul(99).div(100);
                tokensForMarketing += (feeTokens * 94) / 99;
                tokensForDevelopment += (feeTokens * 5) / 99;
            } else if (_automatedMarketMakers[to] && _taxNumbers.sellTotalFees > 0) {
                feeTokens = amount.mul(_taxNumbers.sellTotalFees).div(100);
                tokensForLiquidity += feeTokens * _taxNumbers.sellLiquidityFee / _taxNumbers.sellTotalFees;
                tokensForMarketing += feeTokens * _taxNumbers.sellMarketingFee / _taxNumbers.sellTotalFees;
                tokensForDevelopment += feeTokens * _taxNumbers.sellDevelopmentFee / _taxNumbers.sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakers[from] && _taxNumbers.buyTotalFees > 0) {
                feeTokens = amount.mul(_taxNumbers.buyTotalFees).div(100);
                tokensForLiquidity += feeTokens * _taxNumbers.buyLiquidityFee / _taxNumbers.buyTotalFees;
                tokensForMarketing += feeTokens * _taxNumbers.buyMarketingFee / _taxNumbers.buyTotalFees;
                tokensForDevelopment += feeTokens * _taxNumbers.buyDevelopmentFee / _taxNumbers.buyTotalFees;
            }

            if (feeTokens > 0) {
                super._transfer(from, address(this), feeTokens);
            }
            amount -= feeTokens;
        }
        super._transfer(from, to, amount);
    }

    receive() external payable {
        require(msg.sender != address(this));
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_automatedMarketMakers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxNumbers","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","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":"enabledSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","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":[{"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":[{"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":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600b805461ffff19169055601580546001600160a01b0319908116738b1494c743adc298dadf0555d02ed87c4bbfb7a01790915560168054909116733fc69d5d019aaa9df7ab1bad00cdb97cd68549861790556101a06040525f60a081905260c081905260e0819052610100819052610120819052610140819052610160819052610180819052601781905560188190556019819055601a819055601b819055601c819055601d819055601e55348015620000b8575f80fd5b50604051806040016040528060058152602001644d6f6f6b7960d81b815250604051806040016040528060058152602001644d4f4f4b5960d81b8152508160039081620001069190620006f4565b506004620001158282620006f4565b5050505f620001296200048960201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526200019d905f196200048d565b506b033b2e3c9fd0803ce8000000612710620001bb826005620007d0565b620001c79190620007ea565b600a556064620001d9826004620007d0565b620001e59190620007ea565b600e556064620001f7826004620007d0565b620002039190620007ea565b600c55606462000215826004620007d0565b620002219190620007ea565b600d555f6018819055601a81905560016019819055906200024390806200080a565b6200024f91906200080a565b6017555f601c819055601e8190556001601d819055906200027190806200080a565b6200027d91906200080a565b601b55600160085f620002986005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790556080518216808252600885528382208054871660019081179091557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054881682179055308352848320805488168217905560165484168352848320805488168217905560155490931682528382208054871684179055815260079384905291822080549094168117909355620003646005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260079093528183208054851660019081179091557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548616821790556016548216845282842080548616821790556015549091168352908220805490931681179092556006906200040e6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526006909352818320805485166001908117909155601654821684528284208054861682179055601554909116835291208054909216179055620004823382620004a5565b5062000820565b3390565b5f6200049b3384846200058b565b5060015b92915050565b6001600160a01b038216620005015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b600254620005109082620005eb565b6002556001600160a01b0382165f90815260208190526040902054620005379082620005eb565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f80620005f983856200080a565b9050838110156200064d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004f8565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200067d57607f821691505b6020821081036200069c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006ef575f81815260208120601f850160051c81016020861015620006ca5750805b601f850160051c820191505b81811015620006eb57828155600101620006d6565b5050505b505050565b81516001600160401b0381111562000710576200071062000654565b620007288162000721845462000668565b84620006a2565b602080601f8311600181146200075e575f8415620007465750858301515b5f19600386901b1c1916600185901b178555620006eb565b5f85815260208120601f198616915b828110156200078e578886015182559484019460019091019084016200076d565b5085821015620007ac57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200049f576200049f620007bc565b5f826200080557634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200049f576200049f620007bc565b6080516120da620008635f395f81816107520152818161125c01528181611a9b01528181611b5201528181611b8e01528181611bfa0152611c5501526120da5ff3fe608060405260043610610220575f3560e01c80637231d2171161011e578063aa4bde28116100a8578063eb3252211161006d578063eb325221146106c1578063ef8700e5146106ef578063f2fde38b14610704578063f756070514610723578063f887ea4014610741575f80fd5b8063aa4bde281461060b578063c024666814610620578063d83067861461063f578063dd62ed3e1461065e578063e16830a8146106a2575f80fd5b80638da5cb5b116100ee5780638da5cb5b1461057d57806395d89b411461059a578063963932b4146105ae578063a457c2d7146105cd578063a9059cbb146105ec575f80fd5b80637231d21714610516578063751039fc146105355780637571336a1461054957806388e765ff14610568575f80fd5b80631f3fed8f116101aa57806349bd5a5e1161016f57806349bd5a5e1461044b5780634fbee1931461048257806366d602ae146104b957806370a08231146104ce578063715018a614610502575f80fd5b80631f3fed8f146103c957806323b872dd146103de578063313ce567146103fd57806339509351146104185780633ccfd60b14610437575f80fd5b806310d5de53116101f057806310d5de53146102dc578063148896dd1461030a57806318160ddd146103775780631a8145bb146103955780631c6e8a75146103aa575f80fd5b806306fdde0314610236578063095ea7b3146102605780630b1c71821461028f5780630cb23d86146102ae575f80fd5b3661023257303303610230575f80fd5b005b5f80fd5b348015610241575f80fd5b5061024a610774565b6040516102579190611cfd565b60405180910390f35b34801561026b575f80fd5b5061027f61027a366004611d5f565b610804565b6040519015158152602001610257565b34801561029a575f80fd5b506102306102a9366004611d98565b61081a565b3480156102b9575f80fd5b5061027f6102c8366004611dcb565b60096020525f908152604090205460ff1681565b3480156102e7575f80fd5b5061027f6102f6366004611dcb565b60076020525f908152604090205460ff1681565b348015610315575f80fd5b50601754601854601954601a54601b54601c54601d54601e5461033c979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610257565b348015610382575f80fd5b506002545b604051908152602001610257565b3480156103a0575f80fd5b5061038760125481565b3480156103b5575f80fd5b506102306103c4366004611de6565b6108f4565b3480156103d4575f80fd5b5061038760115481565b3480156103e9575f80fd5b5061027f6103f8366004611dff565b610938565b348015610408575f80fd5b5060405160128152602001610257565b348015610423575f80fd5b5061027f610432366004611d5f565b61099f565b348015610442575f80fd5b5061027f6109d4565b348015610456575f80fd5b50600f5461046a906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561048d575f80fd5b5061027f61049c366004611dcb565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104c4575f80fd5b50610387600d5481565b3480156104d9575f80fd5b506103876104e8366004611dcb565b6001600160a01b03165f9081526020819052604090205490565b34801561050d575f80fd5b50610230610a30565b348015610521575f80fd5b50610230610530366004611dcb565b610aa3565b348015610540575f80fd5b50610230610b64565b348015610554575f80fd5b50610230610563366004611d98565b610ba7565b348015610573575f80fd5b50610387600c5481565b348015610588575f80fd5b506005546001600160a01b031661046a565b3480156105a5575f80fd5b5061024a610bfb565b3480156105b9575f80fd5b5061027f6105c8366004611e3d565b610c0a565b3480156105d8575f80fd5b5061027f6105e7366004611d5f565b610c44565b3480156105f7575f80fd5b5061027f610606366004611d5f565b610c91565b348015610616575f80fd5b50610387600e5481565b34801561062b575f80fd5b5061023061063a366004611d98565b610c9d565b34801561064a575f80fd5b50600b5461027f9062010000900460ff1681565b348015610669575f80fd5b50610387610678366004611e54565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106ad575f80fd5b506102306106bc366004611d98565b610cf1565b3480156106cc575f80fd5b5061027f6106db366004611dcb565b60086020525f908152604090205460ff1681565b3480156106fa575f80fd5b5061038760135481565b34801561070f575f80fd5b5061023061071e366004611dcb565b610d45565b34801561072e575f80fd5b50600b5461027f90610100900460ff1681565b34801561074c575f80fd5b5061046a7f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461078390611e8b565b80601f01602080910402602001604051908101604052809291908181526020018280546107af90611e8b565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b5050505050905090565b5f610810338484610e2f565b5060015b92915050565b6005546001600160a01b0316331461084d5760405162461bcd60e51b815260040161084490611ec3565b60405180910390fd5b600f546001600160a01b03908116908316036108ca5760405162461bcd60e51b815260206004820152603660248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152755f6175746f6d617465644d61726b65744d616b65727360501b6064820152608401610844565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461091e5760405162461bcd60e51b815260040161084490611ec3565b600b80549115156101000261ff0019909216919091179055565b5f610944848484610e90565b61099584336109908560405180606001604052806028815260200161207d602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611571565b610e2f565b5060019392505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161081091859061099090866115a9565b6016546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a22576040519150601f19603f3d011682016040523d82523d5f602084013e610a27565b606091505b50909392505050565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260040161084490611ec3565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610acd5760405162461bcd60e51b815260040161084490611ec3565b600b805443601455600f80546001600160a01b03199081166001600160a01b03958616908117835561ffff19909316610101179093556016546010805491861691909416179092555f908152600960209081526040808320805460ff199081166001908117909255855487168552600784528285208054821683179055945490951683526008909152902080549091169091179055565b6005546001600160a01b03163314610b8e5760405162461bcd60e51b815260040161084490611ec3565b610b9a6103e88061160e565b610ba56103e861165a565b565b6005546001600160a01b03163314610bd15760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b60606004805461078390611e8b565b6005545f906001600160a01b03163314610c365760405162461bcd60e51b815260040161084490611ec3565b50600a81905560015b919050565b5f61081033846109908560405180606001604052806025815260200161203260259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611571565b5f610810338484610e90565b6005546001600160a01b03163314610cc75760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d1b5760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610844565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610ea757610ea283835f611681565b505050565b6005546001600160a01b03848116911614801590610ed357506005546001600160a01b03838116911614155b8015610ee85750600b5462010000900460ff16155b1561116f57600b5460ff16610f79576001600160a01b0383165f9081526006602052604090205460ff1680610f3457506001600160a01b0382165f9081526006602052604090205460ff165b610f795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610844565b6001600160a01b0383165f9081526009602052604090205460ff168015610fb857506001600160a01b0382165f9081526007602052604090205460ff16155b1561103257600c5481111561102d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610844565b6110e7565b6001600160a01b0382165f9081526009602052604090205460ff16801561107157506001600160a01b0383165f9081526007602052604090205460ff16155b156110e757600d548111156110e75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610844565b6001600160a01b0382165f9081526008602052604090205460ff1661116f57600e546001600160a01b0383165f9081526020819052604090205461112b9083611f0c565b111561116f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610844565b305f90815260208190526040902054600a54600b549082101590610100900460ff16801561119a5750805b80156111af5750600b5462010000900460ff16155b80156111d257506001600160a01b0384165f9081526009602052604090205460ff165b80156111f657506001600160a01b0385165f9081526006602052604090205460ff16155b801561121a57506001600160a01b0384165f9081526006602052604090205460ff16155b1561124657600b805462ff00001916620100001790556112398461173b565b600b805462ff0000191690555b600b5462010000900460ff1615801561129157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b80156112ab5750600f546001600160a01b03858116911614155b80156112c457506015546001600160a01b038681169116145b156112dc57601680546001600160a01b031916301790555b600b546001600160a01b0386165f9081526006602052604090205460ff6201000090920482161591168061132757506001600160a01b0385165f9081526006602052604090205460ff165b1561132f57505f5b801561155e575f6014544310156113b7576113566064611350876063611946565b906119c4565b9050606361136582605e611f1f565b61136f9190611f36565b60115f82825461137f9190611f0c565b9091555060639050611392826005611f1f565b61139c9190611f36565b60135f8282546113ac9190611f0c565b9091555061153f9050565b6001600160a01b0386165f9081526009602052604090205460ff1680156113df5750601b5415155b1561146b57601b546113f990606490611350908890611946565b601b54601e549192509061140d9083611f1f565b6114179190611f36565b60125f8282546114279190611f0c565b9091555050601b54601c5461143c9083611f1f565b6114469190611f36565b60115f8282546114569190611f0c565b9091555050601b54601d546113929083611f1f565b6001600160a01b0387165f9081526009602052604090205460ff168015611493575060175415155b1561153f576017546114ad90606490611350908890611946565b601754601a54919250906114c19083611f1f565b6114cb9190611f36565b60125f8282546114db9190611f0c565b90915550506017546018546114f09083611f1f565b6114fa9190611f36565b60115f82825461150a9190611f0c565b909155505060175460195461151f9083611f1f565b6115299190611f36565b60135f8282546115399190611f0c565b90915550505b801561155057611550873083611681565b61155a8186611f55565b9450505b611569868686611681565b505050505050565b5f81848411156115945760405162461bcd60e51b81526004016108449190611cfd565b505f6115a08486611f55565b95945050505050565b5f806115b58385611f0c565b9050838110156116075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610844565b9392505050565b6103e88261161b60025490565b6116259190611f1f565b61162f9190611f36565b600c556103e88161163f60025490565b6116499190611f1f565b6116539190611f36565b600d555050565b6103e88161166760025490565b6116719190611f1f565b61167b9190611f36565b600e5550565b6116bd81604051806060016040528060268152602001612057602691396001600160a01b0386165f908152602081905260409020549190611571565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546116eb90826115a9565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e83565b305f9081526020819052604081205490505f6013546011546012546117609190611f0c565b61176a9190611f0c565b9050815f0361177857505050565b600a54611786906023611f1f565b82111561179e57600a5461179b906023611f1f565b91505b5f600282601254856117b09190611f1f565b6117ba9190611f36565b6117c49190611f36565b90505f6117d18483611a05565b60105490915047906117fa9087906001600160a01b031661099085670de0b6b3a7640000611f1f565b61180382611a46565b5f61180e4783611a05565b90505f61182a866113506011548561194690919063ffffffff16565b90505f611846876113506013548661194690919063ffffffff16565b90505f6118538284611f0c565b61185d9085611f55565b5f601281905560118190556013559050861580159061187b57505f81115b156118c45761188a8782611bf4565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6016546001600160a01b03166108fc6118dd8547611f55565b6040518115909202915f818181858888f19350505050158015611902573d5f803e3d5ffd5b506015546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611939573d5f803e3d5ffd5b5050505050505050505050565b5f825f0361195557505f610814565b5f6119608385611f1f565b90508261196d8583611f36565b146116075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610844565b5f61160783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611cd1565b5f61160783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611571565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611a7957611a79611f68565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b199190611f7c565b81600181518110611b2c57611b2c611f68565b60200260200101906001600160a01b031690816001600160a01b031681525050611b77307f000000000000000000000000000000000000000000000000000000000000000084610e2f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611bcb9085905f90869030904290600401611f97565b5f604051808303815f87803b158015611be2575f80fd5b505af1158015611569573d5f803e3d5ffd5b611c1f307f000000000000000000000000000000000000000000000000000000000000000084610e2f565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611ca5573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cca9190612006565b5050505050565b5f8183611cf15760405162461bcd60e51b81526004016108449190611cfd565b505f6115a08486611f36565b5f6020808352835180828501525f5b81811015611d2857858101830151858201604001528201611d0c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d5c575f80fd5b50565b5f8060408385031215611d70575f80fd5b8235611d7b81611d48565b946020939093013593505050565b80358015158114610c3f575f80fd5b5f8060408385031215611da9575f80fd5b8235611db481611d48565b9150611dc260208401611d89565b90509250929050565b5f60208284031215611ddb575f80fd5b813561160781611d48565b5f60208284031215611df6575f80fd5b61160782611d89565b5f805f60608486031215611e11575f80fd5b8335611e1c81611d48565b92506020840135611e2c81611d48565b929592945050506040919091013590565b5f60208284031215611e4d575f80fd5b5035919050565b5f8060408385031215611e65575f80fd5b8235611e7081611d48565b91506020830135611e8081611d48565b809150509250929050565b600181811c90821680611e9f57607f821691505b602082108103611ebd57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561081457610814611ef8565b808202811582820484141761081457610814611ef8565b5f82611f5057634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561081457610814611ef8565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f8c575f80fd5b815161160781611d48565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611fe55784516001600160a01b031683529383019391830191600101611fc0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612018575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c9825f83a17352b5937864f071b47cc1a449ccf58da66136f08d3b499d7b860064736f6c63430008150033

Deployed Bytecode

0x608060405260043610610220575f3560e01c80637231d2171161011e578063aa4bde28116100a8578063eb3252211161006d578063eb325221146106c1578063ef8700e5146106ef578063f2fde38b14610704578063f756070514610723578063f887ea4014610741575f80fd5b8063aa4bde281461060b578063c024666814610620578063d83067861461063f578063dd62ed3e1461065e578063e16830a8146106a2575f80fd5b80638da5cb5b116100ee5780638da5cb5b1461057d57806395d89b411461059a578063963932b4146105ae578063a457c2d7146105cd578063a9059cbb146105ec575f80fd5b80637231d21714610516578063751039fc146105355780637571336a1461054957806388e765ff14610568575f80fd5b80631f3fed8f116101aa57806349bd5a5e1161016f57806349bd5a5e1461044b5780634fbee1931461048257806366d602ae146104b957806370a08231146104ce578063715018a614610502575f80fd5b80631f3fed8f146103c957806323b872dd146103de578063313ce567146103fd57806339509351146104185780633ccfd60b14610437575f80fd5b806310d5de53116101f057806310d5de53146102dc578063148896dd1461030a57806318160ddd146103775780631a8145bb146103955780631c6e8a75146103aa575f80fd5b806306fdde0314610236578063095ea7b3146102605780630b1c71821461028f5780630cb23d86146102ae575f80fd5b3661023257303303610230575f80fd5b005b5f80fd5b348015610241575f80fd5b5061024a610774565b6040516102579190611cfd565b60405180910390f35b34801561026b575f80fd5b5061027f61027a366004611d5f565b610804565b6040519015158152602001610257565b34801561029a575f80fd5b506102306102a9366004611d98565b61081a565b3480156102b9575f80fd5b5061027f6102c8366004611dcb565b60096020525f908152604090205460ff1681565b3480156102e7575f80fd5b5061027f6102f6366004611dcb565b60076020525f908152604090205460ff1681565b348015610315575f80fd5b50601754601854601954601a54601b54601c54601d54601e5461033c979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610257565b348015610382575f80fd5b506002545b604051908152602001610257565b3480156103a0575f80fd5b5061038760125481565b3480156103b5575f80fd5b506102306103c4366004611de6565b6108f4565b3480156103d4575f80fd5b5061038760115481565b3480156103e9575f80fd5b5061027f6103f8366004611dff565b610938565b348015610408575f80fd5b5060405160128152602001610257565b348015610423575f80fd5b5061027f610432366004611d5f565b61099f565b348015610442575f80fd5b5061027f6109d4565b348015610456575f80fd5b50600f5461046a906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b34801561048d575f80fd5b5061027f61049c366004611dcb565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104c4575f80fd5b50610387600d5481565b3480156104d9575f80fd5b506103876104e8366004611dcb565b6001600160a01b03165f9081526020819052604090205490565b34801561050d575f80fd5b50610230610a30565b348015610521575f80fd5b50610230610530366004611dcb565b610aa3565b348015610540575f80fd5b50610230610b64565b348015610554575f80fd5b50610230610563366004611d98565b610ba7565b348015610573575f80fd5b50610387600c5481565b348015610588575f80fd5b506005546001600160a01b031661046a565b3480156105a5575f80fd5b5061024a610bfb565b3480156105b9575f80fd5b5061027f6105c8366004611e3d565b610c0a565b3480156105d8575f80fd5b5061027f6105e7366004611d5f565b610c44565b3480156105f7575f80fd5b5061027f610606366004611d5f565b610c91565b348015610616575f80fd5b50610387600e5481565b34801561062b575f80fd5b5061023061063a366004611d98565b610c9d565b34801561064a575f80fd5b50600b5461027f9062010000900460ff1681565b348015610669575f80fd5b50610387610678366004611e54565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106ad575f80fd5b506102306106bc366004611d98565b610cf1565b3480156106cc575f80fd5b5061027f6106db366004611dcb565b60086020525f908152604090205460ff1681565b3480156106fa575f80fd5b5061038760135481565b34801561070f575f80fd5b5061023061071e366004611dcb565b610d45565b34801561072e575f80fd5b50600b5461027f90610100900460ff1681565b34801561074c575f80fd5b5061046a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60606003805461078390611e8b565b80601f01602080910402602001604051908101604052809291908181526020018280546107af90611e8b565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b5050505050905090565b5f610810338484610e2f565b5060015b92915050565b6005546001600160a01b0316331461084d5760405162461bcd60e51b815260040161084490611ec3565b60405180910390fd5b600f546001600160a01b03908116908316036108ca5760405162461bcd60e51b815260206004820152603660248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152755f6175746f6d617465644d61726b65744d616b65727360501b6064820152608401610844565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461091e5760405162461bcd60e51b815260040161084490611ec3565b600b80549115156101000261ff0019909216919091179055565b5f610944848484610e90565b61099584336109908560405180606001604052806028815260200161207d602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611571565b610e2f565b5060019392505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161081091859061099090866115a9565b6016546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a22576040519150601f19603f3d011682016040523d82523d5f602084013e610a27565b606091505b50909392505050565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260040161084490611ec3565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610acd5760405162461bcd60e51b815260040161084490611ec3565b600b805443601455600f80546001600160a01b03199081166001600160a01b03958616908117835561ffff19909316610101179093556016546010805491861691909416179092555f908152600960209081526040808320805460ff199081166001908117909255855487168552600784528285208054821683179055945490951683526008909152902080549091169091179055565b6005546001600160a01b03163314610b8e5760405162461bcd60e51b815260040161084490611ec3565b610b9a6103e88061160e565b610ba56103e861165a565b565b6005546001600160a01b03163314610bd15760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b60606004805461078390611e8b565b6005545f906001600160a01b03163314610c365760405162461bcd60e51b815260040161084490611ec3565b50600a81905560015b919050565b5f61081033846109908560405180606001604052806025815260200161203260259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611571565b5f610810338484610e90565b6005546001600160a01b03163314610cc75760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d1b5760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161084490611ec3565b6001600160a01b038116610dd45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610844565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610ea757610ea283835f611681565b505050565b6005546001600160a01b03848116911614801590610ed357506005546001600160a01b03838116911614155b8015610ee85750600b5462010000900460ff16155b1561116f57600b5460ff16610f79576001600160a01b0383165f9081526006602052604090205460ff1680610f3457506001600160a01b0382165f9081526006602052604090205460ff165b610f795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610844565b6001600160a01b0383165f9081526009602052604090205460ff168015610fb857506001600160a01b0382165f9081526007602052604090205460ff16155b1561103257600c5481111561102d5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610844565b6110e7565b6001600160a01b0382165f9081526009602052604090205460ff16801561107157506001600160a01b0383165f9081526007602052604090205460ff16155b156110e757600d548111156110e75760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610844565b6001600160a01b0382165f9081526008602052604090205460ff1661116f57600e546001600160a01b0383165f9081526020819052604090205461112b9083611f0c565b111561116f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610844565b305f90815260208190526040902054600a54600b549082101590610100900460ff16801561119a5750805b80156111af5750600b5462010000900460ff16155b80156111d257506001600160a01b0384165f9081526009602052604090205460ff165b80156111f657506001600160a01b0385165f9081526006602052604090205460ff16155b801561121a57506001600160a01b0384165f9081526006602052604090205460ff16155b1561124657600b805462ff00001916620100001790556112398461173b565b600b805462ff0000191690555b600b5462010000900460ff1615801561129157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b80156112ab5750600f546001600160a01b03858116911614155b80156112c457506015546001600160a01b038681169116145b156112dc57601680546001600160a01b031916301790555b600b546001600160a01b0386165f9081526006602052604090205460ff6201000090920482161591168061132757506001600160a01b0385165f9081526006602052604090205460ff165b1561132f57505f5b801561155e575f6014544310156113b7576113566064611350876063611946565b906119c4565b9050606361136582605e611f1f565b61136f9190611f36565b60115f82825461137f9190611f0c565b9091555060639050611392826005611f1f565b61139c9190611f36565b60135f8282546113ac9190611f0c565b9091555061153f9050565b6001600160a01b0386165f9081526009602052604090205460ff1680156113df5750601b5415155b1561146b57601b546113f990606490611350908890611946565b601b54601e549192509061140d9083611f1f565b6114179190611f36565b60125f8282546114279190611f0c565b9091555050601b54601c5461143c9083611f1f565b6114469190611f36565b60115f8282546114569190611f0c565b9091555050601b54601d546113929083611f1f565b6001600160a01b0387165f9081526009602052604090205460ff168015611493575060175415155b1561153f576017546114ad90606490611350908890611946565b601754601a54919250906114c19083611f1f565b6114cb9190611f36565b60125f8282546114db9190611f0c565b90915550506017546018546114f09083611f1f565b6114fa9190611f36565b60115f82825461150a9190611f0c565b909155505060175460195461151f9083611f1f565b6115299190611f36565b60135f8282546115399190611f0c565b90915550505b801561155057611550873083611681565b61155a8186611f55565b9450505b611569868686611681565b505050505050565b5f81848411156115945760405162461bcd60e51b81526004016108449190611cfd565b505f6115a08486611f55565b95945050505050565b5f806115b58385611f0c565b9050838110156116075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610844565b9392505050565b6103e88261161b60025490565b6116259190611f1f565b61162f9190611f36565b600c556103e88161163f60025490565b6116499190611f1f565b6116539190611f36565b600d555050565b6103e88161166760025490565b6116719190611f1f565b61167b9190611f36565b600e5550565b6116bd81604051806060016040528060268152602001612057602691396001600160a01b0386165f908152602081905260409020549190611571565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546116eb90826115a9565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e83565b305f9081526020819052604081205490505f6013546011546012546117609190611f0c565b61176a9190611f0c565b9050815f0361177857505050565b600a54611786906023611f1f565b82111561179e57600a5461179b906023611f1f565b91505b5f600282601254856117b09190611f1f565b6117ba9190611f36565b6117c49190611f36565b90505f6117d18483611a05565b60105490915047906117fa9087906001600160a01b031661099085670de0b6b3a7640000611f1f565b61180382611a46565b5f61180e4783611a05565b90505f61182a866113506011548561194690919063ffffffff16565b90505f611846876113506013548661194690919063ffffffff16565b90505f6118538284611f0c565b61185d9085611f55565b5f601281905560118190556013559050861580159061187b57505f81115b156118c45761188a8782611bf4565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6016546001600160a01b03166108fc6118dd8547611f55565b6040518115909202915f818181858888f19350505050158015611902573d5f803e3d5ffd5b506015546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611939573d5f803e3d5ffd5b5050505050505050505050565b5f825f0361195557505f610814565b5f6119608385611f1f565b90508261196d8583611f36565b146116075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610844565b5f61160783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611cd1565b5f61160783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611571565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611a7957611a79611f68565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b199190611f7c565b81600181518110611b2c57611b2c611f68565b60200260200101906001600160a01b031690816001600160a01b031681525050611b77307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e2f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611bcb9085905f90869030904290600401611f97565b5f604051808303815f87803b158015611be2575f80fd5b505af1158015611569573d5f803e3d5ffd5b611c1f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e2f565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611ca5573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cca9190612006565b5050505050565b5f8183611cf15760405162461bcd60e51b81526004016108449190611cfd565b505f6115a08486611f36565b5f6020808352835180828501525f5b81811015611d2857858101830151858201604001528201611d0c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d5c575f80fd5b50565b5f8060408385031215611d70575f80fd5b8235611d7b81611d48565b946020939093013593505050565b80358015158114610c3f575f80fd5b5f8060408385031215611da9575f80fd5b8235611db481611d48565b9150611dc260208401611d89565b90509250929050565b5f60208284031215611ddb575f80fd5b813561160781611d48565b5f60208284031215611df6575f80fd5b61160782611d89565b5f805f60608486031215611e11575f80fd5b8335611e1c81611d48565b92506020840135611e2c81611d48565b929592945050506040919091013590565b5f60208284031215611e4d575f80fd5b5035919050565b5f8060408385031215611e65575f80fd5b8235611e7081611d48565b91506020830135611e8081611d48565b809150509250929050565b600181811c90821680611e9f57607f821691505b602082108103611ebd57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561081457610814611ef8565b808202811582820484141761081457610814611ef8565b5f82611f5057634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561081457610814611ef8565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f8c575f80fd5b815161160781611d48565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611fe55784516001600160a01b031683529383019391830191600101611fc0565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612018575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c9825f83a17352b5937864f071b47cc1a449ccf58da66136f08d3b499d7b860064736f6c63430008150033

Deployed Bytecode Sourcemap

20699:12541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33223:4;33201:10;:27;33193:36;;;;;;20699:12541;;;;;8506:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10543:168;;;;;;;;;;-1:-1:-1;10543:168:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10543:168:0;1023:187:1;27033:217:0;;;;;;;;;;-1:-1:-1;27033:217:0;;;;;:::i;:::-;;:::i;21005:54::-;;;;;;;;;;-1:-1:-1;21005:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20876:63;;;;;;;;;;-1:-1:-1;20876:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22038:285;;;;;;;;;;-1:-1:-1;22038:285:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2295:25:1;;;2351:2;2336:18;;2329:34;;;;2379:18;;;2372:34;;;;2437:2;2422:18;;2415:34;;;;2480:3;2465:19;;2458:35;2524:3;2509:19;;2502:35;2568:3;2553:19;;2546:35;2612:3;2597:19;;2590:35;2282:3;2267:19;22038:285:0;1952:679:1;8668:107:0;;;;;;;;;;-1:-1:-1;8755:12:0;;8668:107;;;2782:25:1;;;2770:2;2755:18;8668:107:0;2636:177:1;21427:33:0;;;;;;;;;;;;;;;;25666:101;;;;;;;;;;-1:-1:-1;25666:101:0;;;;;:::i;:::-;;:::i;21387:33::-;;;;;;;;;;;;;;;;10044:354;;;;;;;;;;-1:-1:-1;10044:354:0;;;;;:::i;:::-;;:::i;8344:92::-;;;;;;;;;;-1:-1:-1;8344:92:0;;8426:2;3606:36:1;;3594:2;3579:18;8344:92:0;3464:184:1;11120:217:0;;;;;;;;;;-1:-1:-1;11120:217:0;;;;;:::i;:::-;;:::i;24536:180::-;;;;;;;;;;;;;:::i;21316:28::-;;;;;;;;;;-1:-1:-1;21316:28:0;;;;-1:-1:-1;;;;;21316:28:0;;;;;;-1:-1:-1;;;;;3817:32:1;;;3799:51;;3787:2;3772:18;21316:28:0;3653:203:1;26769:121:0;;;;;;;;;;-1:-1:-1;26769:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;26858:24:0;26834:4;26858:24;;;:15;:24;;;;;;;;;26769:121;21244:28;;;;;;;;;;;;;;;;8838:126;;;;;;;;;;-1:-1:-1;8838:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;8938:18:0;8911:7;8938:18;;;;;;;;;;;;8838:126;20544:148;;;;;;;;;;;;;:::i;24770:426::-;;;;;;;;;;-1:-1:-1;24770:426:0;;;;;:::i;:::-;;:::i;26902:123::-;;;;;;;;;;;;;:::i;27258:144::-;;;;;;;;;;-1:-1:-1;27258:144:0;;;;;:::i;:::-;;:::i;21210:27::-;;;;;;;;;;;;;;;;19720:78;;;;;;;;;;-1:-1:-1;19784:6:0;;-1:-1:-1;;;;;19784:6:0;19720:78;;7602:103;;;;;;;;;;;;;:::i;25478:153::-;;;;;;;;;;-1:-1:-1;25478:153:0;;;;;:::i;:::-;;:::i;11840:268::-;;;;;;;;;;-1:-1:-1;11840:268:0;;;;;:::i;:::-;;:::i;9177:174::-;;;;;;;;;;-1:-1:-1;9177:174:0;;;;;:::i;:::-;;:::i;21279:30::-;;;;;;;;;;;;;;;;25915:128;;;;;;;;;;-1:-1:-1;25915:128:0;;;;;:::i;:::-;;:::i;21183:18::-;;;;;;;;;;-1:-1:-1;21183:18:0;;;;;;;;;;;9414:150;;;;;;;;;;-1:-1:-1;9414:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;9529:18:0;;;9502:7;9529:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9414:150;26051:140;;;;;;;;;;-1:-1:-1;26051:140:0;;;;;:::i;:::-;;:::i;20946:52::-;;;;;;;;;;-1:-1:-1;20946:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21467:35;;;;;;;;;;;;;;;;19951:244;;;;;;;;;;-1:-1:-1;19951:244:0;;;;;:::i;:::-;;:::i;21145:31::-;;;;;;;;;;-1:-1:-1;21145:31:0;;;;;;;;;;;20772:42;;;;;;;;;;;;;;;8506:99;8559:13;8592:5;8585:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8506:99;:::o;10543:168::-;10625:4;10642:39;6711:10;10665:7;10674:6;10642:8;:39::i;:::-;-1:-1:-1;10699:4:0;10543:168;;;;;:::o;27033:217::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;;;;;;;;;27123:13:::1;::::0;-1:-1:-1;;;;;27123:13:0;;::::1;27115:21:::0;;::::1;::::0;27107:88:::1;;;::::0;-1:-1:-1;;;27107:88:0;;5622:2:1;27107:88:0::1;::::0;::::1;5604:21:1::0;5661:2;5641:18;;;5634:30;5700:34;5680:18;;;5673:62;-1:-1:-1;;;5751:18:1;;;5744:52;5813:19;;27107:88:0::1;5420:418:1::0;27107:88:0::1;-1:-1:-1::0;;;;;27206:28:0;;;::::1;;::::0;;;:22:::1;:28;::::0;;;;:36;;-1:-1:-1;;27206:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27033:217::o;25666:101::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;25738:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;25738:21:0;;::::1;::::0;;;::::1;::::0;;25666:101::o;10044:354::-;10183:4;10200:36;10210:6;10218:9;10229:6;10200:9;:36::i;:::-;10247:121;10256:6;6711:10;10278:89;10316:6;10278:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10278:19:0;;;;;;:11;:19;;;;;;;;6711:10;10278:33;;;;;;;;;;:37;:89::i;:::-;10247:8;:121::i;:::-;-1:-1:-1;10386:4:0;10044:354;;;;;:::o;11120:217::-;6711:10;11207:4;11256:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11256:34:0;;;;;;;;;;11207:4;;11224:83;;11247:7;;11256:50;;11295:10;11256:38;:50::i;24536:180::-;24670:12;;24662:46;;24574:12;;24617:21;;-1:-1:-1;;;;;24670:12:0;;;;24617:21;;24574:12;24662:46;24574:12;24662:46;24617:21;24670:12;24662:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24649:59:0;;24536:180;-1:-1:-1;;;24536:180:0:o;20544:148::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;20635:6:::1;::::0;20614:40:::1;::::0;20651:1:::1;::::0;-1:-1:-1;;;;;20635:6:0::1;::::0;20614:40:::1;::::0;20651:1;;20614:40:::1;20665:6;:19:::0;;-1:-1:-1;;;;;;20665:19:0::1;::::0;;20544:148::o;24770:426::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;24837:11:::1;:18:::0;;24884:12:::1;24866:15;:30:::0;24907:13:::1;:21:::0;;-1:-1:-1;;;;;;24907:21:0;;::::1;-1:-1:-1::0;;;;;24907:21:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;24939:21:0;;;;;;;;24976:12:::1;::::0;24962:11:::1;:26:::0;;24976:12;;::::1;24962:26:::0;;;::::1;;::::0;;;-1:-1:-1;24999:46:0;;;-1:-1:-1;24999:46:0::1;::::0;;;;;;;:53;;-1:-1:-1;;24999:53:0;;::::1;-1:-1:-1::0;24999:53:0;;::::1;::::0;;;25103:13;;;::::1;25063:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25165:13;;;;::::1;25136:44:::0;;:20:::1;:44:::0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;24770:426::o;26902:123::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;26956:28:::1;26974:4;26979::::0;26956:17:::1;:28::i;:::-;26995:22;27012:4;26995:16;:22::i;:::-;26902:123::o:0;27258:144::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27348:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;27348:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27258:144::o;7602:103::-;7657:13;7690:7;7683:14;;;;;:::i;25478:153::-;19302:6;;25561:4;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;-1:-1:-1;25577:12:0::1;:24:::0;;;25619:4:::1;19372:1;25478:153:::0;;;:::o;11840:268::-;11932:4;11949:129;6711:10;11972:7;11981:96;12020:15;11981:96;;;;;;;;;;;;;;;;;6711:10;11981:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11981:34:0;;;;;;;;;;;;:38;:96::i;9177:174::-;9262:4;9279:42;6711:10;9303:9;9314:6;9279:9;:42::i;25915:128::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26000:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;26000:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25915:128::o;26051:140::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26143:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26143:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26051:140::o;19951:244::-;19302:6;;-1:-1:-1;;;;;19302:6:0;6711:10;19302:22;19294:67;;;;-1:-1:-1;;;19294:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20040:22:0;::::1;20032:73;;;::::0;-1:-1:-1;;;20032:73:0;;6255:2:1;20032:73:0::1;::::0;::::1;6237:21:1::0;6294:2;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;-1:-1:-1;;;6384:18:1;;;6377:36;6430:19;;20032:73:0::1;6053:402:1::0;20032:73:0::1;20142:6;::::0;20121:38:::1;::::0;-1:-1:-1;;;;;20121:38:0;;::::1;::::0;20142:6:::1;::::0;20121:38:::1;::::0;20142:6:::1;::::0;20121:38:::1;20170:6;:17:::0;;-1:-1:-1;;;;;;20170:17:0::1;-1:-1:-1::0;;;;;20170:17:0;;;::::1;::::0;;;::::1;::::0;;19951:244::o;13993:220::-;-1:-1:-1;;;;;14121:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14173:32;;2782:25:1;;;14173:32:0;;2755:18:1;14173:32:0;;;;;;;;13993:220;;;:::o;29609:3538::-;29737:6;29747:1;29737:11;29733:93;;29765:28;29781:4;29787:2;29791:1;29765:15;:28::i;:::-;29609:3538;;;:::o;29733:93::-;19784:6;;-1:-1:-1;;;;;29856:15:0;;;19784:6;;29856:15;;;;:45;;-1:-1:-1;19784:6:0;;-1:-1:-1;;;;;29888:13:0;;;19784:6;;29888:13;;29856:45;:69;;;;-1:-1:-1;29919:6:0;;;;;;;29918:7;29856:69;29838:842;;;29957:14;;;;29952:135;;-1:-1:-1;;;;;30000:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;30025:19:0;;;;;;:15;:19;;;;;;;;30000:44;29992:79;;;;-1:-1:-1;;;29992:79:0;;6662:2:1;29992:79:0;;;6644:21:1;6701:2;6681:18;;;6674:30;-1:-1:-1;;;6720:18:1;;;6713:52;6782:18;;29992:79:0;6460:346:1;29992:79:0;-1:-1:-1;;;;;30105:28:0;;;;;;:22;:28;;;;;;;;:68;;;;-1:-1:-1;;;;;;30138:35:0;;;;;;:31;:35;;;;;;;;30137:36;30105:68;30101:415;;;30212:12;;30202:6;:22;;30194:88;;;;-1:-1:-1;;;30194:88:0;;7013:2:1;30194:88:0;;;6995:21:1;7052:2;7032:18;;;7025:30;7091:34;7071:18;;;7064:62;-1:-1:-1;;;7142:18:1;;;7135:51;7203:19;;30194:88:0;6811:417:1;30194:88:0;30101:415;;;-1:-1:-1;;;;;30321:26:0;;;;;;:22;:26;;;;;;;;:68;;;;-1:-1:-1;;;;;;30352:37:0;;;;;;:31;:37;;;;;;;;30351:38;30321:68;30317:199;;;30428:13;;30418:6;:23;;30410:90;;;;-1:-1:-1;;;30410:90:0;;7435:2:1;30410:90:0;;;7417:21:1;7474:2;7454:18;;;7447:30;7513:34;7493:18;;;7486:62;-1:-1:-1;;;7564:18:1;;;7557:52;7626:19;;30410:90:0;7233:418:1;30410:90:0;-1:-1:-1;;;;;30535:24:0;;;;;;:20;:24;;;;;;;;30530:139;;30614:15;;-1:-1:-1;;;;;8938:18:0;;8911:7;8938:18;;;;;;;;;;;30588:22;;:6;:22;:::i;:::-;:41;;30580:73;;;;-1:-1:-1;;;30580:73:0;;8120:2:1;30580:73:0;;;8102:21:1;8159:2;8139:18;;;8132:30;-1:-1:-1;;;8178:18:1;;;8171:49;8237:18;;30580:73:0;7918:343:1;30580:73:0;30741:4;30693:27;8938:18;;;;;;;;;;;30796:12;;30825:11;;30773:35;;;;;30825:11;;;;;:35;;;;;30853:7;30825:35;:59;;;;-1:-1:-1;30878:6:0;;;;;;;30877:7;30825:59;:102;;;;-1:-1:-1;;;;;;30901:26:0;;;;;;:22;:26;;;;;;;;30825:102;:141;;;;-1:-1:-1;;;;;;30945:21:0;;;;;;:15;:21;;;;;;;;30944:22;30825:141;:178;;;;-1:-1:-1;;;;;;30984:19:0;;;;;;:15;:19;;;;;;;;30983:20;30825:178;30821:290;;;31030:6;:13;;-1:-1:-1;;31030:13:0;;;;;31058:12;31067:2;31058:8;:12::i;:::-;31085:6;:14;;-1:-1:-1;;31085:14:0;;;30821:290;31142:6;;;;;;;31141:7;:45;;;;;31179:6;-1:-1:-1;;;;;31165:21:0;:2;-1:-1:-1;;;;;31165:21:0;;;31141:45;:81;;;;-1:-1:-1;31209:13:0;;-1:-1:-1;;;;;31203:19:0;;;31209:13;;31203:19;;31141:81;:117;;;;-1:-1:-1;31247:11:0;;-1:-1:-1;;;;;31239:19:0;;;31247:11;;31239:19;31141:117;31123:175;;;31270:12;:28;;-1:-1:-1;;;;;;31270:28:0;31293:4;31270:28;;;31123:175;31328:6;;-1:-1:-1;;;;;31436:21:0;;31311:13;31436:21;;;:15;:21;;;;;;31328:6;;;;;;;31327:7;;31436:21;;:44;;-1:-1:-1;;;;;;31461:19:0;;;;;;:15;:19;;;;;;;;31436:44;31432:93;;;-1:-1:-1;31508:5:0;31432:93;31623:8;31619:1477;;;31648:17;31702:15;;31687:12;:30;31684:1250;;;31750:23;31769:3;31750:14;:6;31761:2;31750:10;:14::i;:::-;:18;;:23::i;:::-;31738:35;-1:-1:-1;31833:2:0;31815:14;31738:35;31827:2;31815:14;:::i;:::-;31814:21;;;;:::i;:::-;31792:18;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;31896:2:0;;-1:-1:-1;31879:13:0;:9;31891:1;31879:13;:::i;:::-;31878:20;;;;:::i;:::-;31854;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;31684:1250:0;;-1:-1:-1;31684:1250:0;;-1:-1:-1;;;;;31924:26:0;;;;;;:22;:26;;;;;;;;:59;;;;-1:-1:-1;31954:25:0;;:29;;31924:59;31920:1014;;;32027:25;;32016:46;;32058:3;;32016:37;;:6;;:10;:37::i;:46::-;32146:25;;32115:28;;32004:58;;-1:-1:-1;32146:25:0;32103:40;;32004:58;32103:40;:::i;:::-;:68;;;;:::i;:::-;32081:18;;:90;;;;;;;:::i;:::-;;;;-1:-1:-1;;32255:25:0;;32224:28;;32212:40;;:9;:40;:::i;:::-;:68;;;;:::i;:::-;32190:18;;:90;;;;;;;:::i;:::-;;;;-1:-1:-1;;32368:25:0;;32335:30;;32323:42;;:9;:42;:::i;31920:1014::-;-1:-1:-1;;;;;32455:28:0;;;;;;:22;:28;;;;;;;;:60;;;;-1:-1:-1;32487:11:0;:24;:28;;32455:60;32451:483;;;32559:11;:24;32548:45;;32589:3;;32548:36;;:6;;:10;:36::i;:45::-;32676:11;:24;32646:27;;32536:57;;-1:-1:-1;32676:24:0;32634:39;;32536:57;32634:39;:::i;:::-;:66;;;;:::i;:::-;32612:18;;:88;;;;;;;:::i;:::-;;;;-1:-1:-1;;32783:11:0;:24;32753:27;;32741:39;;:9;:39;:::i;:::-;:66;;;;:::i;:::-;32719:18;;:88;;;;;;;:::i;:::-;;;;-1:-1:-1;;32894:11:0;:24;32862:29;;32850:41;;:9;:41;:::i;:::-;:68;;;;:::i;:::-;32826:20;;:92;;;;;;;:::i;:::-;;;;-1:-1:-1;;32451:483:0;32954:13;;32950:101;;32988:47;33004:4;33018;33025:9;32988:15;:47::i;:::-;33065:19;33075:9;33065:19;;:::i;:::-;;;31633:1463;31619:1477;33106:33;33122:4;33128:2;33132:6;33106:15;:33::i;:::-;29722:3425;;;29609:3538;;;:::o;776:191::-;861:7;897:12;889:6;;;;881:29;;;;-1:-1:-1;;;881:29:0;;;;;;;;:::i;:::-;-1:-1:-1;921:9:0;933:5;937:1;933;:5;:::i;:::-;921:17;776:191;-1:-1:-1;;;;;776:191:0:o;191:180::-;248:7;;280:5;284:1;280;:5;:::i;:::-;268:17;;309:1;304;:6;;296:46;;;;-1:-1:-1;;;296:46:0;;8996:2:1;296:46:0;;;8978:21:1;9035:2;9015:18;;;9008:30;9074:29;9054:18;;;9047:57;9121:18;;296:46:0;8794:351:1;296:46:0;362:1;191:180;-1:-1:-1;;;191:180:0:o;25266:204::-;25396:4;25383:9;25367:13;8755:12;;;8668:107;25367:13;:25;;;;:::i;:::-;25366:34;;;;:::i;:::-;25351:12;:49;25458:4;25444:10;25428:13;8755:12;;;8668:107;25428:13;:26;;;;:::i;:::-;25427:35;;;;:::i;:::-;25411:13;:51;-1:-1:-1;;25266:204:0:o;25775:132::-;25895:4;25878:13;25862;8755:12;;;8668:107;25862:13;:29;;;;:::i;:::-;25861:38;;;;:::i;:::-;25843:15;:56;-1:-1:-1;25775:132:0:o;12598:358::-;12760:71;12782:6;12760:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12760:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12740:17:0;;;:9;:17;;;;;;;;;;;:91;;;;12865:20;;;;;;;:32;;12890:6;12865:24;:32::i;:::-;-1:-1:-1;;;;;12842:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;12913:35;2782:25:1;;;12842:20:0;;12913:35;;;;;;2755:18:1;12913:35:0;2636:177:1;27768:1596:0;27865:4;27817:27;8938:18;;;;;;;;;;;27817:54;;27882:14;27941:20;;27920:18;;27899;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;27882:79;;27978:19;28001:1;27978:24;27974:41;;28006:7;;27768:1596;:::o;27974:41::-;28053:12;;:17;;28068:2;28053:17;:::i;:::-;28031:19;:39;28027:111;;;28109:12;;:17;;28124:2;28109:17;:::i;:::-;28087:39;;28027:111;28199:23;28277:1;28268:6;28247:18;;28225:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;28199:79;-1:-1:-1;28289:26:0;28318:40;:19;28199:79;28318:23;:40::i;:::-;28445:11;;28289:69;;-1:-1:-1;28400:21:0;;28432:52;;28441:2;;-1:-1:-1;;;;;28445:11:0;28458:25;28289:69;28479:4;28458:25;:::i;28432:52::-;28495:50;28526:18;28495:30;:50::i;:::-;28559:18;28580:44;:21;28606:17;28580:25;:44::i;:::-;28559:65;;28638:23;28664:46;28703:6;28664:34;28679:18;;28664:10;:14;;:34;;;;:::i;:46::-;28638:72;;28722:25;28750:48;28791:6;28750:36;28765:20;;28750:10;:14;;:36;;;;:::i;:48::-;28722:76;-1:-1:-1;28809:23:0;28849:35;28722:76;28849:15;:35;:::i;:::-;28835:50;;:10;:50;:::i;:::-;28918:1;28897:18;:22;;;28930:18;:22;;;28963:20;:24;28809:76;-1:-1:-1;29004:19:0;;;;;:42;;;29045:1;29027:15;:19;29004:42;29000:192;;;29063:46;29076:15;29093;29063:12;:46::i;:::-;29129:51;;;9324:25:1;;;9380:2;9365:18;;9358:34;;;29129:51:0;;9297:18:1;29129:51:0;;;;;;;29000:192;29220:12;;-1:-1:-1;;;;;29220:12:0;29204:80;29244:39;29268:15;29244:21;:39;:::i;:::-;29204:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29311:11:0;;29295:61;;-1:-1:-1;;;;;29311:11:0;;;;29334:21;29295:61;;;;;29311:11;29295:61;29311:11;29295:61;29334:21;29311:11;29295:61;;;;;;;;;;;;;;;;;;;;;27806:1558;;;;;;;;;27768:1596;:::o;377:256::-;434:7;464:1;469;464:6;460:47;;-1:-1:-1;494:1:0;487:8;;460:47;520:9;532:5;536:1;532;:5;:::i;:::-;520:17;-1:-1:-1;565:1:0;556:5;560:1;520:17;556:5;:::i;:::-;:10;548:56;;;;-1:-1:-1;;;548:56:0;;9605:2:1;548:56:0;;;9587:21:1;9644:2;9624:18;;;9617:30;9683:34;9663:18;;;9656:62;-1:-1:-1;;;9734:18:1;;;9727:31;9775:19;;548:56:0;9403:397:1;639:131:0;696:7;723:39;727:1;730;723:39;;;;;;;;;;;;;;;;;:3;:39::i;973:135::-;1030:7;1057:43;1061:1;1064;1057:43;;;;;;;;;;;;;;;;;:3;:43::i;26199:562::-;26359:16;;;26373:1;26359:16;;;;;;;;26335:21;;26359:16;;;;;;;;;;-1:-1:-1;26359:16:0;26335:40;;26404:4;26386;26391:1;26386:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26386:23:0;;;-1:-1:-1;;;;;26386:23:0;;;;;26430:6;-1:-1:-1;;;;;26430:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26420:4;26425:1;26420:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26420:23:0;;;-1:-1:-1;;;;;26420:23:0;;;;;26456:49;26473:4;26488:6;26497:7;26456:8;:49::i;:::-;26542:211;;-1:-1:-1;;;26542:211:0;;-1:-1:-1;;;;;26542:6:0;:57;;;;:211;;26614:7;;26636:1;;26680:4;;26707;;26727:15;;26542:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27410:350;27554:49;27571:4;27586:6;27595:7;27554:8;:49::i;:::-;27646:106;;-1:-1:-1;;;27646:106:0;;27698:4;27646:106;;;11651:34:1;;;11701:18;;;11694:34;;;27714:1:0;11744:18:1;;;11737:34;;;11787:18;;;11780:34;11830:19;;;11823:44;27736:15:0;11883:19:1;;;11876:35;27646:6:0;-1:-1:-1;;;;;27646:22:0;;;;27677:9;;11585:19:1;;27646:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27410:350;;:::o;1114:277::-;1199:7;1234:12;1227:5;1219:28;;;;-1:-1:-1;;;1219:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1258:9:0;1270:5;1274:1;1270;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:160::-;1280:20;;1336:13;;1329:21;1319:32;;1309:60;;1365:1;1362;1355:12;1380:315;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1561:9;1548:23;1580:31;1605:5;1580:31;:::i;:::-;1630:5;-1:-1:-1;1654:35:1;1685:2;1670:18;;1654:35;:::i;:::-;1644:45;;1380:315;;;;;:::o;1700:247::-;1759:6;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1867:9;1854:23;1886:31;1911:5;1886:31;:::i;2818:180::-;2874:6;2927:2;2915:9;2906:7;2902:23;2898:32;2895:52;;;2943:1;2940;2933:12;2895:52;2966:26;2982:9;2966:26;:::i;3003:456::-;3080:6;3088;3096;3149:2;3137:9;3128:7;3124:23;3120:32;3117:52;;;3165:1;3162;3155:12;3117:52;3204:9;3191:23;3223:31;3248:5;3223:31;:::i;:::-;3273:5;-1:-1:-1;3330:2:1;3315:18;;3302:32;3343:33;3302:32;3343:33;:::i;:::-;3003:456;;3395:7;;-1:-1:-1;;;3449:2:1;3434:18;;;;3421:32;;3003:456::o;3861:180::-;3920:6;3973:2;3961:9;3952:7;3948:23;3944:32;3941:52;;;3989:1;3986;3979:12;3941:52;-1:-1:-1;4012:23:1;;3861:180;-1:-1:-1;3861:180:1:o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;4411:17;;;4046:388;;;;;:::o;4674:380::-;4753:1;4749:12;;;;4796;;;4817:61;;4871:4;4863:6;4859:17;4849:27;;4817:61;4924:2;4916:6;4913:14;4893:18;4890:38;4887:161;;4970:10;4965:3;4961:20;4958:1;4951:31;5005:4;5002:1;4995:15;5033:4;5030:1;5023:15;4887:161;;4674:380;;;:::o;5059:356::-;5261:2;5243:21;;;5280:18;;;5273:30;5339:34;5334:2;5319:18;;5312:62;5406:2;5391:18;;5059:356::o;7656:127::-;7717:10;7712:3;7708:20;7705:1;7698:31;7748:4;7745:1;7738:15;7772:4;7769:1;7762:15;7788:125;7853:9;;;7874:10;;;7871:36;;;7887:18;;:::i;8266:168::-;8339:9;;;8370;;8387:15;;;8381:22;;8367:37;8357:71;;8408:18;;:::i;8439:217::-;8479:1;8505;8495:132;;8549:10;8544:3;8540:20;8537:1;8530:31;8584:4;8581:1;8574:15;8612:4;8609:1;8602:15;8495:132;-1:-1:-1;8641:9:1;;8439:217::o;8661:128::-;8728:9;;;8749:11;;;8746:37;;;8763:18;;:::i;9937:127::-;9998:10;9993:3;9989:20;9986:1;9979:31;10029:4;10026:1;10019:15;10053:4;10050:1;10043:15;10069:251;10139:6;10192:2;10180:9;10171:7;10167:23;10163:32;10160:52;;;10208:1;10205;10198:12;10160:52;10240:9;10234:16;10259:31;10284:5;10259:31;:::i;10325:980::-;10587:4;10635:3;10624:9;10620:19;10666:6;10655:9;10648:25;10692:2;10730:6;10725:2;10714:9;10710:18;10703:34;10773:3;10768:2;10757:9;10753:18;10746:31;10797:6;10832;10826:13;10863:6;10855;10848:22;10901:3;10890:9;10886:19;10879:26;;10940:2;10932:6;10928:15;10914:29;;10961:1;10971:195;10985:6;10982:1;10979:13;10971:195;;;11050:13;;-1:-1:-1;;;;;11046:39:1;11034:52;;11141:15;;;;11106:12;;;;11082:1;11000:9;10971:195;;;-1:-1:-1;;;;;;;11222:32:1;;;;11217:2;11202:18;;11195:60;-1:-1:-1;;;11286:3:1;11271:19;11264:35;11183:3;10325:980;-1:-1:-1;;;10325:980:1:o;11922:306::-;12010:6;12018;12026;12079:2;12067:9;12058:7;12054:23;12050:32;12047:52;;;12095:1;12092;12085:12;12047:52;12124:9;12118:16;12108:26;;12174:2;12163:9;12159:18;12153:25;12143:35;;12218:2;12207:9;12203:18;12197:25;12187:35;;11922:306;;;;;:::o

Swarm Source

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