ETH Price: $3,724.47 (+4.56%)

Token

ERC-20: Year of the Dragon (YOD)
 

Overview

Max Total Supply

1,000,000,000 YOD

Holders

511

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
YearoftheDragon

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-22
*/

// SPDX-License-Identifier: MIT
// https://x.com/yod_erc20
// https://t.me/YearOfTheDragon_ERC20
// https://year-of-the-dragon.net

pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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;

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

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

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

    /**
     * @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() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

        _afterTokenTransfer(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(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, 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 Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    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);
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IDexRouter {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

contract YearoftheDragon is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    address payable private _taxWallet2;
    uint256 split = 20;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private _buyTax = 25;
    uint256 private _sellTax = 40;
    uint256 private _preventSwapBefore = 10;
    uint256 private _buyCount = 0;

    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;
    uint256 private _taxSwapThreshold;
    uint256 private _maxTaxSwap;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _maxTxAmount);

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

    constructor() ERC20("Year of the Dragon", "YOD") {
        uint256 _totalSupply = 1000000000 * 10 ** decimals();

        _maxTxAmount = (_totalSupply * 10) / 1000;
        _maxWalletSize = (_totalSupply * 10) / 1000;
        _taxSwapThreshold = (_totalSupply * 5) / 10000;
        _maxTaxSwap = (_totalSupply * 300) / 10000;

        _taxWallet = payable(0xd7a0E9B67031d1A2B208892D69af55C49e5b5Ba1);
        _taxWallet2 = payable(_msgSender());
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        _isExcludedFromFee[address(this)] = true;
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        lastLiquifyTime = uint64(block.number);
        firstBlock = block.number;
    }

    function lonch() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
    }

    function setTaxWallets(
        address payable taxWallet1,
        address payable taxWallet2
    ) external onlyOwner {
        _taxWallet = taxWallet1;
        _taxWallet2 = taxWallet2;
    }

    function setSplit(uint256 newSplit) external onlyOwner {
        split = newSplit;
    }

    function setMaxTxAmount(uint256 newValue) external onlyOwner {
        _maxTxAmount = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(newValue);
    }

    function setMaxWalletSize(uint256 newValue) external onlyOwner {
        _maxWalletSize = (totalSupply() * newValue) / 1000;
    }

    function setTaxSwapValues(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _taxSwapThreshold = (totalSupply() * taxSwapThreshold) / 10000;
        _maxTaxSwap = (totalSupply() * maxTaxSwap) / 10000;
    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = totalSupply();
        _maxWalletSize = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
    }

    function setFees(uint256 buyTax, uint256 sellTax) external onlyOwner {
        _buyTax = buyTax;
        _sellTax = sellTax;
    }

    function recoverETH() external {
        require(msg.sender == _taxWallet, "Only fee receiver pair trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function triggerSwapb() external {
        swapTokensForEth(balanceOf(address(this)));
    }

    function excludeFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
    }

    function viewInfo()
        external
        view
        returns (
            uint256 buyFee,
            uint256 sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            _buyTax,
            _sellTax,
            _maxTxAmount,
            _maxWalletSize,
            _taxSwapThreshold,
            _maxTaxSwap
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner()) {
            taxAmount = amount.mul(_buyTax).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(
                    balanceOf(to) + amount <= _maxWalletSize,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _maxWalletSize,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_sellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _taxSwapThreshold &&
                _buyCount > _preventSwapBefore  &&
                    lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(
                    min(amount, min(contractTokenBalance, _maxTaxSwap))
                );
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        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
        );
    }

    function sendETHToFee(uint256 amount) private {
        uint256 amount2 = amount.mul(split).div(100);
        bool success;
        (success, ) = address(_taxWallet2).call{value: amount2}("");
        (success, ) = address(_taxWallet).call{value: address(this).balance}("");
    }
}

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lonch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSplit","type":"uint256"}],"name":"setSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setTaxSwapValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"},{"internalType":"address payable","name":"taxWallet2","type":"address"}],"name":"setTaxWallets","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwapb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260146009556019600c556028600d55600a600e556000600f556015805461ffff60a81b191690553480156200003857600080fd5b50604051806040016040528060128152602001712cb2b0b91037b3103a343290223930b3b7b760711b815250604051806040016040528060038152602001621653d160ea1b8152508160039081620000919190620003e4565b506004620000a08282620003e4565b505050620000bd620000b7620001fd60201b60201c565b62000201565b6000620000cd6012600a620005c5565b620000dd90633b9aca00620005dd565b90506103e8620000ef82600a620005dd565b620000fb9190620005f7565b6010556103e86200010e82600a620005dd565b6200011a9190620005f7565b6011556127106200012d826005620005dd565b620001399190620005f7565b6012556127106200014d8261012c620005dd565b620001599190620005f7565b601355600780546001600160a01b03191673d7a0e9b67031d1a2b208892d69af55c49e5b5ba11790556200018a3390565b600880546001600160a01b0319166001600160a01b039283161790556005548116600090815260066020526040808220805460ff1990811660019081179092553084528284208054821683179055600754909416835291208054909216179055620001f6338262000253565b5062000630565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002ae5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002c291906200061a565b90915550506001600160a01b03821660009081526020819052604081208054839290620002f19084906200061a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200036b57607f821691505b6020821081036200038c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033b57600081815260208120601f850160051c81016020861015620003bb5750805b601f850160051c820191505b81811015620003dc57828155600101620003c7565b505050505050565b81516001600160401b0381111562000400576200040062000340565b620004188162000411845462000356565b8462000392565b602080601f831160018114620004505760008415620004375750858301515b600019600386901b1c1916600185901b178555620003dc565b600085815260208120601f198616915b82811015620004815788860151825594840194600190910190840162000460565b5085821015620004a05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000507578160001904821115620004eb57620004eb620004b0565b80851615620004f957918102915b93841c9390800290620004cb565b509250929050565b6000826200052057506001620005bf565b816200052f57506000620005bf565b8160018114620005485760028114620005535762000573565b6001915050620005bf565b60ff841115620005675762000567620004b0565b50506001821b620005bf565b5060208310610133831016604e8410600b841016171562000598575081810a620005bf565b620005a48383620004c6565b8060001904821115620005bb57620005bb620004b0565b0290505b92915050565b6000620005d660ff8416836200050f565b9392505050565b8082028115828204841417620005bf57620005bf620004b0565b6000826200061557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005bf57620005bf620004b0565b61213580620006406000396000f3fe6080604052600436106101a05760003560e01c8063740bf497116100ec578063ae6014801161008a578063ea1644d511610064578063ea1644d5146104b1578063ec28438a146104d1578063f2fde38b146104f1578063ff6ee23f1461051157600080fd5b8063ae6014801461040a578063c9567bf914610456578063dd62ed3e1461046b57600080fd5b80638da5cb5b116100c65780638da5cb5b1461038d57806395d89b41146103b5578063a457c2d7146103ca578063a9059cbb146103ea57600080fd5b8063740bf49714610338578063751039fc146103585780637f094b4d1461036d57600080fd5b8063313ce567116101595780633d40d1ae116101335780633d40d1ae146102ce578063674e694f146102e357806370a0823114610303578063715018a61461032357600080fd5b8063313ce5671461027d57806339509351146102995780633bbd8ca6146102b957600080fd5b80630614117a146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b78f9c01461021e57806318160ddd1461023e57806323b872dd1461025d57600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610531565b005b3480156101cf57600080fd5b506101d86105cc565b6040516101e59190611cb9565b60405180910390f35b3480156101fa57600080fd5b5061020e610209366004611d1c565b61065e565b60405190151581526020016101e5565b34801561022a57600080fd5b506101c1610239366004611d48565b610675565b34801561024a57600080fd5b506002545b6040519081526020016101e5565b34801561026957600080fd5b5061020e610278366004611d6a565b6106aa565b34801561028957600080fd5b50604051601281526020016101e5565b3480156102a557600080fd5b5061020e6102b4366004611d1c565b610754565b3480156102c557600080fd5b506101c1610790565b3480156102da57600080fd5b506101c16107a3565b3480156102ef57600080fd5b506101c16102fe366004611dab565b610b49565b34801561030f57600080fd5b5061024f61031e366004611dc4565b610b78565b34801561032f57600080fd5b506101c1610b93565b34801561034457600080fd5b506101c1610353366004611de1565b610bc7565b34801561036457600080fd5b506101c1610c1f565b34801561037957600080fd5b506101c1610388366004611e28565b610c92565b34801561039957600080fd5b506005546040516001600160a01b0390911681526020016101e5565b3480156103c157600080fd5b506101d8610ce7565b3480156103d657600080fd5b5061020e6103e5366004611d1c565b610cf6565b3480156103f657600080fd5b5061020e610405366004611d1c565b610d8f565b34801561041657600080fd5b50600c54600d54601054601154601254601354604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e5565b34801561046257600080fd5b506101c1610d9c565b34801561047757600080fd5b5061024f610486366004611de1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104bd57600080fd5b506101c16104cc366004611dab565b61113f565b3480156104dd57600080fd5b506101c16104ec366004611dab565b611190565b3480156104fd57600080fd5b506101c161050c366004611dc4565b611214565b34801561051d57600080fd5b506101c161052c366004611d48565b6112ac565b6007546001600160a01b031633146105905760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792066656520726563656976657220706169722074726967676572000060448201526064015b60405180910390fd5b6007546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105c9573d6000803e3d6000fd5b50565b6060600380546105db90611e56565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611e56565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905090565b600061066b338484611322565b5060015b92915050565b6005546001600160a01b0316331461069f5760405162461bcd60e51b815260040161058790611e8a565b600c91909155600d55565b60006106b7848484611446565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561073c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610587565b6107498533858403611322565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161066b91859061078b908690611ed5565b611322565b6107a161079c30610b78565b61186a565b565b6005546001600160a01b031633146107cd5760405162461bcd60e51b815260040161058790611e8a565b601554600160a01b900460ff16156108215760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561085990309061078b60025490565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611ee8565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190611ee8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611ee8565b601580546001600160a01b0319166001600160a01b039283161790556014541663f305d71947306109f781610b78565b600080610a0c6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a2e96959493929190611f05565b60606040518083038185885af1158015610a4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a719190611f40565b505060155460145460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190611f6e565b506015805462ff00ff60a01b19166201000160a01b17905543600a819055600b805467ffffffffffffffff191667ffffffffffffffff909216919091179055306000908152600660205260409020805460ff19166001179055565b6005546001600160a01b03163314610b735760405162461bcd60e51b815260040161058790611e8a565b600955565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b815260040161058790611e8a565b6107a16000611a03565b6005546001600160a01b03163314610bf15760405162461bcd60e51b815260040161058790611e8a565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6005546001600160a01b03163314610c495760405162461bcd60e51b815260040161058790611e8a565b6002546010556002546011557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610c7f60025490565b60405190815260200160405180910390a1565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b815260040161058790611e8a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6060600480546105db90611e56565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610587565b610d853385858403611322565b5060019392505050565b600061066b338484611446565b6005546001600160a01b03163314610dc65760405162461bcd60e51b815260040161058790611e8a565b601554600160a01b900460ff1615610e1a5760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b306000818152600660205260409020805460ff19166001179055601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610e6b919061078b60025490565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190611ee8565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190611ee8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190611ee8565b601580546001600160a01b0319166001600160a01b039283161790556014541663f305d719473061100981610b78565b60008061101e6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161104096959493929190611f05565b60606040518083038185885af115801561105e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110839190611f40565b505060155460145460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111009190611f6e565b506015805462ff00ff60a01b19166201000160a01b179055600b805467ffffffffffffffff19164367ffffffffffffffff811691909117909155600a55565b6005546001600160a01b031633146111695760405162461bcd60e51b815260040161058790611e8a565b6103e88161117660025490565b6111809190611f8b565b61118a9190611fa2565b60115550565b6005546001600160a01b031633146111ba5760405162461bcd60e51b815260040161058790611e8a565b6103e8816111c760025490565b6111d19190611f8b565b6111db9190611fa2565b6010556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200160405180910390a150565b6005546001600160a01b0316331461123e5760405162461bcd60e51b815260040161058790611e8a565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b6105c981611a03565b6005546001600160a01b031633146112d65760405162461bcd60e51b815260040161058790611e8a565b612710826112e360025490565b6112ed9190611f8b565b6112f79190611fa2565b6012556127108161130760025490565b6113119190611f8b565b61131b9190611fa2565b6013555050565b6001600160a01b0383166113845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610587565b6001600160a01b0382166113e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610587565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661146c5760405162461bcd60e51b815260040161058790611fc4565b6001600160a01b0382166114925760405162461bcd60e51b815260040161058790612009565b600081116114f45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610587565b60006115086005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161415801561153757506005546001600160a01b03848116911614155b1561183f5761155c6064611556600c5485611a5590919063ffffffff16565b90611a68565b6015549091506001600160a01b03858116911614801561158a57506014546001600160a01b03848116911614155b80156115af57506001600160a01b03831660009081526006602052604090205460ff16155b156116a3576010548211156116065760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610587565b6011548261161385610b78565b61161d9190611ed5565b111561166b5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610587565b43600a54600361167b9190611ed5565b111561168d57823b1561168d57600080fd5b600f805490600061169d8361204c565b91905055505b6015546001600160a01b038481169116148015906116da57506001600160a01b03831660009081526006602052604090205460ff16155b1561174457601154826116ec85610b78565b6116f69190611ed5565b11156117445760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610587565b6015546001600160a01b03848116911614801561176a57506001600160a01b0384163014155b1561178c576117896064611556600d5485611a5590919063ffffffff16565b90505b600061179730610b78565b601554909150600160a81b900460ff161580156117c157506015546001600160a01b038581169116145b80156117d65750601554600160b01b900460ff165b80156117e3575060125481115b80156117f25750600e54600f54115b801561180e5750600b544367ffffffffffffffff908116911614155b1561183d5761182b61079c8461182684601354611a74565b611a74565b47801561183b5761183b47611a89565b505b505b801561185057611850843083611b59565b611864848461185f8585611cad565b611b59565b50505050565b6015805460ff60a81b1916600160a81b179055600b805467ffffffffffffffff431667ffffffffffffffff1990911617905560408051600280825260608201835260009260208301908036833701905050905030816000815181106118d1576118d1612065565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190611ee8565b8160018151811061196157611961612065565b6001600160a01b0392831660209182029290920101526014546119879130911684611322565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac947906119c090859060009086903090429060040161207b565b600060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b50506015805460ff60a81b1916905550505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611a618284611f8b565b9392505050565b6000611a618284611fa2565b6000818311611a835782611a61565b50919050565b6000611aa5606461155660095485611a5590919063ffffffff16565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611af7576040519150601f19603f3d011682016040523d82523d6000602084013e611afc565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611b4c576040519150601f19603f3d011682016040523d82523d6000602084013e611b51565b606091505b505050505050565b6001600160a01b038316611b7f5760405162461bcd60e51b815260040161058790611fc4565b6001600160a01b038216611ba55760405162461bcd60e51b815260040161058790612009565b6001600160a01b03831660009081526020819052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610587565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c54908490611ed5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ca091815260200190565b60405180910390a3611864565b6000611a6182846120ec565b600060208083528351808285015260005b81811015611ce657858101830151858201604001528201611cca565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105c957600080fd5b60008060408385031215611d2f57600080fd5b8235611d3a81611d07565b946020939093013593505050565b60008060408385031215611d5b57600080fd5b50508035926020909101359150565b600080600060608486031215611d7f57600080fd5b8335611d8a81611d07565b92506020840135611d9a81611d07565b929592945050506040919091013590565b600060208284031215611dbd57600080fd5b5035919050565b600060208284031215611dd657600080fd5b8135611a6181611d07565b60008060408385031215611df457600080fd5b8235611dff81611d07565b91506020830135611e0f81611d07565b809150509250929050565b80151581146105c957600080fd5b60008060408385031215611e3b57600080fd5b8235611e4681611d07565b91506020830135611e0f81611e1a565b600181811c90821680611e6a57607f821691505b602082108103611a8357634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066f5761066f611ebf565b600060208284031215611efa57600080fd5b8151611a6181611d07565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611f5557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611f8057600080fd5b8151611a6181611e1a565b808202811582820484141761066f5761066f611ebf565b600082611fbf57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006001820161205e5761205e611ebf565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120cb5784516001600160a01b0316835293830193918301916001016120a6565b50506001600160a01b03969096166060850152505050608001529392505050565b8181038181111561066f5761066f611ebf56fea2646970667358221220f997e4b76d56df800ff408ae478f6327a858ba64725c6af39189eea358819e8d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c8063740bf497116100ec578063ae6014801161008a578063ea1644d511610064578063ea1644d5146104b1578063ec28438a146104d1578063f2fde38b146104f1578063ff6ee23f1461051157600080fd5b8063ae6014801461040a578063c9567bf914610456578063dd62ed3e1461046b57600080fd5b80638da5cb5b116100c65780638da5cb5b1461038d57806395d89b41146103b5578063a457c2d7146103ca578063a9059cbb146103ea57600080fd5b8063740bf49714610338578063751039fc146103585780637f094b4d1461036d57600080fd5b8063313ce567116101595780633d40d1ae116101335780633d40d1ae146102ce578063674e694f146102e357806370a0823114610303578063715018a61461032357600080fd5b8063313ce5671461027d57806339509351146102995780633bbd8ca6146102b957600080fd5b80630614117a146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b78f9c01461021e57806318160ddd1461023e57806323b872dd1461025d57600080fd5b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610531565b005b3480156101cf57600080fd5b506101d86105cc565b6040516101e59190611cb9565b60405180910390f35b3480156101fa57600080fd5b5061020e610209366004611d1c565b61065e565b60405190151581526020016101e5565b34801561022a57600080fd5b506101c1610239366004611d48565b610675565b34801561024a57600080fd5b506002545b6040519081526020016101e5565b34801561026957600080fd5b5061020e610278366004611d6a565b6106aa565b34801561028957600080fd5b50604051601281526020016101e5565b3480156102a557600080fd5b5061020e6102b4366004611d1c565b610754565b3480156102c557600080fd5b506101c1610790565b3480156102da57600080fd5b506101c16107a3565b3480156102ef57600080fd5b506101c16102fe366004611dab565b610b49565b34801561030f57600080fd5b5061024f61031e366004611dc4565b610b78565b34801561032f57600080fd5b506101c1610b93565b34801561034457600080fd5b506101c1610353366004611de1565b610bc7565b34801561036457600080fd5b506101c1610c1f565b34801561037957600080fd5b506101c1610388366004611e28565b610c92565b34801561039957600080fd5b506005546040516001600160a01b0390911681526020016101e5565b3480156103c157600080fd5b506101d8610ce7565b3480156103d657600080fd5b5061020e6103e5366004611d1c565b610cf6565b3480156103f657600080fd5b5061020e610405366004611d1c565b610d8f565b34801561041657600080fd5b50600c54600d54601054601154601254601354604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e5565b34801561046257600080fd5b506101c1610d9c565b34801561047757600080fd5b5061024f610486366004611de1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104bd57600080fd5b506101c16104cc366004611dab565b61113f565b3480156104dd57600080fd5b506101c16104ec366004611dab565b611190565b3480156104fd57600080fd5b506101c161050c366004611dc4565b611214565b34801561051d57600080fd5b506101c161052c366004611d48565b6112ac565b6007546001600160a01b031633146105905760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792066656520726563656976657220706169722074726967676572000060448201526064015b60405180910390fd5b6007546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156105c9573d6000803e3d6000fd5b50565b6060600380546105db90611e56565b80601f016020809104026020016040519081016040528092919081815260200182805461060790611e56565b80156106545780601f1061062957610100808354040283529160200191610654565b820191906000526020600020905b81548152906001019060200180831161063757829003601f168201915b5050505050905090565b600061066b338484611322565b5060015b92915050565b6005546001600160a01b0316331461069f5760405162461bcd60e51b815260040161058790611e8a565b600c91909155600d55565b60006106b7848484611446565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561073c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610587565b6107498533858403611322565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161066b91859061078b908690611ed5565b611322565b6107a161079c30610b78565b61186a565b565b6005546001600160a01b031633146107cd5760405162461bcd60e51b815260040161058790611e8a565b601554600160a01b900460ff16156108215760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561085990309061078b60025490565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611ee8565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190611ee8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611ee8565b601580546001600160a01b0319166001600160a01b039283161790556014541663f305d71947306109f781610b78565b600080610a0c6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610a2e96959493929190611f05565b60606040518083038185885af1158015610a4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a719190611f40565b505060155460145460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190611f6e565b506015805462ff00ff60a01b19166201000160a01b17905543600a819055600b805467ffffffffffffffff191667ffffffffffffffff909216919091179055306000908152600660205260409020805460ff19166001179055565b6005546001600160a01b03163314610b735760405162461bcd60e51b815260040161058790611e8a565b600955565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b815260040161058790611e8a565b6107a16000611a03565b6005546001600160a01b03163314610bf15760405162461bcd60e51b815260040161058790611e8a565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6005546001600160a01b03163314610c495760405162461bcd60e51b815260040161058790611e8a565b6002546010556002546011557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610c7f60025490565b60405190815260200160405180910390a1565b6005546001600160a01b03163314610cbc5760405162461bcd60e51b815260040161058790611e8a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6060600480546105db90611e56565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610d785760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610587565b610d853385858403611322565b5060019392505050565b600061066b338484611446565b6005546001600160a01b03163314610dc65760405162461bcd60e51b815260040161058790611e8a565b601554600160a01b900460ff1615610e1a5760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610587565b306000818152600660205260409020805460ff19166001179055601480546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610e6b919061078b60025490565b601460009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190611ee8565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190611ee8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190611ee8565b601580546001600160a01b0319166001600160a01b039283161790556014541663f305d719473061100981610b78565b60008061101e6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161104096959493929190611f05565b60606040518083038185885af115801561105e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110839190611f40565b505060155460145460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af11580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111009190611f6e565b506015805462ff00ff60a01b19166201000160a01b179055600b805467ffffffffffffffff19164367ffffffffffffffff811691909117909155600a55565b6005546001600160a01b031633146111695760405162461bcd60e51b815260040161058790611e8a565b6103e88161117660025490565b6111809190611f8b565b61118a9190611fa2565b60115550565b6005546001600160a01b031633146111ba5760405162461bcd60e51b815260040161058790611e8a565b6103e8816111c760025490565b6111d19190611f8b565b6111db9190611fa2565b6010556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200160405180910390a150565b6005546001600160a01b0316331461123e5760405162461bcd60e51b815260040161058790611e8a565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b6105c981611a03565b6005546001600160a01b031633146112d65760405162461bcd60e51b815260040161058790611e8a565b612710826112e360025490565b6112ed9190611f8b565b6112f79190611fa2565b6012556127108161130760025490565b6113119190611f8b565b61131b9190611fa2565b6013555050565b6001600160a01b0383166113845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610587565b6001600160a01b0382166113e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610587565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661146c5760405162461bcd60e51b815260040161058790611fc4565b6001600160a01b0382166114925760405162461bcd60e51b815260040161058790612009565b600081116114f45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610587565b60006115086005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161415801561153757506005546001600160a01b03848116911614155b1561183f5761155c6064611556600c5485611a5590919063ffffffff16565b90611a68565b6015549091506001600160a01b03858116911614801561158a57506014546001600160a01b03848116911614155b80156115af57506001600160a01b03831660009081526006602052604090205460ff16155b156116a3576010548211156116065760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610587565b6011548261161385610b78565b61161d9190611ed5565b111561166b5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610587565b43600a54600361167b9190611ed5565b111561168d57823b1561168d57600080fd5b600f805490600061169d8361204c565b91905055505b6015546001600160a01b038481169116148015906116da57506001600160a01b03831660009081526006602052604090205460ff16155b1561174457601154826116ec85610b78565b6116f69190611ed5565b11156117445760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610587565b6015546001600160a01b03848116911614801561176a57506001600160a01b0384163014155b1561178c576117896064611556600d5485611a5590919063ffffffff16565b90505b600061179730610b78565b601554909150600160a81b900460ff161580156117c157506015546001600160a01b038581169116145b80156117d65750601554600160b01b900460ff165b80156117e3575060125481115b80156117f25750600e54600f54115b801561180e5750600b544367ffffffffffffffff908116911614155b1561183d5761182b61079c8461182684601354611a74565b611a74565b47801561183b5761183b47611a89565b505b505b801561185057611850843083611b59565b611864848461185f8585611cad565b611b59565b50505050565b6015805460ff60a81b1916600160a81b179055600b805467ffffffffffffffff431667ffffffffffffffff1990911617905560408051600280825260608201835260009260208301908036833701905050905030816000815181106118d1576118d1612065565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190611ee8565b8160018151811061196157611961612065565b6001600160a01b0392831660209182029290920101526014546119879130911684611322565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac947906119c090859060009086903090429060040161207b565b600060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b50506015805460ff60a81b1916905550505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611a618284611f8b565b9392505050565b6000611a618284611fa2565b6000818311611a835782611a61565b50919050565b6000611aa5606461155660095485611a5590919063ffffffff16565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611af7576040519150601f19603f3d011682016040523d82523d6000602084013e611afc565b606091505b50506007546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611b4c576040519150601f19603f3d011682016040523d82523d6000602084013e611b51565b606091505b505050505050565b6001600160a01b038316611b7f5760405162461bcd60e51b815260040161058790611fc4565b6001600160a01b038216611ba55760405162461bcd60e51b815260040161058790612009565b6001600160a01b03831660009081526020819052604090205481811015611c1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610587565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c54908490611ed5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ca091815260200190565b60405180910390a3611864565b6000611a6182846120ec565b600060208083528351808285015260005b81811015611ce657858101830151858201604001528201611cca565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105c957600080fd5b60008060408385031215611d2f57600080fd5b8235611d3a81611d07565b946020939093013593505050565b60008060408385031215611d5b57600080fd5b50508035926020909101359150565b600080600060608486031215611d7f57600080fd5b8335611d8a81611d07565b92506020840135611d9a81611d07565b929592945050506040919091013590565b600060208284031215611dbd57600080fd5b5035919050565b600060208284031215611dd657600080fd5b8135611a6181611d07565b60008060408385031215611df457600080fd5b8235611dff81611d07565b91506020830135611e0f81611d07565b809150509250929050565b80151581146105c957600080fd5b60008060408385031215611e3b57600080fd5b8235611e4681611d07565b91506020830135611e0f81611e1a565b600181811c90821680611e6a57607f821691505b602082108103611a8357634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561066f5761066f611ebf565b600060208284031215611efa57600080fd5b8151611a6181611d07565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611f5557600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611f8057600080fd5b8151611a6181611e1a565b808202811582820484141761066f5761066f611ebf565b600082611fbf57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006001820161205e5761205e611ebf565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120cb5784516001600160a01b0316835293830193918301916001016120a6565b50506001600160a01b03969096166060850152505050608001529392505050565b8181038181111561066f5761066f611ebf56fea2646970667358221220f997e4b76d56df800ff408ae478f6327a858ba64725c6af39189eea358819e8d64736f6c63430008130033

Deployed Bytecode Sourcemap

25415:9191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30210:170;;;;;;;;;;;;;:::i;:::-;;11013:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13246:194;;;;;;;;;;-1:-1:-1;13246:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13246:194:0;1023:187:1;30069:133:0;;;;;;;;;;-1:-1:-1;30069:133:0;;;;;:::i;:::-;;:::i;12133:108::-;;;;;;;;;;-1:-1:-1;12221:12:0;;12133:108;;;1614:25:1;;;1602:2;1587:18;12133:108:0;1468:177:1;13918:529:0;;;;;;;;;;-1:-1:-1;13918:529:0;;;;;:::i;:::-;;:::i;11975:93::-;;;;;;;;;;-1:-1:-1;11975:93:0;;12058:2;2253:36:1;;2241:2;2226:18;11975:93:0;2111:184:1;14852:290:0;;;;;;;;;;-1:-1:-1;14852:290:0;;;;;:::i;:::-;;:::i;30388:94::-;;;;;;;;;;;;;:::i;28034:947::-;;;;;;;;;;;;;:::i;29197:90::-;;;;;;;;;;-1:-1:-1;29197:90:0;;;;;:::i;:::-;;:::i;12304:143::-;;;;;;;;;;-1:-1:-1;12304:143:0;;;;;:::i;:::-;;:::i;22352:103::-;;;;;;;;;;;;;:::i;28989:200::-;;;;;;;;;;-1:-1:-1;28989:200:0;;;;;:::i;:::-;;:::i;29881:180::-;;;;;;;;;;;;;:::i;30490:124::-;;;;;;;;;;-1:-1:-1;30490:124:0;;;;;:::i;:::-;;:::i;21701:87::-;;;;;;;;;;-1:-1:-1;21774:6:0;;21701:87;;-1:-1:-1;;;;;21774:6:0;;;3802:51:1;;3790:2;3775:18;21701:87:0;3656:203:1;11232:104:0;;;;;;;;;;;;;:::i;15641:475::-;;;;;;;;;;-1:-1:-1;15641:475:0;;;;;:::i;:::-;;:::i;12660:200::-;;;;;;;;;;-1:-1:-1;12660:200:0;;;;;:::i;:::-;;:::i;30622:483::-;;;;;;;;;;-1:-1:-1;30942:7:0;;30964:8;;30987:12;;31014:14;;31043:17;;31075:11;;30622:483;;;4151:25:1;;;4207:2;4192:18;;4185:34;;;;4235:18;;;4228:34;;;;4293:2;4278:18;;4271:34;4336:3;4321:19;;4314:35;4380:3;4365:19;;4358:35;4138:3;4123:19;30622:483:0;3864:535:1;27073:953:0;;;;;;;;;;;;;:::i;12923:176::-;;;;;;;;;;-1:-1:-1;12923:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13064:18:0;;;13037:7;13064:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12923:176;29475:132;;;;;;;;;;-1:-1:-1;29475:132:0;;;;;:::i;:::-;;:::i;29295:172::-;;;;;;;;;;-1:-1:-1;29295:172:0;;;;;:::i;:::-;;:::i;22610:238::-;;;;;;;;;;-1:-1:-1;22610:238:0;;;;;:::i;:::-;;:::i;29615:258::-;;;;;;;;;;-1:-1:-1;29615:258:0;;;;;:::i;:::-;;:::i;30210:170::-;30274:10;;-1:-1:-1;;;;;30274:10:0;30260;:24;30252:67;;;;-1:-1:-1;;;30252:67:0;;4999:2:1;30252:67:0;;;4981:21:1;5038:2;5018:18;;;5011:30;5077:32;5057:18;;;5050:60;5127:18;;30252:67:0;;;;;;;;;30330:10;;:42;;-1:-1:-1;;;;;30330:10:0;;;;30350:21;30330:42;;;;;:10;:42;:10;:42;30350:21;30330:10;:42;;;;;;;;;;;;;;;;;;;;;30210:170::o;11013:100::-;11067:13;11100:5;11093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:100;:::o;13246:194::-;13354:4;13371:39;10099:10;13394:7;13403:6;13371:8;:39::i;:::-;-1:-1:-1;13428:4:0;13246:194;;;;;:::o;30069:133::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;30149:7:::1;:16:::0;;;;30176:8:::1;:18:::0;30069:133::o;13918:529::-;14058:4;14075:36;14085:6;14093:9;14104:6;14075:9;:36::i;:::-;-1:-1:-1;;;;;14151:19:0;;14124:24;14151:19;;;:11;:19;;;;;;;;10099:10;14151:33;;;;;;;;14217:26;;;;14195:116;;;;-1:-1:-1;;;14195:116:0;;6104:2:1;14195:116:0;;;6086:21:1;6143:2;6123:18;;;6116:30;6182:34;6162:18;;;6155:62;-1:-1:-1;;;6233:18:1;;;6226:38;6281:19;;14195:116:0;5902:404:1;14195:116:0;14347:57;14356:6;10099:10;14397:6;14378:16;:25;14347:8;:57::i;:::-;-1:-1:-1;14435:4:0;;13918:529;-1:-1:-1;;;;13918:529:0:o;14852:290::-;10099:10;14965:4;15054:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15054:34:0;;;;;;;;;;14965:4;;14982:130;;15032:7;;15054:47;;15091:10;;15054:47;:::i;:::-;14982:8;:130::i;30388:94::-;30432:42;30449:24;30467:4;30449:9;:24::i;:::-;30432:16;:42::i;:::-;30388:94::o;28034:947::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;28090:11:::1;::::0;-1:-1:-1;;;28090:11:0;::::1;;;28089:12;28081:48;;;::::0;-1:-1:-1;;;28081:48:0;;6775:2:1;28081:48:0::1;::::0;::::1;6757:21:1::0;6814:2;6794:18;;;6787:30;-1:-1:-1;;;6833:18:1;;;6826:53;6896:18;;28081:48:0::1;6573:347:1::0;28081:48:0::1;28140:15;:96:::0;;-1:-1:-1;;;;;;28140:96:0::1;28183:42;28140:96:::0;;::::1;::::0;;;28247:64:::1;::::0;28264:4:::1;::::0;28297:13:::1;12221:12:::0;;;12133:108;28247:64:::1;28350:15;;;;;;;;;-1:-1:-1::0;;;;;28350:15:0::1;-1:-1:-1::0;;;;;28350:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28338:49:0::1;;28410:4;28430:15;;;;;;;;;-1:-1:-1::0;;;;;28430:15:0::1;-1:-1:-1::0;;;;;28430:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28338:125;::::0;-1:-1:-1;;;;;;28338:125:0::1;::::0;;;;;;-1:-1:-1;;;;;7411:15:1;;;28338:125:0::1;::::0;::::1;7393:34:1::0;7463:15;;7443:18;;;7436:43;7328:18;;28338:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28322:13;:141:::0;;-1:-1:-1;;;;;;28322:141:0::1;-1:-1:-1::0;;;;;28322:141:0;;::::1;;::::0;;28474:15:::1;::::0;::::1;:31;28513:21;28558:4;28578:24;28558:4:::0;28578:9:::1;:24::i;:::-;28617:1;28633::::0;28649:7:::1;21774:6:::0;;-1:-1:-1;;;;;21774:6:0;;21701:87;28649:7:::1;28671:15;28474:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28715:13:0::1;::::0;28746:15:::1;::::0;28708:71:::1;::::0;-1:-1:-1;;;28708:71:0;;-1:-1:-1;;;;;28746:15:0;;::::1;28708:71;::::0;::::1;8587:51:1::0;-1:-1:-1;;8654:18:1;;;8647:34;28715:13:0;::::1;::::0;-1:-1:-1;28708:29:0::1;::::0;8560:18:1;;28708:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28790:11:0::1;:18:::0;;-1:-1:-1;;;;28819:18:0;-1:-1:-1;;;28819:18:0;;;28861:12:::1;28848:10;:25:::0;;;-1:-1:-1;28884:38:0;;-1:-1:-1;;28884:38:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;28960:4:::1;-1:-1:-1::0;28933:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;28933:40:0::1;-1:-1:-1::0;28933:40:0::1;::::0;;28034:947::o;29197:90::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29263:5:::1;:16:::0;29197:90::o;12304:143::-;-1:-1:-1;;;;;12421:18:0;12394:7;12421:18;;;;;;;;;;;;12304:143::o;22352:103::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;22417:30:::1;22444:1;22417:18;:30::i;28989:200::-:0;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29123:10:::1;:23:::0;;-1:-1:-1;;;;;29123:23:0;;::::1;-1:-1:-1::0;;;;;;29123:23:0;;::::1;;::::0;;;29157:11:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;28989:200::o;29881:180::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;12221:12;;29935::::1;:28:::0;12221:12;;29974:14:::1;:30:::0;30020:33:::1;30039:13;12221:12:::0;;;12133:108;30039:13:::1;30020:33;::::0;1614:25:1;;;1602:2;1587:18;30020:33:0::1;;;;;;;29881:180::o:0;30490:124::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30570:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;30570:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30490:124::o;11232:104::-;11288:13;11321:7;11314:14;;;;;:::i;15641:475::-;10099:10;15759:4;15803:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15803:34:0;;;;;;;;;;15870:35;;;;15848:122;;;;-1:-1:-1;;;15848:122:0;;9144:2:1;15848:122:0;;;9126:21:1;9183:2;9163:18;;;9156:30;9222:34;9202:18;;;9195:62;-1:-1:-1;;;9273:18:1;;;9266:35;9318:19;;15848:122:0;8942:401:1;15848:122:0;16006:67;10099:10;16029:7;16057:15;16038:16;:34;16006:8;:67::i;:::-;-1:-1:-1;16104:4:0;;15641:475;-1:-1:-1;;;15641:475:0:o;12660:200::-;12771:4;12788:42;10099:10;12812:9;12823:6;12788:9;:42::i;27073:953::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;27135:11:::1;::::0;-1:-1:-1;;;27135:11:0;::::1;;;27134:12;27126:48;;;::::0;-1:-1:-1;;;27126:48:0;;6775:2:1;27126:48:0::1;::::0;::::1;6757:21:1::0;6814:2;6794:18;;;6787:30;-1:-1:-1;;;6833:18:1;;;6826:53;6896:18;;27126:48:0::1;6573:347:1::0;27126:48:0::1;27212:4;27185:33;::::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;27185:40:0::1;27221:4;27185:40;::::0;;27236:15:::1;:96:::0;;-1:-1:-1;;;;;;27236:96:0::1;27279:42;27236:96:::0;;::::1;::::0;;;27343:64:::1;::::0;27212:4;27393:13:::1;12221:12:::0;;;12133:108;27343:64:::1;27446:15;;;;;;;;;-1:-1:-1::0;;;;;27446:15:0::1;-1:-1:-1::0;;;;;27446:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27434:49:0::1;;27506:4;27526:15;;;;;;;;;-1:-1:-1::0;;;;;27526:15:0::1;-1:-1:-1::0;;;;;27526:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27434:125;::::0;-1:-1:-1;;;;;;27434:125:0::1;::::0;;;;;;-1:-1:-1;;;;;7411:15:1;;;27434:125:0::1;::::0;::::1;7393:34:1::0;7463:15;;7443:18;;;7436:43;7328:18;;27434:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27418:13;:141:::0;;-1:-1:-1;;;;;;27418:141:0::1;-1:-1:-1::0;;;;;27418:141:0;;::::1;;::::0;;27570:15:::1;::::0;::::1;:31;27609:21;27654:4;27674:24;27654:4:::0;27674:9:::1;:24::i;:::-;27713:1;27729::::0;27745:7:::1;21774:6:::0;;-1:-1:-1;;;;;21774:6:0;;21701:87;27745:7:::1;27767:15;27570:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27811:13:0::1;::::0;27842:15:::1;::::0;27804:71:::1;::::0;-1:-1:-1;;;27804:71:0;;-1:-1:-1;;;;;27842:15:0;;::::1;27804:71;::::0;::::1;8587:51:1::0;-1:-1:-1;;8654:18:1;;;8647:34;27811:13:0;::::1;::::0;-1:-1:-1;27804:29:0::1;::::0;8560:18:1;;27804:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27886:11:0::1;:18:::0;;-1:-1:-1;;;;27915:18:0;-1:-1:-1;;;27915:18:0;;;27944:15:::1;:38:::0;;-1:-1:-1;;27944:38:0::1;27969:12;27944:38;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;27993:25:0;27073:953::o;29475:132::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29595:4:::1;29583:8;29567:13;12221:12:::0;;;12133:108;29567:13:::1;:24;;;;:::i;:::-;29566:33;;;;:::i;:::-;29549:14;:50:::0;-1:-1:-1;29475:132:0:o;29295:172::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29411:4:::1;29399:8;29383:13;12221:12:::0;;;12133:108;29383:13:::1;:24;;;;:::i;:::-;29382:33;;;;:::i;:::-;29367:12;:48:::0;29431:28:::1;::::0;1614:25:1;;;29431:28:0::1;::::0;1602:2:1;1587:18;29431:28:0::1;;;;;;;29295:172:::0;:::o;22610:238::-;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22713:22:0;::::1;22691:110;;;::::0;-1:-1:-1;;;22691:110:0;;9945:2:1;22691:110:0::1;::::0;::::1;9927:21:1::0;9984:2;9964:18;;;9957:30;10023:34;10003:18;;;9996:62;-1:-1:-1;;;10074:18:1;;;10067:36;10120:19;;22691:110:0::1;9743:402:1::0;22691:110:0::1;22812:28;22831:8;22812:18;:28::i;29615:258::-:0;21774:6;;-1:-1:-1;;;;;21774:6:0;10099:10;21921:23;21913:68;;;;-1:-1:-1;;;21913:68:0;;;;;;;:::i;:::-;29799:5:::1;29779:16;29763:13;12221:12:::0;;;12133:108;29763:13:::1;:32;;;;:::i;:::-;29762:42;;;;:::i;:::-;29742:17;:62:::0;29860:5:::1;29846:10:::0;29830:13:::1;12221:12:::0;;;12133:108;29830:13:::1;:26;;;;:::i;:::-;29829:36;;;;:::i;:::-;29815:11;:50:::0;-1:-1:-1;;29615:258:0:o;19424:380::-;-1:-1:-1;;;;;19560:19:0;;19552:68;;;;-1:-1:-1;;;19552:68:0;;10352:2:1;19552:68:0;;;10334:21:1;10391:2;10371:18;;;10364:30;10430:34;10410:18;;;10403:62;-1:-1:-1;;;10481:18:1;;;10474:34;10525:19;;19552:68:0;10150:400:1;19552:68:0;-1:-1:-1;;;;;19639:21:0;;19631:68;;;;-1:-1:-1;;;19631:68:0;;10757:2:1;19631:68:0;;;10739:21:1;10796:2;10776:18;;;10769:30;10835:34;10815:18;;;10808:62;-1:-1:-1;;;10886:18:1;;;10879:32;10928:19;;19631:68:0;10555:398:1;19631:68:0;-1:-1:-1;;;;;19712:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19764:32;;1614:25:1;;;19764:32:0;;1587:18:1;19764:32:0;;;;;;;19424:380;;;:::o;31113:2339::-;-1:-1:-1;;;;;31245:18:0;;31237:68;;;;-1:-1:-1;;;31237:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31324:16:0;;31316:64;;;;-1:-1:-1;;;31316:64:0;;;;;;;:::i;:::-;31408:1;31399:6;:10;31391:64;;;;-1:-1:-1;;;31391:64:0;;11970:2:1;31391:64:0;;;11952:21:1;12009:2;11989:18;;;11982:30;12048:34;12028:18;;;12021:62;-1:-1:-1;;;12099:18:1;;;12092:39;12148:19;;31391:64:0;11768:405:1;31391:64:0;31466:17;31510:7;21774:6;;-1:-1:-1;;;;;21774:6:0;;21701:87;31510:7;-1:-1:-1;;;;;31502:15:0;:4;-1:-1:-1;;;;;31502:15:0;;;:32;;;;-1:-1:-1;21774:6:0;;-1:-1:-1;;;;;31521:13:0;;;21774:6;;31521:13;;31502:32;31498:1783;;;31563:28;31587:3;31563:19;31574:7;;31563:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;31638:13;;31551:40;;-1:-1:-1;;;;;;31630:21:0;;;31638:13;;31630:21;:72;;;;-1:-1:-1;31686:15:0;;-1:-1:-1;;;;;31672:30:0;;;31686:15;;31672:30;;31630:72;:116;;;;-1:-1:-1;;;;;;31724:22:0;;;;;;:18;:22;;;;;;;;31723:23;31630:116;31608:560;;;31799:12;;31789:6;:22;;31781:60;;;;-1:-1:-1;;;31781:60:0;;12380:2:1;31781:60:0;;;12362:21:1;12419:2;12399:18;;;12392:30;12458:27;12438:18;;;12431:55;12503:18;;31781:60:0;12178:349:1;31781:60:0;31916:14;;31906:6;31890:13;31900:2;31890:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;31860:140;;;;-1:-1:-1;;;31860:140:0;;12734:2:1;31860:140:0;;;12716:21:1;12773:2;12753:18;;;12746:30;12812:28;12792:18;;;12785:56;12858:18;;31860:140:0;12532:350:1;31860:140:0;32042:12;32025:10;;32038:1;32025:14;;;;:::i;:::-;:29;32021:102;;;33706:20;;33754:8;32079:24;;;;;;32141:9;:11;;;:9;:11;;;:::i;:::-;;;;;;31608:560;32194:13;;-1:-1:-1;;;;;32188:19:0;;;32194:13;;32188:19;;;;:46;;-1:-1:-1;;;;;;32212:22:0;;;;;;:18;:22;;;;;;;;32211:23;32188:46;32184:227;;;32311:14;;32301:6;32285:13;32295:2;32285:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;32255:140;;;;-1:-1:-1;;;32255:140:0;;12734:2:1;32255:140:0;;;12716:21:1;12773:2;12753:18;;;12746:30;12812:28;12792:18;;;12785:56;12858:18;;32255:140:0;12532:350:1;32255:140:0;32437:13;;-1:-1:-1;;;;;32431:19:0;;;32437:13;;32431:19;:44;;;;-1:-1:-1;;;;;;32454:21:0;;32470:4;32454:21;;32431:44;32427:126;;;32508:29;32533:3;32508:20;32519:8;;32508:6;:10;;:20;;;;:::i;:29::-;32496:41;;32427:126;32569:28;32600:24;32618:4;32600:9;:24::i;:::-;32662:6;;32569:55;;-1:-1:-1;;;;32662:6:0;;;;32661:7;:47;;;;-1:-1:-1;32695:13:0;;-1:-1:-1;;;;;32689:19:0;;;32695:13;;32689:19;32661:47;:79;;;;-1:-1:-1;32729:11:0;;-1:-1:-1;;;32729:11:0;;;;32661:79;:140;;;;;32784:17;;32761:20;:40;32661:140;:191;;;;;32834:18;;32822:9;;:30;32661:191;:256;;;;-1:-1:-1;32878:15:0;;32904:12;32878:39;;;;:15;;:39;;32661:256;32639:631;;;32952:109;32991:51;32995:6;33003:38;33007:20;33029:11;;33003:3;:38::i;:::-;32991:3;:51::i;32952:109::-;33109:21;33153:22;;33149:106;;33200:35;33213:21;33200:12;:35::i;:::-;32933:337;32639:631;31536:1745;31498:1783;33297:13;;33293:93;;33327:47;33343:4;33357;33364:9;33327:15;:47::i;:::-;33396:48;33412:4;33418:2;33422:21;:6;33433:9;33422:10;:21::i;:::-;33396:15;:48::i;:::-;31226:2226;31113:2339;;;:::o;33778:532::-;26311:6;:13;;-1:-1:-1;;;;26311:13:0;-1:-1:-1;;;26311:13:0;;;33856:15:::1;:38:::0;;::::1;33881:12;33856:38;-1:-1:-1::0;;33856:38:0;;::::1;;::::0;;33929:16:::1;::::0;;33943:1:::1;33929:16:::0;;;;;::::1;::::0;;-1:-1:-1;;33929:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33929:16:0::1;33905:40;;33974:4;33956;33961:1;33956:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33956:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;34000:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;34000:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;33956:7;;34000:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33990:4;33995:1;33990:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33990:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;34065:15:::1;::::0;34033:62:::1;::::0;34050:4:::1;::::0;34065:15:::1;34083:11:::0;34033:8:::1;:62::i;:::-;34106:15;::::0;:196:::1;::::0;-1:-1:-1;;;34106:196:0;;-1:-1:-1;;;;;34106:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;34187:11;;34106:15:::1;::::0;34229:4;;34256::::1;::::0;34276:15:::1;::::0;34106:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26347:6:0;:14;;-1:-1:-1;;;;26347:14:0;;;-1:-1:-1;;;;33778:532:0:o;23008:191::-;23101:6;;;-1:-1:-1;;;;;23118:17:0;;;-1:-1:-1;;;;;;23118:17:0;;;;;;;23151:40;;23101:6;;;23118:17;23101:6;;23151:40;;23082:16;;23151:40;23071:128;23008:191;:::o;3378:98::-;3436:7;3463:5;3467:1;3463;:5;:::i;:::-;3456:12;3378:98;-1:-1:-1;;;3378:98:0:o;3777:::-;3835:7;3862:5;3866:1;3862;:5;:::i;33460:107::-;33517:7;33549:1;33545;:5;33544:15;;33558:1;33544:15;;;-1:-1:-1;33554:1:0;33460:107;-1:-1:-1;33460:107:0:o;34318:285::-;34375:15;34393:26;34415:3;34393:17;34404:5;;34393:6;:10;;:17;;;;:::i;:26::-;34475:11;;34467:45;;34375:44;;-1:-1:-1;34430:12:0;;-1:-1:-1;;;;;34475:11:0;;;;34375:44;;34430:12;34467:45;34430:12;34467:45;34375:44;34475:11;34467:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34545:10:0;;34537:58;;34453:59;;-1:-1:-1;;;;;;34545:10:0;;34569:21;;34537:58;;;;34569:21;34545:10;34537:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34318:285:0:o;16606:770::-;-1:-1:-1;;;;;16746:20:0;;16738:70;;;;-1:-1:-1;;;16738:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16827:23:0;;16819:71;;;;-1:-1:-1;;;16819:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16987:17:0;;16963:21;16987:17;;;;;;;;;;;17037:23;;;;17015:111;;;;-1:-1:-1;;;17015:111:0;;14688:2:1;17015:111:0;;;14670:21:1;14727:2;14707:18;;;14700:30;14766:34;14746:18;;;14739:62;-1:-1:-1;;;14817:18:1;;;14810:36;14863:19;;17015:111:0;14486:402:1;17015:111:0;-1:-1:-1;;;;;17162:17:0;;;:9;:17;;;;;;;;;;;17182:22;;;17162:42;;17226:20;;;;;;;;:30;;17198:6;;17162:9;17226:30;;17198:6;;17226:30;:::i;:::-;;;;;;;;17291:9;-1:-1:-1;;;;;17274:35:0;17283:6;-1:-1:-1;;;;;17274:35:0;;17302:6;17274:35;;;;1614:25:1;;1602:2;1587:18;;1468:177;17274:35:0;;;;;;;;17322:46;20404:125;3021:98;3079:7;3106:5;3110:1;3106;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:248::-;1283:6;1291;1344:2;1332:9;1323:7;1319:23;1315:32;1312:52;;;1360:1;1357;1350:12;1312:52;-1:-1:-1;;1383:23:1;;;1453:2;1438:18;;;1425:32;;-1:-1:-1;1215:248:1:o;1650:456::-;1727:6;1735;1743;1796:2;1784:9;1775:7;1771:23;1767:32;1764:52;;;1812:1;1809;1802:12;1764:52;1851:9;1838:23;1870:31;1895:5;1870:31;:::i;:::-;1920:5;-1:-1:-1;1977:2:1;1962:18;;1949:32;1990:33;1949:32;1990:33;:::i;:::-;1650:456;;2042:7;;-1:-1:-1;;;2096:2:1;2081:18;;;;2068:32;;1650:456::o;2300:180::-;2359:6;2412:2;2400:9;2391:7;2387:23;2383:32;2380:52;;;2428:1;2425;2418:12;2380:52;-1:-1:-1;2451:23:1;;2300:180;-1:-1:-1;2300:180:1:o;2485:247::-;2544:6;2597:2;2585:9;2576:7;2572:23;2568:32;2565:52;;;2613:1;2610;2603:12;2565:52;2652:9;2639:23;2671:31;2696:5;2671:31;:::i;2737:404::-;2821:6;2829;2882:2;2870:9;2861:7;2857:23;2853:32;2850:52;;;2898:1;2895;2888:12;2850:52;2937:9;2924:23;2956:31;2981:5;2956:31;:::i;:::-;3006:5;-1:-1:-1;3063:2:1;3048:18;;3035:32;3076:33;3035:32;3076:33;:::i;:::-;3128:7;3118:17;;;2737:404;;;;;:::o;3146:118::-;3232:5;3225:13;3218:21;3211:5;3208:32;3198:60;;3254:1;3251;3244:12;3269:382;3334:6;3342;3395:2;3383:9;3374:7;3370:23;3366:32;3363:52;;;3411:1;3408;3401:12;3363:52;3450:9;3437:23;3469:31;3494:5;3469:31;:::i;:::-;3519:5;-1:-1:-1;3576:2:1;3561:18;;3548:32;3589:30;3548:32;3589:30;:::i;5156:380::-;5235:1;5231:12;;;;5278;;;5299:61;;5353:4;5345:6;5341:17;5331:27;;5299:61;5406:2;5398:6;5395:14;5375:18;5372:38;5369:161;;5452:10;5447:3;5443:20;5440:1;5433:31;5487:4;5484:1;5477:15;5515:4;5512:1;5505:15;5541:356;5743:2;5725:21;;;5762:18;;;5755:30;5821:34;5816:2;5801:18;;5794:62;5888:2;5873:18;;5541:356::o;6311:127::-;6372:10;6367:3;6363:20;6360:1;6353:31;6403:4;6400:1;6393:15;6427:4;6424:1;6417:15;6443:125;6508:9;;;6529:10;;;6526:36;;;6542:18;;:::i;6925:251::-;6995:6;7048:2;7036:9;7027:7;7023:23;7019:32;7016:52;;;7064:1;7061;7054:12;7016:52;7096:9;7090:16;7115:31;7140:5;7115:31;:::i;7490:607::-;-1:-1:-1;;;;;7849:15:1;;;7831:34;;7896:2;7881:18;;7874:34;;;;7939:2;7924:18;;7917:34;;;;7982:2;7967:18;;7960:34;;;;8031:15;;;8025:3;8010:19;;8003:44;7811:3;8063:19;;8056:35;;;;7780:3;7765:19;;7490:607::o;8102:306::-;8190:6;8198;8206;8259:2;8247:9;8238:7;8234:23;8230:32;8227:52;;;8275:1;8272;8265:12;8227:52;8304:9;8298:16;8288:26;;8354:2;8343:9;8339:18;8333:25;8323:35;;8398:2;8387:9;8383:18;8377:25;8367:35;;8102:306;;;;;:::o;8692:245::-;8759:6;8812:2;8800:9;8791:7;8787:23;8783:32;8780:52;;;8828:1;8825;8818:12;8780:52;8860:9;8854:16;8879:28;8901:5;8879:28;:::i;9348:168::-;9421:9;;;9452;;9469:15;;;9463:22;;9449:37;9439:71;;9490:18;;:::i;9521:217::-;9561:1;9587;9577:132;;9631:10;9626:3;9622:20;9619:1;9612:31;9666:4;9663:1;9656:15;9694:4;9691:1;9684:15;9577:132;-1:-1:-1;9723:9:1;;9521:217::o;10958:401::-;11160:2;11142:21;;;11199:2;11179:18;;;11172:30;11238:34;11233:2;11218:18;;11211:62;-1:-1:-1;;;11304:2:1;11289:18;;11282:35;11349:3;11334:19;;10958:401::o;11364:399::-;11566:2;11548:21;;;11605:2;11585:18;;;11578:30;11644:34;11639:2;11624:18;;11617:62;-1:-1:-1;;;11710:2:1;11695:18;;11688:33;11753:3;11738:19;;11364:399::o;12887:135::-;12926:3;12947:17;;;12944:43;;12967:18;;:::i;:::-;-1:-1:-1;13014:1:1;13003:13;;12887:135::o;13159:127::-;13220:10;13215:3;13211:20;13208:1;13201:31;13251:4;13248:1;13241:15;13275:4;13272:1;13265:15;13291:980;13553:4;13601:3;13590:9;13586:19;13632:6;13621:9;13614:25;13658:2;13696:6;13691:2;13680:9;13676:18;13669:34;13739:3;13734:2;13723:9;13719:18;13712:31;13763:6;13798;13792:13;13829:6;13821;13814:22;13867:3;13856:9;13852:19;13845:26;;13906:2;13898:6;13894:15;13880:29;;13927:1;13937:195;13951:6;13948:1;13945:13;13937:195;;;14016:13;;-1:-1:-1;;;;;14012:39:1;14000:52;;14107:15;;;;14072:12;;;;14048:1;13966:9;13937:195;;;-1:-1:-1;;;;;;;14188:32:1;;;;14183:2;14168:18;;14161:60;-1:-1:-1;;;14252:3:1;14237:19;14230:35;14149:3;13291:980;-1:-1:-1;;;13291:980:1:o;14893:128::-;14960:9;;;14981:11;;;14978:37;;;14995:18;;:::i

Swarm Source

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