ETH Price: $3,253.49 (+6.46%)
Gas: 45 Gwei

Token

Tomokachi (TMK)
 

Overview

Max Total Supply

100,000,000 TMK

Holders

5

Total Transfers

-

Market

Chart

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Tomokachi

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: https://github.com/Uniswap/v2-core/blob/master/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

// File: https://github.com/Uniswap/v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

// File: https://github.com/Uniswap/v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol 


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

pragma solidity ^0.8.0;


/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// File: tomokachieth.sol


pragma solidity ^0.8.9;




contract Tomokachi is Ownable, IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromWalletHoldingLimit;
    mapping(address => bool) private _isAutomaticMarketMaker;
    uint256 public _decimals = 18;
    uint256 public _totalSupply = 100 * 10**6 * 10**_decimals;
    string private _name = "Tomokachi";
    string private _symbol = "TMK";

    address public immutable DeadWalletAddress =
        0x000000000000000000000000000000000000dEaD;
    address payable public MarketingWalletAddress =
        payable(0x7b25845A8d16ffF240cdB0CF8cB27fCE681B25E5);
    address payable public TeamWalletAddress =
        payable(0x1BE1255A0cF21dda1a85ac155E79d71558B41671);
    address payable public SeedWalletAddress =
        payable(0xCd4E503F558bE452cd47f574A7ae860Ab1f55E64);

    uint256 internal _liquidityFee = 100;
    uint256 internal _BurnFee = 100;
    uint256 internal _TeamFee = 200;
    uint256 internal _MarketingFee = 350;
    uint256 internal _SeedFee = 50;

    uint256 public TotalTaxFee =
        _liquidityFee + _BurnFee + _TeamFee + _MarketingFee + _SeedFee;

    uint256 feeDenominator = 10_000;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradeEnabled = false;

    uint256 public numTokensSellToAddToLiquidity = 1 * 10**5 * 10**_decimals;
    uint256 public _maxWalletHoldingLimit = 6 * 10**6 * 10**_decimals;

    event MaxWalletHoldingAmountUpdated(uint256 updatedMaxWalletHoldingAmount);
    event AutomaticMarketMakerPairUpdated(address account, bool status);
    event TaxFeeUpdated(uint256 TaxFees);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor() {
        _balances[msg.sender] = _totalSupply;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D//0xD99D1c33F9fC3444f8101754aBC46c52416550D1//0x10ED43C718714eb63d5aA57B78B54704E256024E
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee and Wallet holding Limits
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromWalletHoldingLimit[address(this)] = true;
        _isExcludedFromWalletHoldingLimit[uniswapV2Pair] = true;
        _isExcludedFromWalletHoldingLimit[MarketingWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[SeedWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[TeamWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[msg.sender] = true;
        _isAutomaticMarketMaker[uniswapV2Pair] = true;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    function enableTrade(bool _cond) public onlyOwner {
        tradeEnabled = _cond;
    }    

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external view returns (uint256) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "IERC20: approve from the zero address");
        require(spender != address(0), "IERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "IERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromTax(address add) external view returns (bool) {
        return _isExcludedFromFee[add];
    }

    function isExcludedFromWalletLimit(address WalletAddress)
        external
        view
        returns (bool)
    {
        return _isExcludedFromWalletHoldingLimit[WalletAddress];
    }

    function excludeFromMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        _isExcludedFromWalletHoldingLimit[account] = true;
    }

    function includeInMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        require(
            account != uniswapV2Pair,
            "You can't play with Liquidity pair address"
        );
        _isExcludedFromWalletHoldingLimit[account] = false;
    }

    function UpdateMaxWalletHoldingLimit(uint256 maxWalletHoldingAmount)
        external
        onlyOwner
    {
        require(
            maxWalletHoldingAmount * 10**_decimals >= 1_000_000 * 10**_decimals,
            "Amount should be greater or equal to 1 Millin Tokens"
        );
        _maxWalletHoldingLimit = maxWalletHoldingAmount * 10**_decimals;
        emit MaxWalletHoldingAmountUpdated(_maxWalletHoldingLimit);
    }

    function isAutomaticMarketMaker(address account)
        external
        view
        returns (bool)
    {
        return _isAutomaticMarketMaker[account];
    }

    function setNewLiquidityPair(address addNewAMM, bool status)
        external
        onlyOwner
    {
        _isAutomaticMarketMaker[addNewAMM] = status;
        emit AutomaticMarketMakerPairUpdated(addNewAMM, status);
    }

    function UpdateWallets(
        address payable newMarketingWallet,
        address payable newTeamWallet,
        address payable newSeedWallet
    ) external onlyOwner {
        require(
            newMarketingWallet != address(0) &&
                newTeamWallet != address(0) &&
                newSeedWallet != address(0),
            "You can't set zero address"
        );
        MarketingWalletAddress = newMarketingWallet;
        TeamWalletAddress = newTeamWallet;
        SeedWalletAddress = newSeedWallet;
    }

    function UpdateTaxFees(
        uint256 newLiquidityFee,
        uint256 newMarketingFee,
        uint256 newTeamFee,
        uint256 newSeedFee,
        uint256 newBurnFee
    ) external onlyOwner {
        require(
            newLiquidityFee +
                newMarketingFee +
                newTeamFee +
                newBurnFee +
                newSeedFee <=
                800,
            "you can't set more than 8%"
        );
        _liquidityFee = newLiquidityFee;
        _MarketingFee = newMarketingFee;
        _TeamFee = newTeamFee;
        _BurnFee = newBurnFee;
        _SeedFee = newSeedFee;
        TotalTaxFee =
            _liquidityFee +
            _BurnFee +
            _TeamFee +
            _MarketingFee +
            _SeedFee;
        emit TaxFeeUpdated(TotalTaxFee);
    }

    function UpdateNoOfTokensSellToGetReward(uint256 thresholdValue)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = thresholdValue * 10**_decimals;
        emit MinTokensBeforeSwapUpdated(numTokensSellToAddToLiquidity);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "IERC20: transfer amount exceeds allowance"
        );
        return true;
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "IERC20: transfer from the zero address");
        require(
            recipient != address(0),
            "IERC20: transfer to the zero address"
        );
        require(_balances[sender] >= amount, "You don't have enough balance");

        if (
            !_isExcludedFromWalletHoldingLimit[recipient] && sender != owner()
        ) {
            require(
                balanceOf(recipient) + amount <= _maxWalletHoldingLimit,
                "Wallet Holding limit exceeded"
            );
        }
        if(sender == owner()){
            _balances[recipient]+=amount;
            _balances[sender]-=amount;
            emit Transfer(sender,recipient,amount);
            return;
        }

        uint256 totalTax = 0;
        uint256 BurnTax = 0;

        if (
            _isAutomaticMarketMaker[sender] ||
            _isAutomaticMarketMaker[recipient]
        ) {
            if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
                totalTax = 0;
                BurnTax = 0;
            } else {
                require(tradeEnabled,"trade is not yet enabled");
                totalTax =
                    (amount *
                        (_liquidityFee + _TeamFee + _SeedFee + _MarketingFee)) /
                    (feeDenominator);
                BurnTax = (amount * _BurnFee) / feeDenominator;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            recipient == uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;

                uint256 remainingLiquidityToken;
                if (_MarketingFee + _SeedFee + _TeamFee + _liquidityFee > 0) {
                    remainingLiquidityToken =
                        (contractTokenBalance *
                            (_MarketingFee + _SeedFee + _TeamFee)) /
                        (_MarketingFee + _SeedFee + _TeamFee + _liquidityFee);
                }

                uint256 liquidityToken;
                if (_liquidityFee > 0) {
                    liquidityToken =
                        contractTokenBalance -
                        (remainingLiquidityToken);
                } else {
                    if (_MarketingFee + _SeedFee + _TeamFee > 0) {
                        remainingLiquidityToken = contractTokenBalance;
                    }
                }

                // Swap Tokens and Send to Different Addresses
                if (_MarketingFee + _SeedFee + _TeamFee > 0) {
                    swapTokens(remainingLiquidityToken);
                }
                if (liquidityToken > 0) {
                    // Remove Hate Swap and Liquidity by breaking Token in proportion
                    swapAndLiquify(liquidityToken);
                }
            }
        }

        uint256 amountReceived = amount - (totalTax + BurnTax);
        _balances[address(this)] += totalTax;
        _balances[DeadWalletAddress] += BurnTax;
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] += amountReceived;
        if (BurnTax > 0) {
            emit Transfer(sender, DeadWalletAddress, BurnTax);
        }
        if (totalTax > 0) {
            emit Transfer(sender, address(this), totalTax);
        }
        emit Transfer(sender, recipient, amountReceived);
    }

    function swapTokens(uint256 _contractTokenBalance) private lockTheSwap {
        uint256 combineFee = _MarketingFee + _TeamFee + _SeedFee;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(_contractTokenBalance);
        uint256 transferredBalance = address(this).balance - (initialBalance);
        uint256 marketingBalance = (transferredBalance * (_MarketingFee)) /
            (combineFee);
        uint256 TeamBalance = (transferredBalance * (_TeamFee)) / (combineFee);
        uint256 seedBalance = (transferredBalance * (_SeedFee)) / (combineFee);
        if (marketingBalance > 0) {
            transferToAddressETH(MarketingWalletAddress, marketingBalance);
        }
        if (TeamBalance > 0) {
            transferToAddressETH(TeamWalletAddress, TeamBalance);
        }
        if (seedBalance > 0) {
            transferToAddressETH(SeedWalletAddress, seedBalance);
        }
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance - (initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        if (address(this).balance > 0) {
            MarketingWalletAddress.transfer(address(this).balance);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AutomaticMarketMakerPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxWalletHoldingAmount","type":"uint256"}],"name":"MaxWalletHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeadWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SeedWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletHoldingAmount","type":"uint256"}],"name":"UpdateMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdValue","type":"uint256"}],"name":"UpdateNoOfTokensSellToGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newTeamFee","type":"uint256"},{"internalType":"uint256","name":"newSeedFee","type":"uint256"},{"internalType":"uint256","name":"newBurnFee","type":"uint256"}],"name":"UpdateTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"},{"internalType":"address payable","name":"newTeamWallet","type":"address"},{"internalType":"address payable","name":"newSeedWallet","type":"address"}],"name":"UpdateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHoldingLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_cond","type":"bool"}],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAutomaticMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"WalletAddress","type":"address"}],"name":"isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addNewAMM","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setNewLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052601260068190556200001890600a6200068d565b62000028906305f5e100620006a2565b60075560408051808201909152600980825268546f6d6f6b6163686960b81b60209092019182526200005d91600891620004d2565b5060408051808201909152600380825262544d4b60e81b60209092019182526200008a91600991620004d2565b5061dead608052600a80546001600160a01b0319908116737b25845a8d16fff240cdb0cf8cb27fce681b25e517909155600b80548216731be1255a0cf21dda1a85ac155e79d71558b41671179055600c805490911673cd4e503f558be452cd47f574a7ae860ab1f55e641790556064600d819055600e81905560c8600f81905561015e60108190556032601181905592909190620001299080620006c4565b620001359190620006c4565b620001419190620006c4565b6200014d9190620006c4565b6012556127106013556015805461ffff60a81b1916600160a81b1790556006546200017a90600a6200068d565b6200018990620186a0620006a2565b6016556006546200019c90600a6200068d565b620001ab90625b8d80620006a2565b601755348015620001bb57600080fd5b50620001c73362000482565b6007543360009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200022957600080fd5b505afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620006df565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ad57600080fd5b505afa158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e89190620006df565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200033157600080fd5b505af115801562000346573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036c9190620006df565b601580546001600160a01b03199081166001600160a01b0393841617825560148054909116848416179055336000818152600360209081526040808320805460ff19908116600190811790925530855282852080548216831790556004845282852080548216831790558654881685528285208054821683179055600a54881685528285208054821683179055600c54881685528285208054821683179055600b548816855282852080548216831790558585528285208054821683179055955490961683526005825280832080549095169095179093556007549351938452909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000747565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620004e0906200070a565b90600052602060002090601f0160209004810192826200050457600085556200054f565b82601f106200051f57805160ff19168380011785556200054f565b828001600101855582156200054f579182015b828111156200054f57825182559160200191906001019062000532565b506200055d92915062000561565b5090565b5b808211156200055d576000815560010162000562565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005cf578160001904821115620005b357620005b362000578565b80851615620005c157918102915b93841c939080029062000593565b509250929050565b600082620005e85750600162000687565b81620005f75750600062000687565b81600181146200061057600281146200061b576200063b565b600191505062000687565b60ff8411156200062f576200062f62000578565b50506001821b62000687565b5060208310610133831016604e8410600b841016171562000660575081810a62000687565b6200066c83836200058e565b806000190482111562000683576200068362000578565b0290505b92915050565b60006200069b8383620005d7565b9392505050565b6000816000190483118215151615620006bf57620006bf62000578565b500290565b60008219821115620006da57620006da62000578565b500190565b600060208284031215620006f257600080fd5b81516001600160a01b03811681146200069b57600080fd5b600181811c908216806200071f57607f821691505b602082108114156200074157634e487b7160e01b600052602260045260246000fd5b50919050565b6080516122bd62000771600039600081816103060152818161174a01526117f401526122bd6000f3fe6080604052600436106102595760003560e01c806370f58c3711610149578063b7a9a0af116100c6578063d12a76881161008a578063ea2f0b3711610064578063ea2f0b37146107a1578063f2fde38b146107c1578063f76c1410146107e157600080fd5b8063d12a768814610724578063d621e8131461073a578063dd62ed3e1461075b57600080fd5b8063b7a9a0af1461066b578063be9e18a41461068b578063c00f04d1146106ab578063c49b9a80146106cb578063cb4ca631146106eb57600080fd5b80639429b9fe1161010d5780639429b9fe146105bd57806395d89b41146105dd578063a457c2d7146105f2578063a9059cbb14610612578063b40f94691461063257600080fd5b806370f58c3714610534578063715018a61461054a5780637cb2bf821461055f5780637d3ddc921461057f5780638da5cb5b1461059f57600080fd5b806332424aa3116101d7578063437823ec1161019b578063437823ec1461047d57806349bd5a5e1461049d5780634a74bb02146104bd57806370035ba5146104de57806370a08231146104fe57600080fd5b806332424aa3146103d857806339509351146103ee5780633979e9ca1461040e57806339e6cd66146104475780633eaaf86b1461046757600080fd5b8063124035a81161021e578063124035a81461034a5780631694505e1461036e57806318160ddd1461038e57806323b872dd146103a3578063313ce567146103c357600080fd5b8062712e171461026557806306fdde03146102a2578063095ea7b3146102c45780630a6a7548146102f45780630dd991761461032857600080fd5b3661026057005b600080fd5b34801561027157600080fd5b50600b54610285906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ae57600080fd5b506102b7610801565b6040516102999190611dcc565b3480156102d057600080fd5b506102e46102df366004611e36565b610893565b6040519015158152602001610299565b34801561030057600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561033457600080fd5b50610348610343366004611e62565b6108aa565b005b34801561035657600080fd5b5061036060175481565b604051908152602001610299565b34801561037a57600080fd5b50601454610285906001600160a01b031681565b34801561039a57600080fd5b50600754610360565b3480156103af57600080fd5b506102e46103be366004611ead565b610976565b3480156103cf57600080fd5b50600654610360565b3480156103e457600080fd5b5061036060065481565b3480156103fa57600080fd5b506102e4610409366004611e36565b610a14565b34801561041a57600080fd5b506102e4610429366004611eee565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561045357600080fd5b50600a54610285906001600160a01b031681565b34801561047357600080fd5b5061036060075481565b34801561048957600080fd5b50610348610498366004611eee565b610a50565b3480156104a957600080fd5b50601554610285906001600160a01b031681565b3480156104c957600080fd5b506015546102e490600160a81b900460ff1681565b3480156104ea57600080fd5b506103486104f9366004611eee565b610a7c565b34801561050a57600080fd5b50610360610519366004611eee565b6001600160a01b031660009081526001602052604090205490565b34801561054057600080fd5b5061036060125481565b34801561055657600080fd5b50610348610aa8565b34801561056b57600080fd5b5061034861057a366004611f12565b610abc565b34801561058b57600080fd5b5061034861059a366004611f62565b610bc3565b3480156105ab57600080fd5b506000546001600160a01b0316610285565b3480156105c957600080fd5b506103486105d8366004611f97565b610c2e565b3480156105e957600080fd5b506102b7610c8a565b3480156105fe57600080fd5b506102e461060d366004611e36565b610c99565b34801561061e57600080fd5b506102e461062d366004611e36565b610d35565b34801561063e57600080fd5b506102e461064d366004611eee565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067757600080fd5b50610348610686366004611eee565b610d42565b34801561069757600080fd5b506103486106a6366004611f97565b610ddc565b3480156106b757600080fd5b506103486106c6366004611fb0565b610ed8565b3480156106d757600080fd5b506103486106e6366004611fb0565b610efe565b3480156106f757600080fd5b506102e4610706366004611eee565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561073057600080fd5b5061036060165481565b34801561074657600080fd5b506015546102e490600160b01b900460ff1681565b34801561076757600080fd5b50610360610776366004611fcb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b506103486107bc366004611eee565b610f53565b3480156107cd57600080fd5b506103486107dc366004611eee565b610f7c565b3480156107ed57600080fd5b50600c54610285906001600160a01b031681565b60606008805461081090612004565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90612004565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b60006108a0338484610ff5565b5060015b92915050565b6108b261111d565b6001600160a01b038316158015906108d257506001600160a01b03821615155b80156108e657506001600160a01b03811615155b6109375760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e277420736574207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b6000610983848484611177565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610a095760405162461bcd60e51b815260206004820152602960248201527f4945524332303a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b606482015260840161092e565b506001949350505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916108a0918590610a4b908690612055565b610ff5565b610a5861111d565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610a8461111d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610ab061111d565b610aba60006118fe565b565b610ac461111d565b610320828285610ad4888a612055565b610ade9190612055565b610ae89190612055565b610af29190612055565b1115610b405760405162461bcd60e51b815260206004820152601a60248201527f796f752063616e277420736574206d6f7265207468616e203825000000000000604482015260640161092e565b600d8590556010849055600f839055600e8190556011829055818484610b668489612055565b610b709190612055565b610b7a9190612055565b610b849190612055565b60128190556040519081527faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de29060200160405180910390a15050505050565b610bcb61111d565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769910160405180910390a15050565b610c3661111d565b600654610c4490600a612151565b610c4e908261215d565b60168190556040519081527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b60606009805461081090612004565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610d1c5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a2064656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b606482015260840161092e565b610d2b3385610a4b868561217c565b5060019392505050565b60006108a0338484611177565b610d4a61111d565b6015546001600160a01b0382811691161415610dbb5760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420706c61792077697468204c69717569646974792070616044820152696972206164647265737360b01b606482015260840161092e565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610de461111d565b600654610df290600a612151565b610dff90620f424061215d565b600654610e0d90600a612151565b610e17908361215d565b1015610e8b5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c642062652067726561746572206f72206571756160448201527f6c20746f2031204d696c6c696e20546f6b656e73000000000000000000000000606482015260840161092e565b600654610e9990600a612151565b610ea3908261215d565b60178190556040519081527f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa90602001610c7f565b610ee061111d565b60158054911515600160b01b0260ff60b01b19909216919091179055565b610f0661111d565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c7f90831515815260200190565b610f5b61111d565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610f8461111d565b6001600160a01b038116610fe95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092e565b610ff2816118fe565b50565b6001600160a01b0383166110595760405162461bcd60e51b815260206004820152602560248201527f4945524332303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161092e565b6001600160a01b0382166110bb5760405162461bcd60e51b815260206004820152602360248201527f4945524332303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b606482015260840161092e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161092e565b6001600160a01b0383166111dc5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161092e565b6001600160a01b03821661123e5760405162461bcd60e51b8152602060048201526024808201527f4945524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161092e565b6001600160a01b0383166000908152600160205260409020548111156112a65760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000604482015260640161092e565b6001600160a01b03821660009081526004602052604090205460ff161580156112dd57506000546001600160a01b03848116911614155b1561135d5760175481611305846001600160a01b031660009081526001602052604090205490565b61130f9190612055565b111561135d5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000604482015260640161092e565b6000546001600160a01b0384811691161415611414576001600160a01b0382166000908152600160205260408120805483929061139b908490612055565b90915550506001600160a01b038316600090815260016020526040812080548392906113c890849061217c565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161111091815260200190565b6001600160a01b038316600090815260056020526040812054819060ff168061145557506001600160a01b03841660009081526005602052604090205460ff165b15611563576001600160a01b03851660009081526003602052604090205460ff168061149957506001600160a01b03841660009081526003602052604090205460ff165b156114a957506000905080611563565b601554600160b01b900460ff166115025760405162461bcd60e51b815260206004820152601860248201527f7472616465206973206e6f742079657420656e61626c65640000000000000000604482015260640161092e565b601354601054601154600f54600d5461151b9190612055565b6115259190612055565b61152f9190612055565b611539908561215d565b6115439190612193565b9150601354600e5484611556919061215d565b6115609190612193565b90505b306000908152600160205260409020546016546015549082101590600160a01b900460ff161580156115a257506015546001600160a01b038781169116145b80156115b75750601554600160a81b900460ff165b80156115db57506015546001600160a01b0316600090815260016020526040812054115b15611701578015611701576016549150600080600d54600f546011546010546116049190612055565b61160e9190612055565b6116189190612055565b111561167c57600d54600f546011546010546116349190612055565b61163e9190612055565b6116489190612055565b600f5460115460105461165b9190612055565b6116659190612055565b61166f908561215d565b6116799190612193565b90505b600d546000901561169857611691828561217c565b90506116c1565b6000600f546011546010546116ad9190612055565b6116b79190612055565b11156116c1578391505b6000600f546011546010546116d69190612055565b6116e09190612055565b11156116ef576116ef8261194e565b80156116fe576116fe81611a5c565b50505b600061170d8486612055565b611717908761217c565b3060009081526001602052604081208054929350879290919061173b908490612055565b90915550506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526001602052604081208054869290611788908490612055565b90915550506001600160a01b0388166000908152600160205260409020546117b190879061217c565b6001600160a01b03808a1660009081526001602052604080822093909355908916815290812080548392906117e7908490612055565b90915550508315611860577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161185791815260200190565b60405180910390a35b84156118a75760405185815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118ec91815260200190565b60405180910390a35050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6015805460ff60a01b1916600160a01b179055601154600f546010546000929161197791612055565b6119819190612055565b90504761198d83611b44565b6000611999824761217c565b9050600083601054836119ac919061215d565b6119b69190612193565b9050600084600f54846119c9919061215d565b6119d39190612193565b9050600085601154856119e6919061215d565b6119f09190612193565b90508215611a0e57600a54611a0e906001600160a01b031684611cad565b8115611a2a57600b54611a2a906001600160a01b031683611cad565b8015611a4657600c54611a46906001600160a01b031682611cad565b50506015805460ff60a01b191690555050505050565b6015805460ff60a01b1916600160a01b1790556000611a7c600283612193565b90506000611a8a828461217c565b905047611a9683611b44565b6000611aa2824761217c565b9050611aae8382611ce8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611b3057600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611b2e573d6000803e3d6000fd5b505b50506015805460ff60a01b19169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b7957611b796121b5565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0591906121cb565b81600181518110611c1857611c186121b5565b6001600160a01b039283166020918202929092010152601454611c3e9130911684610ff5565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c779085906000908690309042906004016121e8565b600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ce3573d6000803e3d6000fd5b505050565b601454611d009030906001600160a01b031684610ff5565b6014546001600160a01b031663f305d719823085600080611d296000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dc59190612259565b5050505050565b600060208083528351808285015260005b81811015611df957858101830151858201604001528201611ddd565b81811115611e0b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ff257600080fd5b60008060408385031215611e4957600080fd5b8235611e5481611e21565b946020939093013593505050565b600080600060608486031215611e7757600080fd5b8335611e8281611e21565b92506020840135611e9281611e21565b91506040840135611ea281611e21565b809150509250925092565b600080600060608486031215611ec257600080fd5b8335611ecd81611e21565b92506020840135611edd81611e21565b929592945050506040919091013590565b600060208284031215611f0057600080fd5b8135611f0b81611e21565b9392505050565b600080600080600060a08688031215611f2a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b80358015158114611f5d57600080fd5b919050565b60008060408385031215611f7557600080fd5b8235611f8081611e21565b9150611f8e60208401611f4d565b90509250929050565b600060208284031215611fa957600080fd5b5035919050565b600060208284031215611fc257600080fd5b611f0b82611f4d565b60008060408385031215611fde57600080fd5b8235611fe981611e21565b91506020830135611ff981611e21565b809150509250929050565b600181811c9082168061201857607f821691505b6020821081141561203957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156120685761206861203f565b500190565b600181815b808511156120a857816000190482111561208e5761208e61203f565b8085161561209b57918102915b93841c9390800290612072565b509250929050565b6000826120bf575060016108a4565b816120cc575060006108a4565b81600181146120e257600281146120ec57612108565b60019150506108a4565b60ff8411156120fd576120fd61203f565b50506001821b6108a4565b5060208310610133831016604e8410600b841016171561212b575081810a6108a4565b612135838361206d565b80600019048211156121495761214961203f565b029392505050565b6000611f0b83836120b0565b60008160001904831182151516156121775761217761203f565b500290565b60008282101561218e5761218e61203f565b500390565b6000826121b057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156121dd57600080fd5b8151611f0b81611e21565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122385784516001600160a01b031683529383019391830191600101612213565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561226e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e6c4a50ab531e534f30d6a3f1bc864f0914ec936542f8419b6002a97f8695bfc64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102595760003560e01c806370f58c3711610149578063b7a9a0af116100c6578063d12a76881161008a578063ea2f0b3711610064578063ea2f0b37146107a1578063f2fde38b146107c1578063f76c1410146107e157600080fd5b8063d12a768814610724578063d621e8131461073a578063dd62ed3e1461075b57600080fd5b8063b7a9a0af1461066b578063be9e18a41461068b578063c00f04d1146106ab578063c49b9a80146106cb578063cb4ca631146106eb57600080fd5b80639429b9fe1161010d5780639429b9fe146105bd57806395d89b41146105dd578063a457c2d7146105f2578063a9059cbb14610612578063b40f94691461063257600080fd5b806370f58c3714610534578063715018a61461054a5780637cb2bf821461055f5780637d3ddc921461057f5780638da5cb5b1461059f57600080fd5b806332424aa3116101d7578063437823ec1161019b578063437823ec1461047d57806349bd5a5e1461049d5780634a74bb02146104bd57806370035ba5146104de57806370a08231146104fe57600080fd5b806332424aa3146103d857806339509351146103ee5780633979e9ca1461040e57806339e6cd66146104475780633eaaf86b1461046757600080fd5b8063124035a81161021e578063124035a81461034a5780631694505e1461036e57806318160ddd1461038e57806323b872dd146103a3578063313ce567146103c357600080fd5b8062712e171461026557806306fdde03146102a2578063095ea7b3146102c45780630a6a7548146102f45780630dd991761461032857600080fd5b3661026057005b600080fd5b34801561027157600080fd5b50600b54610285906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102ae57600080fd5b506102b7610801565b6040516102999190611dcc565b3480156102d057600080fd5b506102e46102df366004611e36565b610893565b6040519015158152602001610299565b34801561030057600080fd5b506102857f000000000000000000000000000000000000000000000000000000000000dead81565b34801561033457600080fd5b50610348610343366004611e62565b6108aa565b005b34801561035657600080fd5b5061036060175481565b604051908152602001610299565b34801561037a57600080fd5b50601454610285906001600160a01b031681565b34801561039a57600080fd5b50600754610360565b3480156103af57600080fd5b506102e46103be366004611ead565b610976565b3480156103cf57600080fd5b50600654610360565b3480156103e457600080fd5b5061036060065481565b3480156103fa57600080fd5b506102e4610409366004611e36565b610a14565b34801561041a57600080fd5b506102e4610429366004611eee565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561045357600080fd5b50600a54610285906001600160a01b031681565b34801561047357600080fd5b5061036060075481565b34801561048957600080fd5b50610348610498366004611eee565b610a50565b3480156104a957600080fd5b50601554610285906001600160a01b031681565b3480156104c957600080fd5b506015546102e490600160a81b900460ff1681565b3480156104ea57600080fd5b506103486104f9366004611eee565b610a7c565b34801561050a57600080fd5b50610360610519366004611eee565b6001600160a01b031660009081526001602052604090205490565b34801561054057600080fd5b5061036060125481565b34801561055657600080fd5b50610348610aa8565b34801561056b57600080fd5b5061034861057a366004611f12565b610abc565b34801561058b57600080fd5b5061034861059a366004611f62565b610bc3565b3480156105ab57600080fd5b506000546001600160a01b0316610285565b3480156105c957600080fd5b506103486105d8366004611f97565b610c2e565b3480156105e957600080fd5b506102b7610c8a565b3480156105fe57600080fd5b506102e461060d366004611e36565b610c99565b34801561061e57600080fd5b506102e461062d366004611e36565b610d35565b34801561063e57600080fd5b506102e461064d366004611eee565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561067757600080fd5b50610348610686366004611eee565b610d42565b34801561069757600080fd5b506103486106a6366004611f97565b610ddc565b3480156106b757600080fd5b506103486106c6366004611fb0565b610ed8565b3480156106d757600080fd5b506103486106e6366004611fb0565b610efe565b3480156106f757600080fd5b506102e4610706366004611eee565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561073057600080fd5b5061036060165481565b34801561074657600080fd5b506015546102e490600160b01b900460ff1681565b34801561076757600080fd5b50610360610776366004611fcb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b506103486107bc366004611eee565b610f53565b3480156107cd57600080fd5b506103486107dc366004611eee565b610f7c565b3480156107ed57600080fd5b50600c54610285906001600160a01b031681565b60606008805461081090612004565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90612004565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b60006108a0338484610ff5565b5060015b92915050565b6108b261111d565b6001600160a01b038316158015906108d257506001600160a01b03821615155b80156108e657506001600160a01b03811615155b6109375760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e277420736574207a65726f206164647265737300000000000060448201526064015b60405180910390fd5b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b6000610983848484611177565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610a095760405162461bcd60e51b815260206004820152602960248201527f4945524332303a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b606482015260840161092e565b506001949350505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916108a0918590610a4b908690612055565b610ff5565b610a5861111d565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610a8461111d565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610ab061111d565b610aba60006118fe565b565b610ac461111d565b610320828285610ad4888a612055565b610ade9190612055565b610ae89190612055565b610af29190612055565b1115610b405760405162461bcd60e51b815260206004820152601a60248201527f796f752063616e277420736574206d6f7265207468616e203825000000000000604482015260640161092e565b600d8590556010849055600f839055600e8190556011829055818484610b668489612055565b610b709190612055565b610b7a9190612055565b610b849190612055565b60128190556040519081527faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de29060200160405180910390a15050505050565b610bcb61111d565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b769910160405180910390a15050565b610c3661111d565b600654610c4490600a612151565b610c4e908261215d565b60168190556040519081527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b60606009805461081090612004565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610d1c5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a2064656372656173656420616c6c6f77616e63652062656c6f60448201526577207a65726f60d01b606482015260840161092e565b610d2b3385610a4b868561217c565b5060019392505050565b60006108a0338484611177565b610d4a61111d565b6015546001600160a01b0382811691161415610dbb5760405162461bcd60e51b815260206004820152602a60248201527f596f752063616e277420706c61792077697468204c69717569646974792070616044820152696972206164647265737360b01b606482015260840161092e565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610de461111d565b600654610df290600a612151565b610dff90620f424061215d565b600654610e0d90600a612151565b610e17908361215d565b1015610e8b5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c642062652067726561746572206f72206571756160448201527f6c20746f2031204d696c6c696e20546f6b656e73000000000000000000000000606482015260840161092e565b600654610e9990600a612151565b610ea3908261215d565b60178190556040519081527f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa90602001610c7f565b610ee061111d565b60158054911515600160b01b0260ff60b01b19909216919091179055565b610f0661111d565b60158054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610c7f90831515815260200190565b610f5b61111d565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610f8461111d565b6001600160a01b038116610fe95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092e565b610ff2816118fe565b50565b6001600160a01b0383166110595760405162461bcd60e51b815260206004820152602560248201527f4945524332303a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161092e565b6001600160a01b0382166110bb5760405162461bcd60e51b815260206004820152602360248201527f4945524332303a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b606482015260840161092e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610aba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161092e565b6001600160a01b0383166111dc5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161092e565b6001600160a01b03821661123e5760405162461bcd60e51b8152602060048201526024808201527f4945524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161092e565b6001600160a01b0383166000908152600160205260409020548111156112a65760405162461bcd60e51b815260206004820152601d60248201527f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000604482015260640161092e565b6001600160a01b03821660009081526004602052604090205460ff161580156112dd57506000546001600160a01b03848116911614155b1561135d5760175481611305846001600160a01b031660009081526001602052604090205490565b61130f9190612055565b111561135d5760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000604482015260640161092e565b6000546001600160a01b0384811691161415611414576001600160a01b0382166000908152600160205260408120805483929061139b908490612055565b90915550506001600160a01b038316600090815260016020526040812080548392906113c890849061217c565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161111091815260200190565b6001600160a01b038316600090815260056020526040812054819060ff168061145557506001600160a01b03841660009081526005602052604090205460ff165b15611563576001600160a01b03851660009081526003602052604090205460ff168061149957506001600160a01b03841660009081526003602052604090205460ff165b156114a957506000905080611563565b601554600160b01b900460ff166115025760405162461bcd60e51b815260206004820152601860248201527f7472616465206973206e6f742079657420656e61626c65640000000000000000604482015260640161092e565b601354601054601154600f54600d5461151b9190612055565b6115259190612055565b61152f9190612055565b611539908561215d565b6115439190612193565b9150601354600e5484611556919061215d565b6115609190612193565b90505b306000908152600160205260409020546016546015549082101590600160a01b900460ff161580156115a257506015546001600160a01b038781169116145b80156115b75750601554600160a81b900460ff165b80156115db57506015546001600160a01b0316600090815260016020526040812054115b15611701578015611701576016549150600080600d54600f546011546010546116049190612055565b61160e9190612055565b6116189190612055565b111561167c57600d54600f546011546010546116349190612055565b61163e9190612055565b6116489190612055565b600f5460115460105461165b9190612055565b6116659190612055565b61166f908561215d565b6116799190612193565b90505b600d546000901561169857611691828561217c565b90506116c1565b6000600f546011546010546116ad9190612055565b6116b79190612055565b11156116c1578391505b6000600f546011546010546116d69190612055565b6116e09190612055565b11156116ef576116ef8261194e565b80156116fe576116fe81611a5c565b50505b600061170d8486612055565b611717908761217c565b3060009081526001602052604081208054929350879290919061173b908490612055565b90915550506001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead1660009081526001602052604081208054869290611788908490612055565b90915550506001600160a01b0388166000908152600160205260409020546117b190879061217c565b6001600160a01b03808a1660009081526001602052604080822093909355908916815290812080548392906117e7908490612055565b90915550508315611860577f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161185791815260200190565b60405180910390a35b84156118a75760405185815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118ec91815260200190565b60405180910390a35050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6015805460ff60a01b1916600160a01b179055601154600f546010546000929161197791612055565b6119819190612055565b90504761198d83611b44565b6000611999824761217c565b9050600083601054836119ac919061215d565b6119b69190612193565b9050600084600f54846119c9919061215d565b6119d39190612193565b9050600085601154856119e6919061215d565b6119f09190612193565b90508215611a0e57600a54611a0e906001600160a01b031684611cad565b8115611a2a57600b54611a2a906001600160a01b031683611cad565b8015611a4657600c54611a46906001600160a01b031682611cad565b50506015805460ff60a01b191690555050505050565b6015805460ff60a01b1916600160a01b1790556000611a7c600283612193565b90506000611a8a828461217c565b905047611a9683611b44565b6000611aa2824761217c565b9050611aae8382611ce8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a14715611b3057600a546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611b2e573d6000803e3d6000fd5b505b50506015805460ff60a01b19169055505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b7957611b796121b5565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0591906121cb565b81600181518110611c1857611c186121b5565b6001600160a01b039283166020918202929092010152601454611c3e9130911684610ff5565b60145460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c779085906000908690309042906004016121e8565b600060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ce3573d6000803e3d6000fd5b505050565b601454611d009030906001600160a01b031684610ff5565b6014546001600160a01b031663f305d719823085600080611d296000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611dc59190612259565b5050505050565b600060208083528351808285015260005b81811015611df957858101830151858201604001528201611ddd565b81811115611e0b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ff257600080fd5b60008060408385031215611e4957600080fd5b8235611e5481611e21565b946020939093013593505050565b600080600060608486031215611e7757600080fd5b8335611e8281611e21565b92506020840135611e9281611e21565b91506040840135611ea281611e21565b809150509250925092565b600080600060608486031215611ec257600080fd5b8335611ecd81611e21565b92506020840135611edd81611e21565b929592945050506040919091013590565b600060208284031215611f0057600080fd5b8135611f0b81611e21565b9392505050565b600080600080600060a08688031215611f2a57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b80358015158114611f5d57600080fd5b919050565b60008060408385031215611f7557600080fd5b8235611f8081611e21565b9150611f8e60208401611f4d565b90509250929050565b600060208284031215611fa957600080fd5b5035919050565b600060208284031215611fc257600080fd5b611f0b82611f4d565b60008060408385031215611fde57600080fd5b8235611fe981611e21565b91506020830135611ff981611e21565b809150509250929050565b600181811c9082168061201857607f821691505b6020821081141561203957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156120685761206861203f565b500190565b600181815b808511156120a857816000190482111561208e5761208e61203f565b8085161561209b57918102915b93841c9390800290612072565b509250929050565b6000826120bf575060016108a4565b816120cc575060006108a4565b81600181146120e257600281146120ec57612108565b60019150506108a4565b60ff8411156120fd576120fd61203f565b50506001821b6108a4565b5060208310610133831016604e8410600b841016171561212b575081810a6108a4565b612135838361206d565b80600019048211156121495761214961203f565b029392505050565b6000611f0b83836120b0565b60008160001904831182151516156121775761217761203f565b500290565b60008282101561218e5761218e61203f565b500390565b6000826121b057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156121dd57600080fd5b8151611f0b81611e21565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122385784516001600160a01b031683529383019391830191600101612213565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561226e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e6c4a50ab531e534f30d6a3f1bc864f0914ec936542f8419b6002a97f8695bfc64736f6c63430008090033

Deployed Bytecode Sourcemap

12572:17432:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13335:103;;;;;;;;;;-1:-1:-1;13335:103:0;;;;-1:-1:-1;;;;;13335:103:0;;;;;;-1:-1:-1;;;;;194:55:1;;;176:74;;164:2;149:18;13335:103:0;;;;;;;;16235:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16757:210::-;;;;;;;;;;-1:-1:-1;16757:210:0;;;;;:::i;:::-;;:::i;:::-;;;1507:14:1;;1500:22;1482:41;;1470:2;1455:18;16757:210:0;1342:187:1;13117:96:0;;;;;;;;;;;;;;;20243:539;;;;;;;;;;-1:-1:-1;20243:539:0;;;;;:::i;:::-;;:::i;:::-;;14187:65;;;;;;;;;;;;;;;;;;;2469:25:1;;;2457:2;2442:18;14187:65:0;2323:177:1;13907:41:0;;;;;;;;;;-1:-1:-1;13907:41:0;;;;-1:-1:-1;;;;;13907:41:0;;;16520:102;;;;;;;;;;-1:-1:-1;16602:12:0;;16520:102;;22309:422;;;;;;;;;;-1:-1:-1;22309:422:0;;;;;:::i;:::-;;:::i;16425:87::-;;;;;;;;;;-1:-1:-1;16495:9:0;;16425:87;;12937:29;;;;;;;;;;;;;;;;17572:297;;;;;;;;;;-1:-1:-1;17572:297:0;;;;;:::i;:::-;;:::i;19828:168::-;;;;;;;;;;-1:-1:-1;19828:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;19956:32:0;19927:4;19956:32;;;:23;:32;;;;;;;;;19828:168;13220:108;;;;;;;;;;-1:-1:-1;13220:108:0;;;;-1:-1:-1;;;;;13220:108:0;;;12973:57;;;;;;;;;;;;;;;;18330:113;;;;;;;;;;-1:-1:-1;18330:113:0;;;;;:::i;:::-;;:::i;13955:28::-;;;;;;;;;;-1:-1:-1;13955:28:0;;;;-1:-1:-1;;;;;13955:28:0;;;14020:40;;;;;;;;;;-1:-1:-1;14020:40:0;;;;-1:-1:-1;;;14020:40:0;;;;;;18898:169;;;;;;;;;;-1:-1:-1;18898:169:0;;;;;:::i;:::-;;:::i;16630:119::-;;;;;;;;;;-1:-1:-1;16630:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;16723:18:0;16696:7;16723:18;;;:9;:18;;;;;;;16630:119;13758:100;;;;;;;;;;;;;;;;11691:103;;;;;;;;;;;;;:::i;20790:837::-;;;;;;;;;;-1:-1:-1;20790:837:0;;;;;:::i;:::-;;:::i;20004:231::-;;;;;;;;;;-1:-1:-1;20004:231:0;;;;;:::i;:::-;;:::i;11050:87::-;;;;;;;;;;-1:-1:-1;11096:7:0;11123:6;-1:-1:-1;;;;;11123:6:0;11050:87;;21635:261;;;;;;;;;;-1:-1:-1;21635:261:0;;;;;:::i;:::-;;:::i;16328:89::-;;;;;;;;;;;;;:::i;17877:445::-;;;;;;;;;;-1:-1:-1;17877:445:0;;;;;:::i;:::-;;:::i;22085:216::-;;;;;;;;;;-1:-1:-1;22085:216:0;;;;;:::i;:::-;;:::i;18697:193::-;;;;;;;;;;-1:-1:-1;18697:193:0;;;;;:::i;:::-;-1:-1:-1;;;;;18834:48:0;18805:4;18834:48;;;:33;:48;;;;;;;;;18697:193;19075:295;;;;;;;;;;-1:-1:-1;19075:295:0;;;;;:::i;:::-;;:::i;19378:442::-;;;;;;;;;;-1:-1:-1;19378:442:0;;;;;:::i;:::-;;:::i;16134:89::-;;;;;;;;;;-1:-1:-1;16134:89:0;;;;;:::i;:::-;;:::i;21904:173::-;;;;;;;;;;-1:-1:-1;21904:173:0;;;;;:::i;:::-;;:::i;18571:118::-;;;;;;;;;;-1:-1:-1;18571:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;18658:23:0;18634:4;18658:23;;;:18;:23;;;;;;;;;18571:118;14108:72;;;;;;;;;;;;;;;;14067:32;;;;;;;;;;-1:-1:-1;14067:32:0;;;;-1:-1:-1;;;14067:32:0;;;;;;17363:201;;;;;;;;;;-1:-1:-1;17363:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;17529:18:0;;;17497:7;17529:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17363:201;18451:112;;;;;;;;;;-1:-1:-1;18451:112:0;;;;;:::i;:::-;;:::i;11949:201::-;;;;;;;;;;-1:-1:-1;11949:201:0;;;;;:::i;:::-;;:::i;13445:103::-;;;;;;;;;;-1:-1:-1;13445:103:0;;;;-1:-1:-1;;;;;13445:103:0;;;16235:85;16274:13;16307:5;16300:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16235:85;:::o;16757:210::-;16876:4;16898:39;9627:10;16921:7;16930:6;16898:8;:39::i;:::-;-1:-1:-1;16955:4:0;16757:210;;;;;:::o;20243:539::-;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;20450:32:0;::::1;::::0;;::::1;::::0;:80:::1;;-1:-1:-1::0;;;;;;20503:27:0;::::1;::::0;::::1;20450:80;:128;;;;-1:-1:-1::0;;;;;;20551:27:0;::::1;::::0;::::1;20450:128;20428:204;;;::::0;-1:-1:-1;;;20428:204:0;;5769:2:1;20428:204:0::1;::::0;::::1;5751:21:1::0;5808:2;5788:18;;;5781:30;5847:28;5827:18;;;5820:56;5893:18;;20428:204:0::1;;;;;;;;;20643:22;:43:::0;;-1:-1:-1;;;;;20643:43:0;;::::1;-1:-1:-1::0;;;;;;20643:43:0;;::::1;;::::0;;;20697:17:::1;:33:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20741:17:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;20243:539::o;22309:422::-;22449:4;22466:36;22476:6;22484:9;22495:6;22466:9;:36::i;:::-;-1:-1:-1;;;;;22540:19:0;;22513:24;22540:19;;;:11;:19;;;;;;;;9627:10;22540:33;;;;;;;;22606:26;;;;22584:117;;;;-1:-1:-1;;;22584:117:0;;6124:2:1;22584:117:0;;;6106:21:1;6163:2;6143:18;;;6136:30;6202:34;6182:18;;;6175:62;-1:-1:-1;;;6253:18:1;;;6246:39;6302:19;;22584:117:0;5922:405:1;22584:117:0;-1:-1:-1;22719:4:0;;22309:422;-1:-1:-1;;;;22309:422:0:o;17572:297::-;9627:10;17687:4;17781:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17781:34:0;;;;;;;;;;17687:4;;17709:130;;17759:7;;17781:47;;17818:10;;17781:47;:::i;:::-;17709:8;:130::i;18330:113::-;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;18401:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;18401:34:0::1;18431:4;18401:34;::::0;;18330:113::o;18898:169::-;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;19010:42:0::1;;::::0;;;:33:::1;:42;::::0;;;;:49;;-1:-1:-1;;19010:49:0::1;19055:4;19010:49;::::0;;18898:169::o;11691:103::-;10936:13;:11;:13::i;:::-;11756:30:::1;11783:1;11756:18;:30::i;:::-;11691:103::o:0;20790:837::-;10936:13;:11;:13::i;:::-;21188:3:::1;21157:10:::0;21127;21097;21027:50:::1;21062:15:::0;21027;:50:::1;:::i;:::-;:80;;;;:::i;:::-;:110;;;;:::i;:::-;:140;;;;:::i;:::-;:164;;21005:240;;;::::0;-1:-1:-1;;;21005:240:0;;6799:2:1;21005:240:0::1;::::0;::::1;6781:21:1::0;6838:2;6818:18;;;6811:30;6877:28;6857:18;;;6850:56;6923:18;;21005:240:0::1;6597:350:1::0;21005:240:0::1;21256:13;:31:::0;;;21298:13:::1;:31:::0;;;21340:8:::1;:21:::0;;;21372:8:::1;:21:::0;;;21404:8:::1;:21:::0;;;21415:10;21314:15;21351:10;21463:37:::1;21383:10:::0;21272:15;21463:37:::1;:::i;:::-;:61;;;;:::i;:::-;:90;;;;:::i;:::-;:114;;;;:::i;:::-;21436:11;:141:::0;;;21593:26:::1;::::0;2469:25:1;;;21593:26:0::1;::::0;2457:2:1;2442:18;21593:26:0::1;;;;;;;20790:837:::0;;;;;:::o;20004:231::-;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;20118:34:0;::::1;;::::0;;;:23:::1;:34;::::0;;;;;;;;:43;;-1:-1:-1;;20118:43:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20177:50;;7120:74:1;;;7210:18;;;7203:50;20177::0::1;::::0;7093:18:1;20177:50:0::1;;;;;;;20004:231:::0;;:::o;21635:261::-;10936:13;:11;:13::i;:::-;21806:9:::1;::::0;21802:13:::1;::::0;:2:::1;:13;:::i;:::-;21785:30;::::0;:14;:30:::1;:::i;:::-;21753:29;:62:::0;;;21831:57:::1;::::0;2469:25:1;;;21831:57:0::1;::::0;2457:2:1;2442:18;21831:57:0::1;;;;;;;;21635:261:::0;:::o;16328:89::-;16369:13;16402:7;16395:14;;;;;:::i;17877:445::-;9627:10;17997:4;18046:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18046:34:0;;;;;;;;;;18113:35;;;;18091:123;;;;-1:-1:-1;;;18091:123:0;;9013:2:1;18091:123:0;;;8995:21:1;9052:2;9032:18;;;9025:30;9091:34;9071:18;;;9064:62;-1:-1:-1;;;9142:18:1;;;9135:36;9188:19;;18091:123:0;8811:402:1;18091:123:0;18225:67;9627:10;18248:7;18257:34;18276:15;18257:16;:34;:::i;18225:67::-;-1:-1:-1;18310:4:0;;17877:445;-1:-1:-1;;;17877:445:0:o;22085:216::-;22207:4;22229:42;9627:10;22253:9;22264:6;22229:9;:42::i;19075:295::-;10936:13;:11;:13::i;:::-;19218::::1;::::0;-1:-1:-1;;;;;19207:24:0;;::::1;19218:13:::0;::::1;19207:24;;19185:116;;;::::0;-1:-1:-1;;;19185:116:0;;9550:2:1;19185:116:0::1;::::0;::::1;9532:21:1::0;9589:2;9569:18;;;9562:30;9628:34;9608:18;;;9601:62;-1:-1:-1;;;9679:18:1;;;9672:40;9729:19;;19185:116:0::1;9348:406:1::0;19185:116:0::1;-1:-1:-1::0;;;;;19312:42:0::1;19357:5;19312:42:::0;;;:33:::1;:42;::::0;;;;:50;;-1:-1:-1;;19312:50:0::1;::::0;;19075:295::o;19378:442::-;10936:13;:11;:13::i;:::-;19580:9:::1;::::0;19576:13:::1;::::0;:2:::1;:13;:::i;:::-;19564:25;::::0;:9:::1;:25;:::i;:::-;19551:9;::::0;19547:13:::1;::::0;:2:::1;:13;:::i;:::-;19522:38;::::0;:22;:38:::1;:::i;:::-;:67;;19500:169;;;::::0;-1:-1:-1;;;19500:169:0;;9961:2:1;19500:169:0::1;::::0;::::1;9943:21:1::0;10000:2;9980:18;;;9973:30;10039:34;10019:18;;;10012:62;10110:22;10090:18;;;10083:50;10150:19;;19500:169:0::1;9759:416:1::0;19500:169:0::1;19734:9;::::0;19730:13:::1;::::0;:2:::1;:13;:::i;:::-;19705:38;::::0;:22;:38:::1;:::i;:::-;19680:22;:63:::0;;;19759:53:::1;::::0;2469:25:1;;;19759:53:0::1;::::0;2457:2:1;2442:18;19759:53:0::1;2323:177:1::0;16134:89:0;10936:13;:11;:13::i;:::-;16195:12:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;16195:20:0::1;-1:-1:-1::0;;;;16195:20:0;;::::1;::::0;;;::::1;::::0;;16134:89::o;21904:173::-;10936:13;:11;:13::i;:::-;21983:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;21983:32:0::1;-1:-1:-1::0;;;;21983:32:0;;::::1;;::::0;;22031:38:::1;::::0;::::1;::::0;::::1;::::0;22007:8;1507:14:1;1500:22;1482:41;;1470:2;1455:18;;1342:187;18451:112:0;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;18520:27:0::1;18550:5;18520:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;18520:35:0::1;::::0;;18451:112::o;11949:201::-;10936:13;:11;:13::i;:::-;-1:-1:-1;;;;;12038:22:0;::::1;12030:73;;;::::0;-1:-1:-1;;;12030:73:0;;10382:2:1;12030:73:0::1;::::0;::::1;10364:21:1::0;10421:2;10401:18;;;10394:30;10460:34;10440:18;;;10433:62;-1:-1:-1;;;10511:18:1;;;10504:36;10557:19;;12030:73:0::1;10180:402:1::0;12030:73:0::1;12114:28;12133:8;12114:18;:28::i;:::-;11949:201:::0;:::o;16975:380::-;-1:-1:-1;;;;;17111:19:0;;17103:69;;;;-1:-1:-1;;;17103:69:0;;10789:2:1;17103:69:0;;;10771:21:1;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:1;;;10911:35;10963:19;;17103:69:0;10587:401:1;17103:69:0;-1:-1:-1;;;;;17191:21:0;;17183:69;;;;-1:-1:-1;;;17183:69:0;;11195:2:1;17183:69:0;;;11177:21:1;11234:2;11214:18;;;11207:30;11273:34;11253:18;;;11246:62;-1:-1:-1;;;11324:18:1;;;11317:33;11367:19;;17183:69:0;10993:399:1;17183:69:0;-1:-1:-1;;;;;17263:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17315:32;;2469:25:1;;;17315:32:0;;2442:18:1;17315:32:0;;;;;;;;16975:380;;;:::o;11215:132::-;11096:7;11123:6;-1:-1:-1;;;;;11123:6:0;9627:10;11279:23;11271:68;;;;-1:-1:-1;;;11271:68:0;;11599:2:1;11271:68:0;;;11581:21:1;;;11618:18;;;11611:30;11677:34;11657:18;;;11650:62;11729:18;;11271:68:0;11397:356:1;22834:3847:0;-1:-1:-1;;;;;22974:20:0;;22966:71;;;;-1:-1:-1;;;22966:71:0;;11960:2:1;22966:71:0;;;11942:21:1;11999:2;11979:18;;;11972:30;12038:34;12018:18;;;12011:62;-1:-1:-1;;;12089:18:1;;;12082:36;12135:19;;22966:71:0;11758:402:1;22966:71:0;-1:-1:-1;;;;;23070:23:0;;23048:109;;;;-1:-1:-1;;;23048:109:0;;12367:2:1;23048:109:0;;;12349:21:1;12406:2;12386:18;;;12379:30;12445:34;12425:18;;;12418:62;-1:-1:-1;;;12496:18:1;;;12489:34;12540:19;;23048:109:0;12165:400:1;23048:109:0;-1:-1:-1;;;;;23176:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;23176:27:0;23168:69;;;;-1:-1:-1;;;23168:69:0;;12772:2:1;23168:69:0;;;12754:21:1;12811:2;12791:18;;;12784:30;12850:31;12830:18;;;12823:59;12899:18;;23168:69:0;12570:353:1;23168:69:0;-1:-1:-1;;;;;23269:44:0;;;;;;:33;:44;;;;;;;;23268:45;:66;;;;-1:-1:-1;11096:7:0;11123:6;-1:-1:-1;;;;;23317:17:0;;;11123:6;;23317:17;;23268:66;23250:269;;;23420:22;;23410:6;23387:20;23397:9;-1:-1:-1;;;;;16723:18:0;16696:7;16723:18;;;:9;:18;;;;;;;16630:119;23387:20;:29;;;;:::i;:::-;:55;;23361:146;;;;-1:-1:-1;;;23361:146:0;;13130:2:1;23361:146:0;;;13112:21:1;13169:2;13149:18;;;13142:30;13208:31;13188:18;;;13181:59;13257:18;;23361:146:0;12928:353:1;23361:146:0;11096:7;11123:6;-1:-1:-1;;;;;23532:17:0;;;11123:6;;23532:17;23529:190;;;-1:-1:-1;;;;;23565:20:0;;;;;;:9;:20;;;;;:28;;23587:6;;23565:20;:28;;23587:6;;23565:28;:::i;:::-;;;;-1:-1:-1;;;;;;;23608:17:0;;;;;;:9;:17;;;;;:25;;23627:6;;23608:17;:25;;23627:6;;23608:25;:::i;:::-;;;;;;;;23669:9;-1:-1:-1;;;;;23653:33:0;23662:6;-1:-1:-1;;;;;23653:33:0;;23679:6;23653:33;;;;2469:25:1;;2457:2;2442:18;;2323:177;23529:190:0;-1:-1:-1;;;;;23812:31:0;;23731:16;23812:31;;;:23;:31;;;;;;23731:16;;23812:31;;;:82;;-1:-1:-1;;;;;;23860:34:0;;;;;;:23;:34;;;;;;;;23812:82;23794:614;;;-1:-1:-1;;;;;23925:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;23955:29:0;;;;;;:18;:29;;;;;;;;23925:59;23921:476;;;-1:-1:-1;24016:1:0;;-1:-1:-1;24016:1:0;23921:476;;;24096:12;;-1:-1:-1;;;24096:12:0;;;;24088:48;;;;-1:-1:-1;;;24088:48:0;;13488:2:1;24088:48:0;;;13470:21:1;13527:2;13507:18;;;13500:30;13566:26;13546:18;;;13539:54;13610:18;;24088:48:0;13286:348:1;24088:48:0;24301:14;;24261:13;;24250:8;;24239;;24223:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:51;;;;:::i;:::-;24188:87;;:6;:87;:::i;:::-;24187:129;;;;:::i;:::-;24155:161;;24367:14;;24355:8;;24346:6;:17;;;;:::i;:::-;24345:36;;;;:::i;:::-;24335:46;;23921:476;24469:4;24420:28;16723:18;;;:9;:18;;;;;;24552:29;;24611:16;;24515:66;;;;;-1:-1:-1;;;24611:16:0;;;;24610:17;:60;;;;-1:-1:-1;24657:13:0;;-1:-1:-1;;;;;24644:26:0;;;24657:13;;24644:26;24610:60;:98;;;;-1:-1:-1;24687:21:0;;-1:-1:-1;;;24687:21:0;;;;24610:98;:143;;;;-1:-1:-1;24735:13:0;;-1:-1:-1;;;;;24735:13:0;24752:1;16723:18;;;:9;:18;;;;;;24725:28;24610:143;24592:1549;;;24784:19;24780:1350;;;24847:29;;24824:52;;24897:31;25005:1;24989:13;;24978:8;;24967;;24951:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:51;;;;:::i;:::-;:55;24947:327;;;25240:13;;25229:8;;25218;;25202:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:51;;;;:::i;:::-;25163:8;;25152;;25136:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;25083:89;;:20;:89;:::i;:::-;25082:172;;;;:::i;:::-;25031:223;;24947:327;25339:13;;25294:22;;25339:17;25335:371;;25423:73;25472:23;25423:20;:73;:::i;:::-;25381:115;;25335:371;;;25587:1;25576:8;;25565;;25549:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:39;25545:142;;;25643:20;25617:46;;25545:142;25832:1;25821:8;;25810;;25794:13;;:24;;;;:::i;:::-;:35;;;;:::i;:::-;:39;25790:123;;;25858:35;25869:23;25858:10;:35::i;:::-;25935:18;;25931:184;;26065:30;26080:14;26065;:30::i;:::-;24805:1325;;24780:1350;26153:22;26188:18;26199:7;26188:8;:18;:::i;:::-;26178:29;;:6;:29;:::i;:::-;26236:4;26218:24;;;;:9;:24;;;;;:36;;26153:54;;-1:-1:-1;26246:8:0;;26218:24;;;:36;;26246:8;;26218:36;:::i;:::-;;;;-1:-1:-1;;;;;;;26275:17:0;26265:28;;;;;:9;:28;;;;;:39;;26297:7;;26265:28;:39;;26297:7;;26265:39;:::i;:::-;;;;-1:-1:-1;;;;;;;26335:17:0;;;;;;:9;:17;;;;;;:26;;26355:6;;26335:26;:::i;:::-;-1:-1:-1;;;;;26315:17:0;;;;;;;:9;:17;;;;;;:46;;;;26372:20;;;;;;;;:38;;26396:14;;26315:17;26372:38;;26396:14;;26372:38;:::i;:::-;;;;-1:-1:-1;;26425:11:0;;26421:93;;26475:17;-1:-1:-1;;;;;26458:44:0;26467:6;-1:-1:-1;;;;;26458:44:0;;26494:7;26458:44;;;;2469:25:1;;2457:2;2442:18;;2323:177;26458:44:0;;;;;;;;26421:93;26528:12;;26524:91;;26562:41;;2469:25:1;;;26587:4:0;;-1:-1:-1;;;;;26562:41:0;;;;;2457:2:1;2442:18;26562:41:0;;;;;;;26524:91;26647:9;-1:-1:-1;;;;;26630:43:0;26639:6;-1:-1:-1;;;;;26630:43:0;;26658:14;26630:43;;;;2469:25:1;;2457:2;2442:18;;2323:177;26630:43:0;;;;;;;;22955:3726;;;;;22834:3847;;;:::o;12310:191::-;12384:16;12403:6;;-1:-1:-1;;;;;12420:17:0;;;-1:-1:-1;;;;;;12420:17:0;;;;;;12453:40;;12403:6;;;;;;;12453:40;;12384:16;12453:40;12373:128;12310:191;:::o;26689:944::-;14751:16;:23;;-1:-1:-1;;;;14751:23:0;-1:-1:-1;;;14751:23:0;;;26819:8:::1;::::0;26808::::1;::::0;26792:13:::1;::::0;14751:23;;26819:8;26792:24:::1;::::0;::::1;:::i;:::-;:35;;;;:::i;:::-;26771:56:::0;-1:-1:-1;26863:21:0::1;26895:39;26912:21:::0;26895:16:::1;:39::i;:::-;26945:26;26974:40;26999:14:::0;26974:21:::1;:40;:::i;:::-;26945:69;;27025:24;27107:10;27075:13;;27053:18;:36;;;;:::i;:::-;27052:66;;;;:::i;:::-;27025:93;;27129:19;27188:10;27174:8;;27152:18;:31;;;;:::i;:::-;27151:48;;;;:::i;:::-;27129:70;;27210:19;27269:10;27255:8;;27233:18;:31;;;;:::i;:::-;27232:48;;;;:::i;:::-;27210:70:::0;-1:-1:-1;27295:20:0;;27291:115:::1;;27353:22;::::0;27332:62:::1;::::0;-1:-1:-1;;;;;27353:22:0::1;27377:16:::0;27332:20:::1;:62::i;:::-;27420:15:::0;;27416:100:::1;;27473:17;::::0;27452:52:::1;::::0;-1:-1:-1;;;;;27473:17:0::1;27492:11:::0;27452:20:::1;:52::i;:::-;27530:15:::0;;27526:100:::1;;27583:17;::::0;27562:52:::1;::::0;-1:-1:-1;;;;;27583:17:0::1;27602:11:::0;27562:20:::1;:52::i;:::-;-1:-1:-1::0;;14797:16:0;:24;;-1:-1:-1;;;;14797:24:0;;;-1:-1:-1;;;;;26689:944:0:o;27789:1094::-;14751:16;:23;;-1:-1:-1;;;;14751:23:0;-1:-1:-1;;;14751:23:0;;;;27940:24:::1;27963:1;27940:20:::0;:24:::1;:::i;:::-;27925:39:::0;-1:-1:-1;27975:17:0::1;27995:27;27925:39:::0;27995:20;:27:::1;:::i;:::-;27975:47:::0;-1:-1:-1;28325:21:0::1;28391:22;28408:4:::0;28391:16:::1;:22::i;:::-;28544:18;28565:40;28590:14:::0;28565:21:::1;:40;:::i;:::-;28544:61;;28655:35;28668:9;28679:10;28655:12;:35::i;:::-;28708:43;::::0;;14063:25:1;;;14119:2;14104:18;;14097:34;;;14147:18;;;14140:34;;;28708:43:0::1;::::0;14051:2:1;14036:18;28708:43:0::1;;;;;;;28768:21;:25:::0;28764:112:::1;;28810:22;::::0;:54:::1;::::0;-1:-1:-1;;;;;28810:22:0;;::::1;::::0;28842:21:::1;28810:54:::0;::::1;;;::::0;:22:::1;:54:::0;:22;:54;28842:21;28810:22;:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28764:112;-1:-1:-1::0;;14797:16:0;:24;;-1:-1:-1;;;;14797:24:0;;;-1:-1:-1;;;27789:1094:0:o;28891:589::-;29041:16;;;29055:1;29041:16;;;;;;;;29017:21;;29041:16;;;;;;;;;;-1:-1:-1;29041:16:0;29017:40;;29086:4;29068;29073:1;29068:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29068:23:0;;;:7;;;;;;;;;;:23;;;;29112:15;;:22;;;-1:-1:-1;;;29112:22:0;;;;:15;;;;;:20;;:22;;;;;29068:7;;29112:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29102:4;29107:1;29102:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29102:32:0;;;:7;;;;;;;;;:32;29179:15;;29147:62;;29164:4;;29179:15;29197:11;29147:8;:62::i;:::-;29248:15;;:224;;-1:-1:-1;;;29248:224:0;;-1:-1:-1;;;;;29248:15:0;;;;:66;;:224;;29329:11;;29248:15;;29399:4;;29426;;29446:15;;29248:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28946:534;28891:589;:::o;27641:140::-;27747:26;;-1:-1:-1;;;;;27747:18:0;;;:26;;;;;27766:6;;27747:26;;;;27766:6;27747:18;:26;;;;;;;;;;;;;;;;;;;;;27641:140;;:::o;29488:513::-;29668:15;;29636:62;;29653:4;;-1:-1:-1;;;;;29668:15:0;29686:11;29636:8;:62::i;:::-;29741:15;;-1:-1:-1;;;;;29741:15:0;:31;29780:9;29813:4;29833:11;29741:15;;29945:7;11096;11123:6;-1:-1:-1;;;;;11123:6:0;;11050:87;29945:7;29741:252;;;;;;-1:-1:-1;;;;;;29741:252:0;;;-1:-1:-1;;;;;16118:15:1;;;29741:252:0;;;16100:34:1;16150:18;;;16143:34;;;;16193:18;;;16186:34;;;;16236:18;;;16229:34;16300:15;;;16279:19;;;16272:44;29967:15:0;16332:19:1;;;16325:35;16011:19;;29741:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29488:513;;:::o;261:597:1:-;373:4;402:2;431;420:9;413:21;463:6;457:13;506:6;501:2;490:9;486:18;479:34;531:1;541:140;555:6;552:1;549:13;541:140;;;650:14;;;646:23;;640:30;616:17;;;635:2;612:26;605:66;570:10;;541:140;;;699:6;696:1;693:13;690:91;;;769:1;764:2;755:6;744:9;740:22;736:31;729:42;690:91;-1:-1:-1;842:2:1;821:15;-1:-1:-1;;817:29:1;802:45;;;;849:2;798:54;;261:597;-1:-1:-1;;;261:597:1:o;863:154::-;-1:-1:-1;;;;;942:5:1;938:54;931:5;928:65;918:93;;1007:1;1004;997:12;1022:315;1090:6;1098;1151:2;1139:9;1130:7;1126:23;1122:32;1119:52;;;1167:1;1164;1157:12;1119:52;1206:9;1193:23;1225:31;1250:5;1225:31;:::i;:::-;1275:5;1327:2;1312:18;;;;1299:32;;-1:-1:-1;;;1022:315:1:o;1765:553::-;1866:6;1874;1882;1935:2;1923:9;1914:7;1910:23;1906:32;1903:52;;;1951:1;1948;1941:12;1903:52;1990:9;1977:23;2009:31;2034:5;2009:31;:::i;:::-;2059:5;-1:-1:-1;2116:2:1;2101:18;;2088:32;2129:33;2088:32;2129:33;:::i;:::-;2181:7;-1:-1:-1;2240:2:1;2225:18;;2212:32;2253:33;2212:32;2253:33;:::i;:::-;2305:7;2295:17;;;1765:553;;;;;:::o;2762:456::-;2839:6;2847;2855;2908:2;2896:9;2887:7;2883:23;2879:32;2876:52;;;2924:1;2921;2914:12;2876:52;2963:9;2950:23;2982:31;3007:5;2982:31;:::i;:::-;3032:5;-1:-1:-1;3089:2:1;3074:18;;3061:32;3102:33;3061:32;3102:33;:::i;:::-;2762:456;;3154:7;;-1:-1:-1;;;3208:2:1;3193:18;;;;3180:32;;2762:456::o;3223:247::-;3282:6;3335:2;3323:9;3314:7;3310:23;3306:32;3303:52;;;3351:1;3348;3341:12;3303:52;3390:9;3377:23;3409:31;3434:5;3409:31;:::i;:::-;3459:5;3223:247;-1:-1:-1;;;3223:247:1:o;3475:454::-;3570:6;3578;3586;3594;3602;3655:3;3643:9;3634:7;3630:23;3626:33;3623:53;;;3672:1;3669;3662:12;3623:53;-1:-1:-1;;3695:23:1;;;3765:2;3750:18;;3737:32;;-1:-1:-1;3816:2:1;3801:18;;3788:32;;3867:2;3852:18;;3839:32;;-1:-1:-1;3918:3:1;3903:19;3890:33;;-1:-1:-1;3475:454:1;-1:-1:-1;3475:454:1:o;3934:160::-;3999:20;;4055:13;;4048:21;4038:32;;4028:60;;4084:1;4081;4074:12;4028:60;3934:160;;;:::o;4099:315::-;4164:6;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;4280:9;4267:23;4299:31;4324:5;4299:31;:::i;:::-;4349:5;-1:-1:-1;4373:35:1;4404:2;4389:18;;4373:35;:::i;:::-;4363:45;;4099:315;;;;;:::o;4419:180::-;4478:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:52;;;4547:1;4544;4537:12;4499:52;-1:-1:-1;4570:23:1;;4419:180;-1:-1:-1;4419:180:1:o;4604:::-;4660:6;4713:2;4701:9;4692:7;4688:23;4684:32;4681:52;;;4729:1;4726;4719:12;4681:52;4752:26;4768:9;4752:26;:::i;4789:388::-;4857:6;4865;4918:2;4906:9;4897:7;4893:23;4889:32;4886:52;;;4934:1;4931;4924:12;4886:52;4973:9;4960:23;4992:31;5017:5;4992:31;:::i;:::-;5042:5;-1:-1:-1;5099:2:1;5084:18;;5071:32;5112:33;5071:32;5112:33;:::i;:::-;5164:7;5154:17;;;4789:388;;;;;:::o;5182:380::-;5261:1;5257:12;;;;5304;;;5325:61;;5379:4;5371:6;5367:17;5357:27;;5325:61;5432:2;5424:6;5421:14;5401:18;5398:38;5395:161;;;5478:10;5473:3;5469:20;5466:1;5459:31;5513:4;5510:1;5503:15;5541:4;5538:1;5531:15;5395:161;;5182:380;;;:::o;6332:127::-;6393:10;6388:3;6384:20;6381:1;6374:31;6424:4;6421:1;6414:15;6448:4;6445:1;6438:15;6464:128;6504:3;6535:1;6531:6;6528:1;6525:13;6522:39;;;6541:18;;:::i;:::-;-1:-1:-1;6577:9:1;;6464:128::o;7264:422::-;7353:1;7396:5;7353:1;7410:270;7431:7;7421:8;7418:21;7410:270;;;7490:4;7486:1;7482:6;7478:17;7472:4;7469:27;7466:53;;;7499:18;;:::i;:::-;7549:7;7539:8;7535:22;7532:55;;;7569:16;;;;7532:55;7648:22;;;;7608:15;;;;7410:270;;;7414:3;7264:422;;;;;:::o;7691:806::-;7740:5;7770:8;7760:80;;-1:-1:-1;7811:1:1;7825:5;;7760:80;7859:4;7849:76;;-1:-1:-1;7896:1:1;7910:5;;7849:76;7941:4;7959:1;7954:59;;;;8027:1;8022:130;;;;7934:218;;7954:59;7984:1;7975:10;;7998:5;;;8022:130;8059:3;8049:8;8046:17;8043:43;;;8066:18;;:::i;:::-;-1:-1:-1;;8122:1:1;8108:16;;8137:5;;7934:218;;8236:2;8226:8;8223:16;8217:3;8211:4;8208:13;8204:36;8198:2;8188:8;8185:16;8180:2;8174:4;8171:12;8167:35;8164:77;8161:159;;;-1:-1:-1;8273:19:1;;;8305:5;;8161:159;8352:34;8377:8;8371:4;8352:34;:::i;:::-;8422:6;8418:1;8414:6;8410:19;8401:7;8398:32;8395:58;;;8433:18;;:::i;:::-;8471:20;;7691:806;-1:-1:-1;;;7691:806:1:o;8502:131::-;8562:5;8591:36;8618:8;8612:4;8591:36;:::i;8638:168::-;8678:7;8744:1;8740;8736:6;8732:14;8729:1;8726:21;8721:1;8714:9;8707:17;8703:45;8700:71;;;8751:18;;:::i;:::-;-1:-1:-1;8791:9:1;;8638:168::o;9218:125::-;9258:4;9286:1;9283;9280:8;9277:34;;;9291:18;;:::i;:::-;-1:-1:-1;9328:9:1;;9218:125::o;13639:217::-;13679:1;13705;13695:132;;13749:10;13744:3;13740:20;13737:1;13730:31;13784:4;13781:1;13774:15;13812:4;13809:1;13802:15;13695:132;-1:-1:-1;13841:9:1;;13639:217::o;14317:127::-;14378:10;14373:3;14369:20;14366:1;14359:31;14409:4;14406:1;14399:15;14433:4;14430:1;14423:15;14449:251;14519:6;14572:2;14560:9;14551:7;14547:23;14543:32;14540:52;;;14588:1;14585;14578:12;14540:52;14620:9;14614:16;14639:31;14664:5;14639:31;:::i;14705:1026::-;14967:4;15015:3;15004:9;15000:19;15046:6;15035:9;15028:25;15072:2;15110:6;15105:2;15094:9;15090:18;15083:34;15153:3;15148:2;15137:9;15133:18;15126:31;15177:6;15212;15206:13;15243:6;15235;15228:22;15281:3;15270:9;15266:19;15259:26;;15320:2;15312:6;15308:15;15294:29;;15341:1;15351:218;15365:6;15362:1;15359:13;15351:218;;;15430:13;;-1:-1:-1;;;;;15426:62:1;15414:75;;15544:15;;;;15509:12;;;;15387:1;15380:9;15351:218;;;-1:-1:-1;;;;;;;15625:55:1;;;;15620:2;15605:18;;15598:83;-1:-1:-1;;;15712:3:1;15697:19;15690:35;15586:3;14705:1026;-1:-1:-1;;;14705:1026:1:o;16371:306::-;16459:6;16467;16475;16528:2;16516:9;16507:7;16503:23;16499:32;16496:52;;;16544:1;16541;16534:12;16496:52;16573:9;16567:16;16557:26;;16623:2;16612:9;16608:18;16602:25;16592:35;;16667:2;16656:9;16652:18;16646:25;16636:35;;16371:306;;;;;:::o

Swarm Source

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