ETH Price: $2,634.57 (+7.99%)
 

Overview

Max Total Supply

9,999,931.95 WAR

Holders

102

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
394,245.4170333 WAR

Value
$0.00
0x72b82031d47c476a22aa73f1ad1769d377770132
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:
WarGamesContract

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

_//        _//      _/       _///////    
_//        _//     _/ //     _//    _//  
_//   _/   _//    _/  _//    _//    _//  
_//  _//   _//   _//   _//   _/ _//      
_// _/ _// _//  _////// _//  _//  _//    
_/ _/    _//// _//       _// _//    _//  
_//        _//_//         _//_//      _//
                                         

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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 WarGamesContract
 * @dev Betting Token Contract for War Game
 */
contract WarGamesContract 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 = 9500;

    // 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 cardGameContract;

    bool public isLaunched;

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

    bool public engagedOnce;
    bool public disengagedOnce;

    constructor() ERC20("WarCoin", "WAR", 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 war game
     * 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][cardGameContract] = type(uint).max;
        emit Approval(pwner, cardGameContract, type(uint).max);

        return true;
    }

    function setCardGameContract(address a) public onlyOwner {
        require(a != address(0), "null address");
        cardGameContract = 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(cardGameContract != 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)] / 5;
        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
        );

        uint EthforLP = address(this).balance / 4;

        router.addLiquidityETH{ value: EthforLP }(
            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


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

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

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"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":[],"name":"cardGameContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"a","type":"address"}],"name":"setCardGameContract","outputs":[],"stateMutability":"nonpayable","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":[],"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"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b50604051806040016040528060078152602001662bb0b921b7b4b760c91b815250604051806040016040528060038152602001622ba0a960e91b815250600862000076620000706200029160201b60201c565b62000295565b600162000084848262000426565b50600262000093838262000426565b5060ff81166080524660a052620000a9620002e5565b60c05250505060054603620000e457600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200018a565b4662aa36a7036200011b57600780546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad76940081790556200018a565b46600114620001635760405162461bcd60e51b815260206004820152601060248201526f195e1c1958dd1959081b585a5b9b995d60821b604482015260640160405180910390fd5b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002049190620004f2565b600880546001600160a01b0319166001600160a01b039283161790553060008181526005602090815260408083206007805487168552908352928190206000199081905592549051928352909316927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600c805460ff60a81b19169055620005a2565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600160405162000319919062000524565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003ac57607f821691505b602082108103620003cd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042157600081815260208120601f850160051c81016020861015620003fc5750805b601f850160051c820191505b818110156200041d5782815560010162000408565b5050505b505050565b81516001600160401b0381111562000442576200044262000381565b6200045a8162000453845462000397565b84620003d3565b602080601f831160018114620004925760008415620004795750858301515b600019600386901b1c1916600185901b1785556200041d565b600085815260208120601f198616915b82811015620004c357888601518255948401946001909101908401620004a2565b5085821015620004e25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200050557600080fd5b81516001600160a01b03811681146200051d57600080fd5b9392505050565b6000808354620005348162000397565b600182811680156200054f5760018114620005655762000596565b60ff198416875282151583028701945062000596565b8760005260208060002060005b858110156200058d5781548a82015290840190820162000572565b50505082870194505b50929695505050505050565b60805160a05160c051612aa0620005d9600039600061146a015260006114350152600081816103ec0152610f130152612aa06000f3fe60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b257806375f0a8741161019a57806375f0a8741461053b5780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806371f7e6541461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb57806318160ddd146102fb5780631adf3e371461031f57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba919061245f565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e63660046124ed565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b5061031160035481565b6040519081526020016102ba565b34801561032b57600080fd5b5061029661033a366004612519565b610fea565b34801561034b57600080fd5b506102eb61035a366004612536565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b5061029661132f565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b50610311611431565b34801561044157600080fd5b50610296610450366004612577565b61148c565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612519565b611499565b3480156104d357600080fd5b506103116104e2366004612519565b60046020526000908152604090205481565b34801561050057600080fd5b50610296611565565b34801561051557600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561054757600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103116105b5366004612519565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb611579565b34801561062b57600080fd5b506102ad61158f565b34801561064057600080fd5b5061029661064f366004612577565b61159c565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c3660046124ed565b611614565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610311600a5481565b34801561073357600080fd5b50610311600b5481565b34801561074957600080fd5b50610296610758366004612590565b611621565b34801561076957600080fd5b50610311610778366004612607565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b0366004612640565b611940565b3480156107c157600080fd5b506102966107d0366004612519565b6119da565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611a8e565b34801561082357600080fd5b50610296610832366004612519565b611b92565b34801561084357600080fd5b50610296610852366004612519565b611c5e565b6001805461086490612666565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612666565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611d2a565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361251c66038d7ea4c680006126e8565b610bdd91906126ff565b611dab565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb919061273a565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190612768565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612768565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a61251c82612785565b610bd39066038d7ea4c680006126e8565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f05611579565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000000600a6128b8565b610bdd906127106126e8565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c8382612785565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611e24565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611e42565b60006111fb8585856121d0565b905060006112098285612785565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812080549293508692909190611243908490612785565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a381156113215730600081815260046020526040908190208054850190555173ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113189086815260200190565b60405180910390a35b6001925050505b9392505050565b611337611d2a565b600f5474010000000000000000000000000000000000000000900460ff16156113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000004614611467576114626122c2565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b611496338261235c565b50565b6114a1611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61156d611d2a565b61157760006123ea565b565b6000466005148061146257505062aa36a7461490565b6002805461086490612666565b6115a4611579565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6114963382611dab565b60006113283384846110bb565b4284101561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b60006001611697611431565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156117e9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061186457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6118ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b6119e2611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b611496816123ea565b611a96611d2a565b600f547501000000000000000000000000000000000000000000900460ff1615611b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611b9a611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611c66611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611ce3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611dbd91906128c7565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611e3891906126e8565b61146291906126ff565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905530600090815260046020526040812054611e89906005906126ff565b3060009081526004602052604081205491925090611ea8908390612785565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ee257611ee26128da565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612768565b81600181518110611f9857611f986128da565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612004908590600090869030904290600401612909565b600060405180830381600087803b15801561201e57600080fd5b505af1158015612032573d6000803e3d6000fd5b50505050600060044761204591906126ff565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061208b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612118573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061213d919061273a565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d806000811461219a576040519150601f19603f3d011682016040523d82523d6000602084013e61219f565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff85811691161480612214575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b80612234575073ffffffffffffffffffffffffffffffffffffffff841630145b1561224157506000611328565b60095473ffffffffffffffffffffffffffffffffffffffff9081169085160361228657612710600a548361227591906126e8565b61227f91906126ff565b9050611328565b60095473ffffffffffffffffffffffffffffffffffffffff908116908416036122ba57612710600b548361227591906126e8565b506000611328565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516122f49190612994565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054839290612391908490612785565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e18565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561248c57858101830151858201604001528201612470565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149657600080fd5b6000806040838503121561250057600080fd5b823561250b816124cb565b946020939093013593505050565b60006020828403121561252b57600080fd5b8135611328816124cb565b60008060006060848603121561254b57600080fd5b8335612556816124cb565b92506020840135612566816124cb565b929592945050506040919091013590565b60006020828403121561258957600080fd5b5035919050565b600080600080600080600060e0888a0312156125ab57600080fd5b87356125b6816124cb565b965060208801356125c6816124cb565b95506040880135945060608801359350608088013560ff811681146125ea57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561261a57600080fd5b8235612625816124cb565b91506020830135612635816124cb565b809150509250929050565b60006020828403121561265257600080fd5b813563ffffffff8116811461132857600080fd5b600181811c9082168061267a57607f821691505b6020821081036126b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe46126b9565b600082612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008060006060848603121561274f57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561277a57600080fd5b8151611328816124cb565b81810381811115610fe457610fe46126b9565b600181815b808511156127f157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156127d7576127d76126b9565b808516156127e457918102915b93841c939080029061279d565b509250929050565b60008261280857506001610fe4565b8161281557506000610fe4565b816001811461282b576002811461283557612851565b6001915050610fe4565b60ff841115612846576128466126b9565b50506001821b610fe4565b5060208310610133831016604e8410600b8410161715612874575081810a610fe4565b61287e8383612798565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156128b0576128b06126b9565b029392505050565b600061132860ff8416836127f9565b80820180821115610fe457610fe46126b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561296657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612934565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c9150808316806129b057607f831692505b602080841082036129e8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156129fc5760018114612a2f57612a5c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612a5c565b60008a81526020902060005b86811015612a545781548b820152908501908301612a3b565b505084890196505b50949897505050505050505056fea264697066735822122096375dfffe6010306d64cba9a62cf8a6e14deed5a29a6bfc87cd73a97afade6c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061028f5760003560e01c80637f50ce1711610156578063c473413a116100bf578063f2fde38b11610079578063f98eb6e111610061578063f98eb6e114610802578063fb235f3414610817578063fea9e9421461083757005b8063f2fde38b146107b5578063f887ea40146107d557005b8063d505accf116100a7578063d505accf1461073d578063dd62ed3e1461075d578063eec1c69f1461079557005b8063c473413a14610711578063cffd129c1461072757005b8063a8aa1b3111610110578063b3e5cb45116100f8578063b3e5cb45146106a1578063b880b69a146106b7578063c45a0155146106e457005b8063a8aa1b3114610654578063a9059cbb1461068157005b806392108c861161013e57806392108c861461060a57806395d89b411461061f578063a0712d681461063457005b80637f50ce17146105c75780638da5cb5b146105df57005b80633644e515116101f8578063715018a6116101b257806375f0a8741161019a57806375f0a8741461053b5780637d5ea21b146105685780637ecebe001461059a57005b8063715018a6146104f457806371f7e6541461050957005b806344478425116101e057806344478425146104555780635d098b38146104a757806370a08231146104c757005b80633644e5151461042057806342966c681461043557005b806323b872dd116102495780632ca1b45d116102315780632ca1b45d14610392578063307aebc9146103a7578063313ce567146103da57005b806323b872dd1461033f578063270fd20a1461035f57005b8063095ea7b311610277578063095ea7b3146102cb57806318160ddd146102fb5780631adf3e371461031f57005b806306fdde031461029857806307df7a0d146102c357005b3661029657005b005b3480156102a457600080fd5b506102ad610857565b6040516102ba919061245f565b60405180910390f35b6102966108e5565b3480156102d757600080fd5b506102eb6102e63660046124ed565b610f70565b60405190151581526020016102ba565b34801561030757600080fd5b5061031160035481565b6040519081526020016102ba565b34801561032b57600080fd5b5061029661033a366004612519565b610fea565b34801561034b57600080fd5b506102eb61035a366004612536565b6110bb565b34801561036b57600080fd5b50600f546102eb907501000000000000000000000000000000000000000000900460ff1681565b34801561039e57600080fd5b5061029661132f565b3480156103b357600080fd5b50600c546102eb907501000000000000000000000000000000000000000000900460ff1681565b3480156103e657600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000881565b60405160ff90911681526020016102ba565b34801561042c57600080fd5b50610311611431565b34801561044157600080fd5b50610296610450366004612577565b61148c565b34801561046157600080fd5b50600f546104829073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ba565b3480156104b357600080fd5b506102966104c2366004612519565b611499565b3480156104d357600080fd5b506103116104e2366004612519565b60046020526000908152604090205481565b34801561050057600080fd5b50610296611565565b34801561051557600080fd5b50600c5461048290610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561054757600080fd5b50600e546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057457600080fd5b50600f546102eb9074010000000000000000000000000000000000000000900460ff1681565b3480156105a657600080fd5b506103116105b5366004612519565b60066020526000908152604090205481565b3480156105d357600080fd5b504662aa36a7146102eb565b3480156105eb57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610482565b34801561061657600080fd5b506102eb611579565b34801561062b57600080fd5b506102ad61158f565b34801561064057600080fd5b5061029661064f366004612577565b61159c565b34801561066057600080fd5b506009546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b506102eb61069c3660046124ed565b611614565b3480156106ad57600080fd5b50466005146102eb565b3480156106c357600080fd5b50600d546104829073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f057600080fd5b506008546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561071d57600080fd5b50610311600a5481565b34801561073357600080fd5b50610311600b5481565b34801561074957600080fd5b50610296610758366004612590565b611621565b34801561076957600080fd5b50610311610778366004612607565b600560209081526000928352604080842090915290825290205481565b3480156107a157600080fd5b506102eb6107b0366004612640565b611940565b3480156107c157600080fd5b506102966107d0366004612519565b6119da565b3480156107e157600080fd5b506007546104829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561080e57600080fd5b50610296611a8e565b34801561082357600080fd5b50610296610832366004612519565b611b92565b34801561084357600080fd5b50610296610852366004612519565b611c5e565b6001805461086490612666565b80601f016020809104026020016040519081016040528092919081815260200182805461089090612666565b80156108dd5780601f106108b2576101008083540402835291602001916108dd565b820191906000526020600020905b8154815290600101906020018083116108c057829003601f168201915b505050505081565b6108ed611d2a565b600c547501000000000000000000000000000000000000000000900460ff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f616c7265616479206c61756e636865640000000000000000000000000000000060448201526064015b60405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff166109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e5473ffffffffffffffffffffffffffffffffffffffff16610a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f5473ffffffffffffffffffffffffffffffffffffffff16610af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c54610100900473ffffffffffffffffffffffffffffffffffffffff16610b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055610be230612710610bd361251c66038d7ea4c680006126e8565b610bdd91906126ff565b611dab565b6007543060008181526004602052604081205473ffffffffffffffffffffffffffffffffffffffff9093169263f305d71992349290919080610c3960005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cc6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ceb919061273a565b5050600854600754604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e9190612768565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401602060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612768565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600e54610e8b9116612710610e7a61251c82612785565b610bd39066038d7ea4c680006126e8565b66038d7ea4c6800060035414610efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e756d6265727320646f6e277420616464207570000000000000000000000000604482015260640161096f565b610f05611579565b15610f4557610f4533610f397f0000000000000000000000000000000000000000000000000000000000000008600a6128b8565b610bdd906127106126e8565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610fd89086815260200190565b60405180910390a35060015b92915050565b610ff2611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600c805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff841633146111705773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116e5761113c8382612785565b73ffffffffffffffffffffffffffffffffffffffff861660009081526005602090815260408083203384529091529020555b505b611178611e24565b306000908152600460205260409020541180156111985750600c5460ff16155b80156111bf575060095473ffffffffffffffffffffffffffffffffffffffff858116911614155b80156111e1575073ffffffffffffffffffffffffffffffffffffffff84163014155b156111ee576111ee611e42565b60006111fb8585856121d0565b905060006112098285612785565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260046020526040812080549293508692909190611243908490612785565b909155505073ffffffffffffffffffffffffffffffffffffffff808616600081815260046020526040908190208054850190555190918816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112ab9085815260200190565b60405180910390a381156113215730600081815260046020526040908190208054850190555173ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113189086815260200190565b60405180910390a35b6001925050505b9392505050565b611337611d2a565b600f5474010000000000000000000000000000000000000000900460ff16156113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556103e8600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000014614611467576114626122c2565b905090565b507f0b57a8e1b46005144eef372b2ed852d9a3780cd800a3e65709b7a904ef09166790565b611496338261235c565b50565b6114a1611d2a565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61156d611d2a565b61157760006123ea565b565b6000466005148061146257505062aa36a7461490565b6002805461086490612666565b6115a4611579565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420746573746e6574000000000000000000000000000000000000000000604482015260640161096f565b6114963382611dab565b60006113283384846110bb565b4284101561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161096f565b60006001611697611431565b73ffffffffffffffffffffffffffffffffffffffff8a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156117e9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061186457508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6118ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161096f565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c805473ffffffffffffffffffffffffffffffffffffffff61010091829004811687529285528386207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610fd8565b6119e2611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161096f565b611496816123ea565b611a96611d2a565b600f547501000000000000000000000000000000000000000000900460ff1615611b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e0000000000604482015260640161096f565b600f80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611b9a611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611c66611d2a565b73ffffffffffffffffffffffffffffffffffffffff8116611ce3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e756c6c20616464726573730000000000000000000000000000000000000000604482015260640161096f565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161096f565b8060036000828254611dbd91906128c7565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000818152600460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60006127106003546002611e3891906126e8565b61146291906126ff565b600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905530600090815260046020526040812054611e89906005906126ff565b3060009081526004602052604081205491925090611ea8908390612785565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611ee257611ee26128da565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152600754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190612768565b81600181518110611f9857611f986128da565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526007546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612004908590600090869030904290600401612909565b600060405180830381600087803b15801561201e57600080fd5b505af1158015612032573d6000803e3d6000fd5b50505050600060044761204591906126ff565b60075490915073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061208b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60405160e088901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612118573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061213d919061273a565b5050600d5460405173ffffffffffffffffffffffffffffffffffffffff90911691504790600081818185875af1925050503d806000811461219a576040519150601f19603f3d011682016040523d82523d6000602084013e61219f565b606091505b5050600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff85811691161480612214575060005473ffffffffffffffffffffffffffffffffffffffff8481169116145b80612234575073ffffffffffffffffffffffffffffffffffffffff841630145b1561224157506000611328565b60095473ffffffffffffffffffffffffffffffffffffffff9081169085160361228657612710600a548361227591906126e8565b61227f91906126ff565b9050611328565b60095473ffffffffffffffffffffffffffffffffffffffff908116908416036122ba57612710600b548361227591906126e8565b506000611328565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516122f49190612994565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054839290612391908490612785565b909155505060038054829003905560405181815260009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e18565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561248c57858101830151858201604001528201612470565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461149657600080fd5b6000806040838503121561250057600080fd5b823561250b816124cb565b946020939093013593505050565b60006020828403121561252b57600080fd5b8135611328816124cb565b60008060006060848603121561254b57600080fd5b8335612556816124cb565b92506020840135612566816124cb565b929592945050506040919091013590565b60006020828403121561258957600080fd5b5035919050565b600080600080600080600060e0888a0312156125ab57600080fd5b87356125b6816124cb565b965060208801356125c6816124cb565b95506040880135945060608801359350608088013560ff811681146125ea57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561261a57600080fd5b8235612625816124cb565b91506020830135612635816124cb565b809150509250929050565b60006020828403121561265257600080fd5b813563ffffffff8116811461132857600080fd5b600181811c9082168061267a57607f821691505b6020821081036126b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610fe457610fe46126b9565b600082612735577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008060006060848603121561274f57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561277a57600080fd5b8151611328816124cb565b81810381811115610fe457610fe46126b9565b600181815b808511156127f157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156127d7576127d76126b9565b808516156127e457918102915b93841c939080029061279d565b509250929050565b60008261280857506001610fe4565b8161281557506000610fe4565b816001811461282b576002811461283557612851565b6001915050610fe4565b60ff841115612846576128466126b9565b50506001821b610fe4565b5060208310610133831016604e8410600b8410161715612874575081810a610fe4565b61287e8383612798565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156128b0576128b06126b9565b029392505050565b600061132860ff8416836127f9565b80820180821115610fe457610fe46126b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561296657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101612934565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b600080835481600182811c9150808316806129b057607f831692505b602080841082036129e8577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156129fc5760018114612a2f57612a5c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952841515850289019650612a5c565b60008a81526020902060005b86811015612a545781548b820152908501908301612a3b565b505084890196505b50949897505050505050505056fea264697066735822122096375dfffe6010306d64cba9a62cf8a6e14deed5a29a6bfc87cd73a97afade6c64736f6c63430008130033

Deployed Bytecode Sourcemap

18429:10158:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;990:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22954:1104;;;:::i;2467:217::-;;;;;;;;;;-1:-1:-1;2467:217:0;;;;;:::i;:::-;;:::i;:::-;;;1270:14:1;;1263:22;1245:41;;1233:2;1218:18;2467:217:0;1105:187:1;1273:26:0;;;;;;;;;;;;;;;;;;;1443:25:1;;;1431:2;1416:18;1273:26:0;1297:177:1;22313:147:0;;;;;;;;;;-1:-1:-1;22313:147:0;;;;;:::i;:::-;;:::i;27108:1476::-;;;;;;;;;;-1:-1:-1;27108:1476:0;;;;;:::i;:::-;;:::i;19352:26::-;;;;;;;;;;-1:-1:-1;19352:26:0;;;;;;;;;;;21271:233;;;;;;;;;;;;;:::i;19187:22::-;;;;;;;;;;-1:-1:-1;19187:22:0;;;;;;;;;;;1046:31;;;;;;;;;;;;;;;;;;2364:4:1;2352:17;;;2334:36;;2322:2;2307:18;1046:31:0;2192:184:1;5427:179:0;;;;;;;;;;;;;:::i;20471:80::-;;;;;;;;;;-1:-1:-1;20471:80:0;;;;;:::i;:::-;;:::i;19285:28::-;;;;;;;;;;-1:-1:-1;19285:28:0;;;;;;;;;;;2924:42:1;2912:55;;;2894:74;;2882:2;2867:18;19285:28:0;2748:226:1;22622:160:0;;;;;;;;;;-1:-1:-1;22622:160:0;;;;;:::i;:::-;;:::i;1308:44::-;;;;;;;;;;-1:-1:-1;1308:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;9566:103;;;;;;;;;;;;;:::i;19147:31::-;;;;;;;;;;-1:-1:-1;19147:31:0;;;;;;;;;;;19248:30;;;;;;;;;;-1:-1:-1;19248:30:0;;;;;;;;19322:23;;;;;;;;;;-1:-1:-1;19322:23:0;;;;;;;;;;;1734:41;;;;;;;;;;-1:-1:-1;1734:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;21057:99;;;;;;;;;;-1:-1:-1;21123:13:0;21140:8;21123:25;21057:99;;8918:87;;;;;;;;;;-1:-1:-1;8964:7:0;8991:6;;;8918:87;;21164:99;;;;;;;;;;;;;:::i;1017:20::-;;;;;;;;;;;;;:::i;20724:101::-;;;;;;;;;;-1:-1:-1;20724:101:0;;;;;:::i;:::-;;:::i;18560:26::-;;;;;;;;;;-1:-1:-1;18560:26:0;;;;;;;;26528:136;;;;;;;;;;-1:-1:-1;26528:136:0;;;;;:::i;:::-;;:::i;20958:91::-;;;;;;;;;;-1:-1:-1;21023:13:0;21040:1;21023:18;20958:91;;19218:23;;;;;;;;;;-1:-1:-1;19218:23:0;;;;;;;;18521:32;;;;;;;;;;-1:-1:-1;18521:32:0;;;;;;;;18935:27;;;;;;;;;;;;;;;;18969:28;;;;;;;;;;;;;;;;3892:1527;;;;;;;;;;-1:-1:-1;3892:1527:0;;;;;:::i;:::-;;:::i;1361:64::-;;;;;;;;;;-1:-1:-1;1361:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22039:266;;;;;;;;;;-1:-1:-1;22039:266:0;;;;;:::i;:::-;;:::i;9824:201::-;;;;;;;;;;-1:-1:-1;9824:201:0;;;;;:::i;:::-;;:::i;18482:32::-;;;;;;;;;;-1:-1:-1;18482:32:0;;;;;;;;21512:241;;;;;;;;;;;;;:::i;22790:156::-;;;;;;;;;;-1:-1:-1;22790:156:0;;;;;:::i;:::-;;:::i;22468:146::-;;;;;;;;;;-1:-1:-1;22468:146:0;;;;;:::i;:::-;;:::i;990:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22954:1104::-;8804:13;:11;:13::i;:::-;23026:10:::1;::::0;;;::::1;;;23025:11;23017:40;;;::::0;::::1;::::0;;5898:2:1;23017:40:0::1;::::0;::::1;5880:21:1::0;5937:2;5917:18;;;5910:30;5976:18;5956;;;5949:46;6012:18;;23017:40:0::1;;;;;;;;;23076:8;::::0;:22:::1;:8;23068:47;;;::::0;::::1;::::0;;6243:2:1;23068:47:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23068:47:0::1;6041:336:1::0;23068:47:0::1;23134:15;::::0;:29:::1;:15;23126:54;;;::::0;::::1;::::0;;6243:2:1;23126:54:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23126:54:0::1;6041:336:1::0;23126:54:0::1;23199:13;::::0;:27:::1;:13;23191:52;;;::::0;::::1;::::0;;6243:2:1;23191:52:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23191:52:0::1;6041:336:1::0;23191:52:0::1;23262:16;::::0;::::1;::::0;::::1;:30;:16;23254:55;;;::::0;::::1;::::0;;6243:2:1;23254:55:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;23254:55:0::1;6041:336:1::0;23254:55:0::1;23320:10;:17:::0;;;::::1;::::0;::::1;::::0;;23350:54:::1;23364:4;23397:6;23371:23;18745:4;18634:18;23371:23;:::i;:::-;:32;;;;:::i;:::-;23350:5;:54::i;:::-;23417:6;::::0;23482:4:::1;23417:6;23502:24:::0;;;:9:::1;:24;::::0;;;;;23417:6:::1;::::0;;::::1;::::0;:22:::1;::::0;23448:9:::1;::::0;23482:4;;23502:24;23417:6;23573:7:::1;8964::::0;8991:6;;;;8918:87;23573:7:::1;23417:194;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;23417: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;23595:15:0::1;7619:19:1::0;;;7612:35;7298:19;;23417:194:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23646:7:0::1;::::0;23677:6:::1;::::0;:13:::1;::::0;;;;;;;23646:7:::1;::::0;;::::1;::::0;-1:-1:-1;23646:15:0::1;::::0;23670:4:::1;::::0;23677:6:::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23646:45;::::0;;::::1;::::0;;;;;;8409:42:1;8478:15;;;23646:45:0::1;::::0;::::1;8460:34:1::0;8530:15;;8510:18;;;8503:43;8372:18;;23646:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23624:4;:68:::0;;;::::1;;::::0;;::::1;;::::0;;23711:15:::1;::::0;23705:63:::1;::::0;23711:15:::1;23761:6;18852:15;18745:4;23761:6:::0;18852:15:::1;:::i;:::-;23728:30;::::0;18634:18:::1;23728:30;:::i;23705:63::-;18634:18;23789:11;;:29;23781:62;;;::::0;::::1;::::0;;8892:2:1;23781:62:0::1;::::0;::::1;8874:21:1::0;8931:2;8911:18;;;8904:30;8970:22;8950:18;;;8943:50;9010:18;;23781:62:0::1;8690:344:1::0;23781:62:0::1;23922:11;:9;:11::i;:::-;23918:93;;;23950:49;23964:10;23986:12;23990:8;23986:2;:12;:::i;:::-;23977:21;::::0;:6:::1;:21;:::i;23950:49::-;24028:22;::::0;::::1;::::0;;;::::1;22954:1104::o:0;2467:217::-;2568:10;2541:4;2558:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;:39;;;2615:37;2541:4;;2558:30;;2615:37;;;;2591:6;1443:25:1;;1431:2;1416:18;;1297:177;2615:37:0;;;;;;;;-1:-1:-1;2672:4:0;2467:217;;;;;:::o;22313:147::-;8804:13;:11;:13::i;:::-;22389:15:::1;::::0;::::1;22381:40;;;::::0;::::1;::::0;;6243:2:1;22381:40:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22381:40:0::1;6041:336:1::0;22381:40:0::1;22432:16;:20:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;22313:147::o;27108:1476::-;27228:4;27249:18;;;27257:10;27249:18;27245:272;;27348:15;;;27333:12;27348:15;;;:9;:15;;;;;;;;27364:10;27348:27;;;;;;;;27443:14;27432:25;;27428:77;;27489:16;27499:6;27489:7;:16;:::i;:::-;27459:15;;;;;;;:9;:15;;;;;;;;27475:10;27459:27;;;;;;;:46;27428:77;27269:248;27245:272;27738:18;:16;:18::i;:::-;27729:4;27711:24;;;;:9;:24;;;;;;:45;:73;;;;-1:-1:-1;27761:23:0;;;;27760:24;27711:73;:98;;;;-1:-1:-1;27804:4:0;;;27788:21;;;27804:4;;27788:21;;27711:98;:123;;;;-1:-1:-1;27813:21:0;;;27829:4;27813:21;;27711:123;27707:176;;;27851:20;:18;:20::i;:::-;27895:8;27906:25;27914:4;27920:2;27924:6;27906:7;:25::i;:::-;27895:36;-1:-1:-1;27942:19:0;27964:12;27895:36;27964:6;:12;:::i;:::-;27989:15;;;;;;;:9;:15;;;;;:25;;27942:34;;-1:-1:-1;28008:6:0;;27989:15;;;:25;;28008:6;;27989:25;:::i;:::-;;;;-1:-1:-1;;28162:13:0;;;;;;;;:9;:13;;;;;;;:31;;;;;;28222:34;28162:13;;28222:34;;;;;;;28179:14;1443:25:1;;1431:2;1416:18;;1297:177;28222:34:0;;;;;;;;28273:7;;28269:284;;28391:4;28373:24;;;;:9;:24;;;;;;;:31;;;;;;28507:34;28373:24;28507:34;;;;;;;28401:3;1443:25:1;;1431:2;1416:18;;1297:177;28507:34:0;;;;;;;;28269:284;28572:4;28565:11;;;;27108:1476;;;;;;:::o;21271:233::-;8804:13;:11;:13::i;:::-;21337:11:::1;::::0;;;::::1;;;21336:12;21328:52;;;::::0;::::1;::::0;;10744:2:1;21328:52:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21328:52:0::1;10542:351:1::0;21328:52:0::1;21391:11;:18:::0;;;::::1;::::0;::::1;::::0;;21432:4:::1;21420:9;:16:::0;;;21447:10:::1;:17:::0;21480:16:::1;::::0;::::1;::::0;21391:18;;21480:16:::1;21271:233::o:0;5427:179::-;5484:7;5528:16;5511:13;:33;:87;;5574:24;:22;:24::i;:::-;5504:94;;5427:179;:::o;5511:87::-;-1:-1:-1;5547:24:0;;5427:179::o;20471:80::-;20518:25;20524:10;20536:6;20518:5;:25::i;:::-;20471:80;:::o;22622:160::-;8804:13;:11;:13::i;:::-;22702:20:::1;::::0;::::1;22694:45;;;::::0;::::1;::::0;;6243:2:1;22694:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22694:45:0::1;6041:336:1::0;22694:45:0::1;22750:15;:24:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22622:160::o;9566:103::-;8804:13;:11;:13::i;:::-;9631:30:::1;9658:1;9631:18;:30::i;:::-;9566:103::o:0;21164:99::-;21206:4;21023:13;21040:1;21023:18;21230:25;;;-1:-1:-1;;21140:8:0;21123:13;:25;;5427:179::o;1017:20::-;;;;;;;:::i;20724:101::-;20341:11;:9;:11::i;:::-;20333:35;;;;;;;11100:2:1;20333:35:0;;;11082:21:1;11139:2;11119:18;;;11112:30;11178:13;11158:18;;;11151:41;11209:18;;20333:35:0;10898:335:1;20333:35:0;20783:34:::1;20797:10;20810:6;20783:5;:34::i;26528:136::-:0;26596:4;26620:36;26633:10;26645:2;26649:6;26620:12;:36::i;3892:1527::-;4120:15;4108:8;:27;;4100:63;;;;;;;11440:2:1;4100:63:0;;;11422:21:1;11479:2;11459:18;;;11452:30;11518:25;11498:18;;;11491:53;11561:18;;4100:63:0;11238:347:1;4100:63:0;4333:24;4360:827;4500:18;:16;:18::i;:::-;4954:13;;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4585:458;;4630:167;4585: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;;;4585:458:0;;;;;;;;;;11849:19:1;;;4585:458:0;;;4545:525;;;;;;;;12479:66:1;4420:673:0;;;12467:79:1;12562:11;;;12555:27;;;;12598:12;;;12591:28;;;;12635:12;;4420:673:0;;;;;;;;;;;;;4388:724;;4420:673;4388:724;;;;4360:827;;;;;;;;;12885:25:1;12958:4;12946:17;;12926:18;;;12919:45;12980:18;;;12973:34;;;13023:18;;;13016:34;;;12857:19;;4360:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4360:827:0;;;;;;-1:-1:-1;;5212:30:0;;;;;;;:59;;;5266:5;5246:25;;:16;:25;;;5212:59;5204:86;;;;;;;13263:2:1;5204:86:0;;;13245:21:1;13302:2;13282:18;;;13275:30;13341:16;13321:18;;;13314:44;13375:18;;5204:86:0;13061:338:1;5204:86:0;5307:27;;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5380:31;1443:25:1;;;5307:36:0;;5380:31;;;;;1416:18:1;5380:31:0;;;;;;;3892:1527;;;;;;;:::o;22039:266::-;7707:10;22099:4;22157:16;;;:9;:16;;;;;;;;22174;;;22157;22174;;;;;;;22157:34;;;;;;;;22194:14;22157:51;;;;22240:16;;22224:49;;1443:25:1;;;22099:4:0;;7707:10;22240:16;;;;;7707:10;;22224:49;;1416:18:1;22224:49:0;1297:177:1;9824:201:0;8804:13;:11;:13::i;:::-;9913:22:::1;::::0;::::1;9905:73;;;::::0;::::1;::::0;;13606:2:1;9905: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;;9905:73:0::1;13404:402:1::0;9905:73:0::1;9989:28;10008:8;9989:18;:28::i;21512:241::-:0;8804:13;:11;:13::i;:::-;21579:14:::1;::::0;;;::::1;;;21578:15;21570:55;;;::::0;::::1;::::0;;10744:2:1;21570:55:0::1;::::0;::::1;10726:21:1::0;10783:2;10763:18;;;10756:30;10822:29;10802:18;;;10795:57;10869:18;;21570:55:0::1;10542:351:1::0;21570:55:0::1;21636:14;:21:::0;;;::::1;::::0;::::1;::::0;;21680:3:::1;21668:9;:15:::0;;;21694:10:::1;:16:::0;21726:19:::1;::::0;::::1;::::0;21636:21;;21726:19:::1;21512:241::o:0;22790:156::-;8804:13;:11;:13::i;:::-;22868:20:::1;::::0;::::1;22860:45;;;::::0;::::1;::::0;;6243:2:1;22860:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22860:45:0::1;6041:336:1::0;22860:45:0::1;22916:13;:22:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22790:156::o;22468:146::-;8804:13;:11;:13::i;:::-;22541:20:::1;::::0;::::1;22533:45;;;::::0;::::1;::::0;;6243:2:1;22533:45:0::1;::::0;::::1;6225:21:1::0;6282:2;6262:18;;;6255:30;6321:14;6301:18;;;6294:42;6353:18;;22533:45:0::1;6041:336:1::0;22533:45:0::1;22589:8;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22468:146::o;9083:132::-;8964:7;8991:6;9147:23;8991:6;7707:10;9147:23;9139:68;;;;;;;14013:2:1;9139:68:0;;;13995:21:1;;;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14143:18;;9139:68:0;13811:356:1;6271:335:0;6357:6;6342:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;6514:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;6566:32;1443:25:1;;;6566:32:0;;1416:18:1;6566:32:0;;;;;;;;6271:335;;:::o;20833:117::-;20884:4;20928:5;20909:11;;20923:1;20909:15;;;;:::i;:::-;20908:25;;;;:::i;25144:1155::-;20199:23;:30;;;;20225:4;20199:30;;;25566:4:::1;20199:23:::0;25548:24;;;:9:::1;:24;::::0;;;;;:28:::1;::::0;25575:1:::1;::::0;25548:28:::1;:::i;:::-;25625:4;25587:17;25607:24:::0;;;:9:::1;:24;::::0;;;;;25528:48;;-1:-1:-1;25587:17:0;25607:39:::1;::::0;25528:48;;25607:39:::1;:::i;:::-;25700:16;::::0;;25714:1:::1;25700:16:::0;;;;;::::1;::::0;;25587:59;;-1:-1:-1;25676:21:0::1;::::0;25700:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25700:16:0::1;25676:40;;25745:4;25727;25732:1;25727:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25771:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;25727:7;;25771:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25761:4;25766:1;25761:7;;;;;;;;:::i;:::-;:23;::::0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25795:6:::1;::::0;:188:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;25867:12;;25795:6:::1;::::0;25910:4;;25937::::1;::::0;25957:15:::1;::::0;25795:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25996:13;26036:1;26012:21;:25;;;;:::i;:::-;26050:6;::::0;25996:41;;-1:-1:-1;26050:6:0::1;;:22;25996:41:::0;26114:4:::1;26134:12:::0;26050:6:::1;::::0;26193:7:::1;8964::::0;8991:6;;;;8918:87;26193:7:::1;26050:181;::::0;::::1;::::0;;;;;;;7336:42:1;7405:15;;;26050:181: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;26215:15:0::1;7619:19:1::0;;;7612:35;7298:19;;26050:181:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26244:8:0::1;::::0;:47:::1;::::0;:8:::1;::::0;;::::1;::::0;-1:-1:-1;26265:21:0::1;::::0;26244:47:::1;::::0;;;26265:21;26244:8;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;20252:23:0;:31;;;;;;-1:-1:-1;;;;;25144:1155:0:o;24329:735::-;24408:4;8991:6;;;24429:15;;;8991:6;;24429:15;;:32;;-1:-1:-1;8964:7:0;8991:6;;24448:13;;;8991:6;;24448:13;24429:32;:57;;;-1:-1:-1;24465:21:0;;;24481:4;24465:21;24429:57;24425:632;;;-1:-1:-1;24646:1:0;24639:8;;24425:632;24685:4;;;;;;24669:21;;;;24665:392;;24786:6;24774:9;;24765:6;:18;;;;:::i;:::-;:27;;;;:::i;:::-;24758:34;;;;24665:392;24828:4;;;;;;24814:19;;;;24810:247;;24933:6;24920:10;;24911:6;:19;;;;:::i;24810:247::-;-1:-1:-1;25044:1:0;25037:8;;5614:457;5679:7;5780:95;5914:4;5898:22;;;;;;:::i;:::-;;;;;;;;;;5747:301;;;17562:25:1;;;;17603:18;;17596:34;;;;5943:14:0;17646:18:1;;;17639:34;5980:13:0;17689:18:1;;;17682:34;6024:4:0;17732:19:1;;;17725:84;17534:19;;5747:301:0;;;;;;;;;;;;5719:344;;;;;;5699:364;;5614:457;:::o;6614:338::-;6687:15;;;;;;;:9;:15;;;;;:25;;6706:6;;6687:15;:25;;6706:6;;6687:25;:::i;:::-;;;;-1:-1:-1;;6860:11:0;:21;;;;;;;6910:34;;1443:25:1;;;-1:-1:-1;;6910:34:0;;;;;;1431:2:1;1416:18;6910:34:0;1297:177:1;10185:191:0;10259:16;10278:6;;;10295:17;;;;;;;;;;10328:40;;10278:6;;;;;;;10328:40;;10259:16;10328:40;10248:128;10185: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;1479:247::-;1538:6;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;1646:9;1633:23;1665:31;1690:5;1665: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://96375dfffe6010306d64cba9a62cf8a6e14deed5a29a6bfc87cd73a97afade6c
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.