ETH Price: $1,897.74 (-11.49%)
 

Overview

Max Total Supply

10,000,000 ROULETTE

Holders

9

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RouletteGame

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-09-09
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

/**
 * @title RouletteGame
 * @dev Betting token for Roulette Game
 */
contract RouletteGame is Ownable, ERC20 {

    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

    uint private constant INITIAL_SUPPLY = 10_000_000 * 10**8;

    // Percent of the initial supply that will go to the LP
    uint constant LP_BPS = 9000;

    // Percent of the initial supply that will go to marketing
    uint constant MARKETING_BPS = 10_000 - LP_BPS;

    //
    // The tax to deduct, in basis points
    //
    uint public buyTaxBps = 500;
    uint public sellTaxBps = 500;
    //
    bool isSellingCollectedTaxes;

    event AntiBotEngaged();
    event AntiBotDisengaged();
    event StealthLaunchEngaged();

    address public rouletteContract;

    bool public isLaunched;

    address public myWallet;
    address public marketingWallet;
    address public revenueWallet;

    bool public engagedOnce;
    bool public disengagedOnce;

    constructor() ERC20("Roulette Game Betting Token", "ROULETTE", 8) {
        if (isGoerli()) {
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (isSepolia()) {
            router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        } else {
            require(block.chainid == 1, "expected mainnet");
            router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        factory = IUniswapV2Factory(router.factory());

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);

        isLaunched = false;
    }

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

    modifier onlyTestnet() {
        require(isTestnet(), "not testnet");
        _;
    }

    receive() external payable {}

    fallback() external payable {}

    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Allow minting on testnet so I don't have to deal with
     * buying from Uniswap.
     * @param amount the number of tokens to mint
     */
    function mint(uint amount) external onlyTestnet {
        _mint(address(msg.sender), amount);
    }

    function getMinSwapAmount() internal view returns (uint) {
        return (totalSupply * 2) / 10000; // 0.02%
    }

    function isGoerli() public view returns (bool) {
        return block.chainid == 5;
    }

    function isSepolia() public view returns (bool) {
        return block.chainid == 11155111;
    }

    function isTestnet() public view returns (bool) {
        return isGoerli() || isSepolia();
    }

    function enableAntiBotMode() public onlyOwner {
        require(!engagedOnce, "this is a one shot function");
        engagedOnce = true;
        buyTaxBps = 1000;
        sellTaxBps = 1000;
        emit AntiBotEngaged();
    }

    function disableAntiBotMode() public onlyOwner {
        require(!disengagedOnce, "this is a one shot function");
        disengagedOnce = true;
        buyTaxBps = 500;
        sellTaxBps = 500;
        emit AntiBotDisengaged();
    }

    /**
     * @dev Does the same thing as a max approve for the roulette
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();

        allowance[pwner][rouletteContract] = type(uint).max;
        emit Approval(pwner, rouletteContract, type(uint).max);

        return true;
    }

    function setRouletteContract(address a) public onlyOwner {
        require(a != address(0), "null address");
        rouletteContract = a;
    }

    function setMyWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        myWallet = wallet;
    }

    function setMarketingWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        marketingWallet = wallet;
    }

    function setRevenueWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        revenueWallet = wallet;
    }

    function stealthLaunch() external payable onlyOwner {
        require(!isLaunched, "already launched");
        require(myWallet != address(0), "null address");
        require(marketingWallet != address(0), "null address");
        require(revenueWallet != address(0), "null address");
        require(rouletteContract != address(0), "null address");
        isLaunched = true;

        _mint(address(this), INITIAL_SUPPLY * LP_BPS / 10_000);

        router.addLiquidityETH{ value: msg.value }(
            address(this),
            balanceOf[address(this)],
            0,
            0,
            owner(),
            block.timestamp);

        pair = IUniswapV2Pair(factory.getPair(address(this), router.WETH()));

        _mint(marketingWallet, INITIAL_SUPPLY * MARKETING_BPS / 10_000);

        require(totalSupply == INITIAL_SUPPLY, "numbers don't add up");

        // So I don't have to deal with Uniswap when testing
        if (isTestnet()) {
            _mint(address(msg.sender), 10_000 * 10**decimals);
        }

        emit StealthLaunchEngaged();
    }

    /**
     * @dev Calculate the amount of tax to apply to a transaction.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity of tokens being sent
     * @return the amount of tokens to withhold for taxes
     */
    function calcTax(address from, address to, uint amount) internal view returns (uint) {
        if (from == owner() || to == owner() || from == address(this)) {
            // For adding liquidity at the beginning
            //
            // Also for this contract selling the collected tax.
            return 0;
        } else if (from == address(pair)) {
            // Buy from DEX, or adding liquidity.
            return amount * buyTaxBps / 10_000;
        } else if (to == address(pair)) {
            // Sell from DEX, or removing liquidity.
            return amount * sellTaxBps / 10_000;
        } else {
            // Sending to other wallets (e.g. OTC) is tax-free.
            return 0;
        }
    }

    /**
     * @dev Sell the balance accumulated from taxes.
     */
    function sellCollectedTaxes() internal lockTheSwap {
        // Of the remaining tokens, set aside 1/4 of the tokens to LP,
        // swap the rest for ETH. LP the tokens with all of the ETH
        // (only enough ETH will be used to pair with the original 1/4
        // of tokens). Send the remaining ETH (about half the original
        // balance) to my wallet.

        uint tokensForLiq = balanceOf[address(this)] / 4;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;

        // Sell
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        router.addLiquidityETH{ value: address(this).balance }(
            address(this),
            tokensForLiq,
            0,
            0,
            owner(),
            block.timestamp);

        myWallet.call{value: address(this).balance}("");
    }

    /**
     * @dev Transfer tokens from the caller to another address.
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transfer(address to, uint amount) public override returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }

    /**
     * @dev Transfer tokens from one address to another. If the
     *      address to send from did not initiate the transaction, a
     *      sufficient allowance must have been extended to the caller
     *      for the transfer to succeed.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        if (from != msg.sender) {
            // This is a typical transferFrom

            uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

            if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
        }

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.
        if (balanceOf[address(this)] > getMinSwapAmount() && !isSellingCollectedTaxes && from != address(pair) && from != address(this)) {
            sellCollectedTaxes();
        }

        uint tax = calcTax(from, to, amount);
        uint afterTaxAmount = amount - tax;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint value.
        unchecked {
            balanceOf[to] += afterTaxAmount;
        }

        emit Transfer(from, to, afterTaxAmount);

        if (tax > 0) {
            // Use 1/5 of tax for revenue
            uint revenue = tax / 5;
            tax -= revenue;

            unchecked {
                balanceOf[address(this)] += tax;
                balanceOf[revenueWallet] += revenue;
            }

            // Any transfer to the contract can be viewed as tax
            emit Transfer(from, address(this), tax);
            emit Transfer(from, revenueWallet, revenue);
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"AntiBotDisengaged","type":"event"},{"anonymous":false,"inputs":[],"name":"AntiBotEngaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":[],"name":"StealthLaunchEngaged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disengagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"engagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGoerli","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSepolia","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTestnet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"myWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rouletteContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setRouletteContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stealthLaunch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b506040518060400160405280601b81526020017f526f756c657474652047616d652042657474696e6720546f6b656e000000000081525060405180604001604052806008815260200167524f554c4554544560c01b8152506008620000916200008b620002ac60201b60201c565b620002b0565b60016200009f848262000441565b506002620000ae838262000441565b5060ff81166080524660a052620000c462000300565b60c05250505060054603620000ff57600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a5565b4662aa36a7036200013657600780546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad7694008179055620001a5565b466001146200017e5760405162461bcd60e51b815260206004820152601060248201526f195e1c1958dd1959081b585a5b9b995d60821b604482015260640160405180910390fd5b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021f91906200050d565b600880546001600160a01b0319166001600160a01b039283161790553060008181526005602090815260408083206007805487168552908352928190206000199081905592549051928352909316927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600c805460ff60a81b19169055620005bd565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200033491906200053f565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003c757607f821691505b602082108103620003e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200043c57600081815260208120601f850160051c81016020861015620004175750805b601f850160051c820191505b81811015620004385782815560010162000423565b5050505b505050565b81516001600160401b038111156200045d576200045d6200039c565b62000475816200046e8454620003b2565b84620003ee565b602080601f831160018114620004ad5760008415620004945750858301515b600019600386901b1c1916600185901b17855562000438565b600085815260208120601f198616915b82811015620004de57888601518255948401946001909101908401620004bd565b5085821015620004fd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200052057600080fd5b81516001600160a01b03811681146200053857600080fd5b9392505050565b60008083546200054f81620003b2565b600182811680156200056a57600181146200058057620005b1565b60ff1984168752821515830287019450620005b1565b8760005260208060002060005b85811015620005a85781548a8201529084019082016200058d565b50505082870194505b50929695505050505050565b60805160a05160c051612b0b620005f460003960006114e6015260006114b10152600081816103ec0152610f130152612b0b6000f3fe60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b25780637ca882b51161019a5780637ca882b5146105365780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806375f0a8741461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb5780630adab99f146102fb57806318160ddd1461031b57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba91906124ca565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e6366004612558565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b50610296610316366004612584565b610fea565b34801561032757600080fd5b5061033160035481565b6040519081526020016102ba565b34801561034b57600080fd5b506102eb61035a3660046125a1565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b506102966113ab565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b506103316114ad565b34801561044157600080fd5b506102966104503660046125e2565b611508565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612584565b611515565b3480156104d357600080fd5b506103316104e2366004612584565b60046020526000908152604090205481565b34801561050057600080fd5b506102966115e1565b34801561051557600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054257600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103316105b5366004612584565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb6115f5565b34801561062b57600080fd5b506102ad61160b565b34801561064057600080fd5b5061029661064f3660046125e2565b611618565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c366004612558565b611690565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610331600a5481565b34801561073357600080fd5b50610331600b5481565b34801561074957600080fd5b506102966107583660046125fb565b61169d565b34801561076957600080fd5b50610331610778366004612672565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b03660046126ab565b6119bc565b3480156107c157600080fd5b506102966107d0366004612584565b611a56565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611b0a565b34801561082357600080fd5b50610296610832366004612584565b611c0e565b34801561084357600080fd5b50610296610852366004612584565b611cda565b60018054610864906126d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610890906126d1565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611da6565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361232866038d7ea4c68000612753565b610bdd919061276a565b611e27565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb91906127a5565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e91906127d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906127d3565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a612328826127f0565b610bd39066038d7ea4c68000612753565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f056115f5565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000000600a612923565b610bdd90612710612753565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611da6565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c83826127f0565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611ea0565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611ebe565b60006111fb85858561223b565b9050600061120982856127f0565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600460205260408120805492935086929091906112439084906127f0565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a3811561139d5760006112c660058461276a565b90506112d281846127f0565b306000818152600460209081526040808320805486019055600f5473ffffffffffffffffffffffffffffffffffffffff908116845292819020805487019055518481529396509192908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600f5460405182815273ffffffffffffffffffffffffffffffffffffffff918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6001925050505b9392505050565b6113b3611da6565b600f5474010000000000000000000000000000000000000000900460ff1615611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f000000000000000000000000000000000000000000000000000000000000000046146114e3576114de61232d565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b61151233826123c7565b50565b61151d611da6565b73ffffffffffffffffffffffffffffffffffffffff811661159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6115e9611da6565b6115f36000612455565b565b600046600514806114de57505062aa36a7461490565b60028054610864906126d1565b6116206115f5565b611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6115123382611e27565b60006113a43384846110bb565b42841015611707576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b600060016117136114ad565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611865573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906118e057508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b611a5e611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b61151281612455565b611b12611da6565b600f547501000000000000000000000000000000000000000000900460ff1615611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611c16611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611ce2611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611e399190612932565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611eb49190612753565b6114de919061276a565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055306000908152600460208190526040822054611f05919061276a565b3060009081526004602052604081205491925090611f249083906127f0565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611f5e57611f5e612945565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200191906127d3565b8160018151811061201457612014612945565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612080908590600090869030904290600401612974565b600060405180830381600087803b15801561209a57600080fd5b505af11580156120ae573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063f305d71990504730866000806120f760005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612184573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a991906127a5565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d8060008114612206576040519150601f19603f3d011682016040523d82523d6000602084013e61220b565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8581169116148061227f575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b8061229f575073ffffffffffffffffffffffffffffffffffffffff841630145b156122ac575060006113a4565b60095473ffffffffffffffffffffffffffffffffffffffff908116908516036122f157612710600a54836122e09190612753565b6122ea919061276a565b90506113a4565b60095473ffffffffffffffffffffffffffffffffffffffff9081169084160361232557612710600b54836122e09190612753565b5060006113a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405161235f91906129ff565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906123fc9084906127f0565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e94565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b818110156124f7578581018301518582016040015282016124db565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461151257600080fd5b6000806040838503121561256b57600080fd5b823561257681612536565b946020939093013593505050565b60006020828403121561259657600080fd5b81356113a481612536565b6000806000606084860312156125b657600080fd5b83356125c181612536565b925060208401356125d181612536565b929592945050506040919091013590565b6000602082840312156125f457600080fd5b5035919050565b600080600080600080600060e0888a03121561261657600080fd5b873561262181612536565b9650602088013561263181612536565b95506040880135945060608801359350608088013560ff8116811461265557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561268557600080fd5b823561269081612536565b915060208301356126a081612536565b809150509250929050565b6000602082840312156126bd57600080fd5b813563ffffffff811681146113a457600080fd5b600181811c908216806126e557607f821691505b60208210810361271e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe4612724565b6000826127a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806000606084860312156127ba57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156127e557600080fd5b81516113a481612536565b81810381811115610fe457610fe4612724565b600181815b8085111561285c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561284257612842612724565b8085161561284f57918102915b93841c9390800290612808565b509250929050565b60008261287357506001610fe4565b8161288057506000610fe4565b816001811461289657600281146128a0576128bc565b6001915050610fe4565b60ff8411156128b1576128b1612724565b50506001821b610fe4565b5060208310610133831016604e8410600b84101617156128df575081810a610fe4565b6128e98383612803565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561291b5761291b612724565b029392505050565b60006113a460ff841683612864565b80820180821115610fe457610fe4612724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129d157845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161299f565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c915080831680612a1b57607f831692505b60208084108203612a53577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612a675760018114612a9a57612ac7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612ac7565b60008a81526020902060005b86811015612abf5781548b820152908501908301612aa6565b505084890196505b50949897505050505050505056fea2646970667358221220d0134bec387f3ab34985ee2793ae702c3be37835241b6064486d23bc4f8c888c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b25780637ca882b51161019a5780637ca882b5146105365780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806375f0a8741461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb5780630adab99f146102fb57806318160ddd1461031b57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba91906124ca565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e6366004612558565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b50610296610316366004612584565b610fea565b34801561032757600080fd5b5061033160035481565b6040519081526020016102ba565b34801561034b57600080fd5b506102eb61035a3660046125a1565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b506102966113ab565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000881565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b506103316114ad565b34801561044157600080fd5b506102966104503660046125e2565b611508565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612584565b611515565b3480156104d357600080fd5b506103316104e2366004612584565b60046020526000908152604090205481565b34801561050057600080fd5b506102966115e1565b34801561051557600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054257600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103316105b5366004612584565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb6115f5565b34801561062b57600080fd5b506102ad61160b565b34801561064057600080fd5b5061029661064f3660046125e2565b611618565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c366004612558565b611690565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610331600a5481565b34801561073357600080fd5b50610331600b5481565b34801561074957600080fd5b506102966107583660046125fb565b61169d565b34801561076957600080fd5b50610331610778366004612672565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b03660046126ab565b6119bc565b3480156107c157600080fd5b506102966107d0366004612584565b611a56565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611b0a565b34801561082357600080fd5b50610296610832366004612584565b611c0e565b34801561084357600080fd5b50610296610852366004612584565b611cda565b60018054610864906126d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610890906126d1565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611da6565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361232866038d7ea4c68000612753565b610bdd919061276a565b611e27565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb91906127a5565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e91906127d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906127d3565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a612328826127f0565b610bd39066038d7ea4c68000612753565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f056115f5565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000008600a612923565b610bdd90612710612753565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611da6565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c83826127f0565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611ea0565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611ebe565b60006111fb85858561223b565b9050600061120982856127f0565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600460205260408120805492935086929091906112439084906127f0565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a3811561139d5760006112c660058461276a565b90506112d281846127f0565b306000818152600460209081526040808320805486019055600f5473ffffffffffffffffffffffffffffffffffffffff908116845292819020805487019055518481529396509192908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600f5460405182815273ffffffffffffffffffffffffffffffffffffffff918216918916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b6001925050505b9392505050565b6113b3611da6565b600f5474010000000000000000000000000000000000000000900460ff1615611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f000000000000000000000000000000000000000000000000000000000000000146146114e3576114de61232d565b905090565b507f776ae664efc5da38d5e910d4396b9a6368f0d2f38cb6e3db1f3103434339f74d90565b61151233826123c7565b50565b61151d611da6565b73ffffffffffffffffffffffffffffffffffffffff811661159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6115e9611da6565b6115f36000612455565b565b600046600514806114de57505062aa36a7461490565b60028054610864906126d1565b6116206115f5565b611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6115123382611e27565b60006113a43384846110bb565b42841015611707576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b600060016117136114ad565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611865573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906118e057508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b611a5e611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b61151281612455565b611b12611da6565b600f547501000000000000000000000000000000000000000000900460ff1615611b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611c16611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611ce2611da6565b73ffffffffffffffffffffffffffffffffffffffff8116611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146115f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611e399190612932565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611eb49190612753565b6114de919061276a565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055306000908152600460208190526040822054611f05919061276a565b3060009081526004602052604081205491925090611f249083906127f0565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611f5e57611f5e612945565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200191906127d3565b8160018151811061201457612014612945565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612080908590600090869030904290600401612974565b600060405180830381600087803b15801561209a57600080fd5b505af11580156120ae573d6000803e3d6000fd5b505060075473ffffffffffffffffffffffffffffffffffffffff16915063f305d71990504730866000806120f760005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612184573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a991906127a5565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d8060008114612206576040519150601f19603f3d011682016040523d82523d6000602084013e61220b565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8581169116148061227f575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b8061229f575073ffffffffffffffffffffffffffffffffffffffff841630145b156122ac575060006113a4565b60095473ffffffffffffffffffffffffffffffffffffffff908116908516036122f157612710600a54836122e09190612753565b6122ea919061276a565b90506113a4565b60095473ffffffffffffffffffffffffffffffffffffffff9081169084160361232557612710600b54836122e09190612753565b5060006113a4565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405161235f91906129ff565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812080548392906123fc9084906127f0565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e94565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b818110156124f7578581018301518582016040015282016124db565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461151257600080fd5b6000806040838503121561256b57600080fd5b823561257681612536565b946020939093013593505050565b60006020828403121561259657600080fd5b81356113a481612536565b6000806000606084860312156125b657600080fd5b83356125c181612536565b925060208401356125d181612536565b929592945050506040919091013590565b6000602082840312156125f457600080fd5b5035919050565b600080600080600080600060e0888a03121561261657600080fd5b873561262181612536565b9650602088013561263181612536565b95506040880135945060608801359350608088013560ff8116811461265557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561268557600080fd5b823561269081612536565b915060208301356126a081612536565b809150509250929050565b6000602082840312156126bd57600080fd5b813563ffffffff811681146113a457600080fd5b600181811c908216806126e557607f821691505b60208210810361271e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe4612724565b6000826127a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806000606084860312156127ba57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156127e557600080fd5b81516113a481612536565b81810381811115610fe457610fe4612724565b600181815b8085111561285c57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561284257612842612724565b8085161561284f57918102915b93841c9390800290612808565b509250929050565b60008261287357506001610fe4565b8161288057506000610fe4565b816001811461289657600281146128a0576128bc565b6001915050610fe4565b60ff8411156128b1576128b1612724565b50506001821b610fe4565b5060208310610133831016604e8410600b84101617156128df575081810a610fe4565b6128e98383612803565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561291b5761291b612724565b029392505050565b60006113a460ff841683612864565b80820180821115610fe457610fe4612724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129d157845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161299f565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c915080831680612a1b57607f831692505b60208084108203612a53577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b818015612a675760018114612a9a57612ac7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612ac7565b60008a81526020902060005b86811015612abf5781548b820152908501908301612aa6565b505084890196505b50949897505050505050505056fea2646970667358221220d0134bec387f3ab34985ee2793ae702c3be37835241b6064486d23bc4f8c888c64736f6c63430008130033

Deployed Bytecode Sourcemap

18473:10314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23019:1104;;;:::i;2519:217::-;;;;;;;;;;-1:-1:-1;2519:217:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;2519:217:0;1105:187:1;22378:147:0;;;;;;;;;;-1:-1:-1;22378:147:0;;;;;:::i;:::-;;:::i;1325:26::-;;;;;;;;;;;;;;;;;;;1695:25:1;;;1683:2;1668:18;1325:26:0;1549:177:1;27132:1652:0;;;;;;;;;;-1:-1:-1;27132:1652:0;;;;;:::i;:::-;;:::i;19392:26::-;;;;;;;;;;-1:-1:-1;19392:26:0;;;;;;;;;;;21336:233;;;;;;;;;;;;;:::i;19227:22::-;;;;;;;;;;-1:-1:-1;19227:22:0;;;;;;;;;;;1098:31;;;;;;;;;;;;;;;;;;2364:4:1;2352:17;;;2334:36;;2322:2;2307:18;1098:31:0;2192:184:1;5479:179:0;;;;;;;;;;;;;:::i;20536:80::-;;;;;;;;;;-1:-1:-1;20536:80:0;;;;;:::i;:::-;;:::i;19325:28::-;;;;;;;;;;-1:-1:-1;19325:28:0;;;;;;;;;;;2924:42:1;2912:55;;;2894:74;;2882:2;2867:18;19325:28:0;2748:226:1;22687:160:0;;;;;;;;;;-1:-1:-1;22687:160:0;;;;;:::i;:::-;;:::i;1360:44::-;;;;;;;;;;-1:-1:-1;1360:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;9618:103;;;;;;;;;;;;;:::i;19288:30::-;;;;;;;;;;-1:-1:-1;19288:30:0;;;;;;;;19187:31;;;;;;;;;;-1:-1:-1;19187:31:0;;;;;;;;;;;19362:23;;;;;;;;;;-1:-1:-1;19362:23:0;;;;;;;;;;;1786:41;;;;;;;;;;-1:-1:-1;1786:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;21122:99;;;;;;;;;;-1:-1:-1;21188:13:0;21205:8;21188:25;21122:99;;8970:87;;;;;;;;;;-1:-1:-1;9016:7:0;9043:6;;;8970:87;;21229:99;;;;;;;;;;;;;:::i;1069:20::-;;;;;;;;;;;;;:::i;20789:101::-;;;;;;;;;;-1:-1:-1;20789:101:0;;;;;:::i;:::-;;:::i;18600:26::-;;;;;;;;;;-1:-1:-1;18600:26:0;;;;;;;;26552:136;;;;;;;;;;-1:-1:-1;26552:136:0;;;;;:::i;:::-;;:::i;21023:91::-;;;;;;;;;;-1:-1:-1;21088:13:0;21105:1;21088:18;21023:91;;19258:23;;;;;;;;;;-1:-1:-1;19258:23:0;;;;;;;;18561:32;;;;;;;;;;-1:-1:-1;18561:32:0;;;;;;;;18975:27;;;;;;;;;;;;;;;;19009:28;;;;;;;;;;;;;;;;3944:1527;;;;;;;;;;-1:-1:-1;3944:1527:0;;;;;:::i;:::-;;:::i;1413:64::-;;;;;;;;;;-1:-1:-1;1413:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22104:266;;;;;;;;;;-1:-1:-1;22104:266:0;;;;;:::i;:::-;;:::i;9876:201::-;;;;;;;;;;-1:-1:-1;9876:201:0;;;;;:::i;:::-;;:::i;18522:32::-;;;;;;;;;;-1:-1:-1;18522:32:0;;;;;;;;21577:241;;;;;;;;;;;;;:::i;22855:156::-;;;;;;;;;;-1:-1:-1;22855:156:0;;;;;:::i;:::-;;:::i;22533:146::-;;;;;;;;;;-1:-1:-1;22533:146:0;;;;;:::i;:::-;;:::i;1042:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23019:1104::-;8856:13;:11;:13::i;:::-;23091:10:::1;::::0;;;::::1;;;23090:11;23082:40;;;::::0;::::1;::::0;;5898:2:1;23082:40:0::1;::::0;::::1;5880:21:1::0;5937:2;5917:18;;;5910:30;5976:18;5956;;;5949:46;6012:18;;23082:40:0::1;;;;;;;;;23141:8;::::0;:22:::1;:8;23133:47;;;::::0;::::1;::::0;;6243:2:1;23133:47:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23133:47:0::1;6041:336:1::0;23133:47:0::1;23199:15;::::0;:29:::1;:15;23191:54;;;::::0;::::1;::::0;;6243:2:1;23191:54:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23191:54:0::1;6041:336:1::0;23191:54:0::1;23264:13;::::0;:27:::1;:13;23256:52;;;::::0;::::1;::::0;;6243:2:1;23256:52:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23256:52:0::1;6041:336:1::0;23256:52:0::1;23327:16;::::0;::::1;::::0;::::1;:30;:16;23319:55;;;::::0;::::1;::::0;;6243:2:1;23319:55:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23319:55:0::1;6041:336:1::0;23319:55:0::1;23385:10;:17:::0;;;::::1;::::0;::::1;::::0;;23415:54:::1;23429:4;23462:6;23436:23;18785:4;18674:18;23436:23;:::i;:::-;:32;;;;:::i;:::-;23415:5;:54::i;:::-;23482:6;::::0;23547:4:::1;23482:6;23567:24:::0;;;:9:::1;:24;::::0;;;;;23482:6:::1;::::0;;::::1;::::0;:22:::1;::::0;23513:9:::1;::::0;23547:4;;23567:24;23482:6;23638:7:::1;9016::::0;9043:6;;;;8970:87;23638:7:::1;23482:194;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;23482:194:0::1;::::0;::::1;7387:34:1::0;7437:18;;;7430:34;;;;7480:18;;;7473:34;;;;7523:18;;;7516:34;7587:15;;;7566:19;;;7559:44;23660:15:0::1;7619:19:1::0;;;7612:35;7298:19;;23482:194:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23711:7:0::1;::::0;23742:6:::1;::::0;:13:::1;::::0;;;;;;;23711:7:::1;::::0;;::::1;::::0;-1:-1:-1;23711:15:0::1;::::0;23735:4:::1;::::0;23742:6:::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23711:45;::::0;;::::1;::::0;;;;;;8409:42:1;8478:15;;;23711:45:0::1;::::0;::::1;8460:34:1::0;8530:15;;8510:18;;;8503:43;8372:18;;23711:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23689:4;:68:::0;;;::::1;;::::0;;::::1;;::::0;;23776:15:::1;::::0;23770:63:::1;::::0;23776:15:::1;23826:6;18892:15;18785:4;23826:6:::0;18892:15:::1;:::i;:::-;23793:30;::::0;18674:18:::1;23793:30;:::i;23770:63::-;18674:18;23854:11;;:29;23846:62;;;::::0;::::1;::::0;;8892:2:1;23846:62:0::1;::::0;::::1;8874:21:1::0;8931:2;8911:18;;;8904:30;8970:22;8950:18;;;8943:50;9010:18;;23846:62:0::1;8690:344:1::0;23846:62:0::1;23987:11;:9;:11::i;:::-;23983:93;;;24015:49;24029:10;24051:12;24055:8;24051:2;:12;:::i;:::-;24042:21;::::0;:6:::1;:21;:::i;24015:49::-;24093:22;::::0;::::1;::::0;;;::::1;23019:1104::o:0;2519:217::-;2620:10;2593:4;2610:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;2667:37;2593:4;;2610:30;;2667:37;;;;2643:6;1695:25:1;;1683:2;1668:18;;1549:177;2667:37:0;;;;;;;;-1:-1:-1;2724:4:0;2519:217;;;;;:::o;22378:147::-;8856:13;:11;:13::i;:::-;22454:15:::1;::::0;::::1;22446:40;;;::::0;::::1;::::0;;6243:2:1;22446:40:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22446:40:0::1;6041:336:1::0;22446:40:0::1;22497:16;:20:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;22378:147::o;27132:1652::-;27252:4;27273:18;;;27281:10;27273:18;27269:272;;27372:15;;;27357:12;27372:15;;;:9;:15;;;;;;;;27388:10;27372:27;;;;;;;;27467:14;27456:25;;27452:77;;27513:16;27523:6;27513:7;:16;:::i;:::-;27483:15;;;;;;;:9;:15;;;;;;;;27499:10;27483:27;;;;;;;:46;27452:77;27293:248;27269:272;27762:18;:16;:18::i;:::-;27753:4;27735:24;;;;:9;:24;;;;;;:45;:73;;;;-1:-1:-1;27785:23:0;;;;27784:24;27735:73;:98;;;;-1:-1:-1;27828:4:0;;;27812:21;;;27828:4;;27812:21;;27735:98;:123;;;;-1:-1:-1;27837:21:0;;;27853:4;27837:21;;27735:123;27731:176;;;27875:20;:18;:20::i;:::-;27919:8;27930:25;27938:4;27944:2;27948:6;27930:7;:25::i;:::-;27919:36;-1:-1:-1;27966:19:0;27988:12;27919:36;27988:6;:12;:::i;:::-;28013:15;;;;;;;:9;:15;;;;;:25;;27966:34;;-1:-1:-1;28032:6:0;;28013:15;;;:25;;28032:6;;28013:25;:::i;:::-;;;;-1:-1:-1;;28186:13:0;;;;;;;;:9;:13;;;;;;;:31;;;;;;28246:34;28186:13;;28246:34;;;;;;;28203:14;1695:25:1;;1683:2;1668:18;;1549:177;28246:34:0;;;;;;;;28297:7;;28293:460;;28364:12;28379:7;28385:1;28379:3;:7;:::i;:::-;28364:22;-1:-1:-1;28401:14:0;28364:22;28401:14;;:::i;:::-;28479:4;28461:24;;;;:9;:24;;;;;;;;:31;;;;;;28521:13;;28461:24;28521:13;;;28511:24;;;;;;:35;;;;;;28649:34;1695:25:1;;;28461:31:0;;-1:-1:-1;28479:4:0;;28649:34;;;;;;1668:18:1;28649:34:0;;;;;;;28718:13;;28703:38;;1695:25:1;;;28718:13:0;;;;;28703:38;;;;;1683:2:1;1668:18;28703:38:0;;;;;;;28306:447;28293:460;28772:4;28765:11;;;;27132:1652;;;;;;:::o;21336:233::-;8856:13;:11;:13::i;:::-;21402:11:::1;::::0;;;::::1;;;21401:12;21393:52;;;::::0;::::1;::::0;;10744:2:1;21393:52:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21393:52:0::1;10542:351:1::0;21393:52:0::1;21456:11;:18:::0;;;::::1;::::0;::::1;::::0;;21497:4:::1;21485:9;:16:::0;;;21512:10:::1;:17:::0;21545:16:::1;::::0;::::1;::::0;21456:18;;21545:16:::1;21336:233::o:0;5479:179::-;5536:7;5580:16;5563:13;:33;:87;;5626:24;:22;:24::i;:::-;5556:94;;5479:179;:::o;5563:87::-;-1:-1:-1;5599:24:0;;5479:179::o;20536:80::-;20583:25;20589:10;20601:6;20583:5;:25::i;:::-;20536:80;:::o;22687:160::-;8856:13;:11;:13::i;:::-;22767:20:::1;::::0;::::1;22759:45;;;::::0;::::1;::::0;;6243:2:1;22759:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22759:45:0::1;6041:336:1::0;22759:45:0::1;22815:15;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22687:160::o;9618:103::-;8856:13;:11;:13::i;:::-;9683:30:::1;9710:1;9683:18;:30::i;:::-;9618:103::o:0;21229:99::-;21271:4;21088:13;21105:1;21088:18;21295:25;;;-1:-1:-1;;21205:8:0;21188:13;:25;;5479:179::o;1069:20::-;;;;;;;:::i;20789:101::-;20406:11;:9;:11::i;:::-;20398:35;;;;;;;11100:2:1;20398:35:0;;;11082:21:1;11139:2;11119:18;;;11112:30;11178:13;11158:18;;;11151:41;11209:18;;20398:35:0;10898:335:1;20398:35:0;20848:34:::1;20862:10;20875:6;20848:5;:34::i;26552:136::-:0;26620:4;26644:36;26657:10;26669:2;26673:6;26644:12;:36::i;3944:1527::-;4172:15;4160:8;:27;;4152:63;;;;;;;11440:2:1;4152:63:0;;;11422:21:1;11479:2;11459:18;;;11452:30;11518:25;11498:18;;;11491:53;11561:18;;4152:63:0;11238:347:1;4152:63:0;4385:24;4412:827;4552:18;:16;:18::i;:::-;5006:13;;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4637:458;;4682:167;4637:458;;;11877:25:1;11979:18;;;11972:43;;;;12051:15;;;12031:18;;;12024:43;12083:18;;;12076:34;;;12126:19;;;12119:35;;;;12170:19;;;;12163:35;;;4637:458:0;;;;;;;;;;11849:19:1;;;4637:458:0;;;4597:525;;;;;;;;12479:66:1;4472:673:0;;;12467:79:1;12562:11;;;12555:27;;;;12598:12;;;12591:28;;;;12635:12;;4472:673:0;;;;;;;;;;;;;4440:724;;4472:673;4440:724;;;;4412:827;;;;;;;;;12885:25:1;12958:4;12946:17;;12926:18;;;12919:45;12980:18;;;12973:34;;;13023:18;;;13016:34;;;12857:19;;4412:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4412:827:0;;;;;;-1:-1:-1;;5264:30:0;;;;;;;:59;;;5318:5;5298:25;;:16;:25;;;5264:59;5256:86;;;;;;;13263:2:1;5256:86:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:16;13321:18;;;13314:44;13375:18;;5256:86:0;13061:338:1;5256:86:0;5359:27;;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5432:31;1695:25:1;;;5359:36:0;;5432:31;;;;;1668:18:1;5432:31:0;;;;;;;3944:1527;;;;;;;:::o;22104:266::-;7759:10;22164:4;22222:16;;;:9;:16;;;;;;;;22239;;;22222;22239;;;;;;;22222:34;;;;;;;;22259:14;22222:51;;;;22305:16;;22289:49;;1695:25:1;;;22164:4:0;;7759:10;22305:16;;;;;7759:10;;22289:49;;1668:18:1;22289:49:0;1549:177:1;9876:201:0;8856:13;:11;:13::i;:::-;9965:22:::1;::::0;::::1;9957:73;;;::::0;::::1;::::0;;13606:2:1;9957:73:0::1;::::0;::::1;13588:21:1::0;13645:2;13625:18;;;13618:30;13684:34;13664:18;;;13657:62;13755:8;13735:18;;;13728:36;13781:19;;9957:73:0::1;13404:402:1::0;9957:73:0::1;10041:28;10060:8;10041:18;:28::i;21577:241::-:0;8856:13;:11;:13::i;:::-;21644:14:::1;::::0;;;::::1;;;21643:15;21635:55;;;::::0;::::1;::::0;;10744:2:1;21635:55:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21635:55:0::1;10542:351:1::0;21635:55:0::1;21701:14;:21:::0;;;::::1;::::0;::::1;::::0;;21745:3:::1;21733:9;:15:::0;;;21759:10:::1;:16:::0;21791:19:::1;::::0;::::1;::::0;21701:21;;21791:19:::1;21577:241::o:0;22855:156::-;8856:13;:11;:13::i;:::-;22933:20:::1;::::0;::::1;22925:45;;;::::0;::::1;::::0;;6243:2:1;22925:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22925:45:0::1;6041:336:1::0;22925:45:0::1;22981:13;:22:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22855:156::o;22533:146::-;8856:13;:11;:13::i;:::-;22606:20:::1;::::0;::::1;22598:45;;;::::0;::::1;::::0;;6243:2:1;22598:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22598:45:0::1;6041:336:1::0;22598:45:0::1;22654:8;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22533:146::o;9135:132::-;9016:7;9043:6;9199:23;9043:6;7759:10;9199:23;9191:68;;;;;;;14013:2:1;9191:68:0;;;13995:21:1;;;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14143:18;;9191:68:0;13811:356:1;6323:335:0;6409:6;6394:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;6566:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;6618:32;1695:25:1;;;6618:32:0;;1668:18:1;6618:32:0;;;;;;;;6323:335;;:::o;20898:117::-;20949:4;20993:5;20974:11;;20988:1;20974:15;;;;:::i;:::-;20973:25;;;;:::i;25209:1114::-;20264:23;:30;;;;20290:4;20264:30;;;25631:4:::1;20264:23:::0;25613:24;;;25640:1:::1;25613:24;::::0;;;;;;;:28:::1;::::0;25640:1;25613:28:::1;:::i;:::-;25690:4;25652:17;25672:24:::0;;;:9:::1;:24;::::0;;;;;25593:48;;-1:-1:-1;25652:17:0;25672:39:::1;::::0;25593:48;;25672:39:::1;:::i;:::-;25765:16;::::0;;25779:1:::1;25765:16:::0;;;;;::::1;::::0;;25652:59;;-1:-1:-1;25741:21:0::1;::::0;25765:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25765:16:0::1;25741:40;;25810:4;25792;25797:1;25792:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25836:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;25792:7;;25836:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25826:4;25831:1;25826:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25860:6:::1;::::0;:188:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;25932:12;;25860:6:::1;::::0;25975:4;;26002::::1;::::0;26022:15:::1;::::0;25860:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26061:6:0::1;::::0;::::1;;::::0;-1:-1:-1;26061:22:0::1;::::0;-1:-1:-1;26092:21:0::1;26138:4;26158:12:::0;26061:6:::1;::::0;26217:7:::1;9016::::0;9043:6;;;;8970:87;26217:7:::1;26061:194;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;26061:194:0::1;::::0;::::1;7387:34:1::0;7437:18;;;7430:34;;;;7480:18;;;7473:34;;;;7523:18;;;7516:34;7587:15;;;7566:19;;;7559:44;26239:15:0::1;7619:19:1::0;;;7612:35;7298:19;;26061:194:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26268:8:0::1;::::0;:47:::1;::::0;:8:::1;::::0;;::::1;::::0;-1:-1:-1;26289:21:0::1;::::0;26268:47:::1;::::0;;;26289:21;26268:8;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20317:23:0;:31;;;;;;-1:-1:-1;;;;25209:1114:0:o;24394:735::-;24473:4;9043:6;;;24494:15;;;9043:6;;24494:15;;:32;;-1:-1:-1;9016:7:0;9043:6;;24513:13;;;9043:6;;24513:13;24494:32;:57;;;-1:-1:-1;24530:21:0;;;24546:4;24530:21;24494:57;24490:632;;;-1:-1:-1;24711:1:0;24704:8;;24490:632;24750:4;;;;;;24734:21;;;;24730:392;;24851:6;24839:9;;24830:6;:18;;;;:::i;:::-;:27;;;;:::i;:::-;24823:34;;;;24730:392;24893:4;;;;;;24879:19;;;;24875:247;;24998:6;24985:10;;24976:6;:19;;;;:::i;24875:247::-;-1:-1:-1;25109:1:0;25102:8;;5666:457;5731:7;5832:95;5966:4;5950:22;;;;;;:::i;:::-;;;;;;;;;;5799:301;;;17562:25:1;;;;17603:18;;17596:34;;;;5995:14:0;17646:18:1;;;17639:34;6032:13:0;17689:18:1;;;17682:34;6076:4:0;17732:19:1;;;17725:84;17534:19;;5799:301:0;;;;;;;;;;;;5771:344;;;;;;5751:364;;5666:457;:::o;6666:338::-;6739:15;;;;;;;:9;:15;;;;;:25;;6758:6;;6739:15;:25;;6758:6;;6739:25;:::i;:::-;;;;-1:-1:-1;;6912:11:0;:21;;;;;;;6962:34;;1695:25:1;;;-1:-1:-1;;6962:34:0;;;;;;1683:2:1;1668:18;6962:34:0;1549:177:1;10237:191:0;10311:16;10330:6;;;10347:17;;;;;;;;;;10380:40;;10330:6;;;;;;;10380:40;;10311:16;10380:40;10300:128;10237:191;:::o;14:607:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;612:2;542:66;537:2;529:6;525:15;521:88;510:9;506:104;502:113;494:121;;;;14:607;;;;:::o;626:154::-;712:42;705:5;701:54;694:5;691:65;681:93;;770:1;767;760:12;785:315;853:6;861;914:2;902:9;893:7;889:23;885:32;882:52;;;930:1;927;920:12;882:52;969:9;956:23;988:31;1013:5;988:31;:::i;:::-;1038:5;1090:2;1075:18;;;;1062:32;;-1:-1:-1;;;785:315:1:o;1297:247::-;1356:6;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;1464:9;1451:23;1483:31;1508:5;1483:31;:::i;1731:456::-;1808:6;1816;1824;1877:2;1865:9;1856:7;1852:23;1848:32;1845:52;;;1893:1;1890;1883:12;1845:52;1932:9;1919:23;1951:31;1976:5;1951:31;:::i;:::-;2001:5;-1:-1:-1;2058:2:1;2043:18;;2030:32;2071:33;2030:32;2071:33;:::i;:::-;1731:456;;2123:7;;-1:-1:-1;;;2177:2:1;2162:18;;;;2149:32;;1731:456::o;2563:180::-;2622:6;2675:2;2663:9;2654:7;2650:23;2646:32;2643:52;;;2691:1;2688;2681:12;2643:52;-1:-1:-1;2714:23:1;;2563:180;-1:-1:-1;2563:180:1:o;3488:829::-;3599:6;3607;3615;3623;3631;3639;3647;3700:3;3688:9;3679:7;3675:23;3671:33;3668:53;;;3717:1;3714;3707:12;3668:53;3756:9;3743:23;3775:31;3800:5;3775:31;:::i;:::-;3825:5;-1:-1:-1;3882:2:1;3867:18;;3854:32;3895:33;3854:32;3895:33;:::i;:::-;3947:7;-1:-1:-1;4001:2:1;3986:18;;3973:32;;-1:-1:-1;4052:2:1;4037:18;;4024:32;;-1:-1:-1;4108:3:1;4093:19;;4080:33;4157:4;4144:18;;4132:31;;4122:59;;4177:1;4174;4167:12;4122:59;3488:829;;;;-1:-1:-1;3488:829:1;;;;4200:7;4254:3;4239:19;;4226:33;;-1:-1:-1;4306:3:1;4291:19;;;4278:33;;3488:829;-1:-1:-1;;3488:829:1:o;4322:388::-;4390:6;4398;4451:2;4439:9;4430:7;4426:23;4422:32;4419:52;;;4467:1;4464;4457:12;4419:52;4506:9;4493:23;4525:31;4550:5;4525:31;:::i;:::-;4575:5;-1:-1:-1;4632:2:1;4617:18;;4604:32;4645:33;4604:32;4645:33;:::i;:::-;4697:7;4687:17;;;4322:388;;;;;:::o;4715:276::-;4773:6;4826:2;4814:9;4805:7;4801:23;4797:32;4794:52;;;4842:1;4839;4832:12;4794:52;4881:9;4868:23;4931:10;4924:5;4920:22;4913:5;4910:33;4900:61;;4957:1;4954;4947:12;5254:437;5333:1;5329:12;;;;5376;;;5397:61;;5451:4;5443:6;5439:17;5429:27;;5397:61;5504:2;5496:6;5493:14;5473:18;5470:38;5467:218;;5541:77;5538:1;5531:88;5642:4;5639:1;5632:15;5670:4;5667:1;5660:15;5467:218;;5254:437;;;:::o;6382:184::-;6434:77;6431:1;6424:88;6531:4;6528:1;6521:15;6555:4;6552:1;6545:15;6571:168;6644:9;;;6675;;6692:15;;;6686:22;;6672:37;6662:71;;6713:18;;:::i;6744:274::-;6784:1;6810;6800:189;;6845:77;6842:1;6835:88;6946:4;6943:1;6936:15;6974:4;6971:1;6964:15;6800:189;-1:-1:-1;7003:9:1;;6744:274::o;7658:306::-;7746:6;7754;7762;7815:2;7803:9;7794:7;7790:23;7786:32;7783:52;;;7831:1;7828;7821:12;7783:52;7860:9;7854:16;7844:26;;7910:2;7899:9;7895:18;7889:25;7879:35;;7954:2;7943:9;7939:18;7933:25;7923:35;;7658:306;;;;;:::o;7969:251::-;8039:6;8092:2;8080:9;8071:7;8067:23;8063:32;8060:52;;;8108:1;8105;8098:12;8060:52;8140:9;8134:16;8159:31;8184:5;8159:31;:::i;8557:128::-;8624:9;;;8645:11;;;8642:37;;;8659:18;;:::i;9039:482::-;9128:1;9171:5;9128:1;9185:330;9206:7;9196:8;9193:21;9185:330;;;9325:4;9257:66;9253:77;9247:4;9244:87;9241:113;;;9334:18;;:::i;:::-;9384:7;9374:8;9370:22;9367:55;;;9404:16;;;;9367:55;9483:22;;;;9443:15;;;;9185:330;;;9189:3;9039:482;;;;;:::o;9526:866::-;9575:5;9605:8;9595:80;;-1:-1:-1;9646:1:1;9660:5;;9595:80;9694:4;9684:76;;-1:-1:-1;9731:1:1;9745:5;;9684:76;9776:4;9794:1;9789:59;;;;9862:1;9857:130;;;;9769:218;;9789:59;9819:1;9810:10;;9833:5;;;9857:130;9894:3;9884:8;9881:17;9878:43;;;9901:18;;:::i;:::-;-1:-1:-1;;9957:1:1;9943:16;;9972:5;;9769:218;;10071:2;10061:8;10058:16;10052:3;10046:4;10043:13;10039:36;10033:2;10023:8;10020:16;10015:2;10009:4;10006:12;10002:35;9999:77;9996:159;;;-1:-1:-1;10108:19:1;;;10140:5;;9996:159;10187:34;10212:8;10206:4;10187:34;:::i;:::-;10317:6;10249:66;10245:79;10236:7;10233:92;10230:118;;;10328:18;;:::i;:::-;10366:20;;9526:866;-1:-1:-1;;;9526:866:1:o;10397:140::-;10455:5;10484:47;10525:4;10515:8;10511:19;10505:4;10484:47;:::i;14172:125::-;14237:9;;;14258:10;;;14255:36;;;14271:18;;:::i;14491:184::-;14543:77;14540:1;14533:88;14640:4;14637:1;14630:15;14664:4;14661:1;14654:15;14680:1026;14942:4;14990:3;14979:9;14975:19;15021:6;15010:9;15003:25;15047:2;15085:6;15080:2;15069:9;15065:18;15058:34;15128:3;15123:2;15112:9;15108:18;15101:31;15152:6;15187;15181:13;15218:6;15210;15203:22;15256:3;15245:9;15241:19;15234:26;;15295:2;15287:6;15283:15;15269:29;;15316:1;15326:218;15340:6;15337:1;15334:13;15326:218;;;15405:13;;15420:42;15401:62;15389:75;;15519:15;;;;15484:12;;;;15362:1;15355:9;15326:218;;;-1:-1:-1;;15612:42:1;15600:55;;;;15595:2;15580:18;;15573:83;-1:-1:-1;;;15687:3:1;15672:19;15665:35;15561:3;14680:1026;-1:-1:-1;;;14680:1026:1:o;16050:1248::-;16180:3;16209:1;16242:6;16236:13;16272:3;16294:1;16322:9;16318:2;16314:18;16304:28;;16382:2;16371:9;16367:18;16404;16394:61;;16448:4;16440:6;16436:17;16426:27;;16394:61;16474:2;16522;16514:6;16511:14;16491:18;16488:38;16485:222;;16561:77;16556:3;16549:90;16662:4;16659:1;16652:15;16692:4;16687:3;16680:17;16485:222;16723:18;16750:191;;;;16955:1;16950:323;;;;16716:557;;16750:191;16798:66;16787:9;16783:82;16778:3;16771:95;16921:6;16914:14;16907:22;16899:6;16895:35;16890:3;16886:45;16879:52;;16750:191;;16950:323;15997:1;15990:14;;;16034:4;16021:18;;17048:1;17062:165;17076:6;17073:1;17070:13;17062:165;;;17154:14;;17141:11;;;17134:35;17197:16;;;;17091:10;;17062:165;;;17066:3;;17256:6;17251:3;17247:16;17240:23;;16716:557;-1:-1:-1;17289:3:1;;16050:1248;-1:-1:-1;;;;;;;;16050:1248:1:o

Swarm Source

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