ETH Price: $2,885.16 (+7.23%)
Gas: 23.3 Gwei
 

Overview

Max Total Supply

10,000,000,000 MUSK

Holders

895

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
blonks.eth
Balance
1,198,910 MUSK

Value
$0.00
0xfd41bef1fd45d7db65fb8f4cd3804e4c8daff6b9
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:
MUSK

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-19
*/

// SPDX-License-Identifier: MIT

//website: elonmuskcoin.io
//telegram: t.me/musk_erc


pragma solidity 0.8.9;

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



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

}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

    


/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

    
}
 
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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract MUSK is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  burnmuskWallet;
    address private marketingWallet;

    
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyBurnmuskFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellBurnmuskFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyBurnmuskFee:0,
        buyLiquidityFee: 0,

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBurnmusk;
    uint256 private taxTill;
    // exclude from fees
    mapping(address => bool) private _isExcludedFromFees;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
    
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("Elon Musk", "MUSK") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e10 * 1e18;

        
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 3;
        _fees.buyLiquidityFee = 1;
        _fees.buyBurnmuskFee = 1;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyBurnmuskFee;

        _fees.sellMarketingFee = 2;
        _fees.sellLiquidityFee = 1;
        _fees.sellBurnmuskFee = 2;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellBurnmuskFee;


        marketingWallet = address(0x279361a2612Ea3d992f9Ac290dab0C2b5C976e98);
        burnmuskWallet = address(0x2e30037cda5ccD8eB3c649C490A94B9eD4b761A3);

        // exclude from paying fees 

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

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 3;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }
  

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _burnmuskFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _burnmuskFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyBurnmuskFee = _burnmuskFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyBurnmuskFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellBurnmuskFee = _burnmuskFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellBurnmuskFee;
        require(_fees.buyTotalFees <= 10, "Must keep fees at 10% or less");   
        require(_fees.sellTotalFees <= 10, "Must keep fees at 10% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    
    


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }


    function setWallets(address _marketingWallet,address _burnmuskWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        burnmuskWallet = _burnmuskWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

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

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
          
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForBurnmusk += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForBurnmusk += fees * _fees.sellBurnmuskFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForBurnmusk += fees * _fees.buyBurnmuskFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

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

        _approve(address(this), address(router), tAmount);

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

    }

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

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

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForBurnmusk;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForBurnmusk = newBalance.mul(tokensForBurnmusk).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForBurnmusk);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBurnmusk = 0;


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

        (success,) = address(burnmuskWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyBurnmuskFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellBurnmuskFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnmuskWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_burnmuskWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurnmusk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_burnmuskFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_burnmuskFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6009805461ffff191690556101c0604052600060c081905260e08190526101008190526101208190526101408190526101608190526101808190526101a052600a80546001600160401b03191690553480156200005b57600080fd5b506040805180820182526009815268456c6f6e204d75736b60b81b6020808301918252835180850190945260048452634d55534b60e01b908401528151919291620000a991600391620006b5565b508051620000bf906004906020840190620006b5565b5050506000620000d4620004a860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200017357600080fd5b505afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200075b565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f957600080fd5b505afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023491906200075b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b891906200075b565b6001600160a01b031660a0526001600f6000620002dd6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600f845282812080548616600190811790915560a05190921681526010909352912080549092161790556080516200034990600019620004ac565b506b204fce5e3e2502611000000061271062000367826001620007a3565b620003739190620007c5565b600855600a805463ffffff0019166301010300179081905560ff620100008204811691620003b19163010000008204811691610100900416620007e8565b620003bd9190620007e8565b600a805460ff92831665ff00000000ff1990911617650200000000001761ffff60301b1916670102000000000000179081905566010000000000008104821691620004219167010000000000000081048216916501000000000090910416620007e8565b6200042d9190620007e8565b600a805460ff929092166401000000000260ff60201b19909216919091179055600780546001600160a01b031990811673279361a2612ea3d992f9ac290dab0c2b5c976e981790915560068054909116732e30037cda5ccd8eb3c649c490a94b9ed4b761a3179055620004a13382620004c6565b5062000868565b3390565b600033620004bc8185856200058d565b5060019392505050565b6001600160a01b038216620005225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b806002600082825462000536919062000810565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316620005f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000519565b6001600160a01b038216620006545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000519565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620006c3906200082b565b90600052602060002090601f016020900481019282620006e7576000855562000732565b82601f106200070257805160ff191683800117855562000732565b8280016001018555821562000732579182015b828111156200073257825182559160200191906001019062000715565b506200074092915062000744565b5090565b5b8082111562000740576000815560010162000745565b6000602082840312156200076e57600080fd5b81516001600160a01b03811681146200078657600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007c057620007c06200078d565b500290565b600082620007e357634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff84168060ff038211156200080857620008086200078d565b019392505050565b600082198211156200082657620008266200078d565b500190565b600181811c908216806200084057607f821691505b602082108114156200086257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161203f620008b8600039600081816103380152610b9b01526000818161068b0152818161195401528181611a1c01528181611a5801528181611aca0152611b26015261203f6000f3fe6080604052600436106101dc5760003560e01c806370a0823111610102578063c024666811610095578063dd62ed3e11610064578063dd62ed3e14610609578063f2fde38b14610629578063f5b3c3bf14610649578063f887ea401461067957600080fd5b8063c0246668146104fd578063c16dd4a41461051d578063d212a69a1461053d578063d3f6a157146105e957600080fd5b8063a457c2d7116100d1578063a457c2d714610488578063a9059cbb146104a8578063b8863115146104c8578063b9e418e7146104e857600080fd5b806370a082311461040a578063715018a6146104405780638da5cb5b1461045557806395d89b411461047357600080fd5b8063313ce5671161017a5780634fbee193116101495780634fbee193146103725780635400798d146103ab578063555467a1146103cb5780636ddd1713146103eb57600080fd5b8063313ce567146102c85780633265e846146102e4578063395093511461030657806349bd5a5e1461032657600080fd5b806318160ddd116101b657806318160ddd146102675780631a8145bb1461027c5780631f3fed8f1461029257806323b872dd146102a857600080fd5b806306fdde03146101e8578063095ea7b3146102135780630a8468b31461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6106ad565b60405161020a9190611c1b565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611c88565b61073f565b604051901515815260200161020a565b34801561024f57600080fd5b50610259600d5481565b60405190815260200161020a565b34801561027357600080fd5b50600254610259565b34801561028857600080fd5b50610259600c5481565b34801561029e57600080fd5b50610259600b5481565b3480156102b457600080fd5b506102336102c3366004611cb4565b610759565b3480156102d457600080fd5b506040516012815260200161020a565b3480156102f057600080fd5b506103046102ff366004611d06565b61077d565b005b34801561031257600080fd5b50610233610321366004611c88565b610968565b34801561033257600080fd5b5061035a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161020a565b34801561037e57600080fd5b5061023361038d366004611d7a565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156103b757600080fd5b5060065461035a906001600160a01b031681565b3480156103d757600080fd5b506102336103e6366004611d97565b61098a565b3480156103f757600080fd5b5060095461023390610100900460ff1681565b34801561041657600080fd5b50610259610425366004611d7a565b6001600160a01b031660009081526020819052604090205490565b34801561044c57600080fd5b506103046109c5565b34801561046157600080fd5b506005546001600160a01b031661035a565b34801561047f57600080fd5b506101fd610a39565b34801561049457600080fd5b506102336104a3366004611c88565b610a48565b3480156104b457600080fd5b506102336104c3366004611c88565b610ac3565b3480156104d457600080fd5b506009546102339062010000900460ff1681565b3480156104f457600080fd5b50610304610ad1565b34801561050957600080fd5b50610304610518366004611db0565b610b1a565b34801561052957600080fd5b50610304610538366004611db0565b610b6f565b34801561054957600080fd5b50600a5461059d9060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691650100000000008104821691600160301b8204811691600160381b90041688565b6040805160ff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e08201526101000161020a565b3480156105f557600080fd5b50610304610604366004611dee565b610c46565b34801561061557600080fd5b50610259610624366004611dee565b610c9e565b34801561063557600080fd5b50610304610644366004611d7a565b610cc9565b34801561065557600080fd5b50610233610664366004611d7a565b60106020526000908152604090205460ff1681565b34801561068557600080fd5b5061035a7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546106bc90611e1c565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890611e1c565b80156107355780601f1061070a57610100808354040283529160200191610735565b820191906000526020600020905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b60003361074d818585610db4565b60019150505b92915050565b600033610767858285610ed8565b610772858585610f52565b506001949350505050565b6005546001600160a01b031633146107b05760405162461bcd60e51b81526004016107a790611e57565b60405180910390fd5b600a805463ff00ff00191661010060ff898116820263ff000000191692909217630100000089841681029190911762ff000019166201000089851681029190911794859055840483169361080c93918104821692900416611ea2565b6108169190611ea2565b600a805460ff92831665ff00000000ff19909116176501000000000086841681029190911767ffff0000000000001916600160381b868516810266ff000000000000191691909117600160301b8686168102919091179384905583048416936108889391820481169290910416611ea2565b6108929190611ea2565b600a805460ff928316600160201b0264ff0000000019821681178355831692169190911711156109045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a7565b600a8054600160201b900460ff1611156109605760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a7565b505050505050565b60003361074d81858561097b8383610c9e565b6109859190611ec7565b610db4565b6005546000906001600160a01b031633146109b75760405162461bcd60e51b81526004016107a790611e57565b50600881905560015b919050565b6005546001600160a01b031633146109ef5760405162461bcd60e51b81526004016107a790611e57565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546106bc90611e1c565b60003381610a568286610c9e565b905083811015610ab65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a7565b6107728286868403610db4565b60003361074d818585610f52565b6005546001600160a01b03163314610afb5760405162461bcd60e51b81526004016107a790611e57565b6009805461ffff1916610101179055610b15436003611ec7565b600e55565b6005546001600160a01b03163314610b445760405162461bcd60e51b81526004016107a790611e57565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b995760405162461bcd60e51b81526004016107a790611e57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610c1b5760405162461bcd60e51b815260206004820152601760248201527f4d757374206b65657020756e697377617056325061697200000000000000000060448201526064016107a7565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c705760405162461bcd60e51b81526004016107a790611e57565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610cf35760405162461bcd60e51b81526004016107a790611e57565b6001600160a01b038116610d585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a7565b6001600160a01b038216610e775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ee48484610c9e565b90506000198114610f4c5781811015610f3f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107a7565b610f4c8484848403610db4565b50505050565b80610f6857610f638383600061141c565b505050565b6005546001600160a01b03848116911614801590610f9457506005546001600160a01b03838116911614155b8015610fa9575060095462010000900460ff16155b1561103c5760095460ff1661103c576001600160a01b0383166000908152600f602052604090205460ff1680610ff757506001600160a01b0382166000908152600f602052604090205460ff165b61103c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107a7565b30600090815260208190526040902054600854811080159081906110675750600954610100900460ff165b801561107c575060095462010000900460ff16155b80156110a057506001600160a01b03841660009081526010602052604090205460ff165b80156110c557506001600160a01b0385166000908152600f602052604090205460ff16155b80156110ea57506001600160a01b0384166000908152600f602052604090205460ff16155b15611115576009805462ff00001916620100001790556111086115c0565b6009805462ff0000191690555b6009546001600160a01b0386166000908152600f602052604090205460ff6201000090920482161591168061116257506001600160a01b0385166000908152600f602052604090205460ff165b1561116b575060005b8015611415576000600e544310156111f657611193606461118d8760636117f3565b90611879565b905060636111a282605e611edf565b6111ac9190611efe565b600b60008282546111bd9190611ec7565b90915550606390506111d0826005611edf565b6111da9190611efe565b600d60008282546111eb9190611ec7565b909155506113f69050565b6001600160a01b03861660009081526010602052604090205460ff1680156112295750600a54600160201b900460ff1615155b156112f857600a5461124d9060649061118d908890600160201b900460ff166117f3565b600a5490915060ff600160201b820481169161127291600160381b9091041683611edf565b61127c9190611efe565b600c600082825461128d9190611ec7565b9091555050600a5460ff600160201b82048116916112b691650100000000009091041683611edf565b6112c09190611efe565b600b60008282546112d19190611ec7565b9091555050600a5460ff600160201b82048116916111d091600160301b9091041683611edf565b6001600160a01b03871660009081526010602052604090205460ff1680156113245750600a5460ff1615155b156113f657600a546113419060649061118d90889060ff166117f3565b600a5490915060ff808216916113609163010000009091041683611edf565b61136a9190611efe565b600c600082825461137b9190611ec7565b9091555050600a5460ff8082169161139a916101009091041683611edf565b6113a49190611efe565b600b60008282546113b59190611ec7565b9091555050600a5460ff808216916113d591620100009091041683611edf565b6113df9190611efe565b600d60008282546113f09190611ec7565b90915550505b80156114075761140787308361141c565b6114118186611f20565b9450505b6109608686865b6001600160a01b0383166114805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107a7565b6001600160a01b0382166114e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107a7565b6001600160a01b0383166000908152602081905260409020548181101561155a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610f4c565b3060009081526020819052604081205490506000600d54600b54600c546115e79190611ec7565b6115f19190611ec7565b90506000821580611600575081155b1561160a57505050565b600854611618906014611edf565b8311156116305760085461162d906014611edf565b92505b6000600283600c54866116439190611edf565b61164d9190611efe565b6116579190611efe565b9050600061166585836118bb565b905047611671826118fd565b600061167d47836118bb565b9050600061169a8761118d600b54856117f390919063ffffffff16565b905060006116b78861118d600d54866117f390919063ffffffff16565b905060006116c58284611ec7565b6116cf9085611f20565b6000600c819055600b819055600d55905086158015906116ef5750600081115b15611738576116fe8782611ac4565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b031661174e8447611f20565b604051600081818185875af1925050503d806000811461178a576040519150601f19603f3d011682016040523d82523d6000602084013e61178f565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d80600081146117df576040519150601f19603f3d011682016040523d82523d6000602084013e6117e4565b606091505b50505050505050505050505050565b60008261180257506000610753565b600061180e8385611edf565b90508261181b8583611efe565b146118725760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a7565b9392505050565b600061187283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bb3565b600061187283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bea565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061193257611932611f37565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ab57600080fd5b505afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190611f4d565b816001815181106119f6576119f6611f37565b60200260200101906001600160a01b031690816001600160a01b031681525050611a41307f000000000000000000000000000000000000000000000000000000000000000084610db4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a96908590600090869030904290600401611f6a565b600060405180830381600087803b158015611ab057600080fd5b505af1158015610960573d6000803e3d6000fd5b611aef307f000000000000000000000000000000000000000000000000000000000000000084610db4565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611b7357600080fd5b505af1158015611b87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bac9190611fdb565b5050505050565b60008183611bd45760405162461bcd60e51b81526004016107a79190611c1b565b506000611be18486611efe565b95945050505050565b60008184841115611c0e5760405162461bcd60e51b81526004016107a79190611c1b565b506000611be18486611f20565b600060208083528351808285015260005b81811015611c4857858101830151858201604001528201611c2c565b81811115611c5a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611c8557600080fd5b50565b60008060408385031215611c9b57600080fd5b8235611ca681611c70565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b8335611cd481611c70565b92506020840135611ce481611c70565b929592945050506040919091013590565b803560ff811681146109c057600080fd5b60008060008060008060c08789031215611d1f57600080fd5b611d2887611cf5565b9550611d3660208801611cf5565b9450611d4460408801611cf5565b9350611d5260608801611cf5565b9250611d6060808801611cf5565b9150611d6e60a08801611cf5565b90509295509295509295565b600060208284031215611d8c57600080fd5b813561187281611c70565b600060208284031215611da957600080fd5b5035919050565b60008060408385031215611dc357600080fd5b8235611dce81611c70565b915060208301358015158114611de357600080fd5b809150509250929050565b60008060408385031215611e0157600080fd5b8235611e0c81611c70565b91506020830135611de381611c70565b600181811c90821680611e3057607f821691505b60208210811415611e5157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115611ebf57611ebf611e8c565b019392505050565b60008219821115611eda57611eda611e8c565b500190565b6000816000190483118215151615611ef957611ef9611e8c565b500290565b600082611f1b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611f3257611f32611e8c565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f5f57600080fd5b815161187281611c70565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611fba5784516001600160a01b031683529383019391830191600101611f95565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ff057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202a9e0473b010cd600c980992fd5a79abf4944ba4a22f2a81659c1955b6c9527564736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806370a0823111610102578063c024666811610095578063dd62ed3e11610064578063dd62ed3e14610609578063f2fde38b14610629578063f5b3c3bf14610649578063f887ea401461067957600080fd5b8063c0246668146104fd578063c16dd4a41461051d578063d212a69a1461053d578063d3f6a157146105e957600080fd5b8063a457c2d7116100d1578063a457c2d714610488578063a9059cbb146104a8578063b8863115146104c8578063b9e418e7146104e857600080fd5b806370a082311461040a578063715018a6146104405780638da5cb5b1461045557806395d89b411461047357600080fd5b8063313ce5671161017a5780634fbee193116101495780634fbee193146103725780635400798d146103ab578063555467a1146103cb5780636ddd1713146103eb57600080fd5b8063313ce567146102c85780633265e846146102e4578063395093511461030657806349bd5a5e1461032657600080fd5b806318160ddd116101b657806318160ddd146102675780631a8145bb1461027c5780631f3fed8f1461029257806323b872dd146102a857600080fd5b806306fdde03146101e8578063095ea7b3146102135780630a8468b31461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6106ad565b60405161020a9190611c1b565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611c88565b61073f565b604051901515815260200161020a565b34801561024f57600080fd5b50610259600d5481565b60405190815260200161020a565b34801561027357600080fd5b50600254610259565b34801561028857600080fd5b50610259600c5481565b34801561029e57600080fd5b50610259600b5481565b3480156102b457600080fd5b506102336102c3366004611cb4565b610759565b3480156102d457600080fd5b506040516012815260200161020a565b3480156102f057600080fd5b506103046102ff366004611d06565b61077d565b005b34801561031257600080fd5b50610233610321366004611c88565b610968565b34801561033257600080fd5b5061035a7f000000000000000000000000c95807a4ad27ae53f1ad9bdf2e458a01dfb3b93d81565b6040516001600160a01b03909116815260200161020a565b34801561037e57600080fd5b5061023361038d366004611d7a565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156103b757600080fd5b5060065461035a906001600160a01b031681565b3480156103d757600080fd5b506102336103e6366004611d97565b61098a565b3480156103f757600080fd5b5060095461023390610100900460ff1681565b34801561041657600080fd5b50610259610425366004611d7a565b6001600160a01b031660009081526020819052604090205490565b34801561044c57600080fd5b506103046109c5565b34801561046157600080fd5b506005546001600160a01b031661035a565b34801561047f57600080fd5b506101fd610a39565b34801561049457600080fd5b506102336104a3366004611c88565b610a48565b3480156104b457600080fd5b506102336104c3366004611c88565b610ac3565b3480156104d457600080fd5b506009546102339062010000900460ff1681565b3480156104f457600080fd5b50610304610ad1565b34801561050957600080fd5b50610304610518366004611db0565b610b1a565b34801561052957600080fd5b50610304610538366004611db0565b610b6f565b34801561054957600080fd5b50600a5461059d9060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691650100000000008104821691600160301b8204811691600160381b90041688565b6040805160ff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e08201526101000161020a565b3480156105f557600080fd5b50610304610604366004611dee565b610c46565b34801561061557600080fd5b50610259610624366004611dee565b610c9e565b34801561063557600080fd5b50610304610644366004611d7a565b610cc9565b34801561065557600080fd5b50610233610664366004611d7a565b60106020526000908152604090205460ff1681565b34801561068557600080fd5b5061035a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6060600380546106bc90611e1c565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890611e1c565b80156107355780601f1061070a57610100808354040283529160200191610735565b820191906000526020600020905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b60003361074d818585610db4565b60019150505b92915050565b600033610767858285610ed8565b610772858585610f52565b506001949350505050565b6005546001600160a01b031633146107b05760405162461bcd60e51b81526004016107a790611e57565b60405180910390fd5b600a805463ff00ff00191661010060ff898116820263ff000000191692909217630100000089841681029190911762ff000019166201000089851681029190911794859055840483169361080c93918104821692900416611ea2565b6108169190611ea2565b600a805460ff92831665ff00000000ff19909116176501000000000086841681029190911767ffff0000000000001916600160381b868516810266ff000000000000191691909117600160301b8686168102919091179384905583048416936108889391820481169290910416611ea2565b6108929190611ea2565b600a805460ff928316600160201b0264ff0000000019821681178355831692169190911711156109045760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a7565b600a8054600160201b900460ff1611156109605760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c65737300000060448201526064016107a7565b505050505050565b60003361074d81858561097b8383610c9e565b6109859190611ec7565b610db4565b6005546000906001600160a01b031633146109b75760405162461bcd60e51b81526004016107a790611e57565b50600881905560015b919050565b6005546001600160a01b031633146109ef5760405162461bcd60e51b81526004016107a790611e57565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6060600480546106bc90611e1c565b60003381610a568286610c9e565b905083811015610ab65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107a7565b6107728286868403610db4565b60003361074d818585610f52565b6005546001600160a01b03163314610afb5760405162461bcd60e51b81526004016107a790611e57565b6009805461ffff1916610101179055610b15436003611ec7565b600e55565b6005546001600160a01b03163314610b445760405162461bcd60e51b81526004016107a790611e57565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b995760405162461bcd60e51b81526004016107a790611e57565b7f000000000000000000000000c95807a4ad27ae53f1ad9bdf2e458a01dfb3b93d6001600160a01b0316826001600160a01b03161415610c1b5760405162461bcd60e51b815260206004820152601760248201527f4d757374206b65657020756e697377617056325061697200000000000000000060448201526064016107a7565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c705760405162461bcd60e51b81526004016107a790611e57565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610cf35760405162461bcd60e51b81526004016107a790611e57565b6001600160a01b038116610d585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107a7565b6001600160a01b038216610e775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107a7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ee48484610c9e565b90506000198114610f4c5781811015610f3f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107a7565b610f4c8484848403610db4565b50505050565b80610f6857610f638383600061141c565b505050565b6005546001600160a01b03848116911614801590610f9457506005546001600160a01b03838116911614155b8015610fa9575060095462010000900460ff16155b1561103c5760095460ff1661103c576001600160a01b0383166000908152600f602052604090205460ff1680610ff757506001600160a01b0382166000908152600f602052604090205460ff165b61103c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016107a7565b30600090815260208190526040902054600854811080159081906110675750600954610100900460ff165b801561107c575060095462010000900460ff16155b80156110a057506001600160a01b03841660009081526010602052604090205460ff165b80156110c557506001600160a01b0385166000908152600f602052604090205460ff16155b80156110ea57506001600160a01b0384166000908152600f602052604090205460ff16155b15611115576009805462ff00001916620100001790556111086115c0565b6009805462ff0000191690555b6009546001600160a01b0386166000908152600f602052604090205460ff6201000090920482161591168061116257506001600160a01b0385166000908152600f602052604090205460ff165b1561116b575060005b8015611415576000600e544310156111f657611193606461118d8760636117f3565b90611879565b905060636111a282605e611edf565b6111ac9190611efe565b600b60008282546111bd9190611ec7565b90915550606390506111d0826005611edf565b6111da9190611efe565b600d60008282546111eb9190611ec7565b909155506113f69050565b6001600160a01b03861660009081526010602052604090205460ff1680156112295750600a54600160201b900460ff1615155b156112f857600a5461124d9060649061118d908890600160201b900460ff166117f3565b600a5490915060ff600160201b820481169161127291600160381b9091041683611edf565b61127c9190611efe565b600c600082825461128d9190611ec7565b9091555050600a5460ff600160201b82048116916112b691650100000000009091041683611edf565b6112c09190611efe565b600b60008282546112d19190611ec7565b9091555050600a5460ff600160201b82048116916111d091600160301b9091041683611edf565b6001600160a01b03871660009081526010602052604090205460ff1680156113245750600a5460ff1615155b156113f657600a546113419060649061118d90889060ff166117f3565b600a5490915060ff808216916113609163010000009091041683611edf565b61136a9190611efe565b600c600082825461137b9190611ec7565b9091555050600a5460ff8082169161139a916101009091041683611edf565b6113a49190611efe565b600b60008282546113b59190611ec7565b9091555050600a5460ff808216916113d591620100009091041683611edf565b6113df9190611efe565b600d60008282546113f09190611ec7565b90915550505b80156114075761140787308361141c565b6114118186611f20565b9450505b6109608686865b6001600160a01b0383166114805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107a7565b6001600160a01b0382166114e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107a7565b6001600160a01b0383166000908152602081905260409020548181101561155a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107a7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610f4c565b3060009081526020819052604081205490506000600d54600b54600c546115e79190611ec7565b6115f19190611ec7565b90506000821580611600575081155b1561160a57505050565b600854611618906014611edf565b8311156116305760085461162d906014611edf565b92505b6000600283600c54866116439190611edf565b61164d9190611efe565b6116579190611efe565b9050600061166585836118bb565b905047611671826118fd565b600061167d47836118bb565b9050600061169a8761118d600b54856117f390919063ffffffff16565b905060006116b78861118d600d54866117f390919063ffffffff16565b905060006116c58284611ec7565b6116cf9085611f20565b6000600c819055600b819055600d55905086158015906116ef5750600081115b15611738576116fe8782611ac4565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b031661174e8447611f20565b604051600081818185875af1925050503d806000811461178a576040519150601f19603f3d011682016040523d82523d6000602084013e61178f565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d80600081146117df576040519150601f19603f3d011682016040523d82523d6000602084013e6117e4565b606091505b50505050505050505050505050565b60008261180257506000610753565b600061180e8385611edf565b90508261181b8583611efe565b146118725760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a7565b9392505050565b600061187283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bb3565b600061187283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bea565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061193257611932611f37565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ab57600080fd5b505afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e39190611f4d565b816001815181106119f6576119f6611f37565b60200260200101906001600160a01b031690816001600160a01b031681525050611a41307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610db4565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a96908590600090869030904290600401611f6a565b600060405180830381600087803b158015611ab057600080fd5b505af1158015610960573d6000803e3d6000fd5b611aef307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610db4565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015611b7357600080fd5b505af1158015611b87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bac9190611fdb565b5050505050565b60008183611bd45760405162461bcd60e51b81526004016107a79190611c1b565b506000611be18486611efe565b95945050505050565b60008184841115611c0e5760405162461bcd60e51b81526004016107a79190611c1b565b506000611be18486611f20565b600060208083528351808285015260005b81811015611c4857858101830151858201604001528201611c2c565b81811115611c5a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611c8557600080fd5b50565b60008060408385031215611c9b57600080fd5b8235611ca681611c70565b946020939093013593505050565b600080600060608486031215611cc957600080fd5b8335611cd481611c70565b92506020840135611ce481611c70565b929592945050506040919091013590565b803560ff811681146109c057600080fd5b60008060008060008060c08789031215611d1f57600080fd5b611d2887611cf5565b9550611d3660208801611cf5565b9450611d4460408801611cf5565b9350611d5260608801611cf5565b9250611d6060808801611cf5565b9150611d6e60a08801611cf5565b90509295509295509295565b600060208284031215611d8c57600080fd5b813561187281611c70565b600060208284031215611da957600080fd5b5035919050565b60008060408385031215611dc357600080fd5b8235611dce81611c70565b915060208301358015158114611de357600080fd5b809150509250929050565b60008060408385031215611e0157600080fd5b8235611e0c81611c70565b91506020830135611de381611c70565b600181811c90821680611e3057607f821691505b60208210811415611e5157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff03821115611ebf57611ebf611e8c565b019392505050565b60008219821115611eda57611eda611e8c565b500190565b6000816000190483118215151615611ef957611ef9611e8c565b500290565b600082611f1b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611f3257611f32611e8c565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f5f57600080fd5b815161187281611c70565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611fba5784516001600160a01b031683529383019391830191600101611f95565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ff057600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202a9e0473b010cd600c980992fd5a79abf4944ba4a22f2a81659c1955b6c9527564736f6c63430008090033

Deployed Bytecode Sourcemap

25865:10274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4166:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6526:201;;;;;;;;;;-1:-1:-1;6526:201:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;6526:201:0;1072:187:1;26957:32:0;;;;;;;;;;;;;;;;;;;1410:25:1;;;1398:2;1383:18;26957:32:0;1264:177:1;5295:108:0;;;;;;;;;;-1:-1:-1;5383:12:0;;5295:108;;26917:33;;;;;;;;;;;;;;;;26877;;;;;;;;;;;;;;;;7307:261;;;;;;;;;;-1:-1:-1;7307:261:0;;;;;:::i;:::-;;:::i;5137:93::-;;;;;;;;;;-1:-1:-1;5137:93:0;;5220:2;2049:36:1;;2037:2;2022:18;5137:93:0;1907:184:1;29330:867:0;;;;;;;;;;-1:-1:-1;29330:867:0;;;;;:::i;:::-;;:::i;:::-;;7977:238;;;;;;;;;;-1:-1:-1;7977:238:0;;;;;:::i;:::-;;:::i;25988:38::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2961:32:1;;;2943:51;;2931:2;2916:18;25988:38:0;2797:203:1;30742:125:0;;;;;;;;;;-1:-1:-1;30742:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;30831:28:0;30807:4;30831:28;;;:19;:28;;;;;;;;;30742:125;26055:30;;;;;;;;;;-1:-1:-1;26055:30:0;;;;-1:-1:-1;;;;;26055:30:0;;;29160:158;;;;;;;;;;-1:-1:-1;29160:158:0;;;;;:::i;:::-;;:::i;26240:31::-;;;;;;;;;;-1:-1:-1;26240:31:0;;;;;;;;;;;5466:127;;;;;;;;;;-1:-1:-1;5466:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5567:18:0;5540:7;5567:18;;;;;;;;;;;;5466:127;18537:148;;;;;;;;;;;;;:::i;17896:78::-;;;;;;;;;;-1:-1:-1;17960:6:0;;-1:-1:-1;;;;;17960:6:0;17896:78;;4385:104;;;;;;;;;;;;;:::i;8718:436::-;;;;;;;;;;-1:-1:-1;8718:436:0;;;;;:::i;:::-;;:::i;5799:193::-;;;;;;;;;;-1:-1:-1;5799:193:0;;;;;:::i;:::-;;:::i;26278:22::-;;;;;;;;;;-1:-1:-1;26278:22:0;;;;;;;;;;;28943:143;;;;;;;;;;;;;:::i;30209:132::-;;;;;;;;;;-1:-1:-1;30209:132:0;;;;;:::i;:::-;;:::i;30363:177::-;;;;;;;;;;-1:-1:-1;30363:177:0;;;;;:::i;:::-;;:::i;26595:261::-;;;;;;;;;;-1:-1:-1;26595:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26595:261:0;;;;;;;;;;;-1:-1:-1;;;26595:261:0;;;;;-1:-1:-1;;;26595:261:0;;;;;;;;;4184:4:1;4215:15;;;4197:34;;4267:15;;;4262:2;4247:18;;4240:43;4319:15;;;4299:18;;;4292:43;;;;4371:15;;;4366:2;4351:18;;4344:43;4424:15;;;4418:3;4403:19;;4396:44;4477:15;;4471:3;4456:19;;4449:44;4530:15;;4524:3;4509:19;;4502:44;4583:15;;;4577:3;4562:19;;4555:44;4161:3;4146:19;26595:261:0;3863:742:1;30550:184:0;;;;;;;;;;-1:-1:-1;30550:184:0;;;;;:::i;:::-;;:::i;6055:151::-;;;;;;;;;;-1:-1:-1;6055:151:0;;;;;:::i;:::-;;:::i;18840:244::-;;;;;;;;;;-1:-1:-1;18840:244:0;;;;;:::i;:::-;;:::i;27266:42::-;;;;;;;;;;-1:-1:-1;27266:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25939;;;;;;;;;;;;;;;4166:100;4220:13;4253:5;4246:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4166:100;:::o;6526:201::-;6609:4;3454:10;6665:32;3454:10;6681:7;6690:6;6665:8;:32::i;:::-;6715:4;6708:11;;;6526:201;;;;;:::o;7307:261::-;7404:4;3454:10;7462:38;7478:4;3454:10;7493:6;7462:15;:38::i;:::-;7511:27;7521:4;7527:2;7531:6;7511:9;:27::i;:::-;-1:-1:-1;7556:4:0;;7307:261;-1:-1:-1;;;;7307:261:0:o;29330:867::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;;;;;;;;;29521:5:::1;:40:::0;;-1:-1:-1;;29572:40:0;29521::::1;;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29572:40:0;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;29623:38:0::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;29741:20;::::1;::::0;::::1;::::0;29693:45:::1;::::0;29717:21;;::::1;::::0;::::1;::::0;29693;::::1;;:45;:::i;:::-;:68;;;;:::i;:::-;29672:5;:89:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;29774:42:0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;29880:40:0;-1:-1:-1;;;29827:42:0;;::::1;::::0;::::1;-1:-1:-1::0;;29880:40:0;;;;;-1:-1:-1;;;29880:40:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;30003:21;::::1;::::0;::::1;::::0;29953:47:::1;::::0;29978:22;;::::1;::::0;::::1;::::0;29953;;::::1;;:47;:::i;:::-;:71;;;;:::i;:::-;29931:5;:93:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;29931:93:0::1;-1:-1:-1::0;;29931:93:0;::::1;::::0;::::1;::::0;;30043:18;;;;;;;;:24:::1;;30035:66;;;::::0;-1:-1:-1;;;30035:66:0;;6527:2:1;30035:66:0::1;::::0;::::1;6509:21:1::0;6566:2;6546:18;;;6539:30;6605:31;6585:18;;;6578:59;6654:18;;30035:66:0::1;6325:353:1::0;30035:66:0::1;30146:2;30123:19:::0;;-1:-1:-1;;;30123:19:0;::::1;;;:25;;30115:67;;;::::0;-1:-1:-1;;;30115:67:0;;6527:2:1;30115:67:0::1;::::0;::::1;6509:21:1::0;6566:2;6546:18;;;6539:30;6605:31;6585:18;;;6578:59;6654:18;;30115:67:0::1;6325:353:1::0;30115:67:0::1;29330:867:::0;;;;;;:::o;7977:238::-;8065:4;3454:10;8121:64;3454:10;8137:7;8174:10;8146:25;3454:10;8137:7;8146:9;:25::i;:::-;:38;;;;:::i;:::-;8121:8;:64::i;29160:158::-;18107:6;;29241:4;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;-1:-1:-1;29257:19:0::1;:31:::0;;;29306:4:::1;18177:1;29160:158:::0;;;:::o;18537:148::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;18628:6:::1;::::0;18607:40:::1;::::0;18644:1:::1;::::0;-1:-1:-1;;;;;18628:6:0::1;::::0;18607:40:::1;::::0;18644:1;;18607:40:::1;18658:6;:19:::0;;-1:-1:-1;;;;;;18658:19:0::1;::::0;;18537:148::o;4385:104::-;4441:13;4474:7;4467:14;;;;;:::i;8718:436::-;8811:4;3454:10;8811:4;8894:25;3454:10;8911:7;8894:9;:25::i;:::-;8867:52;;8958:15;8938:16;:35;;8930:85;;;;-1:-1:-1;;;8930:85:0;;7018:2:1;8930:85:0;;;7000:21:1;7057:2;7037:18;;;7030:30;7096:34;7076:18;;;7069:62;-1:-1:-1;;;7147:18:1;;;7140:35;7192:19;;8930:85:0;6816:401:1;8930:85:0;9051:60;9060:5;9067:7;9095:15;9076:16;:34;9051:8;:60::i;5799:193::-;5878:4;3454:10;5934:28;3454:10;5951:2;5955:6;5934:9;:28::i;28943:143::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;28996:9:::1;:16:::0;;-1:-1:-1;;29023:18:0;;;;;29062:16:::1;:12;29077:1;29062:16;:::i;:::-;29052:7;:26:::0;28943:143::o;30209:132::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30294:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;30294:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30209:132::o;30363:177::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;30456:13:::1;-1:-1:-1::0;;;;;30448:21:0::1;:4;-1:-1:-1::0;;;;;30448:21:0::1;;;30440:57;;;::::0;-1:-1:-1;;;30440:57:0;;7424:2:1;30440:57:0::1;::::0;::::1;7406:21:1::0;7463:2;7443:18;;;7436:30;7502:25;7482:18;;;7475:53;7545:18;;30440:57:0::1;7222:347:1::0;30440:57:0::1;-1:-1:-1::0;;;;;30508:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;30508:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30363:177::o;30550:184::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;30649:15:::1;:34:::0;;-1:-1:-1;;;;;30649:34:0;;::::1;-1:-1:-1::0;;;;;;30649:34:0;;::::1;;::::0;;;30694:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;30550:184::o;6055:151::-;-1:-1:-1;;;;;6171:18:0;;;6144:7;6171:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6055:151::o;18840:244::-;18107:6;;-1:-1:-1;;;;;18107:6:0;3454:10;18107:22;18099:67;;;;-1:-1:-1;;;18099:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18929:22:0;::::1;18921:73;;;::::0;-1:-1:-1;;;18921:73:0;;7776:2:1;18921:73:0::1;::::0;::::1;7758:21:1::0;7815:2;7795:18;;;7788:30;7854:34;7834:18;;;7827:62;-1:-1:-1;;;7905:18:1;;;7898:36;7951:19;;18921:73:0::1;7574:402:1::0;18921:73:0::1;19031:6;::::0;19010:38:::1;::::0;-1:-1:-1;;;;;19010:38:0;;::::1;::::0;19031:6:::1;::::0;19010:38:::1;::::0;19031:6:::1;::::0;19010:38:::1;19059:6;:17:::0;;-1:-1:-1;;;;;;19059:17:0::1;-1:-1:-1::0;;;;;19059:17:0;;;::::1;::::0;;;::::1;::::0;;18840:244::o;12711:346::-;-1:-1:-1;;;;;12813:19:0;;12805:68;;;;-1:-1:-1;;;12805:68:0;;8183:2:1;12805:68:0;;;8165:21:1;8222:2;8202:18;;;8195:30;8261:34;8241:18;;;8234:62;-1:-1:-1;;;8312:18:1;;;8305:34;8356:19;;12805:68:0;7981:400:1;12805:68:0;-1:-1:-1;;;;;12892:21:0;;12884:68;;;;-1:-1:-1;;;12884:68:0;;8588:2:1;12884:68:0;;;8570:21:1;8627:2;8607:18;;;8600:30;8666:34;8646:18;;;8639:62;-1:-1:-1;;;8717:18:1;;;8710:32;8759:19;;12884:68:0;8386:398:1;12884:68:0;-1:-1:-1;;;;;12965:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13017:32;;1410:25:1;;;13017:32:0;;1383:18:1;13017:32:0;;;;;;;12711:346;;;:::o;13348:419::-;13449:24;13476:25;13486:5;13493:7;13476:9;:25::i;:::-;13449:52;;-1:-1:-1;;13516:16:0;:37;13512:248;;13598:6;13578:16;:26;;13570:68;;;;-1:-1:-1;;;13570:68:0;;8991:2:1;13570:68:0;;;8973:21:1;9030:2;9010:18;;;9003:30;9069:31;9049:18;;;9042:59;9118:18;;13570:68:0;8789:353:1;13570:68:0;13682:51;13691:5;13698:7;13726:6;13707:16;:25;13682:8;:51::i;:::-;13438:329;13348:419;;;:::o;30875:2736::-;31032:11;31028:102;;31060:37;31076:6;31084:9;31095:1;31060:15;:37::i;:::-;30875:2736;;;:::o;31028:102::-;17960:6;;-1:-1:-1;;;;;31160:17:0;;;17960:6;;31160:17;;;;:54;;-1:-1:-1;17960:6:0;;-1:-1:-1;;;;;31194:20:0;;;17960:6;;31194:20;;31160:54;:82;;;;-1:-1:-1;31232:10:0;;;;;;;31231:11;31160:82;31142:299;;;31276:9;;;;31271:147;;-1:-1:-1;;;;;31314:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;31345:30:0;;;;;;:19;:30;;;;;;;;31314:61;31306:96;;;;-1:-1:-1;;;31306:96:0;;9349:2:1;31306:96:0;;;9331:21:1;9388:2;9368:18;;;9361:30;-1:-1:-1;;;9407:18:1;;;9400:52;9469:18;;31306:96:0;9147:346:1;31306:96:0;31516:4;31467:28;5567:18;;;;;;;;;;;31575:19;;31551:43;;;;;;;31625:35;;-1:-1:-1;31649:11:0;;;;;;;31625:35;:63;;;;-1:-1:-1;31678:10:0;;;;;;;31677:11;31625:63;:101;;;;-1:-1:-1;;;;;;31705:21:0;;;;;;:10;:21;;;;;;;;31625:101;:146;;;;-1:-1:-1;;;;;;31744:27:0;;;;;;:19;:27;;;;;;;;31743:28;31625:146;:194;;;;-1:-1:-1;;;;;;31789:30:0;;;;;;:19;:30;;;;;;;;31788:31;31625:194;31607:326;;;31846:10;:17;;-1:-1:-1;;31846:17:0;;;;;31878:10;:8;:10::i;:::-;31903;:18;;-1:-1:-1;;31903:18:0;;;31607:326;31962:10;;-1:-1:-1;;;;;32074:27:0;;31946:12;32074:27;;;:19;:27;;;;;;31962:10;;;;;;;31961:11;;32074:27;;:61;;-1:-1:-1;;;;;;32105:30:0;;;;;;:19;:30;;;;;;;;32074:61;32070:109;;;-1:-1:-1;32162:5:0;32070:109;32280:7;32276:1273;;;32304:12;32353:7;;32338:12;:22;32335:1061;;;32388:23;32407:3;32388:14;:6;32399:2;32388:10;:14::i;:::-;:18;;:23::i;:::-;32381:30;-1:-1:-1;32466:2:0;32453:9;32381:30;32460:2;32453:9;:::i;:::-;32452:16;;;;:::i;:::-;32430:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;32521:2:0;;-1:-1:-1;32509:8:0;:4;32516:1;32509:8;:::i;:::-;32508:15;;;;:::i;:::-;32487:17;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;32335:1061:0;;-1:-1:-1;32335:1061:0;;-1:-1:-1;;;;;32549:21:0;;;;;;:10;:21;;;;;;;;:48;;;;-1:-1:-1;32574:5:0;:19;-1:-1:-1;;;32574:19:0;;;;:23;;32549:48;32545:851;;;32636:5;:19;32625:40;;32661:3;;32625:31;;:6;;-1:-1:-1;;;32636:19:0;;;;32625:10;:31::i;:40::-;32738:5;:19;32618:47;;-1:-1:-1;32738:19:0;-1:-1:-1;;;32738:19:0;;;;;32706:29;;-1:-1:-1;;;32713:22:0;;;;32618:47;32706:29;:::i;:::-;:51;;;;:::i;:::-;32684:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;32830:5:0;:19;;-1:-1:-1;;;32830:19:0;;;;;32798:29;;32805:22;;;;;32798:4;:29;:::i;:::-;:51;;;;:::i;:::-;32776:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;32920:5:0;:19;;-1:-1:-1;;;32920:19:0;;;;;32889:28;;-1:-1:-1;;;32896:21:0;;;;32889:4;:28;:::i;32545:851::-;-1:-1:-1;;;;;33001:18:0;;;;;;:10;:18;;;;;;;;:44;;;;-1:-1:-1;33023:5:0;:18;;;:22;;33001:44;32997:399;;;33084:5;:18;33073:39;;33108:3;;33073:30;;:6;;33084:18;;33073:10;:30::i;:39::-;33184:5;:18;33066:46;;-1:-1:-1;33184:18:0;;;;;33153:28;;33160:21;;;;;33066:46;33153:28;:::i;:::-;:49;;;;:::i;:::-;33131:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;33274:5:0;:18;;;;;;33243:28;;33274:18;33250:21;;;;33243:4;:28;:::i;:::-;:49;;;;:::i;:::-;33221:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;33362:5:0;:18;;;;;;33332:27;;33339:20;;;;;33332:4;:27;:::i;:::-;:48;;;;:::i;:::-;33311:17;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;32997:399:0;33416:8;;33412:93;;33445:44;33461:6;33477:4;33484;33445:15;:44::i;:::-;33521:14;33531:4;33521:14;;:::i;:::-;;;32289:1260;32276:1273;33561:42;33577:6;33585:9;33596:6;9624:806;-1:-1:-1;;;;;9721:18:0;;9713:68;;;;-1:-1:-1;;;9713:68:0;;10225:2:1;9713:68:0;;;10207:21:1;10264:2;10244:18;;;10237:30;10303:34;10283:18;;;10276:62;-1:-1:-1;;;10354:18:1;;;10347:35;10399:19;;9713:68:0;10023:401:1;9713:68:0;-1:-1:-1;;;;;9800:16:0;;9792:64;;;;-1:-1:-1;;;9792:64:0;;10631:2:1;9792:64:0;;;10613:21:1;10670:2;10650:18;;;10643:30;10709:34;10689:18;;;10682:62;-1:-1:-1;;;10760:18:1;;;10753:33;10803:19;;9792:64:0;10429:399:1;9792:64:0;-1:-1:-1;;;;;9942:15:0;;9920:19;9942:15;;;;;;;;;;;9976:21;;;;9968:72;;;;-1:-1:-1;;;9968:72:0;;11035:2:1;9968:72:0;;;11017:21:1;11074:2;11054:18;;;11047:30;11113:34;11093:18;;;11086:62;-1:-1:-1;;;11164:18:1;;;11157:36;11210:19;;9968:72:0;10833:402:1;9968:72:0;-1:-1:-1;;;;;10076:15:0;;;:9;:15;;;;;;;;;;;10094:20;;;10076:38;;10294:13;;;;;;;;;;:23;;;;;;10346:26;;1410:25:1;;;10294:13:0;;10346:26;;1383:18:1;10346:26:0;;;;;;;10385:37;30875:2736;34539:1595;34627:4;34578:28;5567:18;;;;;;;;;;;34578:55;;34644:14;34703:17;;34682:18;;34661;;:39;;;;:::i;:::-;:59;;;;:::i;:::-;34644:76;-1:-1:-1;34731:12:0;34760:25;;;:40;;-1:-1:-1;34789:11:0;;34760:40;34756:57;;;34804:7;;;34539:1595::o;34756:57::-;34852:19;;:24;;34874:2;34852:24;:::i;:::-;34829:20;:47;34825:127;;;34916:19;;:24;;34938:2;34916:24;:::i;:::-;34893:47;;34825:127;35013:23;35092:1;35083:6;35062:18;;35039:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;35013:80;-1:-1:-1;35104:26:0;35133:41;:20;35013:80;35133:24;:41::i;:::-;35104:70;-1:-1:-1;35216:21:0;35250:36;35104:70;35250:16;:36::i;:::-;35301:18;35322:44;:21;35348:17;35322:25;:44::i;:::-;35301:65;;35380:23;35406:46;35445:6;35406:34;35421:18;;35406:10;:14;;:34;;;;:::i;:46::-;35380:72;;35463:22;35488:45;35526:6;35488:33;35503:17;;35488:10;:14;;:33;;;;:::i;:45::-;35463:70;-1:-1:-1;35544:23:0;35584:32;35463:70;35584:15;:32;:::i;:::-;35570:47;;:10;:47;:::i;:::-;35653:1;35632:18;:22;;;35665:18;:22;;;35698:17;:21;35544:73;-1:-1:-1;35738:19:0;;;;;:42;;;35779:1;35761:15;:19;35738:42;35734:192;;;35797:46;35810:15;35827;35797:12;:46::i;:::-;35863:51;;;11414:25:1;;;11470:2;11455:18;;11448:34;;;35863:51:0;;11387:18:1;35863:51:0;;;;;;;35734:192;35959:14;;-1:-1:-1;;;;;35959:14:0;35989:39;36013:15;35989:21;:39;:::i;:::-;35951:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36068:15:0;;36060:66;;35938:98;;-1:-1:-1;;;;;;36068:15:0;;36098:21;;36060:66;;;;36098:21;36068:15;36060:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;34539:1595:0:o;16701:256::-;16758:7;16788:6;16784:47;;-1:-1:-1;16818:1:0;16811:8;;16784:47;16844:9;16856:5;16860:1;16856;:5;:::i;:::-;16844:17;-1:-1:-1;16889:1:0;16880:5;16884:1;16844:17;16880:5;:::i;:::-;:10;16872:56;;;;-1:-1:-1;;;16872:56:0;;11905:2:1;16872:56:0;;;11887:21:1;11944:2;11924:18;;;11917:30;11983:34;11963:18;;;11956:62;-1:-1:-1;;;12034:18:1;;;12027:31;12075:19;;16872:56:0;11703:397:1;16872:56:0;16948:1;16701:256;-1:-1:-1;;;16701:256:0:o;16968:131::-;17025:7;17052:39;17056:1;17059;17052:39;;;;;;;;;;;;;;;;;:3;:39::i;16354:135::-;16411:7;16438:43;16442:1;16445;16438:43;;;;;;;;;;;;;;;;;:3;:43::i;33619:554::-;33767:16;;;33781:1;33767:16;;;;;;;;33743:21;;33767:16;;;;;;;;;;-1:-1:-1;33767:16:0;33743:40;;33812:4;33794;33799:1;33794:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33794:23:0;;;-1:-1:-1;;;;;33794:23:0;;;;;33838:6;-1:-1:-1;;;;;33838:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33828:4;33833:1;33828:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33828:23:0;;;-1:-1:-1;;;;;33828:23:0;;;;;33864:49;33881:4;33896:6;33905:7;33864:8;:49::i;:::-;33952:211;;-1:-1:-1;;;33952:211:0;;-1:-1:-1;;;;;33952:6:0;:57;;;;:211;;34024:7;;34046:1;;34090:4;;34117;;34137:15;;33952:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34181:350;34325:49;34342:4;34357:6;34366:7;34325:8;:49::i;:::-;34417:106;;-1:-1:-1;;;34417:106:0;;34469:4;34417:106;;;13951:34:1;;;14001:18;;;13994:34;;;34485:1:0;14044:18:1;;;14037:34;;;14087:18;;;14080:34;14130:19;;;14123:44;34507:15:0;14183:19:1;;;14176:35;34417:6:0;-1:-1:-1;;;;;34417:22:0;;;;34448:9;;13885:19:1;;34417:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34181:350;;:::o;17111:277::-;17196:7;17231:12;17224:5;17216:28;;;;-1:-1:-1;;;17216:28:0;;;;;;;;:::i;:::-;-1:-1:-1;17255:9:0;17267:5;17271:1;17267;:5;:::i;:::-;17255:17;17111:277;-1:-1:-1;;;;;17111:277:0:o;16502:191::-;16587:7;16623:12;16615:6;;;;16607:29;;;;-1:-1:-1;;;16607:29:0;;;;;;;;:::i;:::-;-1:-1:-1;16647:9:0;16659:5;16663:1;16659;:5;:::i;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;2096:156::-;2162:20;;2222:4;2211:16;;2201:27;;2191:55;;2242:1;2239;2232:12;2257:535;2349:6;2357;2365;2373;2381;2389;2442:3;2430:9;2421:7;2417:23;2413:33;2410:53;;;2459:1;2456;2449:12;2410:53;2482:27;2499:9;2482:27;:::i;:::-;2472:37;;2528:36;2560:2;2549:9;2545:18;2528:36;:::i;:::-;2518:46;;2583:36;2615:2;2604:9;2600:18;2583:36;:::i;:::-;2573:46;;2638:36;2670:2;2659:9;2655:18;2638:36;:::i;:::-;2628:46;;2693:37;2725:3;2714:9;2710:19;2693:37;:::i;:::-;2683:47;;2749:37;2781:3;2770:9;2766:19;2749:37;:::i;:::-;2739:47;;2257:535;;;;;;;;:::o;3005:247::-;3064:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:52;;;3133:1;3130;3123:12;3085:52;3172:9;3159:23;3191:31;3216:5;3191:31;:::i;3257:180::-;3316:6;3369:2;3357:9;3348:7;3344:23;3340:32;3337:52;;;3385:1;3382;3375:12;3337:52;-1:-1:-1;3408:23:1;;3257:180;-1:-1:-1;3257:180:1:o;3442:416::-;3507:6;3515;3568:2;3556:9;3547:7;3543:23;3539:32;3536:52;;;3584:1;3581;3574:12;3536:52;3623:9;3610:23;3642:31;3667:5;3642:31;:::i;:::-;3692:5;-1:-1:-1;3749:2:1;3734:18;;3721:32;3791:15;;3784:23;3772:36;;3762:64;;3822:1;3819;3812:12;3762:64;3845:7;3835:17;;;3442:416;;;;;:::o;4610:388::-;4678:6;4686;4739:2;4727:9;4718:7;4714:23;4710:32;4707:52;;;4755:1;4752;4745:12;4707:52;4794:9;4781:23;4813:31;4838:5;4813:31;:::i;:::-;4863:5;-1:-1:-1;4920:2:1;4905:18;;4892:32;4933:33;4892:32;4933:33;:::i;5238:380::-;5317:1;5313:12;;;;5360;;;5381:61;;5435:4;5427:6;5423:17;5413:27;;5381:61;5488:2;5480:6;5477:14;5457:18;5454:38;5451:161;;;5534:10;5529:3;5525:20;5522:1;5515:31;5569:4;5566:1;5559:15;5597:4;5594:1;5587:15;5451:161;;5238:380;;;:::o;5623:356::-;5825:2;5807:21;;;5844:18;;;5837:30;5903:34;5898:2;5883:18;;5876:62;5970:2;5955:18;;5623:356::o;5984:127::-;6045:10;6040:3;6036:20;6033:1;6026:31;6076:4;6073:1;6066:15;6100:4;6097:1;6090:15;6116:204;6154:3;6190:4;6187:1;6183:12;6222:4;6219:1;6215:12;6257:3;6251:4;6247:14;6242:3;6239:23;6236:49;;;6265:18;;:::i;:::-;6301:13;;6116:204;-1:-1:-1;;;6116:204:1:o;6683:128::-;6723:3;6754:1;6750:6;6747:1;6744:13;6741:39;;;6760:18;;:::i;:::-;-1:-1:-1;6796:9:1;;6683:128::o;9498:168::-;9538:7;9604:1;9600;9596:6;9592:14;9589:1;9586:21;9581:1;9574:9;9567:17;9563:45;9560:71;;;9611:18;;:::i;:::-;-1:-1:-1;9651:9:1;;9498:168::o;9671:217::-;9711:1;9737;9727:132;;9781:10;9776:3;9772:20;9769:1;9762:31;9816:4;9813:1;9806:15;9844:4;9841:1;9834:15;9727:132;-1:-1:-1;9873:9:1;;9671:217::o;9893:125::-;9933:4;9961:1;9958;9955:8;9952:34;;;9966:18;;:::i;:::-;-1:-1:-1;10003:9:1;;9893:125::o;12237:127::-;12298:10;12293:3;12289:20;12286:1;12279:31;12329:4;12326:1;12319:15;12353:4;12350:1;12343:15;12369:251;12439:6;12492:2;12480:9;12471:7;12467:23;12463:32;12460:52;;;12508:1;12505;12498:12;12460:52;12540:9;12534:16;12559:31;12584:5;12559:31;:::i;12625:980::-;12887:4;12935:3;12924:9;12920:19;12966:6;12955:9;12948:25;12992:2;13030:6;13025:2;13014:9;13010:18;13003:34;13073:3;13068:2;13057:9;13053:18;13046:31;13097:6;13132;13126:13;13163:6;13155;13148:22;13201:3;13190:9;13186:19;13179:26;;13240:2;13232:6;13228:15;13214:29;;13261:1;13271:195;13285:6;13282:1;13279:13;13271:195;;;13350:13;;-1:-1:-1;;;;;13346:39:1;13334:52;;13441:15;;;;13406:12;;;;13382:1;13300:9;13271:195;;;-1:-1:-1;;;;;;;13522:32:1;;;;13517:2;13502:18;;13495:60;-1:-1:-1;;;13586:3:1;13571:19;13564:35;13483:3;12625:980;-1:-1:-1;;;12625:980:1:o;14222:306::-;14310:6;14318;14326;14379:2;14367:9;14358:7;14354:23;14350:32;14347:52;;;14395:1;14392;14385:12;14347:52;14424:9;14418:16;14408:26;;14474:2;14463:9;14459:18;14453:25;14443:35;;14518:2;14507:9;14503:18;14497:25;14487:35;;14222:306;;;;;:::o

Swarm Source

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