ETH Price: $3,317.75 (+1.44%)
Gas: 10 Gwei

Token

CHOPSTIX (TIX)
 

Overview

Max Total Supply

1,000,000,000 TIX

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,670,662.606703606446548813 TIX

Value
$0.00
0xa6d215697923cca24a32ee1aa054c47eb6e4de57
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:
TIX

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-27
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

    /**
     * @dev Moves `amount` tokens from `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

    /**
     * @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 See {IERC20-totalSupply}.
     */
    function totalSupply() external view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /** @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 += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(uint256 amount) internal virtual {
        _totalSupply -= amount;
        emit Transfer(address(this), address(0), 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 {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

contract TIX is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private _name = "CHOPSTIX";
    string private _symbol = "TIX";
    uint8 private _decimals = 18;
    uint256 private _supply = 1000000000;

    uint256 private _buyTotalTax = 4;
    uint256 private _buyMarketingTax = 3;
    uint256 private _buyLiquidityTax = 1;
    uint256 private _buyVaultTax = 0;
    uint256 private _sellTotalTax = 4;
    uint256 private _sellMarketingTax = 3;
    uint256 private _sellLiquidityTax = 1;
    uint256 private _sellVaultTax = 0;
    uint256 private initialMarketingTax = 99;

    uint256 public maxTxAmount = (_supply / 100) * 10**_decimals;
    uint256 public maxWalletAmount = (_supply / 50) * 10**_decimals;
    address public marketingWallet =
        address(0x02fb91170CB4c3e40fd91D5A0Fc485e04D07BCdc);
    address public vaultWallet =
        address(0x02fb91170CB4c3e40fd91D5A0Fc485e04D07BCdc);
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 private fBlock = 0;
    uint256 private _vaultReserves = 0;
    uint256 private _marketingReserves = 0;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _blackL;
    uint256 private _numTokensSellToAddToLiquidity = 1000000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 1000000 * 10**_decimals;
    bool inSwapAndLiquify;
    bool isTrading;
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @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() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[vaultWallet] = true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            balanceOf(from) >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        require(
            !_blackL[from] && !_blackL[to],
            "ERC20: transfer from blacklisted address"
        );
        
            if (
                (from == uniswapV2Pair || to == uniswapV2Pair) &&
                !inSwapAndLiquify
            ) {
                if (from != uniswapV2Pair) {
                    uint256 contractLiquidityBalance = balanceOf(
                        address(this)
                    ) -
                        _marketingReserves -
                        _vaultReserves;
                    if (
                        contractLiquidityBalance >=
                        _numTokensSellToAddToLiquidity
                    ) {
                        _swapAndLiquify(contractLiquidityBalance);
                    }
                    uint256 toSwap = balanceOf(address(this));
                    if (toSwap >= _numTokensSellToAddToETH) {
                        uint256 initialETHBalance = address(this).balance;
                        _swapTokensForEth(toSwap);
                        uint256 ethBalance = address(this).balance -
                            initialETHBalance;

                        uint256 ethForVault = (ethBalance * _vaultReserves) /
                            toSwap;
                        _vaultReserves = 0;
                        _marketingReserves = 0;
                        bool sent = payable(vaultWallet).send(ethForVault);
                        require(sent, "Failed to send ETH");
                        sent = payable(marketingWallet).send(
                            address(this).balance
                        );
                        require(sent, "Failed to send ETH");
                    }
                }
            }

        if (!(_isExcludedFromFee[from] || _isExcludedFromFee[to])) {
            require(isTrading,"Trading is not enable");
            require(
                amount <= maxTxAmount,
                "ERC20: transfer amount exceeds the max transaction amount"
            );
            if (from == uniswapV2Pair) {
                require(
                    (amount + balanceOf(to)) <= maxWalletAmount,
                    "ERC20: balance amount exceeded max wallet amount limit"
                );
            }
            uint256 fees = 0;

            if (fBlock > block.number) {
                fees = (amount * initialMarketingTax) / 100;
                _marketingReserves += fees;
            }
            else if (to == uniswapV2Pair && _sellTotalTax > 0) {
                fees = (amount * _sellTotalTax) / 100;
                _vaultReserves += (fees * _sellVaultTax) / _sellTotalTax;
                _marketingReserves +=
                    (fees * _sellMarketingTax) /
                    _sellTotalTax;
            }
            else if (from == uniswapV2Pair && _buyTotalTax > 0) {
                fees = (amount * _buyTotalTax) / 100;
                _vaultReserves += (fees * _buyVaultTax) / _buyTotalTax;
                _marketingReserves += (fees * _buyMarketingTax) / _buyTotalTax;
            }
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

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

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            (block.timestamp + 300)
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function swapTrading() external onlyOwner {
        isTrading = true;
        fBlock = block.number + 2;
    }

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        marketingWallet = newWallet;
        return true;
    }

    function changeVaultWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        marketingWallet = newWallet;
        return true;
    }

    function changeBuyTaxes(
        uint256 _taxForLiquidity,
        uint256 _taxForMarketing,
        uint256 _taxForVault
    ) public onlyOwner returns (bool) {
        require(
            (_taxForLiquidity + _taxForMarketing + _taxForVault) <= 5,
            "ERC20: total tax must not be greater than 5"
        );
        _buyTotalTax = _taxForLiquidity + _taxForMarketing + _taxForVault;
        _buyLiquidityTax = _taxForLiquidity;
        _buyMarketingTax = _taxForMarketing;
        _buyVaultTax = _taxForVault;
        return true;
    }

    function changeSellTaxes(
        uint256 _taxForLiquidity,
        uint256 _taxForMarketing,
        uint256 _taxForVault
    ) public onlyOwner returns (bool) {
        require(
            (_taxForLiquidity + _taxForMarketing + _taxForVault) <= 5,
            "ERC20: total tax must not be greater than 5"
        );
        _sellTotalTax = _taxForLiquidity + _taxForMarketing + _taxForVault;
        _sellLiquidityTax = _taxForLiquidity;
        _sellMarketingTax = _taxForMarketing;
        _sellVaultTax = _taxForVault;
        return true;
    }
    function updateInitialMarketingTax(uint256 newFee) external onlyOwner{
        initialMarketingTax = newFee;
    }
    function burn(uint256 amount) external onlyOwner {
        _burn(amount);
    }

    function addBlackList(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _blackL[accounts[i]] = true;
        }
    }

    function removeBlackList(address[] calldata accounts) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _blackL[accounts[i]] = false;
        }
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

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"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":"accounts","type":"address[]"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"},{"internalType":"uint256","name":"_taxForVault","type":"uint256"}],"name":"changeBuyTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"},{"internalType":"uint256","name":"_taxForVault","type":"uint256"}],"name":"changeSellTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeVaultWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateInitialMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600860c090815267086909ea0a6a892b60c31b60e0526006906200002a9082620006c3565b506040805180820190915260038152620a892b60eb1b6020820152600790620000549082620006c3565b506008805460ff19166012908117909155633b9aca006009556004600a8181556003600b8190556001600c8190556000600d819055600e94909455600f9190915560105560119190915560638255620000ae9190620008a4565b6064600954620000bf9190620008bc565b620000cb9190620008df565b601355600854620000e19060ff16600a620008a4565b6032600954620000f29190620008bc565b620000fe9190620008df565b601455601580547302fb91170cb4c3e40fd91d5a0fc485e04d07bcdc6001600160a01b03199182168117909255601680549091169091179055600060178190556018819055601955600854620001599060ff16600a620008a4565b6200016890620f4240620008df565b601c556008546200017e9060ff16600a620008a4565b6200018d90620f4240620008df565b601d553480156200019d57600080fd5b5060068054620001ad9062000634565b80601f0160208091040260200160405190810160405280929190818152602001828054620001db9062000634565b80156200022c5780601f1062000200576101008083540402835291602001916200022c565b820191906000526020600020905b8154815290600101906020018083116200020e57829003601f168201915b505050505060078054620002409062000634565b80601f01602080910402602001604051908101604052809291908181526020018280546200026e9062000634565b8015620002bf5780601f106200029357610100808354040283529160200191620002bf565b820191906000526020600020905b815481529060010190602001808311620002a157829003601f168201915b50505050508160039081620002d59190620006c3565b506004620002e48282620006c3565b50505062000301620002fb6200050260201b60201c565b62000506565b600854620003309033906200031b9060ff16600a620008a4565b6009546200032a9190620008df565b62000558565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ae919062000901565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000422919062000901565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062000901565b6001600160a01b0390811660a05290811660808190526000908152601a60205260408082208054600160ff199182168117909255338452828420805482168317905560155485168452828420805482168317905560165490941683529120805490921617905562000942565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620005b35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620005c791906200092c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200064957607f821691505b6020821081036200066a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006be57600081815260208120601f850160051c81016020861015620006995750805b601f850160051c820191505b81811015620006ba57828155600101620006a5565b5050505b505050565b81516001600160401b03811115620006df57620006df6200061e565b620006f781620006f0845462000634565b8462000670565b602080601f8311600181146200072f5760008415620007165750858301515b600019600386901b1c1916600185901b178555620006ba565b600085815260208120601f198616915b8281101562000760578886015182559484019460019091019084016200073f565b50858210156200077f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007e6578160001904821115620007ca57620007ca6200078f565b80851615620007d857918102915b93841c9390800290620007aa565b509250929050565b600082620007ff575060016200089e565b816200080e575060006200089e565b8160018114620008275760028114620008325762000852565b60019150506200089e565b60ff8411156200084657620008466200078f565b50506001821b6200089e565b5060208310610133831016604e8410600b841016171562000877575081810a6200089e565b620008838383620007a5565b80600019048211156200089a576200089a6200078f565b0290505b92915050565b6000620008b560ff841683620007ee565b9392505050565b600082620008da57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620008fc57620008fc6200078f565b500290565b6000602082840312156200091457600080fd5b81516001600160a01b0381168114620008b557600080fd5b808201808211156200089e576200089e6200078f565b60805160a051611dc4620009b56000396000818161035e01528181610d5801528181610d9301528181610ddd015281816110ac015281816111bd015261127d015260008181610255015281816115650152818161161e0152818161164d015281816117e201526118090152611dc46000f3fe6080604052600436106101dc5760003560e01c806375f0a87411610102578063aa4bde2811610095578063d0d72e9411610064578063d0d72e941461055f578063d338faf31461057f578063dd62ed3e1461059f578063f2fde38b146105bf57600080fd5b8063aa4bde2814610514578063b9e418e71461052a578063bb85c6d11461053f578063c65678351461053f57600080fd5b806395d89b41116100d157806395d89b411461049f5780639bf41135146104b4578063a457c2d7146104d4578063a9059cbb146104f457600080fd5b806375f0a8741461042b57806381bfdcca1461044b5780638c0b5e221461046b5780638da5cb5b1461048157600080fd5b806342966c681161017a578063677daa5711610149578063677daa57146103a057806369185d81146103c057806370a08231146103e0578063715018a61461041657600080fd5b806342966c681461030a578063471e1c6b1461032c57806349bd5a5e1461034c57806361f1c5ba1461038057600080fd5b806318160ddd116101b657806318160ddd1461028f57806323b872dd146102ae578063313ce567146102ce57806339509351146102ea57600080fd5b806306fdde03146101e8578063095ea7b3146102135780631694505e1461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6105df565b60405161020a91906118ec565b60405180910390f35b34801561021f57600080fd5b5061023361022e36600461194f565b610671565b604051901515815260200161020a565b34801561024f57600080fd5b506102777f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b34801561029b57600080fd5b506002545b60405190815260200161020a565b3480156102ba57600080fd5b506102336102c936600461197b565b61068b565b3480156102da57600080fd5b506040516012815260200161020a565b3480156102f657600080fd5b5061023361030536600461194f565b6106af565b34801561031657600080fd5b5061032a6103253660046119bc565b6106d1565b005b34801561033857600080fd5b5061032a6103473660046119bc565b6106e5565b34801561035857600080fd5b506102777f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b50601654610277906001600160a01b031681565b3480156103ac57600080fd5b506102336103bb3660046119bc565b6106f2565b3480156103cc57600080fd5b506102336103db3660046119d5565b610705565b3480156103ec57600080fd5b506102a06103fb366004611a01565b6001600160a01b031660009081526020819052604090205490565b34801561042257600080fd5b5061032a610777565b34801561043757600080fd5b50601554610277906001600160a01b031681565b34801561045757600080fd5b506102336104663660046119bc565b61078b565b34801561047757600080fd5b506102a060135481565b34801561048d57600080fd5b506005546001600160a01b0316610277565b3480156104ab57600080fd5b506101fd61079e565b3480156104c057600080fd5b5061032a6104cf366004611a25565b6107ad565b3480156104e057600080fd5b506102336104ef36600461194f565b61082c565b34801561050057600080fd5b5061023361050f36600461194f565b6108a7565b34801561052057600080fd5b506102a060145481565b34801561053657600080fd5b5061032a6108b5565b34801561054b57600080fd5b5061023361055a366004611a01565b6108dc565b34801561056b57600080fd5b5061023361057a3660046119d5565b61090b565b34801561058b57600080fd5b5061032a61059a366004611a25565b610974565b3480156105ab57600080fd5b506102a06105ba366004611a9a565b6109ee565b3480156105cb57600080fd5b5061032a6105da366004611a01565b610a19565b6060600380546105ee90611ad3565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611ad3565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60003361067f818585610a8f565b60019150505b92915050565b600033610699858285610bb3565b6106a4858585610c2d565b506001949350505050565b60003361067f8185856106c283836109ee565b6106cc9190611b23565b610a8f565b6106d9611365565b6106e2816113bf565b50565b6106ed611365565b601255565b60006106fc611365565b50601355600190565b600061070f611365565b60058261071c8587611b23565b6107269190611b23565b111561074d5760405162461bcd60e51b815260040161074490611b36565b60405180910390fd5b816107588486611b23565b6107629190611b23565b600e5550601092909255600f55601155600190565b61077f611365565b6107896000611411565b565b6000610795611365565b50601455600190565b6060600480546105ee90611ad3565b6107b5611365565b60005b81811015610827576000601b60008585858181106107d8576107d8611b81565b90506020020160208101906107ed9190611a01565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061081f81611b97565b9150506107b8565b505050565b6000338161083a82866109ee565b90508381101561089a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610744565b6106a48286868403610a8f565b60003361067f818585610c2d565b6108bd611365565b601e805461ff0019166101001790556108d7436002611b23565b601755565b60006108e6611365565b50601580546001600160a01b0383166001600160a01b03199091161790556001919050565b6000610915611365565b6005826109228587611b23565b61092c9190611b23565b111561094a5760405162461bcd60e51b815260040161074490611b36565b816109558486611b23565b61095f9190611b23565b600a5550600c92909255600b55600d55600190565b61097c611365565b60005b81811015610827576001601b600085858581811061099f5761099f611b81565b90506020020160208101906109b49190611a01565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806109e681611b97565b91505061097f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610a21611365565b6001600160a01b038116610a865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610744565b6106e281611411565b6001600160a01b038316610af15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610744565b6001600160a01b038216610b525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610744565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bbf84846109ee565b90506000198114610c275781811015610c1a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610744565b610c278484848403610a8f565b50505050565b6001600160a01b038316610c535760405162461bcd60e51b815260040161074490611bb0565b6001600160a01b038216610c795760405162461bcd60e51b815260040161074490611bf5565b80610c99846001600160a01b031660009081526020819052604090205490565b1015610cb75760405162461bcd60e51b815260040161074490611c38565b6001600160a01b0383166000908152601b602052604090205460ff16158015610cf957506001600160a01b0382166000908152601b602052604090205460ff16155b610d565760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e736665722066726f6d20626c61636b6c6973746564604482015267206164647265737360c01b6064820152608401610744565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480610dc757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b8015610dd65750601e5460ff16155b15610fa0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610fa0576000601854601954610e3b306001600160a01b031660009081526020819052604090205490565b610e459190611c7e565b610e4f9190611c7e565b9050601c548110610e6357610e6381611463565b30600090815260208190526040902054601d548110610f9d5747610e8682611501565b6000610e928247611c7e565b905060008360185483610ea59190611c91565b610eaf9190611cb0565b60006018819055601981905560165460405192935090916001600160a01b039091169083156108fc0290849084818181858888f19350505050905080610f2c5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610744565b6015546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050905080610f985760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610744565b505050505b50505b6001600160a01b0383166000908152601a602052604090205460ff1680610fdf57506001600160a01b0382166000908152601a602052604090205460ff165b61135a57601e54610100900460ff166110325760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f7420656e61626c6560581b6044820152606401610744565b6013548111156110aa5760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610744565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611176576014546001600160a01b0383166000908152602081905260409020546111099083611b23565b11156111765760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610744565b60004360175411156111bb576064601254836111929190611c91565b61119c9190611cb0565b905080601960008282546111b09190611b23565b909155506113419050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156111fe57506000600e54115b1561127b576064600e54836112139190611c91565b61121d9190611cb0565b9050600e54601154826112309190611c91565b61123a9190611cb0565b6018600082825461124b9190611b23565b9091555050600e54600f546112609083611c91565b61126a9190611cb0565b601960008282546111b09190611b23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156112be57506000600a54115b15611341576064600a54836112d39190611c91565b6112dd9190611cb0565b9050600a54600d54826112f09190611c91565b6112fa9190611cb0565b6018600082825461130b9190611b23565b9091555050600a54600b546113209083611c91565b61132a9190611cb0565b6019600082825461133b9190611b23565b90915550505b61134b8183611c7e565b91506113588430836116e3565b505b6108278383836116e3565b6005546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610744565b80600260008282546113d19190611c7e565b909155505060405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601e805460ff19166001179055600061147d600283611cb0565b9050600061148b8284611c7e565b90504761149783611501565b60006114a38247611c7e565b90506114af83826117cf565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061154357611543611b81565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190611cd2565b816001815181106115f8576115f8611b81565b60200260200101906001600160a01b031690816001600160a01b031681525050611643307f000000000000000000000000000000000000000000000000000000000000000084610a8f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663791ac94783600084306116834261012c611b23565b6040518663ffffffff1660e01b81526004016116a3959493929190611cef565b600060405180830381600087803b1580156116bd57600080fd5b505af11580156116d1573d6000803e3d6000fd5b5050601e805460ff1916905550505050565b6001600160a01b0383166117095760405162461bcd60e51b815260040161074490611bb0565b6001600160a01b03821661172f5760405162461bcd60e51b815260040161074490611bf5565b6001600160a01b038316600090815260208190526040902054818110156117685760405162461bcd60e51b815260040161074490611c38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b601e805460ff19166001179055611807307f000000000000000000000000000000000000000000000000000000000000000084610a8f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d71982308560008061184e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156118b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118db9190611d60565b5050601e805460ff19169055505050565b600060208083528351808285015260005b81811015611919578581018301518582016040015282016118fd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146106e257600080fd5b6000806040838503121561196257600080fd5b823561196d8161193a565b946020939093013593505050565b60008060006060848603121561199057600080fd5b833561199b8161193a565b925060208401356119ab8161193a565b929592945050506040919091013590565b6000602082840312156119ce57600080fd5b5035919050565b6000806000606084860312156119ea57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611a1357600080fd5b8135611a1e8161193a565b9392505050565b60008060208385031215611a3857600080fd5b823567ffffffffffffffff80821115611a5057600080fd5b818501915085601f830112611a6457600080fd5b813581811115611a7357600080fd5b8660208260051b8501011115611a8857600080fd5b60209290920196919550909350505050565b60008060408385031215611aad57600080fd5b8235611ab88161193a565b91506020830135611ac88161193a565b809150509250929050565b600181811c90821680611ae757607f821691505b602082108103611b0757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561068557610685611b0d565b6020808252602b908201527f45524332303a20746f74616c20746178206d757374206e6f742062652067726560408201526a61746572207468616e203560a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201611ba957611ba9611b0d565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8181038181111561068557610685611b0d565b6000816000190483118215151615611cab57611cab611b0d565b500290565b600082611ccd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611ce457600080fd5b8151611a1e8161193a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d3f5784516001600160a01b031683529383019391830191600101611d1a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d7557600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208ddb6ca5f076f0079f83f647f4bab978cfdf40735dc06601f6d7966d325e9e5264736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806375f0a87411610102578063aa4bde2811610095578063d0d72e9411610064578063d0d72e941461055f578063d338faf31461057f578063dd62ed3e1461059f578063f2fde38b146105bf57600080fd5b8063aa4bde2814610514578063b9e418e71461052a578063bb85c6d11461053f578063c65678351461053f57600080fd5b806395d89b41116100d157806395d89b411461049f5780639bf41135146104b4578063a457c2d7146104d4578063a9059cbb146104f457600080fd5b806375f0a8741461042b57806381bfdcca1461044b5780638c0b5e221461046b5780638da5cb5b1461048157600080fd5b806342966c681161017a578063677daa5711610149578063677daa57146103a057806369185d81146103c057806370a08231146103e0578063715018a61461041657600080fd5b806342966c681461030a578063471e1c6b1461032c57806349bd5a5e1461034c57806361f1c5ba1461038057600080fd5b806318160ddd116101b657806318160ddd1461028f57806323b872dd146102ae578063313ce567146102ce57806339509351146102ea57600080fd5b806306fdde03146101e8578063095ea7b3146102135780631694505e1461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6105df565b60405161020a91906118ec565b60405180910390f35b34801561021f57600080fd5b5061023361022e36600461194f565b610671565b604051901515815260200161020a565b34801561024f57600080fd5b506102777f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161020a565b34801561029b57600080fd5b506002545b60405190815260200161020a565b3480156102ba57600080fd5b506102336102c936600461197b565b61068b565b3480156102da57600080fd5b506040516012815260200161020a565b3480156102f657600080fd5b5061023361030536600461194f565b6106af565b34801561031657600080fd5b5061032a6103253660046119bc565b6106d1565b005b34801561033857600080fd5b5061032a6103473660046119bc565b6106e5565b34801561035857600080fd5b506102777f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd8581565b34801561038c57600080fd5b50601654610277906001600160a01b031681565b3480156103ac57600080fd5b506102336103bb3660046119bc565b6106f2565b3480156103cc57600080fd5b506102336103db3660046119d5565b610705565b3480156103ec57600080fd5b506102a06103fb366004611a01565b6001600160a01b031660009081526020819052604090205490565b34801561042257600080fd5b5061032a610777565b34801561043757600080fd5b50601554610277906001600160a01b031681565b34801561045757600080fd5b506102336104663660046119bc565b61078b565b34801561047757600080fd5b506102a060135481565b34801561048d57600080fd5b506005546001600160a01b0316610277565b3480156104ab57600080fd5b506101fd61079e565b3480156104c057600080fd5b5061032a6104cf366004611a25565b6107ad565b3480156104e057600080fd5b506102336104ef36600461194f565b61082c565b34801561050057600080fd5b5061023361050f36600461194f565b6108a7565b34801561052057600080fd5b506102a060145481565b34801561053657600080fd5b5061032a6108b5565b34801561054b57600080fd5b5061023361055a366004611a01565b6108dc565b34801561056b57600080fd5b5061023361057a3660046119d5565b61090b565b34801561058b57600080fd5b5061032a61059a366004611a25565b610974565b3480156105ab57600080fd5b506102a06105ba366004611a9a565b6109ee565b3480156105cb57600080fd5b5061032a6105da366004611a01565b610a19565b6060600380546105ee90611ad3565b80601f016020809104026020016040519081016040528092919081815260200182805461061a90611ad3565b80156106675780601f1061063c57610100808354040283529160200191610667565b820191906000526020600020905b81548152906001019060200180831161064a57829003601f168201915b5050505050905090565b60003361067f818585610a8f565b60019150505b92915050565b600033610699858285610bb3565b6106a4858585610c2d565b506001949350505050565b60003361067f8185856106c283836109ee565b6106cc9190611b23565b610a8f565b6106d9611365565b6106e2816113bf565b50565b6106ed611365565b601255565b60006106fc611365565b50601355600190565b600061070f611365565b60058261071c8587611b23565b6107269190611b23565b111561074d5760405162461bcd60e51b815260040161074490611b36565b60405180910390fd5b816107588486611b23565b6107629190611b23565b600e5550601092909255600f55601155600190565b61077f611365565b6107896000611411565b565b6000610795611365565b50601455600190565b6060600480546105ee90611ad3565b6107b5611365565b60005b81811015610827576000601b60008585858181106107d8576107d8611b81565b90506020020160208101906107ed9190611a01565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061081f81611b97565b9150506107b8565b505050565b6000338161083a82866109ee565b90508381101561089a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610744565b6106a48286868403610a8f565b60003361067f818585610c2d565b6108bd611365565b601e805461ff0019166101001790556108d7436002611b23565b601755565b60006108e6611365565b50601580546001600160a01b0383166001600160a01b03199091161790556001919050565b6000610915611365565b6005826109228587611b23565b61092c9190611b23565b111561094a5760405162461bcd60e51b815260040161074490611b36565b816109558486611b23565b61095f9190611b23565b600a5550600c92909255600b55600d55600190565b61097c611365565b60005b81811015610827576001601b600085858581811061099f5761099f611b81565b90506020020160208101906109b49190611a01565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806109e681611b97565b91505061097f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610a21611365565b6001600160a01b038116610a865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610744565b6106e281611411565b6001600160a01b038316610af15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610744565b6001600160a01b038216610b525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610744565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610bbf84846109ee565b90506000198114610c275781811015610c1a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610744565b610c278484848403610a8f565b50505050565b6001600160a01b038316610c535760405162461bcd60e51b815260040161074490611bb0565b6001600160a01b038216610c795760405162461bcd60e51b815260040161074490611bf5565b80610c99846001600160a01b031660009081526020819052604090205490565b1015610cb75760405162461bcd60e51b815260040161074490611c38565b6001600160a01b0383166000908152601b602052604090205460ff16158015610cf957506001600160a01b0382166000908152601b602052604090205460ff16155b610d565760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e736665722066726f6d20626c61636b6c6973746564604482015267206164647265737360c01b6064820152608401610744565b7f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316836001600160a01b03161480610dc757507f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316826001600160a01b0316145b8015610dd65750601e5460ff16155b15610fa0577f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316836001600160a01b031614610fa0576000601854601954610e3b306001600160a01b031660009081526020819052604090205490565b610e459190611c7e565b610e4f9190611c7e565b9050601c548110610e6357610e6381611463565b30600090815260208190526040902054601d548110610f9d5747610e8682611501565b6000610e928247611c7e565b905060008360185483610ea59190611c91565b610eaf9190611cb0565b60006018819055601981905560165460405192935090916001600160a01b039091169083156108fc0290849084818181858888f19350505050905080610f2c5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610744565b6015546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050905080610f985760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610744565b505050505b50505b6001600160a01b0383166000908152601a602052604090205460ff1680610fdf57506001600160a01b0382166000908152601a602052604090205460ff165b61135a57601e54610100900460ff166110325760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f7420656e61626c6560581b6044820152606401610744565b6013548111156110aa5760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610744565b7f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316836001600160a01b031603611176576014546001600160a01b0383166000908152602081905260409020546111099083611b23565b11156111765760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610744565b60004360175411156111bb576064601254836111929190611c91565b61119c9190611cb0565b905080601960008282546111b09190611b23565b909155506113419050565b7f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316836001600160a01b03161480156111fe57506000600e54115b1561127b576064600e54836112139190611c91565b61121d9190611cb0565b9050600e54601154826112309190611c91565b61123a9190611cb0565b6018600082825461124b9190611b23565b9091555050600e54600f546112609083611c91565b61126a9190611cb0565b601960008282546111b09190611b23565b7f000000000000000000000000a1e495cc370895a7b191f785904d8a6784cfdd856001600160a01b0316846001600160a01b03161480156112be57506000600a54115b15611341576064600a54836112d39190611c91565b6112dd9190611cb0565b9050600a54600d54826112f09190611c91565b6112fa9190611cb0565b6018600082825461130b9190611b23565b9091555050600a54600b546113209083611c91565b61132a9190611cb0565b6019600082825461133b9190611b23565b90915550505b61134b8183611c7e565b91506113588430836116e3565b505b6108278383836116e3565b6005546001600160a01b031633146107895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610744565b80600260008282546113d19190611c7e565b909155505060405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601e805460ff19166001179055600061147d600283611cb0565b9050600061148b8284611c7e565b90504761149783611501565b60006114a38247611c7e565b90506114af83826117cf565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061154357611543611b81565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e59190611cd2565b816001815181106115f8576115f8611b81565b60200260200101906001600160a01b031690816001600160a01b031681525050611643307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a8f565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663791ac94783600084306116834261012c611b23565b6040518663ffffffff1660e01b81526004016116a3959493929190611cef565b600060405180830381600087803b1580156116bd57600080fd5b505af11580156116d1573d6000803e3d6000fd5b5050601e805460ff1916905550505050565b6001600160a01b0383166117095760405162461bcd60e51b815260040161074490611bb0565b6001600160a01b03821661172f5760405162461bcd60e51b815260040161074490611bf5565b6001600160a01b038316600090815260208190526040902054818110156117685760405162461bcd60e51b815260040161074490611c38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b601e805460ff19166001179055611807307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610a8f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d71982308560008061184e6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156118b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118db9190611d60565b5050601e805460ff19169055505050565b600060208083528351808285015260005b81811015611919578581018301518582016040015282016118fd565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146106e257600080fd5b6000806040838503121561196257600080fd5b823561196d8161193a565b946020939093013593505050565b60008060006060848603121561199057600080fd5b833561199b8161193a565b925060208401356119ab8161193a565b929592945050506040919091013590565b6000602082840312156119ce57600080fd5b5035919050565b6000806000606084860312156119ea57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611a1357600080fd5b8135611a1e8161193a565b9392505050565b60008060208385031215611a3857600080fd5b823567ffffffffffffffff80821115611a5057600080fd5b818501915085601f830112611a6457600080fd5b813581811115611a7357600080fd5b8660208260051b8501011115611a8857600080fd5b60209290920196919550909350505050565b60008060408385031215611aad57600080fd5b8235611ab88161193a565b91506020830135611ac88161193a565b809150509250929050565b600181811c90821680611ae757607f821691505b602082108103611b0757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561068557610685611b0d565b6020808252602b908201527f45524332303a20746f74616c20746178206d757374206e6f742062652067726560408201526a61746572207468616e203560a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201611ba957611ba9611b0d565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b8181038181111561068557610685611b0d565b6000816000190483118215151615611cab57611cab611b0d565b500290565b600082611ccd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611ce457600080fd5b8151611a1e8161193a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d3f5784516001600160a01b031683529383019391830191600101611d1a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611d7557600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212208ddb6ca5f076f0079f83f647f4bab978cfdf40735dc06601f6d7966d325e9e5264736f6c63430008100033

Deployed Bytecode Sourcemap

26543:11047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17861:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20136:244;;;;;;;;;;-1:-1:-1;20136:244:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20136:244:0;1023:187:1;27624:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1405:32:1;;;1387:51;;1375:2;1360:18;27624:51:0;1215:229:1;19000:110:0;;;;;;;;;;-1:-1:-1;19090:12:0;;19000:110;;;1595:25:1;;;1583:2;1568:18;19000:110:0;1449:177:1;20960:297:0;;;;;;;;;;-1:-1:-1;20960:297:0;;;;;:::i;:::-;;:::i;18842:93::-;;;;;;;;;;-1:-1:-1;18842:93:0;;18925:2;2234:36:1;;2222:2;2207:18;18842:93:0;2092:184:1;22676:272:0;;;;;;;;;;-1:-1:-1;22676:272:0;;;;;:::i;:::-;;:::i;36677:81::-;;;;;;;;;;-1:-1:-1;36677:81:0;;;;;:::i;:::-;;:::i;:::-;;36555:116;;;;;;;;;;-1:-1:-1;36555:116:0;;;;;:::i;:::-;;:::i;27682:38::-;;;;;;;;;;;;;;;27441:89;;;;;;;;;;-1:-1:-1;27441:89:0;;;;-1:-1:-1;;;;;27441:89:0;;;37162:182;;;;;;;;;;-1:-1:-1;37162:182:0;;;;;:::i;:::-;;:::i;35983:566::-;;;;;;;;;;-1:-1:-1;35983:566:0;;;;;:::i;:::-;;:::i;18026:177::-;;;;;;;;;;-1:-1:-1;18026:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;18177:18:0;18145:7;18177:18;;;;;;;;;;;;18026:177;15120:103;;;;;;;;;;;;;:::i;27341:93::-;;;;;;;;;;-1:-1:-1;27341:93:0;;;;-1:-1:-1;;;;;27341:93:0;;;37352:198;;;;;;;;;;-1:-1:-1;37352:198:0;;;;;:::i;:::-;;:::i;27204:60::-;;;;;;;;;;;;;;;;14472:87;;;;;;;;;;-1:-1:-1;14545:6:0;;-1:-1:-1;;;;;14545:6:0;14472:87;;17685:106;;;;;;;;;;;;;:::i;36962:192::-;;;;;;;;;;-1:-1:-1;36962:192:0;;;;;:::i;:::-;;:::i;21760:507::-;;;;;;;;;;-1:-1:-1;21760:507:0;;;;;:::i;:::-;;:::i;19580:236::-;;;;;;;;;;-1:-1:-1;19580:236:0;;;;;:::i;:::-;;:::i;27271:63::-;;;;;;;;;;;;;;;;34917:113;;;;;;;;;;;;;:::i;35038:182::-;;;;;;;;;;-1:-1:-1;35038:182:0;;;;;:::i;:::-;;:::i;35414:561::-;;;;;;;;;;-1:-1:-1;35414:561:0;;;;;:::i;:::-;;:::i;36766:188::-;;;;;;;;;;-1:-1:-1;36766:188:0;;;;;:::i;:::-;;:::i;19173:201::-;;;;;;;;;;-1:-1:-1;19173:201:0;;;;;:::i;:::-;;:::i;15378:238::-;;;;;;;;;;-1:-1:-1;15378:238:0;;;;;:::i;:::-;;:::i;17861:102::-;17917:13;17950:5;17943:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17861:102;:::o;20136:244::-;20257:4;13345:10;20318:32;13345:10;20334:7;20343:6;20318:8;:32::i;:::-;20368:4;20361:11;;;20136:244;;;;;:::o;20960:297::-;21093:4;13345:10;21151:38;21167:4;13345:10;21182:6;21151:15;:38::i;:::-;21200:27;21210:4;21216:2;21220:6;21200:9;:27::i;:::-;-1:-1:-1;21245:4:0;;20960:297;-1:-1:-1;;;;20960:297:0:o;22676:272::-;22793:4;13345:10;22854:64;13345:10;22870:7;22907:10;22879:25;13345:10;22870:7;22879:9;:25::i;:::-;:38;;;;:::i;:::-;22854:8;:64::i;36677:81::-;14358:13;:11;:13::i;:::-;36737::::1;36743:6;36737:5;:13::i;:::-;36677:81:::0;:::o;36555:116::-;14358:13;:11;:13::i;:::-;36635:19:::1;:28:::0;36555:116::o;37162:182::-;37264:4;14358:13;:11;:13::i;:::-;-1:-1:-1;37286:11:0::1;:26:::0;37332:4:::1;::::0;37162:182::o;35983:566::-;36142:4;14358:13;:11;:13::i;:::-;36237:1:::1;36220:12:::0;36182:35:::1;36201:16:::0;36182;:35:::1;:::i;:::-;:50;;;;:::i;:::-;36181:57;;36159:150;;;;-1:-1:-1::0;;;36159:150:0::1;;;;;;;:::i;:::-;;;;;;;;;36374:12:::0;36336:35:::1;36355:16:::0;36336;:35:::1;:::i;:::-;:50;;;;:::i;:::-;36320:13;:66:::0;-1:-1:-1;36397:17:0::1;:36:::0;;;;36444:17:::1;:36:::0;36491:13:::1;:28:::0;-1:-1:-1;;35983:566:0:o;15120:103::-;14358:13;:11;:13::i;:::-;15185:30:::1;15212:1;15185:18;:30::i;:::-;15120:103::o:0;37352:198::-;37462:4;14358:13;:11;:13::i;:::-;-1:-1:-1;37484:15:0::1;:34:::0;37538:4:::1;::::0;37352:198::o;17685:106::-;17743:13;17776:7;17769:14;;;;;:::i;36962:192::-;14358:13;:11;:13::i;:::-;37051:9:::1;37046:101;37066:19:::0;;::::1;37046:101;;;37130:5;37107:7;:20;37115:8;;37124:1;37115:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37107:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37107:20:0;:28;;-1:-1:-1;;37107:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37087:3;::::1;::::0;::::1;:::i;:::-;;;;37046:101;;;;36962:192:::0;;:::o;21760:507::-;21882:4;13345:10;21882:4;21970:25;13345:10;21987:7;21970:9;:25::i;:::-;21943:52;;22048:15;22028:16;:35;;22006:122;;;;-1:-1:-1;;;22006:122:0;;5793:2:1;22006:122:0;;;5775:21:1;5832:2;5812:18;;;5805:30;5871:34;5851:18;;;5844:62;-1:-1:-1;;;5922:18:1;;;5915:35;5967:19;;22006:122:0;5591:401:1;22006:122:0;22164:60;22173:5;22180:7;22208:15;22189:16;:34;22164:8;:60::i;19580:236::-;19697:4;13345:10;19758:28;13345:10;19775:2;19779:6;19758:9;:28::i;34917:113::-;14358:13;:11;:13::i;:::-;34970:9:::1;:16:::0;;-1:-1:-1;;34970:16:0::1;;;::::0;;35006::::1;:12;35021:1;35006:16;:::i;:::-;34997:6;:25:::0;34917:113::o;35038:182::-;35141:4;14358:13;:11;:13::i;:::-;-1:-1:-1;35163:15:0::1;:27:::0;;-1:-1:-1;;;;;35163:27:0;::::1;-1:-1:-1::0;;;;;;35163:27:0;;::::1;;::::0;;;35038:182;;;:::o;35414:561::-;35572:4;14358:13;:11;:13::i;:::-;35667:1:::1;35650:12:::0;35612:35:::1;35631:16:::0;35612;:35:::1;:::i;:::-;:50;;;;:::i;:::-;35611:57;;35589:150;;;;-1:-1:-1::0;;;35589:150:0::1;;;;;;;:::i;:::-;35803:12:::0;35765:35:::1;35784:16:::0;35765;:35:::1;:::i;:::-;:50;;;;:::i;:::-;35750:12;:65:::0;-1:-1:-1;35826:16:0::1;:35:::0;;;;35872:16:::1;:35:::0;35918:12:::1;:27:::0;-1:-1:-1;;35414:561:0:o;36766:188::-;14358:13;:11;:13::i;:::-;36852:9:::1;36847:100;36867:19:::0;;::::1;36847:100;;;36931:4;36908:7;:20;36916:8;;36925:1;36916:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36908:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36908:20:0;:27;;-1:-1:-1;;36908:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36888:3;::::1;::::0;::::1;:::i;:::-;;;;36847:100;;19173:201:::0;-1:-1:-1;;;;;19339:18:0;;;19307:7;19339:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19173:201::o;15378:238::-;14358:13;:11;:13::i;:::-;-1:-1:-1;;;;;15481:22:0;::::1;15459:110;;;::::0;-1:-1:-1;;;15459:110:0;;6199:2:1;15459:110:0::1;::::0;::::1;6181:21:1::0;6238:2;6218:18;;;6211:30;6277:34;6257:18;;;6250:62;-1:-1:-1;;;6328:18:1;;;6321:36;6374:19;;15459:110:0::1;5997:402:1::0;15459:110:0::1;15580:28;15599:8;15580:18;:28::i;24579:380::-:0;-1:-1:-1;;;;;24715:19:0;;24707:68;;;;-1:-1:-1;;;24707:68:0;;6606:2:1;24707:68:0;;;6588:21:1;6645:2;6625:18;;;6618:30;6684:34;6664:18;;;6657:62;-1:-1:-1;;;6735:18:1;;;6728:34;6779:19;;24707:68:0;6404:400:1;24707:68:0;-1:-1:-1;;;;;24794:21:0;;24786:68;;;;-1:-1:-1;;;24786:68:0;;7011:2:1;24786:68:0;;;6993:21:1;7050:2;7030:18;;;7023:30;7089:34;7069:18;;;7062:62;-1:-1:-1;;;7140:18:1;;;7133:32;7182:19;;24786:68:0;6809:398:1;24786:68:0;-1:-1:-1;;;;;24867:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24919:32;;1595:25:1;;;24919:32:0;;1568:18:1;24919:32:0;;;;;;;24579:380;;;:::o;25250:502::-;25385:24;25412:25;25422:5;25429:7;25412:9;:25::i;:::-;25385:52;;-1:-1:-1;;25452:16:0;:37;25448:297;;25552:6;25532:16;:26;;25506:117;;;;-1:-1:-1;;;25506:117:0;;7414:2:1;25506:117:0;;;7396:21:1;7453:2;7433:18;;;7426:30;7492:31;7472:18;;;7465:59;7541:18;;25506:117:0;7212:353:1;25506:117:0;25667:51;25676:5;25683:7;25711:6;25692:16;:25;25667:8;:51::i;:::-;25374:378;25250:502;;;:::o;29833:3684::-;-1:-1:-1;;;;;29965:18:0;;29957:68;;;;-1:-1:-1;;;29957:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30044:16:0;;30036:64;;;;-1:-1:-1;;;30036:64:0;;;;;;;:::i;:::-;30152:6;30133:15;30143:4;-1:-1:-1;;;;;18177:18:0;18145:7;18177:18;;;;;;;;;;;;18026:177;30133:15;:25;;30111:113;;;;-1:-1:-1;;;30111:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30258:13:0;;;;;;:7;:13;;;;;;;;30257:14;:30;;;;-1:-1:-1;;;;;;30276:11:0;;;;;;:7;:11;;;;;;;;30275:12;30257:30;30235:120;;;;-1:-1:-1;;;30235:120:0;;8989:2:1;30235:120:0;;;8971:21:1;9028:2;9008:18;;;9001:30;9067:34;9047:18;;;9040:62;-1:-1:-1;;;9118:18:1;;;9111:38;9166:19;;30235:120:0;8787:404:1;30235:120:0;30411:13;-1:-1:-1;;;;;30403:21:0;:4;-1:-1:-1;;;;;30403:21:0;;:44;;;;30434:13;-1:-1:-1;;;;;30428:19:0;:2;-1:-1:-1;;;;;30428:19:0;;30403:44;30402:84;;;;-1:-1:-1;30470:16:0;;;;30469:17;30402:84;30380:1623;;;30533:13;-1:-1:-1;;;;;30525:21:0;:4;-1:-1:-1;;;;;30525:21:0;;30521:1467;;30571:32;30752:14;;30706:18;;30606:72;30650:4;-1:-1:-1;;;;;18177:18:0;18145:7;18177:18;;;;;;;;;;;;18026:177;30606:72;:118;;;;:::i;:::-;:160;;;;:::i;:::-;30571:195;;30872:30;;30819:24;:83;30789:229;;30953:41;30969:24;30953:15;:41::i;:::-;31075:4;31040:14;18177:18;;;;;;;;;;;31118:24;;31108:34;;31104:865;;31199:21;31247:25;31265:6;31247:17;:25::i;:::-;31299:18;31320:70;31373:17;31320:21;:70;:::i;:::-;31299:91;;31419:19;31502:6;31455:14;;31442:10;:27;;;;:::i;:::-;31441:67;;;;:::i;:::-;31552:1;31535:14;:18;;;31580;:22;;;31649:11;;31641:38;;31419:89;;-1:-1:-1;31552:1:0;;-1:-1:-1;;;;;31649:11:0;;;;31641:38;;;;;31419:89;;31552:1;31641:38;31552:1;31641:38;31419:89;31649:11;31641:38;;;;;;;31629:50;;31714:4;31706:35;;;;-1:-1:-1;;;31706:35:0;;9926:2:1;31706:35:0;;;9908:21:1;9965:2;9945:18;;;9938:30;-1:-1:-1;;;9984:18:1;;;9977:48;10042:18;;31706:35:0;9724:342:1;31706:35:0;31783:15;;31775:108;;-1:-1:-1;;;;;31783:15:0;;;;31835:21;31775:108;;;;;31783:15;31775:108;31783:15;31775:108;31835:21;31783:15;31775:108;;;;;;;31768:115;;31918:4;31910:35;;;;-1:-1:-1;;;31910:35:0;;9926:2:1;31910:35:0;;;9908:21:1;9965:2;9945:18;;;9938:30;-1:-1:-1;;;9984:18:1;;;9977:48;10042:18;;31910:35:0;9724:342:1;31910:35:0;31144:825;;;;31104:865;30548:1440;;30521:1467;-1:-1:-1;;;;;32021:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;32049:22:0;;;;;;:18;:22;;;;;;;;32021:50;32015:1449;;32097:9;;;;;;;32089:42;;;;-1:-1:-1;;;32089:42:0;;10273:2:1;32089:42:0;;;10255:21:1;10312:2;10292:18;;;10285:30;-1:-1:-1;;;10331:18:1;;;10324:51;10392:18;;32089:42:0;10071:345:1;32089:42:0;32182:11;;32172:6;:21;;32146:140;;;;-1:-1:-1;;;32146:140:0;;10623:2:1;32146:140:0;;;10605:21:1;10662:2;10642:18;;;10635:30;10701:34;10681:18;;;10674:62;10772:27;10752:18;;;10745:55;10817:19;;32146:140:0;10421:421:1;32146:140:0;32313:13;-1:-1:-1;;;;;32305:21:0;:4;-1:-1:-1;;;;;32305:21:0;;32301:233;;32405:15;;-1:-1:-1;;;;;18177:18:0;;18145:7;18177:18;;;;;;;;;;;32378:22;;:6;:22;:::i;:::-;32377:43;;32347:171;;;;-1:-1:-1;;;32347:171:0;;11049:2:1;32347:171:0;;;11031:21:1;11088:2;11068:18;;;11061:30;11127:34;11107:18;;;11100:62;-1:-1:-1;;;11178:18:1;;;11171:52;11240:19;;32347:171:0;10847:418:1;32347:171:0;32548:12;32594;32585:6;;:21;32581:778;;;32667:3;32644:19;;32635:6;:28;;;;:::i;:::-;32634:36;;;;:::i;:::-;32627:43;;32711:4;32689:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;32581:778:0;;-1:-1:-1;32581:778:0;;32760:13;-1:-1:-1;;;;;32754:19:0;:2;-1:-1:-1;;;;;32754:19:0;;:40;;;;;32793:1;32777:13;;:17;32754:40;32750:609;;;32849:3;32832:13;;32823:6;:22;;;;:::i;:::-;32822:30;;;;:::i;:::-;32815:37;;32914:13;;32897;;32890:4;:20;;;;:::i;:::-;32889:38;;;;:::i;:::-;32871:14;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;33039:13:0;;32997:17;;32990:24;;:4;:24;:::i;:::-;32989:63;;;;:::i;:::-;32946:18;;:106;;;;;;;:::i;32750:609::-;33099:13;-1:-1:-1;;;;;33091:21:0;:4;-1:-1:-1;;;;;33091:21:0;;:41;;;;;33131:1;33116:12;;:16;33091:41;33087:272;;;33186:3;33170:12;;33161:6;:21;;;;:::i;:::-;33160:29;;;;:::i;:::-;33153:36;;33250:12;;33234;;33227:4;:19;;;;:::i;:::-;33226:36;;;;:::i;:::-;33208:14;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;33331:12:0;;33311:16;;33304:23;;:4;:23;:::i;:::-;33303:40;;;;:::i;:::-;33281:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;33087:272:0;33382:13;33391:4;33382:6;:13;:::i;:::-;33373:22;;33410:42;33426:4;33440;33447;33410:15;:42::i;:::-;32074:1390;32015:1449;33476:33;33492:4;33498:2;33502:6;33476:15;:33::i;14637:132::-;14545:6;;-1:-1:-1;;;;;14545:6:0;13345:10;14701:23;14693:68;;;;-1:-1:-1;;;14693:68:0;;11472:2:1;14693:68:0;;;11454:21:1;;;11491:18;;;11484:30;11550:34;11530:18;;;11523:62;11602:18;;14693:68:0;11270:356:1;23993:148:0;24068:6;24052:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;24090:43:0;;1595:25:1;;;24122:1:0;;24107:4;;24090:43;;1583:2:1;1568:18;24090:43:0;;;;;;;23993:148;:::o;15776:191::-;15869:6;;;-1:-1:-1;;;;;15886:17:0;;;-1:-1:-1;;;;;;15886:17:0;;;;;;;15919:40;;15869:6;;;15886:17;15869:6;;15919:40;;15850:16;;15919:40;15839:128;15776:191;:::o;33525:474::-;28323:16;:23;;-1:-1:-1;;28323:23:0;28342:4;28323:23;;;:16;33627:24:::1;33650:1;33627:20:::0;:24:::1;:::i;:::-;33611:41:::0;-1:-1:-1;33663:17:0::1;33684:27;33611:41:::0;33684:20;:27:::1;:::i;:::-;33663:49:::0;-1:-1:-1;33750:21:0::1;33784:23;33802:4:::0;33784:17:::1;:23::i;:::-;33820:18;33842:38;33866:14:::0;33842:21:::1;:38;:::i;:::-;33820:61;;33894:36;33908:9;33919:10;33894:13;:36::i;:::-;33948:43;::::0;;11833:25:1;;;11889:2;11874:18;;11867:34;;;11917:18;;;11910:34;;;33948:43:0::1;::::0;11821:2:1;11806:18;33948:43:0::1;;;;;;;-1:-1:-1::0;;28369:16:0;:24;;-1:-1:-1;;28369:24:0;;;-1:-1:-1;;;33525:474:0:o;34007:496::-;28323:16;:23;;-1:-1:-1;;28323:23:0;28342:4;28323:23;;;34110:16:::1;::::0;;34124:1:::1;34110:16:::0;;;;;::::1;::::0;;-1:-1:-1;;34110:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;34110:16:0::1;34086:40;;34155:4;34137;34142:1;34137:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;34137:23:0::1;;;-1:-1:-1::0;;;;;34137:23:0::1;;;::::0;::::1;34181:15;-1:-1:-1::0;;;;;34181:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34171:4;34176:1;34171:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;34171:32:0::1;;;-1:-1:-1::0;;;;;34171:32:0::1;;;::::0;::::1;34216:62;34233:4;34248:15;34266:11;34216:8;:62::i;:::-;-1:-1:-1::0;;;;;34291:15:0::1;:66;;34372:11:::0;34398:1:::1;34414:4:::0;34441::::1;34462:21;:15;34480:3;34462:21;:::i;:::-;34291:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28369:16:0;:24;;-1:-1:-1;;28369:24:0;;;-1:-1:-1;;;;34007:496:0:o;25760:776::-;-1:-1:-1;;;;;25891:18:0;;25883:68;;;;-1:-1:-1;;;25883:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25970:16:0;;25962:64;;;;-1:-1:-1;;;25962:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26061:15:0;;26039:19;26061:15;;;;;;;;;;;26109:21;;;;26087:109;;;;-1:-1:-1;;;26087:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26232:15:0;;;:9;:15;;;;;;;;;;;26250:20;;;26232:38;;26450:13;;;;;;;;;;:23;;;;;;26502:26;;1595:25:1;;;26450:13:0;;26502:26;;1568:18:1;26502:26:0;;;;;;;25872:664;25760:776;;;:::o;34511:398::-;28323:16;:23;;-1:-1:-1;;28323:23:0;28342:4;28323:23;;;34628:62:::1;34645:4;34660:15;34678:11:::0;34628:8:::1;:62::i;:::-;34703:15;-1:-1:-1::0;;;;;34703:31:0::1;;34742:9;34775:4;34795:11;34821:1;34837::::0;34853:7:::1;14545:6:::0;;-1:-1:-1;;;;;14545:6:0;;14472:87;34853:7:::1;34703:198;::::0;::::1;::::0;;;-1:-1:-1;;;;;;34703:198:0;;;-1:-1:-1;;;;;13687:15:1;;;34703:198:0::1;::::0;::::1;13669:34:1::0;13719:18;;;13712:34;;;;13762:18;;;13755:34;;;;13805:18;;;13798:34;13869:15;;;13848:19;;;13841:44;34875:15:0::1;13901:19:1::0;;;13894:35;13603:19;;34703:198:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28369:16:0;:24;;-1:-1:-1;;28369:24:0;;;-1:-1:-1;;;34511:398:0:o;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;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;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2281:180::-;2340:6;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;-1:-1:-1;2432:23:1;;2281:180;-1:-1:-1;2281:180:1:o;2674:316::-;2751:6;2759;2767;2820:2;2808:9;2799:7;2795:23;2791:32;2788:52;;;2836:1;2833;2826:12;2788:52;-1:-1:-1;;2859:23:1;;;2929:2;2914:18;;2901:32;;-1:-1:-1;2980:2:1;2965:18;;;2952:32;;2674:316;-1:-1:-1;2674:316:1:o;2995:247::-;3054:6;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3162:9;3149:23;3181:31;3206:5;3181:31;:::i;:::-;3231:5;2995:247;-1:-1:-1;;;2995:247:1:o;3247:615::-;3333:6;3341;3394:2;3382:9;3373:7;3369:23;3365:32;3362:52;;;3410:1;3407;3400:12;3362:52;3450:9;3437:23;3479:18;3520:2;3512:6;3509:14;3506:34;;;3536:1;3533;3526:12;3506:34;3574:6;3563:9;3559:22;3549:32;;3619:7;3612:4;3608:2;3604:13;3600:27;3590:55;;3641:1;3638;3631:12;3590:55;3681:2;3668:16;3707:2;3699:6;3696:14;3693:34;;;3723:1;3720;3713:12;3693:34;3776:7;3771:2;3761:6;3758:1;3754:14;3750:2;3746:23;3742:32;3739:45;3736:65;;;3797:1;3794;3787:12;3736:65;3828:2;3820:11;;;;;3850:6;;-1:-1:-1;3247:615:1;;-1:-1:-1;;;;3247:615:1:o;3867:388::-;3935:6;3943;3996:2;3984:9;3975:7;3971:23;3967:32;3964:52;;;4012:1;4009;4002:12;3964:52;4051:9;4038:23;4070:31;4095:5;4070:31;:::i;:::-;4120:5;-1:-1:-1;4177:2:1;4162:18;;4149:32;4190:33;4149:32;4190:33;:::i;:::-;4242:7;4232:17;;;3867:388;;;;;:::o;4260:380::-;4339:1;4335:12;;;;4382;;;4403:61;;4457:4;4449:6;4445:17;4435:27;;4403:61;4510:2;4502:6;4499:14;4479:18;4476:38;4473:161;;4556:10;4551:3;4547:20;4544:1;4537:31;4591:4;4588:1;4581:15;4619:4;4616:1;4609:15;4473:161;;4260:380;;;:::o;4645:127::-;4706:10;4701:3;4697:20;4694:1;4687:31;4737:4;4734:1;4727:15;4761:4;4758:1;4751:15;4777:125;4842:9;;;4863:10;;;4860:36;;;4876:18;;:::i;4907:407::-;5109:2;5091:21;;;5148:2;5128:18;;;5121:30;5187:34;5182:2;5167:18;;5160:62;-1:-1:-1;;;5253:2:1;5238:18;;5231:41;5304:3;5289:19;;4907:407::o;5319:127::-;5380:10;5375:3;5371:20;5368:1;5361:31;5411:4;5408:1;5401:15;5435:4;5432:1;5425:15;5451:135;5490:3;5511:17;;;5508:43;;5531:18;;:::i;:::-;-1:-1:-1;5578:1:1;5567:13;;5451:135::o;7570:401::-;7772:2;7754:21;;;7811:2;7791:18;;;7784:30;7850:34;7845:2;7830:18;;7823:62;-1:-1:-1;;;7916:2:1;7901:18;;7894:35;7961:3;7946:19;;7570:401::o;7976:399::-;8178:2;8160:21;;;8217:2;8197:18;;;8190:30;8256:34;8251:2;8236:18;;8229:62;-1:-1:-1;;;8322:2:1;8307:18;;8300:33;8365:3;8350:19;;7976:399::o;8380:402::-;8582:2;8564:21;;;8621:2;8601:18;;;8594:30;8660:34;8655:2;8640:18;;8633:62;-1:-1:-1;;;8726:2:1;8711:18;;8704:36;8772:3;8757:19;;8380:402::o;9196:128::-;9263:9;;;9284:11;;;9281:37;;;9298:18;;:::i;9329:168::-;9369:7;9435:1;9431;9427:6;9423:14;9420:1;9417:21;9412:1;9405:9;9398:17;9394:45;9391:71;;;9442:18;;:::i;:::-;-1:-1:-1;9482:9:1;;9329:168::o;9502:217::-;9542:1;9568;9558:132;;9612:10;9607:3;9603:20;9600:1;9593:31;9647:4;9644:1;9637:15;9675:4;9672:1;9665:15;9558:132;-1:-1:-1;9704:9:1;;9502:217::o;12087:251::-;12157:6;12210:2;12198:9;12189:7;12185:23;12181:32;12178:52;;;12226:1;12223;12216:12;12178:52;12258:9;12252:16;12277:31;12302:5;12277:31;:::i;12343:980::-;12605:4;12653:3;12642:9;12638:19;12684:6;12673:9;12666:25;12710:2;12748:6;12743:2;12732:9;12728:18;12721:34;12791:3;12786:2;12775:9;12771:18;12764:31;12815:6;12850;12844:13;12881:6;12873;12866:22;12919:3;12908:9;12904:19;12897:26;;12958:2;12950:6;12946:15;12932:29;;12979:1;12989:195;13003:6;13000:1;12997:13;12989:195;;;13068:13;;-1:-1:-1;;;;;13064:39:1;13052:52;;13159:15;;;;13124:12;;;;13100:1;13018:9;12989:195;;;-1:-1:-1;;;;;;;13240:32:1;;;;13235:2;13220:18;;13213:60;-1:-1:-1;;;13304:3:1;13289:19;13282:35;13201:3;12343:980;-1:-1:-1;;;12343:980:1:o;13940:306::-;14028:6;14036;14044;14097:2;14085:9;14076:7;14072:23;14068:32;14065:52;;;14113:1;14110;14103:12;14065:52;14142:9;14136:16;14126:26;;14192:2;14181:9;14177:18;14171:25;14161:35;;14236:2;14225:9;14221:18;14215:25;14205:35;;13940:306;;;;;:::o

Swarm Source

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