ETH Price: $3,418.04 (+1.07%)
Gas: 4 Gwei

Token

Degens Shot (SHOT)
 

Overview

Max Total Supply

999,989 SHOT

Holders

106

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.00000001 SHOT

Value
$0.00
0x5a3de6b799f5543b78d3b6fe47d1a9b2c59c35b8
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:
DegensShot

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

/**
Step into the first ever evolving Web3 PVP game on Telegram! Challenge other players to Russian roulette and take their stakes!
Risk It All, Win Big - Degens Shot, Where Legends are Made.

Website: https://degenshot.wtf
Telegram: https://t.me/Degenshotportal
X: https://twitter.com/degenshot
Docs: https://whitepaper.degenshot.wtf
 */

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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

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

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

    string public name;

    string public symbol;

    uint8 public immutable decimals;

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

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

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

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

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

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

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

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

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

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

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

        return true;
    }

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

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

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

        return true;
    }

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

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

        balanceOf[from] -= amount;

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

        emit Transfer(from, to, amount);

        return true;
    }

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

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

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

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

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @title Degens Shot
 * @dev Betting token for Degens Shot
 */
contract DegensShot is Ownable, ERC20 {
    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

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

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

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

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

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

    address public rouletteContract;

    bool public isLaunched;

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

    bool public engagedOnce;
    bool public disengagedOnce;

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor() ERC20("Degens Shot", "SHOT", 8) {
        maxTransactionAmount = (INITIAL_SUPPLY * 10) / 1000;
        maxWallet = (INITIAL_SUPPLY * 10) / 1000;

        if (isGoerli()) {
            router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
        } else if (isSepolia()) {
            router = IUniswapV2Router02(
                0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008
            );
        } else if (isBscTestnet()) {
            router = IUniswapV2Router02(
                0xD99D1c33F9fC3444f8101754aBC46c52416550D1
            );
        } 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;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
    }

    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 isBscTestnet() public view returns (bool) {
        return block.chainid == 97;
    }

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

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

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

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

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

        return true;
    }

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

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

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

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

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

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

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

        pair = IUniswapV2Pair(uniswapV2Pair);

        excludeFromMaxTransaction(uniswapV2Pair, true);
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

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

        _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/16 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)] / 16;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;

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

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

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

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

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

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

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

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.

        if (
            automatedMarketMakerPairs[from] &&
            !_isExcludedMaxTransactionAmount[to]
        ) {
            require(
                amount <= maxTransactionAmount,
                "Buy transfer amount exceeds the maxTransactionAmount."
            );
            require(amount + balanceOf[to] <= maxWallet, "Max wallet exceeded");
        }
        //when sell
        else if (
            automatedMarketMakerPairs[to] &&
            !_isExcludedMaxTransactionAmount[from]
        ) {
            require(
                amount <= maxTransactionAmount,
                "Sell transfer amount exceeds the maxTransactionAmount."
            );
        } else if (!_isExcludedMaxTransactionAmount[to]) {
            require(amount + balanceOf[to] <= maxWallet, "Max wallet exceeded");
        }

        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/10 of tax for revenue
            uint revenue = tax / 10;
            tax -= revenue;

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

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

        return true;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        require(
            _pair != address(pair),
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(address _pair, bool value) private {
        automatedMarketMakerPairs[_pair] = value;

        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** decimals);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** decimals);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function removeLimits() external onlyOwner {
        maxTransactionAmount = INITIAL_SUPPLY;
        maxWallet = INITIAL_SUPPLY;
    }
}

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":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disengagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"engagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBscTestnet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rouletteContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":[{"internalType":"address","name":"a","type":"address"}],"name":"setRouletteContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stealthLaunch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b506040518060400160405280600b81526020016a111959d95b9cc814da1bdd60aa1b8152506040518060400160405280600481526020016314d213d560e21b81525060086200007b620000756200035360201b60201c565b62000357565b60016200008984826200057b565b5060026200009883826200057b565b5060ff81166080524660a052620000ae620003a7565b60c052506103e89150620000cc9050655af3107a4000600a62000647565b620000d8919062000673565b6010556103e8620000f1655af3107a4000600a62000647565b620000fd919062000673565b601155466005036200013557600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000211565b4662aa36a7036200016c57600780546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad769400817905562000211565b46606103620001a157600780546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000211565b46600114620001ea5760405162461bcd60e51b815260206004820152601060248201526f195e1c1958dd1959081b585a5b9b995d60821b60448201526064015b60405180910390fd5b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028b919062000696565b600880546001600160a01b0319166001600160a01b039283161790553060008181526005602090815260408083206007805487168552908352928190206000199081905592549051928352909316927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600c805460ff60a81b1916905562000331620003296000546001600160a01b031690565b600162000443565b6200033e30600162000443565b6200034d61dead600162000443565b62000746565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051620003db9190620006c8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6200044d62000478565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620004d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001e1565b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200050157607f821691505b6020821081036200052257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057657600081815260208120601f850160051c81016020861015620005515750805b601f850160051c820191505b8181101562000572578281556001016200055d565b5050505b505050565b81516001600160401b03811115620005975762000597620004d6565b620005af81620005a88454620004ec565b8462000528565b602080601f831160018114620005e75760008415620005ce5750858301515b600019600386901b1c1916600185901b17855562000572565b600085815260208120601f198616915b828110156200061857888601518255948401946001909101908401620005f7565b5085821015620006375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200066d57634e487b7160e01b600052601160045260246000fd5b92915050565b6000826200069157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006a957600080fd5b81516001600160a01b0381168114620006c157600080fd5b9392505050565b6000808354620006d881620004ec565b60018281168015620006f3576001811462000709576200073a565b60ff19841687528215158302870194506200073a565b8760005260208060002060005b85811015620007315781548a82015290840190820162000716565b50505082870194505b50929695505050505050565b60805160a05160c0516126da6200078b60003960006114710152600061143c01526000818161043801528181610d9c01528181610eca015261168501526126da6000f3fe6080604052600436106102af5760003560e01c80638da5cb5b11610166578063c473413a116100d3578063efa8ba321161008f578063f8b45b051161006c578063f8b45b0514610899578063f98eb6e1146108af578063fb235f34146108c4578063fea9e942146108e457005b8063efa8ba3214610843578063f2fde38b14610859578063f887ea401461087957005b8063c473413a14610789578063c8c8ebe41461079f578063cffd129c146107b5578063d505accf146107cb578063dd62ed3e146107eb578063eec1c69f1461082357005b8063a9059cbb11610122578063a9059cbb146106c3578063b3e5cb45146106e3578063b62496f5146106f9578063b880b69a14610729578063c18bc19514610749578063c45a01551461076957005b80638da5cb5b1461061b57806392108c861461063957806395d89b411461064e5780639a7a23d614610663578063a0712d6814610683578063a8aa1b31146106a357005b80633644e5151161021c578063751039fc116101d85780637ca882b5116101b55780637ca882b5146105905780637d5ea21b146105b55780637ecebe00146105d65780637f50ce171461060357005b8063751039fc1461053b5780637571336a1461055057806375f0a8741461057057005b80633644e5151461046c57806342966c681461048157806344478425146104a15780635d098b38146104d957806370a08231146104f9578063715018a61461052657005b8063203e727e1161026b578063203e727e1461038f57806323b872dd146103af578063270fd20a146103cf5780632ca1b45d146103f0578063307aebc914610405578063313ce5671461042657005b806306fdde03146102b857806307df7a0d146102e3578063095ea7b3146102eb5780630adab99f1461031b57806310d5de531461033b57806318160ddd1461036b57005b366102b657005b005b3480156102c457600080fd5b506102cd610904565b6040516102da9190612101565b60405180910390f35b6102b6610992565b3480156102f757600080fd5b5061030b610306366004612164565b610dfa565b60405190151581526020016102da565b34801561032757600080fd5b506102b6610336366004612190565b610e67565b34801561034757600080fd5b5061030b610356366004612190565b60126020526000908152604090205460ff1681565b34801561037757600080fd5b5061038160035481565b6040519081526020016102da565b34801561039b57600080fd5b506102b66103aa3660046121ad565b610ebd565b3480156103bb57600080fd5b5061030b6103ca3660046121c6565b610f00565b3480156103db57600080fd5b50600f5461030b90600160a81b900460ff1681565b3480156103fc57600080fd5b506102b661138d565b34801561041157600080fd5b50600c5461030b90600160a81b900460ff1681565b34801561043257600080fd5b5061045a7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102da565b34801561047857600080fd5b50610381611438565b34801561048d57600080fd5b506102b661049c3660046121ad565b611493565b3480156104ad57600080fd5b50600f546104c1906001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b3480156104e557600080fd5b506102b66104f4366004612190565b6114a0565b34801561050557600080fd5b50610381610514366004612190565b60046020526000908152604090205481565b34801561053257600080fd5b506102b66114f7565b34801561054757600080fd5b506102b661150b565b34801561055c57600080fd5b506102b661056b366004612207565b611524565b34801561057c57600080fd5b50600e546104c1906001600160a01b031681565b34801561059c57600080fd5b50600c546104c19061010090046001600160a01b031681565b3480156105c157600080fd5b50600f5461030b90600160a01b900460ff1681565b3480156105e257600080fd5b506103816105f1366004612190565b60066020526000908152604090205481565b34801561060f57600080fd5b504662aa36a71461030b565b34801561062757600080fd5b506000546001600160a01b03166104c1565b34801561064557600080fd5b5061030b611557565b34801561065a57600080fd5b506102cd611578565b34801561066f57600080fd5b506102b661067e366004612207565b611585565b34801561068f57600080fd5b506102b661069e3660046121ad565b61161f565b3480156106af57600080fd5b506009546104c1906001600160a01b031681565b3480156106cf57600080fd5b5061030b6106de366004612164565b61166b565b3480156106ef57600080fd5b504660051461030b565b34801561070557600080fd5b5061030b610714366004612190565b60136020526000908152604090205460ff1681565b34801561073557600080fd5b50600d546104c1906001600160a01b031681565b34801561075557600080fd5b506102b66107643660046121ad565b611678565b34801561077557600080fd5b506008546104c1906001600160a01b031681565b34801561079557600080fd5b50610381600a5481565b3480156107ab57600080fd5b5061038160105481565b3480156107c157600080fd5b50610381600b5481565b3480156107d757600080fd5b506102b66107e6366004612245565b6116bb565b3480156107f757600080fd5b506103816108063660046122bc565b600560209081526000928352604080842090915290825290205481565b34801561082f57600080fd5b5061030b61083e3660046122ea565b6118ff565b34801561084f57600080fd5b504660611461030b565b34801561086557600080fd5b506102b6610874366004612190565b61196e565b34801561088557600080fd5b506007546104c1906001600160a01b031681565b3480156108a557600080fd5b5061038160115481565b3480156108bb57600080fd5b506102b66119e4565b3480156108d057600080fd5b506102b66108df366004612190565b611a8f565b3480156108f057600080fd5b506102b66108ff366004612190565b611af6565b6001805461091190612310565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612310565b801561098a5780601f1061095f5761010080835404028352916020019161098a565b820191906000526020600020905b81548152906001019060200180831161096d57829003601f168201915b505050505081565b61099a611b5d565b600c54600160a81b900460ff16156109ec5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b600d546001600160a01b0316610a145760405162461bcd60e51b81526004016109e39061234a565b600e546001600160a01b0316610a3c5760405162461bcd60e51b81526004016109e39061234a565b600f546001600160a01b0316610a645760405162461bcd60e51b81526004016109e39061234a565b600c5461010090046001600160a01b0316610a915760405162461bcd60e51b81526004016109e39061234a565b600c805460ff60a81b1916600160a81b179055610acc30612710610abd612328655af3107a4000612386565b610ac7919061239d565b611bb7565b6007546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a91906123bf565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906123bf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906123bf565b600980546001600160a01b0319166001600160a01b0383161790559050610c59816001611524565b610c64816001611c11565b600754306000818152600460205260408120546001600160a01b039093169263f305d71992349290919080610ca16000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610cc3969594939291906123dc565b60606040518083038185885af1158015610ce1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d069190612417565b5050600e54610d3891506001600160a01b0316612710610d2861232882612445565b610abd90655af3107a4000612386565b655af3107a400060035414610d865760405162461bcd60e51b815260206004820152601460248201527306e756d6265727320646f6e2774206164642075760641b60448201526064016109e3565b610d8e611557565b15610dce57610dce33610dc27f0000000000000000000000000000000000000000000000000000000000000000600a61253c565b610ac790612710612386565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a150565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e559086815260200190565b60405180910390a35060015b92915050565b610e6f611b5d565b6001600160a01b038116610e955760405162461bcd60e51b81526004016109e39061234a565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ec5611b5d565b610ef07f0000000000000000000000000000000000000000000000000000000000000000600a61253c565b610efa9082612386565b60105550565b60006001600160a01b0384163314610f70576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610f6e57610f498382612445565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b6001600160a01b03841660009081526013602052604090205460ff168015610fb157506001600160a01b03831660009081526012602052604090205460ff16155b15611095576010548211156110265760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109e3565b6011546001600160a01b03841660009081526004602052604090205461104c908461254b565b11156110905760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e3565b6111d6565b6001600160a01b03831660009081526013602052604090205460ff1680156110d657506001600160a01b03841660009081526012602052604090205460ff16155b1561114c576010548211156110905760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109e3565b6001600160a01b03831660009081526012602052604090205460ff166111d6576011546001600160a01b038416600090815260046020526040902054611192908461254b565b11156111d65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e3565b6111de611c65565b306000908152600460205260409020541180156111fe5750600c5460ff16155b801561121857506009546001600160a01b03858116911614155b801561122d57506001600160a01b0384163014155b1561123a5761123a611c83565b6000611247858585611f04565b905060006112558285612445565b6001600160a01b038716600090815260046020526040812080549293508692909190611282908490612445565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020612685833981519152906112cb9085815260200190565b60405180910390a3811561137f5760006112e6600a8461239d565b90506112f28184612445565b306000818152600460209081526040808320805486019055600f546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020612685833981519152910160405180910390a3600f546040518281526001600160a01b03918216918916906000805160206126858339815191529060200160405180910390a3505b6001925050505b9392505050565b611395611b5d565b600f54600160a01b900460ff16156113ef5760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e000000000060448201526064016109e3565b600f805460ff60a01b1916600160a01b179055610fa0600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f0000000000000000000000000000000000000000000000000000000000000000461461146e57611469611fb5565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b61149d338261204f565b50565b6114a8611b5d565b6001600160a01b0381166114ce5760405162461bcd60e51b81526004016109e39061234a565b600e80546001600160a01b0319166001600160a01b03831690811790915561149d906001611524565b6114ff611b5d565b61150960006120b1565b565b611513611b5d565b655af3107a40006010819055601155565b61152c611b5d565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000466005148061156a57504662aa36a7145b806114695750506061461490565b6002805461091190612310565b61158d611b5d565b6009546001600160a01b03908116908316036116115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109e3565b61161b8282611c11565b5050565b611627611557565b6116615760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d195cdd1b995d60aa1b60448201526064016109e3565b61149d3382611bb7565b6000611386338484610f00565b611680611b5d565b6116ab7f0000000000000000000000000000000000000000000000000000000000000000600a61253c565b6116b59082612386565b60115550565b4284101561170b5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016109e3565b60006001611717611438565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611823573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118595750876001600160a01b0316816001600160a01b0316145b6118965760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016109e3565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c80546001600160a01b0361010091829004811687529285528386206000199081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610e55565b611976611b5d565b6001600160a01b0381166119db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e3565b61149d816120b1565b6119ec611b5d565b600f54600160a81b900460ff1615611a465760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e000000000060448201526064016109e3565b600f805460ff60a81b1916600160a81b1790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611a97611b5d565b6001600160a01b038116611abd5760405162461bcd60e51b81526004016109e39061234a565b600f54611ad4906001600160a01b03166001611524565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b611afe611b5d565b6001600160a01b038116611b245760405162461bcd60e51b81526004016109e39061234a565b600d54611b3b906001600160a01b03166001611524565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e3565b8060036000828254611bc9919061254b565b90915550506001600160a01b03821660008181526004602090815260408083208054860190555184815260008051602061268583398151915291015b60405180910390a35050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60006127106003546002611c799190612386565b611469919061239d565b600c805460ff1916600117905530600090815260046020526040812054611cac9060109061239d565b3060009081526004602052604081205491925090611ccb908390612445565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d0557611d0561255e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8291906123bf565b81600181518110611d9557611d9561255e565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac94790611ddb908590600090869030904290600401612574565b600060405180830381600087803b158015611df557600080fd5b505af1158015611e09573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d7199050473086600080611e386000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611e5a969594939291906123dc565b60606040518083038185885af1158015611e78573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e9d9190612417565b5050600d546040516001600160a01b0390911691504790600081818185875af1925050503d8060008114611eed576040519150601f19603f3d011682016040523d82523d6000602084013e611ef2565b606091505b5050600c805460ff1916905550505050565b600080546001600160a01b0385811691161480611f2e57506000546001600160a01b038481169116145b80611f4157506001600160a01b03841630145b15611f4e57506000611386565b6009546001600160a01b0390811690851603611f8657612710600a5483611f759190612386565b611f7f919061239d565b9050611386565b6009546001600160a01b0390811690841603611fad57612710600b5483611f759190612386565b506000611386565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611fe791906125e5565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821660009081526004602052604081208054839290612077908490612445565b90915550506003805482900390556040518181526000906001600160a01b0384169060008051602061268583398151915290602001611c05565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561212e57858101830151858201604001528201612112565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461149d57600080fd5b6000806040838503121561217757600080fd5b82356121828161214f565b946020939093013593505050565b6000602082840312156121a257600080fd5b81356113868161214f565b6000602082840312156121bf57600080fd5b5035919050565b6000806000606084860312156121db57600080fd5b83356121e68161214f565b925060208401356121f68161214f565b929592945050506040919091013590565b6000806040838503121561221a57600080fd5b82356122258161214f565b91506020830135801515811461223a57600080fd5b809150509250929050565b600080600080600080600060e0888a03121561226057600080fd5b873561226b8161214f565b9650602088013561227b8161214f565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da8161214f565b9150602083013561223a8161214f565b6000602082840312156122fc57600080fd5b813563ffffffff8116811461138657600080fd5b600181811c9082168061232457607f821691505b60208210810361234457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e6157610e61612370565b6000826123ba57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156123d157600080fd5b81516113868161214f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561242c57600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610e6157610e61612370565b600181815b8085111561249357816000190482111561247957612479612370565b8085161561248657918102915b93841c939080029061245d565b509250929050565b6000826124aa57506001610e61565b816124b757506000610e61565b81600181146124cd57600281146124d7576124f3565b6001915050610e61565b60ff8411156124e8576124e8612370565b50506001821b610e61565b5060208310610133831016604e8410600b8410161715612516575081810a610e61565b6125208383612458565b806000190482111561253457612534612370565b029392505050565b600061138660ff84168361249b565b80820180821115610e6157610e61612370565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125c45784516001600160a01b03168352938301939183019160010161259f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061260157607f831692505b6020808410820361262057634e487b7160e01b86526022600452602486fd5b818015612634576001811461264957612676565b60ff1986168952841515850289019650612676565b60008a81526020902060005b8681101561266e5781548b820152908501908301612655565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b616ad28e285647dba269ee210d18f2897aaea72be05508b01314234b7d0067b64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102af5760003560e01c80638da5cb5b11610166578063c473413a116100d3578063efa8ba321161008f578063f8b45b051161006c578063f8b45b0514610899578063f98eb6e1146108af578063fb235f34146108c4578063fea9e942146108e457005b8063efa8ba3214610843578063f2fde38b14610859578063f887ea401461087957005b8063c473413a14610789578063c8c8ebe41461079f578063cffd129c146107b5578063d505accf146107cb578063dd62ed3e146107eb578063eec1c69f1461082357005b8063a9059cbb11610122578063a9059cbb146106c3578063b3e5cb45146106e3578063b62496f5146106f9578063b880b69a14610729578063c18bc19514610749578063c45a01551461076957005b80638da5cb5b1461061b57806392108c861461063957806395d89b411461064e5780639a7a23d614610663578063a0712d6814610683578063a8aa1b31146106a357005b80633644e5151161021c578063751039fc116101d85780637ca882b5116101b55780637ca882b5146105905780637d5ea21b146105b55780637ecebe00146105d65780637f50ce171461060357005b8063751039fc1461053b5780637571336a1461055057806375f0a8741461057057005b80633644e5151461046c57806342966c681461048157806344478425146104a15780635d098b38146104d957806370a08231146104f9578063715018a61461052657005b8063203e727e1161026b578063203e727e1461038f57806323b872dd146103af578063270fd20a146103cf5780632ca1b45d146103f0578063307aebc914610405578063313ce5671461042657005b806306fdde03146102b857806307df7a0d146102e3578063095ea7b3146102eb5780630adab99f1461031b57806310d5de531461033b57806318160ddd1461036b57005b366102b657005b005b3480156102c457600080fd5b506102cd610904565b6040516102da9190612101565b60405180910390f35b6102b6610992565b3480156102f757600080fd5b5061030b610306366004612164565b610dfa565b60405190151581526020016102da565b34801561032757600080fd5b506102b6610336366004612190565b610e67565b34801561034757600080fd5b5061030b610356366004612190565b60126020526000908152604090205460ff1681565b34801561037757600080fd5b5061038160035481565b6040519081526020016102da565b34801561039b57600080fd5b506102b66103aa3660046121ad565b610ebd565b3480156103bb57600080fd5b5061030b6103ca3660046121c6565b610f00565b3480156103db57600080fd5b50600f5461030b90600160a81b900460ff1681565b3480156103fc57600080fd5b506102b661138d565b34801561041157600080fd5b50600c5461030b90600160a81b900460ff1681565b34801561043257600080fd5b5061045a7f000000000000000000000000000000000000000000000000000000000000000881565b60405160ff90911681526020016102da565b34801561047857600080fd5b50610381611438565b34801561048d57600080fd5b506102b661049c3660046121ad565b611493565b3480156104ad57600080fd5b50600f546104c1906001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b3480156104e557600080fd5b506102b66104f4366004612190565b6114a0565b34801561050557600080fd5b50610381610514366004612190565b60046020526000908152604090205481565b34801561053257600080fd5b506102b66114f7565b34801561054757600080fd5b506102b661150b565b34801561055c57600080fd5b506102b661056b366004612207565b611524565b34801561057c57600080fd5b50600e546104c1906001600160a01b031681565b34801561059c57600080fd5b50600c546104c19061010090046001600160a01b031681565b3480156105c157600080fd5b50600f5461030b90600160a01b900460ff1681565b3480156105e257600080fd5b506103816105f1366004612190565b60066020526000908152604090205481565b34801561060f57600080fd5b504662aa36a71461030b565b34801561062757600080fd5b506000546001600160a01b03166104c1565b34801561064557600080fd5b5061030b611557565b34801561065a57600080fd5b506102cd611578565b34801561066f57600080fd5b506102b661067e366004612207565b611585565b34801561068f57600080fd5b506102b661069e3660046121ad565b61161f565b3480156106af57600080fd5b506009546104c1906001600160a01b031681565b3480156106cf57600080fd5b5061030b6106de366004612164565b61166b565b3480156106ef57600080fd5b504660051461030b565b34801561070557600080fd5b5061030b610714366004612190565b60136020526000908152604090205460ff1681565b34801561073557600080fd5b50600d546104c1906001600160a01b031681565b34801561075557600080fd5b506102b66107643660046121ad565b611678565b34801561077557600080fd5b506008546104c1906001600160a01b031681565b34801561079557600080fd5b50610381600a5481565b3480156107ab57600080fd5b5061038160105481565b3480156107c157600080fd5b50610381600b5481565b3480156107d757600080fd5b506102b66107e6366004612245565b6116bb565b3480156107f757600080fd5b506103816108063660046122bc565b600560209081526000928352604080842090915290825290205481565b34801561082f57600080fd5b5061030b61083e3660046122ea565b6118ff565b34801561084f57600080fd5b504660611461030b565b34801561086557600080fd5b506102b6610874366004612190565b61196e565b34801561088557600080fd5b506007546104c1906001600160a01b031681565b3480156108a557600080fd5b5061038160115481565b3480156108bb57600080fd5b506102b66119e4565b3480156108d057600080fd5b506102b66108df366004612190565b611a8f565b3480156108f057600080fd5b506102b66108ff366004612190565b611af6565b6001805461091190612310565b80601f016020809104026020016040519081016040528092919081815260200182805461093d90612310565b801561098a5780601f1061095f5761010080835404028352916020019161098a565b820191906000526020600020905b81548152906001019060200180831161096d57829003601f168201915b505050505081565b61099a611b5d565b600c54600160a81b900460ff16156109ec5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b600d546001600160a01b0316610a145760405162461bcd60e51b81526004016109e39061234a565b600e546001600160a01b0316610a3c5760405162461bcd60e51b81526004016109e39061234a565b600f546001600160a01b0316610a645760405162461bcd60e51b81526004016109e39061234a565b600c5461010090046001600160a01b0316610a915760405162461bcd60e51b81526004016109e39061234a565b600c805460ff60a81b1916600160a81b179055610acc30612710610abd612328655af3107a4000612386565b610ac7919061239d565b611bb7565b6007546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a91906123bf565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc091906123bf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3191906123bf565b600980546001600160a01b0319166001600160a01b0383161790559050610c59816001611524565b610c64816001611c11565b600754306000818152600460205260408120546001600160a01b039093169263f305d71992349290919080610ca16000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610cc3969594939291906123dc565b60606040518083038185885af1158015610ce1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d069190612417565b5050600e54610d3891506001600160a01b0316612710610d2861232882612445565b610abd90655af3107a4000612386565b655af3107a400060035414610d865760405162461bcd60e51b815260206004820152601460248201527306e756d6265727320646f6e2774206164642075760641b60448201526064016109e3565b610d8e611557565b15610dce57610dce33610dc27f0000000000000000000000000000000000000000000000000000000000000008600a61253c565b610ac790612710612386565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a150565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e559086815260200190565b60405180910390a35060015b92915050565b610e6f611b5d565b6001600160a01b038116610e955760405162461bcd60e51b81526004016109e39061234a565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b610ec5611b5d565b610ef07f0000000000000000000000000000000000000000000000000000000000000008600a61253c565b610efa9082612386565b60105550565b60006001600160a01b0384163314610f70576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610f6e57610f498382612445565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b6001600160a01b03841660009081526013602052604090205460ff168015610fb157506001600160a01b03831660009081526012602052604090205460ff16155b15611095576010548211156110265760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016109e3565b6011546001600160a01b03841660009081526004602052604090205461104c908461254b565b11156110905760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e3565b6111d6565b6001600160a01b03831660009081526013602052604090205460ff1680156110d657506001600160a01b03841660009081526012602052604090205460ff16155b1561114c576010548211156110905760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016109e3565b6001600160a01b03831660009081526012602052604090205460ff166111d6576011546001600160a01b038416600090815260046020526040902054611192908461254b565b11156111d65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109e3565b6111de611c65565b306000908152600460205260409020541180156111fe5750600c5460ff16155b801561121857506009546001600160a01b03858116911614155b801561122d57506001600160a01b0384163014155b1561123a5761123a611c83565b6000611247858585611f04565b905060006112558285612445565b6001600160a01b038716600090815260046020526040812080549293508692909190611282908490612445565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020612685833981519152906112cb9085815260200190565b60405180910390a3811561137f5760006112e6600a8461239d565b90506112f28184612445565b306000818152600460209081526040808320805486019055600f546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020612685833981519152910160405180910390a3600f546040518281526001600160a01b03918216918916906000805160206126858339815191529060200160405180910390a3505b6001925050505b9392505050565b611395611b5d565b600f54600160a01b900460ff16156113ef5760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e000000000060448201526064016109e3565b600f805460ff60a01b1916600160a01b179055610fa0600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f0000000000000000000000000000000000000000000000000000000000000001461461146e57611469611fb5565b905090565b507ffcae95416c96686c4e55ed3288b9c047444645107c105e6c53e89e454919d67390565b61149d338261204f565b50565b6114a8611b5d565b6001600160a01b0381166114ce5760405162461bcd60e51b81526004016109e39061234a565b600e80546001600160a01b0319166001600160a01b03831690811790915561149d906001611524565b6114ff611b5d565b61150960006120b1565b565b611513611b5d565b655af3107a40006010819055601155565b61152c611b5d565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000466005148061156a57504662aa36a7145b806114695750506061461490565b6002805461091190612310565b61158d611b5d565b6009546001600160a01b03908116908316036116115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109e3565b61161b8282611c11565b5050565b611627611557565b6116615760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d195cdd1b995d60aa1b60448201526064016109e3565b61149d3382611bb7565b6000611386338484610f00565b611680611b5d565b6116ab7f0000000000000000000000000000000000000000000000000000000000000008600a61253c565b6116b59082612386565b60115550565b4284101561170b5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064016109e3565b60006001611717611438565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611823573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118595750876001600160a01b0316816001600160a01b0316145b6118965760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b60448201526064016109e3565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c80546001600160a01b0361010091829004811687529285528386206000199081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610e55565b611976611b5d565b6001600160a01b0381166119db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e3565b61149d816120b1565b6119ec611b5d565b600f54600160a81b900460ff1615611a465760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e000000000060448201526064016109e3565b600f805460ff60a81b1916600160a81b1790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b611a97611b5d565b6001600160a01b038116611abd5760405162461bcd60e51b81526004016109e39061234a565b600f54611ad4906001600160a01b03166001611524565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b611afe611b5d565b6001600160a01b038116611b245760405162461bcd60e51b81526004016109e39061234a565b600d54611b3b906001600160a01b03166001611524565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e3565b8060036000828254611bc9919061254b565b90915550506001600160a01b03821660008181526004602090815260408083208054860190555184815260008051602061268583398151915291015b60405180910390a35050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60006127106003546002611c799190612386565b611469919061239d565b600c805460ff1916600117905530600090815260046020526040812054611cac9060109061239d565b3060009081526004602052604081205491925090611ccb908390612445565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611d0557611d0561255e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8291906123bf565b81600181518110611d9557611d9561255e565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac94790611ddb908590600090869030904290600401612574565b600060405180830381600087803b158015611df557600080fd5b505af1158015611e09573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d7199050473086600080611e386000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611e5a969594939291906123dc565b60606040518083038185885af1158015611e78573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e9d9190612417565b5050600d546040516001600160a01b0390911691504790600081818185875af1925050503d8060008114611eed576040519150601f19603f3d011682016040523d82523d6000602084013e611ef2565b606091505b5050600c805460ff1916905550505050565b600080546001600160a01b0385811691161480611f2e57506000546001600160a01b038481169116145b80611f4157506001600160a01b03841630145b15611f4e57506000611386565b6009546001600160a01b0390811690851603611f8657612710600a5483611f759190612386565b611f7f919061239d565b9050611386565b6009546001600160a01b0390811690841603611fad57612710600b5483611f759190612386565b506000611386565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611fe791906125e5565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821660009081526004602052604081208054839290612077908490612445565b90915550506003805482900390556040518181526000906001600160a01b0384169060008051602061268583398151915290602001611c05565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b8181101561212e57858101830151858201604001528201612112565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461149d57600080fd5b6000806040838503121561217757600080fd5b82356121828161214f565b946020939093013593505050565b6000602082840312156121a257600080fd5b81356113868161214f565b6000602082840312156121bf57600080fd5b5035919050565b6000806000606084860312156121db57600080fd5b83356121e68161214f565b925060208401356121f68161214f565b929592945050506040919091013590565b6000806040838503121561221a57600080fd5b82356122258161214f565b91506020830135801515811461223a57600080fd5b809150509250929050565b600080600080600080600060e0888a03121561226057600080fd5b873561226b8161214f565b9650602088013561227b8161214f565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da8161214f565b9150602083013561223a8161214f565b6000602082840312156122fc57600080fd5b813563ffffffff8116811461138657600080fd5b600181811c9082168061232457607f821691505b60208210810361234457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e6157610e61612370565b6000826123ba57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156123d157600080fd5b81516113868161214f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561242c57600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610e6157610e61612370565b600181815b8085111561249357816000190482111561247957612479612370565b8085161561248657918102915b93841c939080029061245d565b509250929050565b6000826124aa57506001610e61565b816124b757506000610e61565b81600181146124cd57600281146124d7576124f3565b6001915050610e61565b60ff8411156124e8576124e8612370565b50506001821b610e61565b5060208310610133831016604e8410600b8410161715612516575081810a610e61565b6125208383612458565b806000190482111561253457612534612370565b029392505050565b600061138660ff84168361249b565b80820180821115610e6157610e61612370565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125c45784516001600160a01b03168352938301939183019160010161259f565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061260157607f831692505b6020808410820361262057634e487b7160e01b86526022600452602486fd5b818015612634576001811461264957612676565b60ff1986168952841515850289019650612676565b60008a81526020902060005b8681101561266e5781548b820152908501908301612655565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220b616ad28e285647dba269ee210d18f2897aaea72be05508b01314234b7d0067b64736f6c63430008130033

Deployed Bytecode Sourcemap

19870:13747:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1426:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25516:1355;;;:::i;2869:242::-;;;;;;;;;;-1:-1:-1;2869:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;2869:242:0;1023:187:1;24707:147:0;;;;;;;;;;-1:-1:-1;24707:147:0;;;;;:::i;:::-;;:::i;20896:63::-;;;;;;;;;;-1:-1:-1;20896:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;1709:26;;;;;;;;;;;;;;;;;;;1613:25:1;;;1601:2;1586:18;1709:26:0;1467:177:1;33033:130:0;;;;;;;;;;-1:-1:-1;33033:130:0;;;;;:::i;:::-;;:::i;29928:2581::-;;;;;;;;;;-1:-1:-1;29928:2581:0;;;;;:::i;:::-;;:::i;20786:26::-;;;;;;;;;;-1:-1:-1;20786:26:0;;;;-1:-1:-1;;;20786:26:0;;;;;;23665:233;;;;;;;;;;;;;:::i;20621:22::-;;;;;;;;;;-1:-1:-1;20621:22:0;;;;-1:-1:-1;;;20621:22:0;;;;;;1482:31;;;;;;;;;;;;;;;;;;2467:4:1;2455:17;;;2437:36;;2425:2;2410:18;1482:31:0;2295:184:1;5941:226:0;;;;;;;;;;;;;:::i;22743:80::-;;;;;;;;;;-1:-1:-1;22743:80:0;;;;;:::i;:::-;;:::i;20719:28::-;;;;;;;;;;-1:-1:-1;20719:28:0;;;;-1:-1:-1;;;;;20719:28:0;;;;;;-1:-1:-1;;;;;2830:32:1;;;2812:51;;2800:2;2785:18;20719:28:0;2666:203:1;25068:219:0;;;;;;;;;;-1:-1:-1;25068:219:0;;;;;:::i;:::-;;:::i;1744:44::-;;;;;;;;;;-1:-1:-1;1744:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;10200:103;;;;;;;;;;;;;:::i;33478:136::-;;;;;;;;;;;;;:::i;33301:169::-;;;;;;;;;;-1:-1:-1;33301:169:0;;;;;:::i;:::-;;:::i;20682:30::-;;;;;;;;;;-1:-1:-1;20682:30:0;;;;-1:-1:-1;;;;;20682:30:0;;;20581:31;;;;;;;;;;-1:-1:-1;20581:31:0;;;;;;;-1:-1:-1;;;;;20581:31:0;;;20756:23;;;;;;;;;;-1:-1:-1;20756:23:0;;;;-1:-1:-1;;;20756:23:0;;;;;;2170:41;;;;;;;;;;-1:-1:-1;2170:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;23329:99;;;;;;;;;;-1:-1:-1;23395:13:0;23412:8;23395:25;23329:99;;9552:87;;;;;;;;;;-1:-1:-1;9598:7:0;9625:6;-1:-1:-1;;;;;9625:6:0;9552:87;;23540:117;;;;;;;;;;;;;:::i;1453:20::-;;;;;;;;;;;;;:::i;32517:309::-;;;;;;;;;;-1:-1:-1;32517:309:0;;;;;:::i;:::-;;:::i;22996:101::-;;;;;;;;;;-1:-1:-1;22996:101:0;;;;;:::i;:::-;;:::i;19993:26::-;;;;;;;;;;-1:-1:-1;19993:26:0;;;;-1:-1:-1;;;;;19993:26:0;;;29348:136;;;;;;;;;;-1:-1:-1;29348:136:0;;;;;:::i;:::-;;:::i;23230:91::-;;;;;;;;;;-1:-1:-1;23295:13:0;23312:1;23295:18;23230:91;;20968:57;;;;;;;;;;-1:-1:-1;20968:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20652:23;;;;;;;;;;-1:-1:-1;20652:23:0;;;;-1:-1:-1;;;;;20652:23:0;;;33171:122;;;;;;;;;;-1:-1:-1;33171:122:0;;;;;:::i;:::-;;:::i;19954:32::-;;;;;;;;;;-1:-1:-1;19954:32:0;;;;-1:-1:-1;;;;;19954:32:0;;;20369:27;;;;;;;;;;;;;;;;20821:35;;;;;;;;;;;;;;;;20403:28;;;;;;;;;;;;;;;;4357:1576;;;;;;;;;;-1:-1:-1;4357:1576:0;;;;;:::i;:::-;;:::i;1797:64::-;;;;;;;;;;-1:-1:-1;1797:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24433:266;;;;;;;;;;-1:-1:-1;24433:266:0;;;;;:::i;:::-;;:::i;23436:96::-;;;;;;;;;;-1:-1:-1;23505:13:0;23522:2;23505:19;23436:96;;10458:238;;;;;;;;;;-1:-1:-1;10458:238:0;;;;;:::i;:::-;;:::i;19915:32::-;;;;;;;;;;-1:-1:-1;19915:32:0;;;;-1:-1:-1;;;;;19915:32:0;;;20863:24;;;;;;;;;;;;;;;;23906:241;;;;;;;;;;;;;:::i;25295:213::-;;;;;;;;;;-1:-1:-1;25295:213:0;;;;;:::i;:::-;;:::i;24862:198::-;;;;;;;;;;-1:-1:-1;24862:198:0;;;;;:::i;:::-;;:::i;1426:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25516:1355::-;9438:13;:11;:13::i;:::-;25588:10:::1;::::0;-1:-1:-1;;;25588:10:0;::::1;;;25587:11;25579:40;;;::::0;-1:-1:-1;;;25579:40:0;;6088:2:1;25579:40:0::1;::::0;::::1;6070:21:1::0;6127:2;6107:18;;;6100:30;-1:-1:-1;;;6146:18:1;;;6139:46;6202:18;;25579:40:0::1;;;;;;;;;25638:8;::::0;-1:-1:-1;;;;;25638:8:0::1;25630:47;;;;-1:-1:-1::0;;;25630:47:0::1;;;;;;;:::i;:::-;25696:15;::::0;-1:-1:-1;;;;;25696:15:0::1;25688:54;;;;-1:-1:-1::0;;;25688:54:0::1;;;;;;;:::i;:::-;25761:13;::::0;-1:-1:-1;;;;;25761:13:0::1;25753:52;;;;-1:-1:-1::0;;;25753:52:0::1;;;;;;;:::i;:::-;25824:16;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;25824:16:0::1;25816:55;;;;-1:-1:-1::0;;;25816:55:0::1;;;;;;;:::i;:::-;25882:10;:17:::0;;-1:-1:-1;;;;25882:17:0::1;-1:-1:-1::0;;;25882:17:0::1;::::0;;25912:56:::1;25926:4;25961:6;25934:23;20179:4;20067:19;25934:23;:::i;:::-;25933:34;;;;:::i;:::-;25912:5;:56::i;:::-;26023:6;::::0;:16:::1;::::0;;-1:-1:-1;;;26023:16:0;;;;25981:21:::1;::::0;-1:-1:-1;;;;;26023:6:0::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26005:46:0::1;;26074:4;26094:6;;;;;;;;;-1:-1:-1::0;;;;;26094:6:0::1;-1:-1:-1::0;;;;;26094:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26005:113;::::0;-1:-1:-1;;;;;;26005:113:0::1;::::0;;;;;;-1:-1:-1;;;;;7585:15:1;;;26005:113:0::1;::::0;::::1;7567:34:1::0;7637:15;;7617:18;;;7610:43;7502:18;;26005:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26131:4;:36:::0;;-1:-1:-1;;;;;;26131:36:0::1;-1:-1:-1::0;;;;;26131:36:0;::::1;;::::0;;;-1:-1:-1;26180:46:0::1;26131:36:::0;-1:-1:-1;26180:25:0::1;:46::i;:::-;26237:49;26266:13;26281:4;26237:28;:49::i;:::-;26299:6;::::0;26362:4:::1;26299:6;26382:24:::0;;;:9:::1;:24;::::0;;;;;-1:-1:-1;;;;;26299:6:0;;::::1;::::0;:22:::1;::::0;26329:9:::1;::::0;26362:4;;26382:24;26299:6;26453:7:::1;9598::::0;9625:6;-1:-1:-1;;;;;9625:6:0;;9552:87;26453:7:::1;26475:15;26299:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26520:15:0::1;::::0;26514:65:::1;::::0;-1:-1:-1;;;;;;26520:15:0::1;26572:6;20286:15;20179:4;26572:6:::0;20286:15:::1;:::i;:::-;26538:30;::::0;20067:19:::1;26538:30;:::i;26514:65::-;20067:19;26600:11;;:29;26592:62;;;::::0;-1:-1:-1;;;26592:62:0;;8922:2:1;26592:62:0::1;::::0;::::1;8904:21:1::0;8961:2;8941:18;;;8934:30;-1:-1:-1;;;8980:18:1;;;8973:50;9040:18;;26592:62:0::1;8720:344:1::0;26592:62:0::1;26733:11;:9;:11::i;:::-;26729:95;;;26761:51;26775:10;26797:14;26803:8;26797:2;:14;:::i;:::-;26788:23;::::0;:6:::1;:23;:::i;26761:51::-;26841:22;::::0;::::1;::::0;;;::::1;25568:1303;25516:1355::o:0;2869:242::-;2995:10;2968:4;2985:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2985:30:0;;;;;;;;;;:39;;;3042:37;2968:4;;2985:30;;3042:37;;;;3018:6;1613:25:1;;1601:2;1586:18;;1467:177;3042:37:0;;;;;;;;-1:-1:-1;3099:4:0;2869:242;;;;;:::o;24707:147::-;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;24783:15:0;::::1;24775:40;;;;-1:-1:-1::0;;;24775:40:0::1;;;;;;;:::i;:::-;24826:16;:20:::0;;-1:-1:-1;;;;;24826:20:0;;::::1;;;-1:-1:-1::0;;;;;;24826:20:0;;::::1;::::0;;;::::1;::::0;;24707:147::o;33033:130::-;9438:13;:11;:13::i;:::-;33140:14:::1;33146:8;33140:2;:14;:::i;:::-;33130:25;::::0;:6;:25:::1;:::i;:::-;33107:20;:48:::0;-1:-1:-1;33033:130:0:o;29928:2581::-;30048:4;-1:-1:-1;;;;;30069:18:0;;30077:10;30069:18;30065:289;;-1:-1:-1;;;;;30168:15:0;;30153:12;30168:15;;;:9;:15;;;;;;;;30184:10;30168:27;;;;;;;;-1:-1:-1;;30252:25:0;;30248:94;;30326:16;30336:6;30326:7;:16;:::i;:::-;-1:-1:-1;;;;;30296:15:0;;;;;;:9;:15;;;;;;;;30312:10;30296:27;;;;;;;:46;30248:94;30089:265;30065:289;-1:-1:-1;;;;;30564:31:0;;;;;;:25;:31;;;;;;;;:84;;;;-1:-1:-1;;;;;;30613:35:0;;;;;;:31;:35;;;;;;;;30612:36;30564:84;30546:833;;;30711:20;;30701:6;:30;;30675:145;;;;-1:-1:-1;;;30675:145:0;;10654:2:1;30675:145:0;;;10636:21:1;10693:2;10673:18;;;10666:30;10732:34;10712:18;;;10705:62;-1:-1:-1;;;10783:18:1;;;10776:51;10844:19;;30675:145:0;10452:417:1;30675:145:0;30869:9;;-1:-1:-1;;;;;30852:13:0;;;;;;:9;:13;;;;;;30843:22;;:6;:22;:::i;:::-;:35;;30835:67;;;;-1:-1:-1;;;30835:67:0;;11206:2:1;30835:67:0;;;11188:21:1;11245:2;11225:18;;;11218:30;-1:-1:-1;;;11264:18:1;;;11257:49;11323:18;;30835:67:0;11004:343:1;30835:67:0;30546:833;;;-1:-1:-1;;;;;30968:29:0;;;;;;:25;:29;;;;;;;;:84;;;;-1:-1:-1;;;;;;31015:37:0;;;;;;:31;:37;;;;;;;;31014:38;30968:84;30950:429;;;31115:20;;31105:6;:30;;31079:146;;;;-1:-1:-1;;;31079:146:0;;11554:2:1;31079:146:0;;;11536:21:1;11593:2;11573:18;;;11566:30;11632:34;11612:18;;;11605:62;-1:-1:-1;;;11683:18:1;;;11676:52;11745:19;;31079:146:0;11352:418:1;30950:429:0;-1:-1:-1;;;;;31248:35:0;;;;;;:31;:35;;;;;;;;31243:136;;31334:9;;-1:-1:-1;;;;;31317:13:0;;;;;;:9;:13;;;;;;31308:22;;:6;:22;:::i;:::-;:35;;31300:67;;;;-1:-1:-1;;;31300:67:0;;11206:2:1;31300:67:0;;;11188:21:1;11245:2;11225:18;;;11218:30;-1:-1:-1;;;11264:18:1;;;11257:49;11323:18;;31300:67:0;11004:343:1;31300:67:0;31436:18;:16;:18::i;:::-;31427:4;31409:24;;;;:9;:24;;;;;;:45;:86;;;;-1:-1:-1;31472:23:0;;;;31471:24;31409:86;:124;;;;-1:-1:-1;31528:4:0;;-1:-1:-1;;;;;31512:21:0;;;31528:4;;31512:21;;31409:124;:162;;;;-1:-1:-1;;;;;;31550:21:0;;31566:4;31550:21;;31409:162;31391:239;;;31598:20;:18;:20::i;:::-;31642:8;31653:25;31661:4;31667:2;31671:6;31653:7;:25::i;:::-;31642:36;-1:-1:-1;31689:19:0;31711:12;31642:36;31711:6;:12;:::i;:::-;-1:-1:-1;;;;;31736:15:0;;;;;;:9;:15;;;;;:25;;31689:34;;-1:-1:-1;31755:6:0;;31736:15;;;:25;;31755:6;;31736:25;:::i;:::-;;;;-1:-1:-1;;;;;;;31909:13:0;;;;;;;:9;:13;;;;;;;:31;;;;;;31969:34;31909:13;;31969:34;;;-1:-1:-1;;;;;;;;;;;31969:34:0;;;31926:14;1613:25:1;;1601:2;1586:18;;1467:177;31969:34:0;;;;;;;;32020:7;;32016:462;;32088:12;32103:8;32109:2;32103:3;:8;:::i;:::-;32088:23;-1:-1:-1;32126:14:0;32088:23;32126:14;;:::i;:::-;32204:4;32186:24;;;;:9;:24;;;;;;;;:31;;;;;;32246:13;;-1:-1:-1;;;;;32246:13:0;;;32236:24;;;;;;:35;;;;;;32374:34;1613:25:1;;;32186:31:0;;-1:-1:-1;32204:4:0;;32374:34;;;;-1:-1:-1;;;;;;;;;;;32374:34:0;1586:18:1;32374:34:0;;;;;;;32443:13;;32428:38;;1613:25:1;;;-1:-1:-1;;;;;32443:13:0;;;;32428:38;;;-1:-1:-1;;;;;;;;;;;32428:38:0;1601:2:1;1586:18;32428:38:0;;;;;;;32029:449;32016:462;32497:4;32490:11;;;;29928:2581;;;;;;:::o;23665:233::-;9438:13;:11;:13::i;:::-;23731:11:::1;::::0;-1:-1:-1;;;23731:11:0;::::1;;;23730:12;23722:52;;;::::0;-1:-1:-1;;;23722:52:0;;11977:2:1;23722:52:0::1;::::0;::::1;11959:21:1::0;12016:2;11996:18;;;11989:30;12055:29;12035:18;;;12028:57;12102:18;;23722:52:0::1;11775:351:1::0;23722:52:0::1;23785:11;:18:::0;;-1:-1:-1;;;;23785:18:0::1;-1:-1:-1::0;;;23785:18:0::1;::::0;;23826:4:::1;23814:9;:16:::0;;;23841:10:::1;:17:::0;23874:16:::1;::::0;::::1;::::0;23785:18;;23874:16:::1;23665:233::o:0;5941:226::-;5998:7;6055:16;6038:13;:33;:121;;6135:24;:22;:24::i;:::-;6018:141;;5941:226;:::o;6038:121::-;-1:-1:-1;6091:24:0;;5941:226::o;22743:80::-;22790:25;22796:10;22808:6;22790:5;:25::i;:::-;22743:80;:::o;25068:219::-;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;25148:20:0;::::1;25140:45;;;;-1:-1:-1::0;;;25140:45:0::1;;;;;;;:::i;:::-;25196:15;:24:::0;;-1:-1:-1;;;;;;25196:24:0::1;-1:-1:-1::0;;;;;25196:24:0;::::1;::::0;;::::1;::::0;;;25231:48:::1;::::0;-1:-1:-1;25231:25:0::1;:48::i;10200:103::-:0;9438:13;:11;:13::i;:::-;10265:30:::1;10292:1;10265:18;:30::i;:::-;10200:103::o:0;33478:136::-;9438:13;:11;:13::i;:::-;20067:19:::1;33532:20;:37:::0;;;33580:9:::1;:26:::0;33478:136::o;33301:169::-;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;33416:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;33416:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33301:169::o;23540:117::-;23582:4;23295:13;23312:1;23295:18;23606:25;;;-1:-1:-1;23395:13:0;23412:8;23395:25;23620:11;23606:43;;;-1:-1:-1;;23522:2:0;23505:13;:19;;5941:226::o;1453:20::-;;;;;;;:::i;32517:309::-;9438:13;:11;:13::i;:::-;32673:4:::1;::::0;-1:-1:-1;;;;;32673:4:0;;::::1;32656:22:::0;;::::1;::::0;32634:129:::1;;;::::0;-1:-1:-1;;;32634:129:0;;12333:2:1;32634:129:0::1;::::0;::::1;12315:21:1::0;12372:2;12352:18;;;12345:30;12411:34;12391:18;;;12384:62;12482:27;12462:18;;;12455:55;12527:19;;32634:129:0::1;12131:421:1::0;32634:129:0::1;32776:42;32805:5;32812;32776:28;:42::i;:::-;32517:309:::0;;:::o;22996:101::-;22613:11;:9;:11::i;:::-;22605:35;;;;-1:-1:-1;;;22605:35:0;;12759:2:1;22605:35:0;;;12741:21:1;12798:2;12778:18;;;12771:30;-1:-1:-1;;;12817:18:1;;;12810:41;12868:18;;22605:35:0;12557:335:1;22605:35:0;23055:34:::1;23069:10;23082:6;23055:5;:34::i;29348:136::-:0;29416:4;29440:36;29453:10;29465:2;29469:6;29440:12;:36::i;33171:122::-;9438:13;:11;:13::i;:::-;33270:14:::1;33276:8;33270:2;:14;:::i;:::-;33260:25;::::0;:6;:25:::1;:::i;:::-;33248:9;:37:::0;-1:-1:-1;33171:122:0:o;4357:1576::-;4585:15;4573:8;:27;;4565:63;;;;-1:-1:-1;;;4565:63:0;;13099:2:1;4565:63:0;;;13081:21:1;13138:2;13118:18;;;13111:30;13177:25;13157:18;;;13150:53;13220:18;;4565:63:0;12897:347:1;4565:63:0;4798:24;4825:827;4965:18;:16;:18::i;:::-;-1:-1:-1;;;;;5419:13:0;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;5050:458;;5095:167;5050:458;;;13536:25:1;13615:18;;;13608:43;;;;13687:15;;;13667:18;;;13660:43;13719:18;;;13712:34;;;13762:19;;;13755:35;;;;13806:19;;;;13799:35;;;5050:458:0;;;;;;;;;;13508:19:1;;;5050:458:0;;;5010:525;;;;;;;;-1:-1:-1;;;4885:673:0;;;14103:27:1;14146:11;;;14139:27;;;;14182:12;;;14175:28;;;;14219:12;;4885:673:0;;;-1:-1:-1;;4885:673:0;;;;;;;;;4853:724;;4885:673;4853:724;;;;4825:827;;;;;;;;;14469:25:1;14542:4;14530:17;;14510:18;;;14503:45;14564:18;;;14557:34;;;14607:18;;;14600:34;;;14441:19;;4825:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4825:827:0;;-1:-1:-1;;4825:827:0;;;-1:-1:-1;;;;;;;5695:30:0;;;;;;:59;;;5749:5;-1:-1:-1;;;;;5729:25:0;:16;-1:-1:-1;;;;;5729:25:0;;5695:59;5669:135;;;;-1:-1:-1;;;5669:135:0;;14847:2:1;5669:135:0;;;14829:21:1;14886:2;14866:18;;;14859:30;-1:-1:-1;;;14905:18:1;;;14898:44;14959:18;;5669:135:0;14645:338:1;5669:135:0;-1:-1:-1;;;;;5821:27:0;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5894:31;1613:25:1;;;5821:36:0;;5894:31;;;;;1586:18:1;5894:31:0;;;;;;;4357:1576;;;;;;;:::o;24433:266::-;8316:10;24493:4;24551:16;;;:9;:16;;;;;;;;24568;;;-1:-1:-1;;;;;24568:16:0;;;;;;;24551:34;;;;;;;;-1:-1:-1;;24551:51:0;;;;24634:16;;24618:49;;1613:25:1;;;24493:4:0;;8316:10;24634:16;;;;;8316:10;;24618:49;;1586:18:1;24618:49:0;1467:177:1;10458:238:0;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;10561:22:0;::::1;10539:110;;;::::0;-1:-1:-1;;;10539:110:0;;15190:2:1;10539:110:0::1;::::0;::::1;15172:21:1::0;15229:2;15209:18;;;15202:30;15268:34;15248:18;;;15241:62;-1:-1:-1;;;15319:18:1;;;15312:36;15365:19;;10539:110:0::1;14988:402:1::0;10539:110:0::1;10660:28;10679:8;10660:18;:28::i;23906:241::-:0;9438:13;:11;:13::i;:::-;23973:14:::1;::::0;-1:-1:-1;;;23973:14:0;::::1;;;23972:15;23964:55;;;::::0;-1:-1:-1;;;23964:55:0;;11977:2:1;23964:55:0::1;::::0;::::1;11959:21:1::0;12016:2;11996:18;;;11989:30;12055:29;12035:18;;;12028:57;12102:18;;23964:55:0::1;11775:351:1::0;23964:55:0::1;24030:14;:21:::0;;-1:-1:-1;;;;24030:21:0::1;-1:-1:-1::0;;;24030:21:0::1;::::0;;24074:3:::1;24062:9;:15:::0;;;24088:10:::1;:16:::0;24120:19:::1;::::0;::::1;::::0;24030:21;;24120:19:::1;23906:241::o:0;25295:213::-;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;25373:20:0;::::1;25365:45;;;;-1:-1:-1::0;;;25365:45:0::1;;;;;;;:::i;:::-;25447:13;::::0;25421:46:::1;::::0;-1:-1:-1;;;;;25447:13:0::1;::::0;25421:25:::1;:46::i;:::-;25478:13;:22:::0;;-1:-1:-1;;;;;;25478:22:0::1;-1:-1:-1::0;;;;;25478:22:0;;;::::1;::::0;;;::::1;::::0;;25295:213::o;24862:198::-;9438:13;:11;:13::i;:::-;-1:-1:-1;;;;;24935:20:0;::::1;24927:45;;;;-1:-1:-1::0;;;24927:45:0::1;;;;;;;:::i;:::-;25009:8;::::0;24983:41:::1;::::0;-1:-1:-1;;;;;25009:8:0::1;::::0;24983:25:::1;:41::i;:::-;25035:8;:17:::0;;-1:-1:-1;;;;;;25035:17:0::1;-1:-1:-1::0;;;;;25035:17:0;;;::::1;::::0;;;::::1;::::0;;24862:198::o;9717:132::-;9598:7;9625:6;-1:-1:-1;;;;;9625:6:0;8316:10;9781:23;9773:68;;;;-1:-1:-1;;;9773:68:0;;15597:2:1;9773:68:0;;;15579:21:1;;;15616:18;;;15609:30;15675:34;15655:18;;;15648:62;15727:18;;9773:68:0;15395:356:1;6880:335:0;6966:6;6951:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;7123:13:0;;;;;;:9;:13;;;;;;;;:23;;;;;;7175:32;1613:25:1;;;-1:-1:-1;;;;;;;;;;;7175:32:0;1586:18:1;7175:32:0;;;;;;;;6880:335;;:::o;32834:191::-;-1:-1:-1;;;;;32918:32:0;;;;;;:25;:32;;;;;;:40;;-1:-1:-1;;32918:40:0;;;;;;;;;;32976:41;;32918:40;;:32;32976:41;;;32834:191;;:::o;23105:117::-;23156:4;23200:5;23181:11;;23195:1;23181:15;;;;:::i;:::-;23180:25;;;;:::i;27995:1124::-;22471:23;:30;;-1:-1:-1;;22471:30:0;22497:4;22471:30;;;28418:4:::1;22471:23:::0;28400:24;;;:9:::1;:24;::::0;;;;;:29:::1;::::0;28427:2:::1;::::0;28400:29:::1;:::i;:::-;28478:4;28440:17;28460:24:::0;;;:9:::1;:24;::::0;;;;;28380:49;;-1:-1:-1;28440:17:0;28460:39:::1;::::0;28380:49;;28460:39:::1;:::i;:::-;28553:16;::::0;;28567:1:::1;28553:16:::0;;;;;::::1;::::0;;28440:59;;-1:-1:-1;28529:21:0::1;::::0;28553:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28553:16:0::1;28529:40;;28598:4;28580;28585:1;28580:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28580:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28624:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;28624:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;28580:7;;28624:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28614:4;28619:1;28614:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28614:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28648:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;28648:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;28720:12;;28648:6:::1;::::0;28763:4;;28790::::1;::::0;28810:15:::1;::::0;28648:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28849:6:0::1;::::0;-1:-1:-1;;;;;28849:6:0::1;::::0;-1:-1:-1;28849:22:0::1;::::0;-1:-1:-1;28879:21:0::1;28924:4;28944:12:::0;28849:6:::1;::::0;29003:7:::1;9598::::0;9625:6;-1:-1:-1;;;;;9625:6:0;;9552:87;29003:7:::1;29025:15;28849:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29064:8:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;29064:8:0;;::::1;::::0;-1:-1:-1;29085:21:0::1;::::0;29064:47:::1;::::0;;;29085:21;29064:8;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22524:23:0;:31;;-1:-1:-1;;22524:31:0;;;-1:-1:-1;;;;27995:1124:0:o;27142:773::-;27255:4;9625:6;;-1:-1:-1;;;;;27276:15:0;;;9625:6;;27276:15;;:32;;-1:-1:-1;9598:7:0;9625:6;-1:-1:-1;;;;;27295:13:0;;;9625:6;;27295:13;27276:32;:57;;;-1:-1:-1;;;;;;27312:21:0;;27328:4;27312:21;27276:57;27272:636;;;-1:-1:-1;27493:1:0;27486:8;;27272:636;27532:4;;-1:-1:-1;;;;;27532:4:0;;;27516:21;;;;27512:396;;27635:6;27622:9;;27613:6;:18;;;;:::i;:::-;27612:29;;;;:::i;:::-;27605:36;;;;27512:396;27677:4;;-1:-1:-1;;;;;27677:4:0;;;27663:19;;;;27659:249;;27784:6;27770:10;;27761:6;:19;;;;:::i;27659:249::-;-1:-1:-1;27895:1:0;27888:8;;6175:505;6240:7;6341:143;6523:4;6507:22;;;;;;:::i;:::-;;;;;;;;;;6308:349;;;18741:25:1;;;;18782:18;;18775:34;;;;6552:14:0;18825:18:1;;;18818:34;6589:13:0;18868:18:1;;;18861:34;6633:4:0;18911:19:1;;;18904:61;18713:19;;6308:349:0;;;;;;;;;;;;6280:392;;;;;;6260:412;;6175:505;:::o;7223:338::-;-1:-1:-1;;;;;7296:15:0;;;;;;:9;:15;;;;;:25;;7315:6;;7296:15;:25;;7315:6;;7296:25;:::i;:::-;;;;-1:-1:-1;;7469:11:0;:21;;;;;;;7519:34;;1613:25:1;;;-1:-1:-1;;;;;;;7519:34:0;;;-1:-1:-1;;;;;;;;;;;7519:34:0;1601:2:1;1586:18;7519:34:0;1467:177:1;10856:191:0;10930:16;10949:6;;-1:-1:-1;;;;;10966:17:0;;;-1:-1:-1;;;;;;10966:17:0;;;;;;10999:40;;10949:6;;;;;;;10999:40;;10930:16;10999:40;10919:128;10856:191;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2874:416::-;2939:6;2947;3000:2;2988:9;2979:7;2975:23;2971:32;2968:52;;;3016:1;3013;3006:12;2968:52;3055:9;3042:23;3074:31;3099:5;3074:31;:::i;:::-;3124:5;-1:-1:-1;3181:2:1;3166:18;;3153:32;3223:15;;3216:23;3204:36;;3194:64;;3254:1;3251;3244:12;3194:64;3277:7;3267:17;;;2874:416;;;;;:::o;3758:829::-;3869:6;3877;3885;3893;3901;3909;3917;3970:3;3958:9;3949:7;3945:23;3941:33;3938:53;;;3987:1;3984;3977:12;3938:53;4026:9;4013:23;4045:31;4070:5;4045:31;:::i;:::-;4095:5;-1:-1:-1;4152:2:1;4137:18;;4124:32;4165:33;4124:32;4165:33;:::i;:::-;4217:7;-1:-1:-1;4271:2:1;4256:18;;4243:32;;-1:-1:-1;4322:2:1;4307:18;;4294:32;;-1:-1:-1;4378:3:1;4363:19;;4350:33;4427:4;4414:18;;4402:31;;4392:59;;4447:1;4444;4437:12;4392:59;3758:829;;;;-1:-1:-1;3758:829:1;;;;4470:7;4524:3;4509:19;;4496:33;;-1:-1:-1;4576:3:1;4561:19;;;4548:33;;3758:829;-1:-1:-1;;3758:829:1:o;4592:388::-;4660:6;4668;4721:2;4709:9;4700:7;4696:23;4692:32;4689:52;;;4737:1;4734;4727:12;4689:52;4776:9;4763:23;4795:31;4820:5;4795:31;:::i;:::-;4845:5;-1:-1:-1;4902:2:1;4887:18;;4874:32;4915:33;4874:32;4915:33;:::i;4985:276::-;5043:6;5096:2;5084:9;5075:7;5071:23;5067:32;5064:52;;;5112:1;5109;5102:12;5064:52;5151:9;5138:23;5201:10;5194:5;5190:22;5183:5;5180:33;5170:61;;5227:1;5224;5217:12;5501:380;5580:1;5576:12;;;;5623;;;5644:61;;5698:4;5690:6;5686:17;5676:27;;5644:61;5751:2;5743:6;5740:14;5720:18;5717:38;5714:161;;5797:10;5792:3;5788:20;5785:1;5778:31;5832:4;5829:1;5822:15;5860:4;5857:1;5850:15;5714:161;;5501:380;;;:::o;6231:336::-;6433:2;6415:21;;;6472:2;6452:18;;;6445:30;-1:-1:-1;;;6506:2:1;6491:18;;6484:42;6558:2;6543:18;;6231:336::o;6572:127::-;6633:10;6628:3;6624:20;6621:1;6614:31;6664:4;6661:1;6654:15;6688:4;6685:1;6678:15;6704:168;6777:9;;;6808;;6825:15;;;6819:22;;6805:37;6795:71;;6846:18;;:::i;6877:217::-;6917:1;6943;6933:132;;6987:10;6982:3;6978:20;6975:1;6968:31;7022:4;7019:1;7012:15;7050:4;7047:1;7040:15;6933:132;-1:-1:-1;7079:9:1;;6877:217::o;7099:251::-;7169:6;7222:2;7210:9;7201:7;7197:23;7193:32;7190:52;;;7238:1;7235;7228:12;7190:52;7270:9;7264:16;7289:31;7314:5;7289:31;:::i;7664:607::-;-1:-1:-1;;;;;8023:15:1;;;8005:34;;8070:2;8055:18;;8048:34;;;;8113:2;8098:18;;8091:34;;;;8156:2;8141:18;;8134:34;;;;8205:15;;;8199:3;8184:19;;8177:44;7985:3;8237:19;;8230:35;;;;7954:3;7939:19;;7664:607::o;8276:306::-;8364:6;8372;8380;8433:2;8421:9;8412:7;8408:23;8404:32;8401:52;;;8449:1;8446;8439:12;8401:52;8478:9;8472:16;8462:26;;8528:2;8517:9;8513:18;8507:25;8497:35;;8572:2;8561:9;8557:18;8551:25;8541:35;;8276:306;;;;;:::o;8587:128::-;8654:9;;;8675:11;;;8672:37;;;8689:18;;:::i;9069:422::-;9158:1;9201:5;9158:1;9215:270;9236:7;9226:8;9223:21;9215:270;;;9295:4;9291:1;9287:6;9283:17;9277:4;9274:27;9271:53;;;9304:18;;:::i;:::-;9354:7;9344:8;9340:22;9337:55;;;9374:16;;;;9337:55;9453:22;;;;9413:15;;;;9215:270;;;9219:3;9069:422;;;;;:::o;9496:806::-;9545:5;9575:8;9565:80;;-1:-1:-1;9616:1:1;9630:5;;9565:80;9664:4;9654:76;;-1:-1:-1;9701:1:1;9715:5;;9654:76;9746:4;9764:1;9759:59;;;;9832:1;9827:130;;;;9739:218;;9759:59;9789:1;9780:10;;9803:5;;;9827:130;9864:3;9854:8;9851:17;9848:43;;;9871:18;;:::i;:::-;-1:-1:-1;;9927:1:1;9913:16;;9942:5;;9739:218;;10041:2;10031:8;10028:16;10022:3;10016:4;10013:13;10009:36;10003:2;9993:8;9990:16;9985:2;9979:4;9976:12;9972:35;9969:77;9966:159;;;-1:-1:-1;10078:19:1;;;10110:5;;9966:159;10157:34;10182:8;10176:4;10157:34;:::i;:::-;10227:6;10223:1;10219:6;10215:19;10206:7;10203:32;10200:58;;;10238:18;;:::i;:::-;10276:20;;9496:806;-1:-1:-1;;;9496:806:1:o;10307:140::-;10365:5;10394:47;10435:4;10425:8;10421:19;10415:4;10394:47;:::i;10874:125::-;10939:9;;;10960:10;;;10957:36;;;10973:18;;:::i;15888:127::-;15949:10;15944:3;15940:20;15937:1;15930:31;15980:4;15977:1;15970:15;16004:4;16001:1;15994:15;16020:980;16282:4;16330:3;16319:9;16315:19;16361:6;16350:9;16343:25;16387:2;16425:6;16420:2;16409:9;16405:18;16398:34;16468:3;16463:2;16452:9;16448:18;16441:31;16492:6;16527;16521:13;16558:6;16550;16543:22;16596:3;16585:9;16581:19;16574:26;;16635:2;16627:6;16623:15;16609:29;;16656:1;16666:195;16680:6;16677:1;16674:13;16666:195;;;16745:13;;-1:-1:-1;;;;;16741:39:1;16729:52;;16836:15;;;;16801:12;;;;16777:1;16695:9;16666:195;;;-1:-1:-1;;;;;;;16917:32:1;;;;16912:2;16897:18;;16890:60;-1:-1:-1;;;16981:3:1;16966:19;16959:35;16878:3;16020:980;-1:-1:-1;;;16020:980:1:o;17344:1133::-;17474:3;17503:1;17536:6;17530:13;17566:3;17588:1;17616:9;17612:2;17608:18;17598:28;;17676:2;17665:9;17661:18;17698;17688:61;;17742:4;17734:6;17730:17;17720:27;;17688:61;17768:2;17816;17808:6;17805:14;17785:18;17782:38;17779:165;;-1:-1:-1;;;17843:33:1;;17899:4;17896:1;17889:15;17929:4;17850:3;17917:17;17779:165;17960:18;17987:133;;;;18134:1;18129:323;;;;17953:499;;17987:133;-1:-1:-1;;18020:24:1;;18008:37;;18093:14;;18086:22;18074:35;;18065:45;;;-1:-1:-1;17987:133:1;;18129:323;17291:1;17284:14;;;17328:4;17315:18;;18227:1;18241:165;18255:6;18252:1;18249:13;18241:165;;;18333:14;;18320:11;;;18313:35;18376:16;;;;18270:10;;18241:165;;;18245:3;;18435:6;18430:3;18426:16;18419:23;;17953:499;-1:-1:-1;18468:3:1;;17344:1133;-1:-1:-1;;;;;;;;17344:1133:1:o

Swarm Source

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