ETH Price: $2,468.27 (-8.11%)

Token

MSNAI (MSNAI)
 

Overview

Max Total Supply

10,000,000 MSNAI

Holders

142 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
231,745.402736968839652454 MSNAI

Value
$0.00
0xa2f266acb2a7da942726cca03625799ff55ce2f2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

$MSNAI streamlines promotional efforts to maximize marketing impact, reaching a wider audience as efficiently as possible. With AI assistance, developers and investors can grow exposure effortlessly across social media platforms, enhancing visibility and engagement. Maximize your promo with $MSNAI

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MSNAI

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : MSN AI Bot.sol
/**
$MSNAI streamlines promotional efforts to maximize marketing impact, reaching a wider audience as efficiently as possible. 

Schedule Automated Posts
AI Assisted Chat Lock Raids
AI Assisted Content Creation


Telegram: https://t.me/MsnAiBotPortal
Twitter: https://twitter.com/MsnAiBot
Discord: https://discord.gg/VT7FMHkG 
Website: https://msnai.bot/
Gitbook: https://msnai-bot.gitbook.io/info/
*/


// SPDX-License-Identifier: MIT                                                                              
                                                   
pragma solidity 0.8.11;


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }


    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


interface IDexPair {
    function sync() external;
}


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


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


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


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


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


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


    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);


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


interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);


    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);


    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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


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


    uint256 private _totalSupply;


    string public _name;
    string public _symbol;


    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    function name() public view virtual override returns (string memory) {
        return _name;
    }


    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    function decimals() public view virtual override returns (uint8) {
        return 18;
    }


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


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


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


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


    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, 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, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }


        return true;
    }


    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, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }


        return true;
    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");


        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;


        emit Transfer(sender, recipient, amount);
    }


    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");


        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }


    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");


        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
   
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    bool public isBuyFeesUpdateEnabled;
    bool public isSellFeesUpdateEnabled;

    modifier buyFeesUpdateIsEnabled() {
        require(isBuyFeesUpdateEnabled, "Updating buy fees has been renounced");
        _;
    }

    modifier sellFeesUpdateIsEnabled() {
        require(isSellFeesUpdateEnabled, "Updating sell fees has been renounced");
        _;
    }

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

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


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
   
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
       
}


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


contract MSNAI is ERC20, Ownable {


    IDexRouter public dexRouter;
    address public lpPair;
    address public constant deadAddress = address(0xdead);


    bool private swapping;


    address public marketingWallet;
    address public developmentWallet;
    address public revshareWallet;
   
   
    uint256 private blockPenalty;


    uint256 public tradingActiveBlock = 0; // 0 means trading is not active


    uint256 public maxTxnAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
   
    uint256 public percentForLPBurn = 100; // 100 = 1%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
   
    uint256 public manualBurnFrequency = 1 hours;
    uint256 public lastManualLpBurnTime;


    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
   
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;


    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRevShareFee;
    uint256 public buyDevelopmentFee;
   
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellRevShareFee;
    uint256 public sellDevelopmentFee;
   
    uint256 public tokensForLiquidity; 
    uint256 public tokensForMarketing; 
    uint256 public tokensForDevelopment; 
    uint256 public tokensForRevShare;

   
    /******************/


    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedmaxTxnAmount;


    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;


    event ExcludeFromFees(address indexed account, bool isExcluded);


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


    event MarketingWalletUpdated(address indexed newWallet, address indexed oldWallet);


    event DevelopmentWalletUpdated(address indexed newWallet, address indexed oldWallet);


    event RevShareWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
   
    event AutoNukeLP(uint256 amount);
   
    event ManualNukeLP(uint256 amount);
   
    event OwnerForcedSwapBack(uint256 timestamp);

    event BuyFeesUpdateEnabled(bool indexed enabled);

    event SellFeesUpdateEnabled(bool indexed enabled);

    event BuyFeesUpdated(uint256 newBuyMarketingFee, uint256 newBuyLiquidityFee, uint256 newBuyRevShareFee, uint256 newBuyDevelopmentFee);

    event SellFeesUpdated(uint256 newSellMarketingFee, uint256 newSellLiquidityFee, uint256 newSellRevShareFee, uint256 newSellDevelopmentFee);

    event FunctionRenounced(address indexed renouncer, string indexed functionName);



    constructor() ERC20("MSNAI", "MSNAI") payable {
               
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyRevShareFee = 1;
        uint256 _buyDevelopmentFee = 1;


        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellRevShareFee = 1;
        uint256 _sellDevelopmentFee = 1;
       
        uint256 totalSupply = 10 * 1e6 * 1e18;
       
        maxTxnAmount = totalSupply * 5 / 100; // 5% of supply
        maxWallet = totalSupply * 5 / 100; // 5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap amount


        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyRevShareFee = _buyRevShareFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyRevShareFee + buyDevelopmentFee;
       
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellRevShareFee = _sellRevShareFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellRevShareFee + sellDevelopmentFee;
       
        marketingWallet = address(0xc4aEB15b65B465136FD159A846B25aDdc9DB00dB); // set as marketing wallet
        revshareWallet = address(0x8800679626529efF860b26eAaa8F149e6941B389); // set as Revshare wallet
        developmentWallet = address(msg.sender);


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(0xc4aEB15b65B465136FD159A846B25aDdc9DB00dB, true); // future owner wallet
       
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);

        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(0xc4aEB15b65B465136FD159A846B25aDdc9DB00dB, true);
       
        /*
            _createInitialSupply is an internal function that is only called here,
            and CANNOT be called ever again
        */
        _createInitialSupply(0xc4aEB15b65B465136FD159A846B25aDdc9DB00dB, totalSupply*20/100);
        _createInitialSupply(0x6c66e5d4eB1f6891AD27c5832425D054765dcF76, totalSupply*15/100);
        _createInitialSupply(0x1DBbBd6bE920bC21c7FdfbB250497b5bE6234D55, totalSupply*5/100);
        _createInitialSupply(0x6961E18DBfd604c96f7C15F54f5e11dCE21b881E, totalSupply*5/100);
        _createInitialSupply(0xBEE96b73eA2b4AA4219Ab54e43Db5cd2d69F2A0e, totalSupply*5/100);
        _createInitialSupply(address(this), totalSupply*50/100);
    }


    receive() external payable {


   
    }
       mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;
   
   
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
   
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
   
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTxnAmount lower than 0.5%");
        maxTxnAmount = newNum * (10**18);
    }


    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }
   
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedmaxTxnAmount[updAds] = isEx;
    }
   
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
   
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _revshareFee, uint256 _developmentFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyRevShareFee = _revshareFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyRevShareFee + buyDevelopmentFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
   
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _revshareFee, uint256 _developmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellRevShareFee = _revshareFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellRevShareFee + sellDevelopmentFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function renounceFunction(string memory functionName) external onlyOwner {
    if (keccak256(bytes(functionName)) == keccak256(bytes("updateBuyFees"))) {
        isBuyFeesUpdateEnabled = false; // Corrected to isBuyFeesUpdateEnabled
        emit FunctionRenounced(msg.sender, functionName);
        emit BuyFeesUpdateEnabled(false); // This line should be removed
    } else if (keccak256(bytes(functionName)) == keccak256(bytes("updateSellFees"))) {
        isSellFeesUpdateEnabled = false; // Corrected to isSellFeesUpdateEnabled
        emit FunctionRenounced(msg.sender, functionName);
        emit SellFeesUpdateEnabled(false); // This line should be removed
    } else {
        revert("Invalid function name");
    }
}


    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }


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


        _setAutomatedMarketMakerPair(pair, value);
    }


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


        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }


    function updateDevelopmentWallet(address newWallet) external onlyOwner {
        emit DevelopmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }


    function updateRevShareWallet(address newWallet) external onlyOwner {
        emit RevShareWalletUpdated(newWallet, revshareWallet);
        revshareWallet = newWallet;
    }

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


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackListedBot[to], "You have no power here!");
      require(!_isBlackListedBot[tx.origin], "You have no power here!");


         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
       
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping &&
                !_isExcludedFromFees[to] &&
                !_isExcludedFromFees[from]
            ){
               
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) {
                        require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
               
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) {
                        require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount.");
                }
                else if (!_isExcludedmaxTxnAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
       
        uint256 contractTokenBalance = balanceOf(address(this));
       
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;


        if(
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
           
            swapBack();


            swapping = false;
        }


        bool takeFee = !swapping;


        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
       
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to marketing wallet to allow potential refund.
            if(isPenaltyActive() && automatedMarketMakerPairs[from]){
                fees = amount * 99 / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForRevShare += fees * sellRevShareFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForRevShare += fees * sellRevShareFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForRevShare += fees * buyRevShareFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
            }
           
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
           
            amount -= fees;
        }


        super._transfer(from, to, amount);
    }


    function swapTokensForEth(uint256 tokenAmount) private {


        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();


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


        // make the swap
        dexRouter.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(dexRouter), tokenAmount);


        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForRevShare + tokensForDevelopment;
        bool success;
       
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}


        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
       
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
       
        uint256 initialETHBalance = address(this).balance;


        swapTokensForEth(amountToSwapForETH);
       
        uint256 ethBalance = address(this).balance - initialETHBalance;
       
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRevShare = ethBalance * tokensForRevShare / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDevelopment = ethBalance * tokensForDevelopment / (totalTokensToSwap - (tokensForLiquidity/2));
       
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForRevShare - ethForDevelopment;
       
        (success,) = address(developmentWallet).call{value: ethForDevelopment}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");
        (success,) = address(revshareWallet).call{value: ethForMarketing}("");
       
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
       
        // keep leftover ETH for revshare
       
    }


    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }


    function isPenaltyActive() public view returns (bool) {
        return tradingActiveBlock >= block.number - blockPenalty;
    }


    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
       
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(lpPair);
       
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent / 10000;
       
        if (amountToBurn > 0){
            super._transfer(lpPair, address(0xdead), amountToBurn);
        }
       
        //sync price since this is not in a swap transaction!
        IDexPair pair = IDexPair(lpPair);
        pair.sync();
        emit ManualNukeLP(amountToBurn);
    }

    function launch(uint256 _blockPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");


        blockPenalty = _blockPenalty;


        //update name/ticker
        _name = "MSNAI";
        _symbol = "MSNAI";


        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        lastLpBurnTime = block.timestamp;


        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;


        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");
        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            0xc4aEB15b65B465136FD159A846B25aDdc9DB00dB,
            block.timestamp
        );
    }

    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"amount","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyFeesUpdateEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyRevShareFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyDevelopmentFee","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"renouncer","type":"address"},{"indexed":true,"internalType":"string","name":"functionName","type":"string"}],"name":"FunctionRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"RevShareWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SellFeesUpdateEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellRevShareFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellDevelopmentFee","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","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":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":[],"name":"isBuyFeesUpdateEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPenaltyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellFeesUpdateEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"functionName","type":"string"}],"name":"renounceFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revshareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_revshareFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRevShareWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_revshareFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600c55606460105560118054600160ff199182168117909255610e1060128190556014556016805462ffffff19168317905560188054909116909117905560056080818152644d534e414960d81b60a081815261010060405260c084815260e0929092529192909162000078916003919062000622565b5080516200008e90600490602084019062000622565b5050506000620000a36200041560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600260018080838180806a084595161401484a000000606462000116826005620006de565b62000122919062000700565b600d55606462000134826005620006de565b62000140919062000700565b600f5561271062000153826005620006de565b6200015f919062000700565b600e55601a899055601b889055601c879055601d8690558587620001848a8c62000723565b62000190919062000723565b6200019c919062000723565b601955601f8590556020849055602183905560228290558183620001c1868862000723565b620001cd919062000723565b620001d9919062000723565b601e55600880546001600160a01b031990811673c4aeb15b65b465136fd159a846b25addc9db00db17909155600a80548216738800679626529eff860b26eaaa8f149e6941b38917905560098054909116331790556200024d620002456005546001600160a01b031690565b600162000419565b60085462000266906001600160a01b0316600162000419565b6200027330600162000419565b6200028261dead600162000419565b620002a373c4aeb15b65b465136fd159a846b25addc9db00db600162000419565b620002c2620002ba6005546001600160a01b031690565b6001620004c7565b600854620002db906001600160a01b03166001620004c7565b620002e8306001620004c7565b620002f761dead6001620004c7565b6200031873c4aeb15b65b465136fd159a846b25addc9db00db6001620004c7565b6200035273c4aeb15b65b465136fd159a846b25addc9db00db606462000340846014620006de565b6200034c919062000700565b6200053d565b6200037a736c66e5d4eb1f6891ad27c5832425d054765dcf7660646200034084600f620006de565b620003a2731dbbbd6be920bc21c7fdfbb250497b5be6234d55606462000340846005620006de565b620003ca736961e18dbfd604c96f7c15f54f5e11dce21b881e606462000340846005620006de565b620003f273bee96b73ea2b4aa4219ab54e43db5cd2d69f2a0e606462000340846005620006de565b6200040630606462000340846032620006de565b5050505050505050506200077b565b3390565b6005546001600160a01b03163314620004685760405162461bcd60e51b81526020600482018190526024820152600080516020620042c583398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620005125760405162461bcd60e51b81526020600482018190526024820152600080516020620042c583398151915260448201526064016200045f565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6001600160a01b038216620005955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200045f565b8060026000828254620005a9919062000723565b90915550506001600160a01b03821660009081526020819052604081208054839290620005d890849062000723565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000630906200073e565b90600052602060002090601f0160209004810192826200065457600085556200069f565b82601f106200066f57805160ff19168380011785556200069f565b828001600101855582156200069f579182015b828111156200069f57825182559160200191906001019062000682565b50620006ad929150620006b1565b5090565b5b80821115620006ad5760008155600101620006b2565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620006fb57620006fb620006c8565b500290565b6000826200071e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620007395762000739620006c8565b500190565b600181811c908216806200075357607f821691505b602082108114156200077557634e487b7160e01b600052602260045260246000fd5b50919050565b613b3a806200078b6000396000f3fe6080604052600436106104405760003560e01c80638da5cb5b11610234578063c876d0b91161012e578063e884f260116100b6578063f2fde38b1161007a578063f2fde38b14610c58578063f5648a4f14610c78578063f637434214610c8d578063f8b45b0514610ca3578063fe72b27a14610cb957600080fd5b8063e884f26014610be1578063ee40166e14610bf6578063ef8700e514610c0c578063f023f57314610c22578063f11a24d314610c4257600080fd5b8063d85ba063116100fd578063d85ba06314610b2f578063daf1c7a114610b45578063dd62ed3e14610b65578063e2f4560514610bab578063e7ad9fcd14610bc157600080fd5b8063c876d0b914610aca578063cf46f24c14610ae4578063d257b34f14610afa578063d28d885214610b1a57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a1b578063bbc0c74214610a4b578063c024666814610a6a578063c04a541414610a8a578063c18bc19514610aaa57600080fd5b8063a9059cbb14610990578063aacebbe3146109b0578063adee28ff146109d0578063b09f1266146109f0578063b204141114610a0557600080fd5b80639a7a23d6116102035780639a7a23d6146109045780639c9de429146109245780639ec22c0e14610944578063a457c2d71461095a578063a4c82a001461097a57600080fd5b80638da5cb5b1461089b57806392136913146108b9578063924de9b7146108cf57806395d89b41146108ef57600080fd5b8063313ce56711610345578063678ec388116102cd578063751039fc11610291578063751039fc146108105780637571336a1461082557806375f0a874146108455780637bce5a041461086557806385b12c7c1461087b57600080fd5b8063678ec388146107845780636a486a8e146107a55780636ddd1713146107bb57806370a08231146107db578063715018a6146107fb57600080fd5b80634a62bb65116103145780634a62bb65146106d75780634fbee193146106f157806351f205e41461072a57806358b69bc31461073f5780635f559fba1461075457600080fd5b8063313ce5671461065a578063395093511461067657806341c6e23c14610696578063452ed4f1146106b757600080fd5b80631a8145bb116103c857806324b9f3c11161039757806324b9f3c1146105de57806327c8f835146105f45780632c3e486c1461060a5780632e6ed7ef146106205780632e82f1a01461064057600080fd5b80631a8145bb146105705780631f3fed8f14610586578063203e727e1461059c57806323b872dd146105be57600080fd5b806318160ddd1161040f57806318160ddd14610503578063184c16c51461051857806318a94cf11461052e578063199ffc721461054457806319eab0421461055a57600080fd5b806306fdde031461044c5780630758d92414610477578063095ea7b3146104af578063156c2f35146104df57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610cd9565b60405161046e91906135c0565b60405180910390f35b34801561048357600080fd5b50600654610497906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b3480156104bb57600080fd5b506104cf6104ca366004613608565b610d6b565b604051901515815260200161046e565b3480156104eb57600080fd5b506104f5601c5481565b60405190815260200161046e565b34801561050f57600080fd5b506002546104f5565b34801561052457600080fd5b506104f560145481565b34801561053a57600080fd5b506104f560225481565b34801561055057600080fd5b506104f560105481565b34801561056657600080fd5b506104f560215481565b34801561057c57600080fd5b506104f560235481565b34801561059257600080fd5b506104f560245481565b3480156105a857600080fd5b506105bc6105b7366004613634565b610d81565b005b3480156105ca57600080fd5b506104cf6105d936600461364d565b610e5f565b3480156105ea57600080fd5b506104f560265481565b34801561060057600080fd5b5061049761dead81565b34801561061657600080fd5b506104f560125481565b34801561062c57600080fd5b506105bc61063b36600461368e565b610f09565b34801561064c57600080fd5b506011546104cf9060ff1681565b34801561066657600080fd5b506040516012815260200161046e565b34801561068257600080fd5b506104cf610691366004613608565b610fc2565b3480156106a257600080fd5b506005546104cf90600160a81b900460ff1681565b3480156106c357600080fd5b50600754610497906001600160a01b031681565b3480156106e357600080fd5b506016546104cf9060ff1681565b3480156106fd57600080fd5b506104cf61070c3660046136c0565b6001600160a01b031660009081526027602052604090205460ff1690565b34801561073657600080fd5b506105bc610ffe565b34801561074b57600080fd5b506104cf611107565b34801561076057600080fd5b506104cf61076f3660046136c0565b60286020526000908152604090205460ff1681565b34801561079057600080fd5b506005546104cf90600160a01b900460ff1681565b3480156107b157600080fd5b506104f5601e5481565b3480156107c757600080fd5b506016546104cf9062010000900460ff1681565b3480156107e757600080fd5b506104f56107f63660046136c0565b611121565b34801561080757600080fd5b506105bc61113c565b34801561081c57600080fd5b506105bc6111b0565b34801561083157600080fd5b506105bc6108403660046136f4565b6111e6565b34801561085157600080fd5b50600854610497906001600160a01b031681565b34801561087157600080fd5b506104f5601a5481565b34801561088757600080fd5b506105bc610896366004613634565b61123b565b3480156108a757600080fd5b506005546001600160a01b0316610497565b3480156108c557600080fd5b506104f5601f5481565b3480156108db57600080fd5b506105bc6108ea366004613729565b611674565b3480156108fb57600080fd5b506104616116ba565b34801561091057600080fd5b506105bc61091f3660046136f4565b6116c9565b34801561093057600080fd5b50600a54610497906001600160a01b031681565b34801561095057600080fd5b506104f560155481565b34801561096657600080fd5b506104cf610975366004613608565b611785565b34801561098657600080fd5b506104f560135481565b34801561099c57600080fd5b506104cf6109ab366004613608565b61181e565b3480156109bc57600080fd5b506105bc6109cb3660046136c0565b61182b565b3480156109dc57600080fd5b506105bc6109eb3660046136c0565b6118b2565b3480156109fc57600080fd5b50610461611939565b348015610a1157600080fd5b506104f5601d5481565b348015610a2757600080fd5b506104cf610a363660046136c0565b60296020526000908152604090205460ff1681565b348015610a5757600080fd5b506016546104cf90610100900460ff1681565b348015610a7657600080fd5b506105bc610a853660046136f4565b6119c7565b348015610a9657600080fd5b50600954610497906001600160a01b031681565b348015610ab657600080fd5b506105bc610ac5366004613634565b611a50565b348015610ad657600080fd5b506018546104cf9060ff1681565b348015610af057600080fd5b506104f5600d5481565b348015610b0657600080fd5b506104cf610b15366004613634565b611b1f565b348015610b2657600080fd5b50610461611c76565b348015610b3b57600080fd5b506104f560195481565b348015610b5157600080fd5b506105bc610b6036600461375a565b611c83565b348015610b7157600080fd5b506104f5610b8036600461380b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bb757600080fd5b506104f5600e5481565b348015610bcd57600080fd5b506105bc610bdc36600461368e565b611e8b565b348015610bed57600080fd5b506105bc611f3c565b348015610c0257600080fd5b506104f5600c5481565b348015610c1857600080fd5b506104f560255481565b348015610c2e57600080fd5b506105bc610c3d3660046136c0565b611f72565b348015610c4e57600080fd5b506104f5601b5481565b348015610c6457600080fd5b506105bc610c733660046136c0565b611ff9565b348015610c8457600080fd5b506105bc6120e4565b348015610c9957600080fd5b506104f560205481565b348015610caf57600080fd5b506104f5600f5481565b348015610cc557600080fd5b506105bc610cd4366004613634565b6121bc565b606060038054610ce890613844565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1490613844565b8015610d615780601f10610d3657610100808354040283529160200191610d61565b820191906000526020600020905b815481529060010190602001808311610d4457829003601f168201915b5050505050905090565b6000610d783384846123f9565b50600192915050565b6005546001600160a01b03163314610db45760405162461bcd60e51b8152600401610dab9061387f565b60405180910390fd5b670de0b6b3a76400006103e8610dc960025490565b610dd49060056138ca565b610dde91906138e9565b610de891906138e9565b811015610e475760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610dab565b610e5981670de0b6b3a76400006138ca565b600d5550565b6000610e6c84848461251d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ef15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dab565b610efe85338584036123f9565b506001949350505050565b6005546001600160a01b03163314610f335760405162461bcd60e51b8152600401610dab9061387f565b601a849055601b839055601c829055601d8190558082610f53858761390b565b610f5d919061390b565b610f67919061390b565b6019819055600f1015610fbc5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610dab565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d78918590610ff990869061390b565b6123f9565b6005546001600160a01b031633146110285760405162461bcd60e51b8152600401610dab9061387f565b600e5461103430611121565b10156110aa576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dab565b6007805460ff60a01b1916600160a01b1790556110c5612eab565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6000600b54436111179190613923565b600c541015905090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111665760405162461bcd60e51b8152600401610dab9061387f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111da5760405162461bcd60e51b8152600401610dab9061387f565b6016805460ff19169055565b6005546001600160a01b031633146112105760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112655760405162461bcd60e51b8152600401610dab9061387f565b601654610100900460ff16156112d15760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610dab565b600b819055604080518082019091526005808252644d534e414960d81b6020909201918252611302916003916134fb565b50604080518082019091526005808252644d534e414960d81b602090920191825261132f916004916134fb565b506016805462ffff0019166201010017905543600c554260135560068054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911681179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d3919061393a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611420573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611444919061393a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b5919061393a565b600780546001600160a01b0319166001600160a01b039290921691821790556114df9060016111e6565b6007546114f6906001600160a01b031660016131a1565b600047116115525760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610dab565b600061155d30611121565b116115b95760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610dab565b6006546115d49030906001600160a01b0316610ff982611121565b6006546001600160a01b031663f305d71947306115f081611121565b60008073c4aeb15b65b465136fd159a846b25addc9db00db426040518863ffffffff1660e01b815260040161162a96959493929190613957565b60606040518083038185885af1158015611648573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166d9190613992565b5050505050565b6005546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610dab9061387f565b60168054911515620100000262ff000019909216919091179055565b606060048054610ce890613844565b6005546001600160a01b031633146116f35760405162461bcd60e51b8152600401610dab9061387f565b6007546001600160a01b03838116911614156117775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dab565b61178182826131a1565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dab565b61181433858584036123f9565b5060019392505050565b6000610d7833848461251d565b6005546001600160a01b031633146118555760405162461bcd60e51b8152600401610dab9061387f565b6008546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610dab9061387f565b600a546040516001600160a01b03918216918316907fcb24b9cc1975a8c5afd1fcc8deca22156b8f357af3485db1f9382b3c584d671f90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6004805461194690613844565b80601f016020809104026020016040519081016040528092919081815260200182805461197290613844565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081565b6005546001600160a01b031633146119f15760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a7a5760405162461bcd60e51b8152600401610dab9061387f565b670de0b6b3a76400006064611a8e60025490565b611a999060016138ca565b611aa391906138e9565b611aad91906138e9565b811015611b075760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610dab565b611b1981670de0b6b3a76400006138ca565b600f5550565b6005546000906001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610dab9061387f565b620186a0611b5960025490565b611b649060016138ca565b611b6e91906138e9565b821015611bdb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dab565b6103e8611be760025490565b611bf29060056138ca565b611bfc91906138e9565b821115611c685760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610dab565b50600e81905560015b919050565b6003805461194690613844565b6005546001600160a01b03163314611cad5760405162461bcd60e51b8152600401610dab9061387f565b60408051808201909152600d81526c7570646174654275794665657360981b6020918201528151908201207f4a96ad25403c5ba7b981424a5f9f729a81e204e26862083a029d4d145ceb238b1415611d7a576005805460ff60a01b19169055604051611d1a9082906139c0565b6040519081900381209033907fd30a9258616b5690a3123dd7450c056f74daf7583949757dc0d53f103ad5731b90600090a36040516000907f98de168abaa71dd2ce9c8680dcddec31cabb50f04301083509d798e92781d8e1908290a250565b60408051808201909152600e81526d75706461746553656c6c4665657360901b6020918201528151908201207f316d221452301dade8e321f4f2d0116f53c7d615d3f72d67e9ebba455231b8951415611e48576005805460ff60a81b19169055604051611de89082906139c0565b6040519081900381209033907fd30a9258616b5690a3123dd7450c056f74daf7583949757dc0d53f103ad5731b90600090a36040516000907f41d17d4c8872dd302ffd4b4808f1944fb664ae1c9426edd65519f4d8dd2dea31908290a250565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c69642066756e6374696f6e206e616d6560581b6044820152606401610dab565b50565b6005546001600160a01b03163314611eb55760405162461bcd60e51b8152600401610dab9061387f565b601f8490556020839055602182905560228190558082611ed5858761390b565b611edf919061390b565b611ee9919061390b565b601e8181551015610fbc5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dab565b6005546001600160a01b03163314611f665760405162461bcd60e51b8152600401610dab9061387f565b6018805460ff19169055565b6005546001600160a01b03163314611f9c5760405162461bcd60e51b8152600401610dab9061387f565b6009546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120235760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b0381166120885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dab565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610dab9061387f565b601654610100900460ff161561217a5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610dab565b604051600090339047908381818185875af1925050503d8060008114610fbc576040519150601f19603f3d011682016040523d82523d6000602084013e610fbc565b6005546001600160a01b031633146121e65760405162461bcd60e51b8152600401610dab9061387f565b6014546015546121f6919061390b565b42116122445760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610dab565b6103e88111156122a95760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610dab565b426015556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c91906139dc565b9050600061271061232d84846138ca565b61233791906138e9565b9050801561235857600754612358906001600160a01b031661dead836131f5565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156123a257600080fd5b505af11580156123b6573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d6826040516123eb91815260200190565b60405180910390a150505050565b6001600160a01b03831661245b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dab565b6001600160a01b0382166124bc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dab565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125435760405162461bcd60e51b8152600401610dab906139f5565b6001600160a01b0382166125695760405162461bcd60e51b8152600401610dab90613a3a565b6001600160a01b0382166000908152602a602052604090205460ff16156125cc5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610dab565b326000908152602a602052604090205460ff16156126265760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610dab565b8061263c57612637838360006131f5565b505050565b601654610100900460ff166126cf576001600160a01b03831660009081526027602052604090205460ff168061268a57506001600160a01b03821660009081526027602052604090205460ff165b6126cf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dab565b60165460ff1615612ae0576005546001600160a01b0384811691161480159061270657506005546001600160a01b03838116911614155b801561271a57506001600160a01b03821615155b801561273157506001600160a01b03821661dead14155b80156127475750600754600160a01b900460ff16155b801561276c57506001600160a01b03821660009081526027602052604090205460ff16155b801561279157506001600160a01b03831660009081526027602052604090205460ff16155b15612ae05760185460ff16156128aa576006546001600160a01b038381169116148015906127cd57506007546001600160a01b03838116911614155b156128aa576127dd600143613923565b3260009081526017602052604090205410801561281b5750612800600143613923565b6001600160a01b038316600090815260176020526040902054105b6128855760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610dab565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff1680156128eb57506001600160a01b03821660009081526028602052604090205460ff16155b156129b757600d548111156129585760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610dab565b600f5461296483611121565b61296e908361390b565b11156129b25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dab565b612ae0565b6001600160a01b03821660009081526029602052604090205460ff1680156129f857506001600160a01b03831660009081526028602052604090205460ff16155b15612a6657600d548111156129b25760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610dab565b6001600160a01b03821660009081526028602052604090205460ff16612ae057600f54612a9283611121565b612a9c908361390b565b1115612ae05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dab565b6000612aeb30611121565b600e5490915081108015908190612b0a575060165462010000900460ff165b8015612b205750600754600160a01b900460ff16155b8015612b4557506001600160a01b03851660009081526029602052604090205460ff16155b8015612b6a57506001600160a01b03851660009081526027602052604090205460ff16155b8015612b8f57506001600160a01b03841660009081526027602052604090205460ff16155b15612bbd576007805460ff60a01b1916600160a01b179055612baf612eab565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526027602052604090205460ff600160a01b909204821615911680612c0b57506001600160a01b03851660009081526027602052604090205460ff165b15612c14575060005b60008115612e9757612c24611107565b8015612c4857506001600160a01b03871660009081526029602052604090205460ff165b15612d2d576064612c5a8660636138ca565b612c6491906138e9565b9050601e5460205482612c7791906138ca565b612c8191906138e9565b60236000828254612c92919061390b565b9091555050601e54602154612ca790836138ca565b612cb191906138e9565b60266000828254612cc2919061390b565b9091555050601e54601f54612cd790836138ca565b612ce191906138e9565b60246000828254612cf2919061390b565b9091555050601e54602254612d0790836138ca565b612d1191906138e9565b60256000828254612d22919061390b565b90915550612e799050565b6001600160a01b03861660009081526029602052604090205460ff168015612d5757506000601e54115b15612d6c576064601e5486612c5a91906138ca565b6001600160a01b03871660009081526029602052604090205460ff168015612d9657506000601954115b15612e7957606460195486612dab91906138ca565b612db591906138e9565b9050601954601b5482612dc891906138ca565b612dd291906138e9565b60236000828254612de3919061390b565b9091555050601954601c54612df890836138ca565b612e0291906138e9565b60266000828254612e13919061390b565b9091555050601954601a54612e2890836138ca565b612e3291906138e9565b60246000828254612e43919061390b565b9091555050601954601d54612e5890836138ca565b612e6291906138e9565b60256000828254612e73919061390b565b90915550505b8015612e8a57612e8a8730836131f5565b612e948186613923565b94505b612ea28787876131f5565b50505050505050565b6000612eb630611121565b90506000602554602654602454602354612ed0919061390b565b612eda919061390b565b612ee4919061390b565b90506000821580612ef3575081155b15612efd57505050565b600e54612f0b9060146138ca565b831115612f2357600e54612f209060146138ca565b92505b600060028360235486612f3691906138ca565b612f4091906138e9565b612f4a91906138e9565b90506000612f588286613923565b905047612f648261334a565b6000612f708247613923565b905060006002602354612f8391906138e9565b612f8d9088613923565b602454612f9a90846138ca565b612fa491906138e9565b905060006002602354612fb791906138e9565b612fc19089613923565b602654612fce90856138ca565b612fd891906138e9565b905060006002602354612feb91906138e9565b612ff5908a613923565b60255461300290866138ca565b61300c91906138e9565b90506000818361301c8688613923565b6130269190613923565b6130309190613923565b6009546040519192506001600160a01b0316908390600081818185875af1925050503d806000811461307e576040519150601f19603f3d011682016040523d82523d6000602084013e613083565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d80600081146130d3576040519150601f19603f3d011682016040523d82523d6000602084013e6130d8565b606091505b5050600a54604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b606091505b509099505087158015906131415750600081115b156131945761315088826134a4565b602354604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661321b5760405162461bcd60e51b8152600401610dab906139f5565b6001600160a01b0382166132415760405162461bcd60e51b8152600401610dab90613a3a565b6001600160a01b038316600090815260208190526040902054818110156132b95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dab565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132f090849061390b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333c91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061337f5761337f613a7d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc919061393a565b8160018151811061340f5761340f613a7d565b6001600160a01b03928316602091820292909201015260065461343591309116846123f9565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346e908590600090869030904290600401613a93565b600060405180830381600087803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b505050505050565b6006546134bc9030906001600160a01b0316846123f9565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061162a9030908790600090819061dead904290600401613957565b82805461350790613844565b90600052602060002090601f016020900481019282613529576000855561356f565b82601f1061354257805160ff191683800117855561356f565b8280016001018555821561356f579182015b8281111561356f578251825591602001919060010190613554565b5061357b92915061357f565b5090565b5b8082111561357b5760008155600101613580565b60005b838110156135af578181015183820152602001613597565b83811115610fbc5750506000910152565b60208152600082518060208401526135df816040850160208701613594565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611e8857600080fd5b6000806040838503121561361b57600080fd5b8235613626816135f3565b946020939093013593505050565b60006020828403121561364657600080fd5b5035919050565b60008060006060848603121561366257600080fd5b833561366d816135f3565b9250602084013561367d816135f3565b929592945050506040919091013590565b600080600080608085870312156136a457600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156136d257600080fd5b81356136dd816135f3565b9392505050565b80358015158114611c7157600080fd5b6000806040838503121561370757600080fd5b8235613712816135f3565b9150613720602084016136e4565b90509250929050565b60006020828403121561373b57600080fd5b6136dd826136e4565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561376c57600080fd5b813567ffffffffffffffff8082111561378457600080fd5b818401915084601f83011261379857600080fd5b8135818111156137aa576137aa613744565b604051601f8201601f19908116603f011681019083821181831017156137d2576137d2613744565b816040528281528760208487010111156137eb57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000806040838503121561381e57600080fd5b8235613829816135f3565b91506020830135613839816135f3565b809150509250929050565b600181811c9082168061385857607f821691505b6020821081141561387957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156138e4576138e46138b4565b500290565b60008261390657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561391e5761391e6138b4565b500190565b600082821015613935576139356138b4565b500390565b60006020828403121561394c57600080fd5b81516136dd816135f3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156139a757600080fd5b8351925060208401519150604084015190509250925092565b600082516139d2818460208701613594565b9190910192915050565b6000602082840312156139ee57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ae35784516001600160a01b031683529383019391830191600101613abe565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ed8414175a7d4bc7c16e31f1464d95b16c00725fe6faac62c1c1e6dfa1b4d26964736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106104405760003560e01c80638da5cb5b11610234578063c876d0b91161012e578063e884f260116100b6578063f2fde38b1161007a578063f2fde38b14610c58578063f5648a4f14610c78578063f637434214610c8d578063f8b45b0514610ca3578063fe72b27a14610cb957600080fd5b8063e884f26014610be1578063ee40166e14610bf6578063ef8700e514610c0c578063f023f57314610c22578063f11a24d314610c4257600080fd5b8063d85ba063116100fd578063d85ba06314610b2f578063daf1c7a114610b45578063dd62ed3e14610b65578063e2f4560514610bab578063e7ad9fcd14610bc157600080fd5b8063c876d0b914610aca578063cf46f24c14610ae4578063d257b34f14610afa578063d28d885214610b1a57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a1b578063bbc0c74214610a4b578063c024666814610a6a578063c04a541414610a8a578063c18bc19514610aaa57600080fd5b8063a9059cbb14610990578063aacebbe3146109b0578063adee28ff146109d0578063b09f1266146109f0578063b204141114610a0557600080fd5b80639a7a23d6116102035780639a7a23d6146109045780639c9de429146109245780639ec22c0e14610944578063a457c2d71461095a578063a4c82a001461097a57600080fd5b80638da5cb5b1461089b57806392136913146108b9578063924de9b7146108cf57806395d89b41146108ef57600080fd5b8063313ce56711610345578063678ec388116102cd578063751039fc11610291578063751039fc146108105780637571336a1461082557806375f0a874146108455780637bce5a041461086557806385b12c7c1461087b57600080fd5b8063678ec388146107845780636a486a8e146107a55780636ddd1713146107bb57806370a08231146107db578063715018a6146107fb57600080fd5b80634a62bb65116103145780634a62bb65146106d75780634fbee193146106f157806351f205e41461072a57806358b69bc31461073f5780635f559fba1461075457600080fd5b8063313ce5671461065a578063395093511461067657806341c6e23c14610696578063452ed4f1146106b757600080fd5b80631a8145bb116103c857806324b9f3c11161039757806324b9f3c1146105de57806327c8f835146105f45780632c3e486c1461060a5780632e6ed7ef146106205780632e82f1a01461064057600080fd5b80631a8145bb146105705780631f3fed8f14610586578063203e727e1461059c57806323b872dd146105be57600080fd5b806318160ddd1161040f57806318160ddd14610503578063184c16c51461051857806318a94cf11461052e578063199ffc721461054457806319eab0421461055a57600080fd5b806306fdde031461044c5780630758d92414610477578063095ea7b3146104af578063156c2f35146104df57600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610cd9565b60405161046e91906135c0565b60405180910390f35b34801561048357600080fd5b50600654610497906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b3480156104bb57600080fd5b506104cf6104ca366004613608565b610d6b565b604051901515815260200161046e565b3480156104eb57600080fd5b506104f5601c5481565b60405190815260200161046e565b34801561050f57600080fd5b506002546104f5565b34801561052457600080fd5b506104f560145481565b34801561053a57600080fd5b506104f560225481565b34801561055057600080fd5b506104f560105481565b34801561056657600080fd5b506104f560215481565b34801561057c57600080fd5b506104f560235481565b34801561059257600080fd5b506104f560245481565b3480156105a857600080fd5b506105bc6105b7366004613634565b610d81565b005b3480156105ca57600080fd5b506104cf6105d936600461364d565b610e5f565b3480156105ea57600080fd5b506104f560265481565b34801561060057600080fd5b5061049761dead81565b34801561061657600080fd5b506104f560125481565b34801561062c57600080fd5b506105bc61063b36600461368e565b610f09565b34801561064c57600080fd5b506011546104cf9060ff1681565b34801561066657600080fd5b506040516012815260200161046e565b34801561068257600080fd5b506104cf610691366004613608565b610fc2565b3480156106a257600080fd5b506005546104cf90600160a81b900460ff1681565b3480156106c357600080fd5b50600754610497906001600160a01b031681565b3480156106e357600080fd5b506016546104cf9060ff1681565b3480156106fd57600080fd5b506104cf61070c3660046136c0565b6001600160a01b031660009081526027602052604090205460ff1690565b34801561073657600080fd5b506105bc610ffe565b34801561074b57600080fd5b506104cf611107565b34801561076057600080fd5b506104cf61076f3660046136c0565b60286020526000908152604090205460ff1681565b34801561079057600080fd5b506005546104cf90600160a01b900460ff1681565b3480156107b157600080fd5b506104f5601e5481565b3480156107c757600080fd5b506016546104cf9062010000900460ff1681565b3480156107e757600080fd5b506104f56107f63660046136c0565b611121565b34801561080757600080fd5b506105bc61113c565b34801561081c57600080fd5b506105bc6111b0565b34801561083157600080fd5b506105bc6108403660046136f4565b6111e6565b34801561085157600080fd5b50600854610497906001600160a01b031681565b34801561087157600080fd5b506104f5601a5481565b34801561088757600080fd5b506105bc610896366004613634565b61123b565b3480156108a757600080fd5b506005546001600160a01b0316610497565b3480156108c557600080fd5b506104f5601f5481565b3480156108db57600080fd5b506105bc6108ea366004613729565b611674565b3480156108fb57600080fd5b506104616116ba565b34801561091057600080fd5b506105bc61091f3660046136f4565b6116c9565b34801561093057600080fd5b50600a54610497906001600160a01b031681565b34801561095057600080fd5b506104f560155481565b34801561096657600080fd5b506104cf610975366004613608565b611785565b34801561098657600080fd5b506104f560135481565b34801561099c57600080fd5b506104cf6109ab366004613608565b61181e565b3480156109bc57600080fd5b506105bc6109cb3660046136c0565b61182b565b3480156109dc57600080fd5b506105bc6109eb3660046136c0565b6118b2565b3480156109fc57600080fd5b50610461611939565b348015610a1157600080fd5b506104f5601d5481565b348015610a2757600080fd5b506104cf610a363660046136c0565b60296020526000908152604090205460ff1681565b348015610a5757600080fd5b506016546104cf90610100900460ff1681565b348015610a7657600080fd5b506105bc610a853660046136f4565b6119c7565b348015610a9657600080fd5b50600954610497906001600160a01b031681565b348015610ab657600080fd5b506105bc610ac5366004613634565b611a50565b348015610ad657600080fd5b506018546104cf9060ff1681565b348015610af057600080fd5b506104f5600d5481565b348015610b0657600080fd5b506104cf610b15366004613634565b611b1f565b348015610b2657600080fd5b50610461611c76565b348015610b3b57600080fd5b506104f560195481565b348015610b5157600080fd5b506105bc610b6036600461375a565b611c83565b348015610b7157600080fd5b506104f5610b8036600461380b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bb757600080fd5b506104f5600e5481565b348015610bcd57600080fd5b506105bc610bdc36600461368e565b611e8b565b348015610bed57600080fd5b506105bc611f3c565b348015610c0257600080fd5b506104f5600c5481565b348015610c1857600080fd5b506104f560255481565b348015610c2e57600080fd5b506105bc610c3d3660046136c0565b611f72565b348015610c4e57600080fd5b506104f5601b5481565b348015610c6457600080fd5b506105bc610c733660046136c0565b611ff9565b348015610c8457600080fd5b506105bc6120e4565b348015610c9957600080fd5b506104f560205481565b348015610caf57600080fd5b506104f5600f5481565b348015610cc557600080fd5b506105bc610cd4366004613634565b6121bc565b606060038054610ce890613844565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1490613844565b8015610d615780601f10610d3657610100808354040283529160200191610d61565b820191906000526020600020905b815481529060010190602001808311610d4457829003601f168201915b5050505050905090565b6000610d783384846123f9565b50600192915050565b6005546001600160a01b03163314610db45760405162461bcd60e51b8152600401610dab9061387f565b60405180910390fd5b670de0b6b3a76400006103e8610dc960025490565b610dd49060056138ca565b610dde91906138e9565b610de891906138e9565b811015610e475760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610dab565b610e5981670de0b6b3a76400006138ca565b600d5550565b6000610e6c84848461251d565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ef15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610dab565b610efe85338584036123f9565b506001949350505050565b6005546001600160a01b03163314610f335760405162461bcd60e51b8152600401610dab9061387f565b601a849055601b839055601c829055601d8190558082610f53858761390b565b610f5d919061390b565b610f67919061390b565b6019819055600f1015610fbc5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610dab565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d78918590610ff990869061390b565b6123f9565b6005546001600160a01b031633146110285760405162461bcd60e51b8152600401610dab9061387f565b600e5461103430611121565b10156110aa576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610dab565b6007805460ff60a01b1916600160a01b1790556110c5612eab565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6000600b54436111179190613923565b600c541015905090565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111665760405162461bcd60e51b8152600401610dab9061387f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111da5760405162461bcd60e51b8152600401610dab9061387f565b6016805460ff19169055565b6005546001600160a01b031633146112105760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112655760405162461bcd60e51b8152600401610dab9061387f565b601654610100900460ff16156112d15760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610dab565b600b819055604080518082019091526005808252644d534e414960d81b6020909201918252611302916003916134fb565b50604080518082019091526005808252644d534e414960d81b602090920191825261132f916004916134fb565b506016805462ffff0019166201010017905543600c554260135560068054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911681179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d3919061393a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611420573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611444919061393a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b5919061393a565b600780546001600160a01b0319166001600160a01b039290921691821790556114df9060016111e6565b6007546114f6906001600160a01b031660016131a1565b600047116115525760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610dab565b600061155d30611121565b116115b95760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610dab565b6006546115d49030906001600160a01b0316610ff982611121565b6006546001600160a01b031663f305d71947306115f081611121565b60008073c4aeb15b65b465136fd159a846b25addc9db00db426040518863ffffffff1660e01b815260040161162a96959493929190613957565b60606040518083038185885af1158015611648573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061166d9190613992565b5050505050565b6005546001600160a01b0316331461169e5760405162461bcd60e51b8152600401610dab9061387f565b60168054911515620100000262ff000019909216919091179055565b606060048054610ce890613844565b6005546001600160a01b031633146116f35760405162461bcd60e51b8152600401610dab9061387f565b6007546001600160a01b03838116911614156117775760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dab565b61178182826131a1565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610dab565b61181433858584036123f9565b5060019392505050565b6000610d7833848461251d565b6005546001600160a01b031633146118555760405162461bcd60e51b8152600401610dab9061387f565b6008546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118dc5760405162461bcd60e51b8152600401610dab9061387f565b600a546040516001600160a01b03918216918316907fcb24b9cc1975a8c5afd1fcc8deca22156b8f357af3485db1f9382b3c584d671f90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6004805461194690613844565b80601f016020809104026020016040519081016040528092919081815260200182805461197290613844565b80156119bf5780601f10611994576101008083540402835291602001916119bf565b820191906000526020600020905b8154815290600101906020018083116119a257829003601f168201915b505050505081565b6005546001600160a01b031633146119f15760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611a7a5760405162461bcd60e51b8152600401610dab9061387f565b670de0b6b3a76400006064611a8e60025490565b611a999060016138ca565b611aa391906138e9565b611aad91906138e9565b811015611b075760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610dab565b611b1981670de0b6b3a76400006138ca565b600f5550565b6005546000906001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610dab9061387f565b620186a0611b5960025490565b611b649060016138ca565b611b6e91906138e9565b821015611bdb5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610dab565b6103e8611be760025490565b611bf29060056138ca565b611bfc91906138e9565b821115611c685760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610dab565b50600e81905560015b919050565b6003805461194690613844565b6005546001600160a01b03163314611cad5760405162461bcd60e51b8152600401610dab9061387f565b60408051808201909152600d81526c7570646174654275794665657360981b6020918201528151908201207f4a96ad25403c5ba7b981424a5f9f729a81e204e26862083a029d4d145ceb238b1415611d7a576005805460ff60a01b19169055604051611d1a9082906139c0565b6040519081900381209033907fd30a9258616b5690a3123dd7450c056f74daf7583949757dc0d53f103ad5731b90600090a36040516000907f98de168abaa71dd2ce9c8680dcddec31cabb50f04301083509d798e92781d8e1908290a250565b60408051808201909152600e81526d75706461746553656c6c4665657360901b6020918201528151908201207f316d221452301dade8e321f4f2d0116f53c7d615d3f72d67e9ebba455231b8951415611e48576005805460ff60a81b19169055604051611de89082906139c0565b6040519081900381209033907fd30a9258616b5690a3123dd7450c056f74daf7583949757dc0d53f103ad5731b90600090a36040516000907f41d17d4c8872dd302ffd4b4808f1944fb664ae1c9426edd65519f4d8dd2dea31908290a250565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c69642066756e6374696f6e206e616d6560581b6044820152606401610dab565b50565b6005546001600160a01b03163314611eb55760405162461bcd60e51b8152600401610dab9061387f565b601f8490556020839055602182905560228190558082611ed5858761390b565b611edf919061390b565b611ee9919061390b565b601e8181551015610fbc5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dab565b6005546001600160a01b03163314611f665760405162461bcd60e51b8152600401610dab9061387f565b6018805460ff19169055565b6005546001600160a01b03163314611f9c5760405162461bcd60e51b8152600401610dab9061387f565b6009546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146120235760405162461bcd60e51b8152600401610dab9061387f565b6001600160a01b0381166120885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dab565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461210e5760405162461bcd60e51b8152600401610dab9061387f565b601654610100900460ff161561217a5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610dab565b604051600090339047908381818185875af1925050503d8060008114610fbc576040519150601f19603f3d011682016040523d82523d6000602084013e610fbc565b6005546001600160a01b031633146121e65760405162461bcd60e51b8152600401610dab9061387f565b6014546015546121f6919061390b565b42116122445760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610dab565b6103e88111156122a95760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610dab565b426015556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c91906139dc565b9050600061271061232d84846138ca565b61233791906138e9565b9050801561235857600754612358906001600160a01b031661dead836131f5565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156123a257600080fd5b505af11580156123b6573d6000803e3d6000fd5b505050507f01dfa9a7a5ffd5f2630a016e754405184a66ca529745e85abd52e47e76ec70d6826040516123eb91815260200190565b60405180910390a150505050565b6001600160a01b03831661245b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dab565b6001600160a01b0382166124bc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dab565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125435760405162461bcd60e51b8152600401610dab906139f5565b6001600160a01b0382166125695760405162461bcd60e51b8152600401610dab90613a3a565b6001600160a01b0382166000908152602a602052604090205460ff16156125cc5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610dab565b326000908152602a602052604090205460ff16156126265760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610dab565b8061263c57612637838360006131f5565b505050565b601654610100900460ff166126cf576001600160a01b03831660009081526027602052604090205460ff168061268a57506001600160a01b03821660009081526027602052604090205460ff165b6126cf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dab565b60165460ff1615612ae0576005546001600160a01b0384811691161480159061270657506005546001600160a01b03838116911614155b801561271a57506001600160a01b03821615155b801561273157506001600160a01b03821661dead14155b80156127475750600754600160a01b900460ff16155b801561276c57506001600160a01b03821660009081526027602052604090205460ff16155b801561279157506001600160a01b03831660009081526027602052604090205460ff16155b15612ae05760185460ff16156128aa576006546001600160a01b038381169116148015906127cd57506007546001600160a01b03838116911614155b156128aa576127dd600143613923565b3260009081526017602052604090205410801561281b5750612800600143613923565b6001600160a01b038316600090815260176020526040902054105b6128855760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610dab565b3260009081526017602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526029602052604090205460ff1680156128eb57506001600160a01b03821660009081526028602052604090205460ff16155b156129b757600d548111156129585760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610dab565b600f5461296483611121565b61296e908361390b565b11156129b25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dab565b612ae0565b6001600160a01b03821660009081526029602052604090205460ff1680156129f857506001600160a01b03831660009081526028602052604090205460ff16155b15612a6657600d548111156129b25760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610dab565b6001600160a01b03821660009081526028602052604090205460ff16612ae057600f54612a9283611121565b612a9c908361390b565b1115612ae05760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dab565b6000612aeb30611121565b600e5490915081108015908190612b0a575060165462010000900460ff165b8015612b205750600754600160a01b900460ff16155b8015612b4557506001600160a01b03851660009081526029602052604090205460ff16155b8015612b6a57506001600160a01b03851660009081526027602052604090205460ff16155b8015612b8f57506001600160a01b03841660009081526027602052604090205460ff16155b15612bbd576007805460ff60a01b1916600160a01b179055612baf612eab565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526027602052604090205460ff600160a01b909204821615911680612c0b57506001600160a01b03851660009081526027602052604090205460ff165b15612c14575060005b60008115612e9757612c24611107565b8015612c4857506001600160a01b03871660009081526029602052604090205460ff165b15612d2d576064612c5a8660636138ca565b612c6491906138e9565b9050601e5460205482612c7791906138ca565b612c8191906138e9565b60236000828254612c92919061390b565b9091555050601e54602154612ca790836138ca565b612cb191906138e9565b60266000828254612cc2919061390b565b9091555050601e54601f54612cd790836138ca565b612ce191906138e9565b60246000828254612cf2919061390b565b9091555050601e54602254612d0790836138ca565b612d1191906138e9565b60256000828254612d22919061390b565b90915550612e799050565b6001600160a01b03861660009081526029602052604090205460ff168015612d5757506000601e54115b15612d6c576064601e5486612c5a91906138ca565b6001600160a01b03871660009081526029602052604090205460ff168015612d9657506000601954115b15612e7957606460195486612dab91906138ca565b612db591906138e9565b9050601954601b5482612dc891906138ca565b612dd291906138e9565b60236000828254612de3919061390b565b9091555050601954601c54612df890836138ca565b612e0291906138e9565b60266000828254612e13919061390b565b9091555050601954601a54612e2890836138ca565b612e3291906138e9565b60246000828254612e43919061390b565b9091555050601954601d54612e5890836138ca565b612e6291906138e9565b60256000828254612e73919061390b565b90915550505b8015612e8a57612e8a8730836131f5565b612e948186613923565b94505b612ea28787876131f5565b50505050505050565b6000612eb630611121565b90506000602554602654602454602354612ed0919061390b565b612eda919061390b565b612ee4919061390b565b90506000821580612ef3575081155b15612efd57505050565b600e54612f0b9060146138ca565b831115612f2357600e54612f209060146138ca565b92505b600060028360235486612f3691906138ca565b612f4091906138e9565b612f4a91906138e9565b90506000612f588286613923565b905047612f648261334a565b6000612f708247613923565b905060006002602354612f8391906138e9565b612f8d9088613923565b602454612f9a90846138ca565b612fa491906138e9565b905060006002602354612fb791906138e9565b612fc19089613923565b602654612fce90856138ca565b612fd891906138e9565b905060006002602354612feb91906138e9565b612ff5908a613923565b60255461300290866138ca565b61300c91906138e9565b90506000818361301c8688613923565b6130269190613923565b6130309190613923565b6009546040519192506001600160a01b0316908390600081818185875af1925050503d806000811461307e576040519150601f19603f3d011682016040523d82523d6000602084013e613083565b606091505b5050600854604051919a506001600160a01b0316908590600081818185875af1925050503d80600081146130d3576040519150601f19603f3d011682016040523d82523d6000602084013e6130d8565b606091505b5050600a54604051919a506001600160a01b0316908590600081818185875af1925050503d8060008114613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b606091505b509099505087158015906131415750600081115b156131945761315088826134a4565b602354604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b5050505050505050505050565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661321b5760405162461bcd60e51b8152600401610dab906139f5565b6001600160a01b0382166132415760405162461bcd60e51b8152600401610dab90613a3a565b6001600160a01b038316600090815260208190526040902054818110156132b95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610dab565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132f090849061390b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333c91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061337f5761337f613a7d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc919061393a565b8160018151811061340f5761340f613a7d565b6001600160a01b03928316602091820292909201015260065461343591309116846123f9565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061346e908590600090869030904290600401613a93565b600060405180830381600087803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b505050505050565b6006546134bc9030906001600160a01b0316846123f9565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061162a9030908790600090819061dead904290600401613957565b82805461350790613844565b90600052602060002090601f016020900481019282613529576000855561356f565b82601f1061354257805160ff191683800117855561356f565b8280016001018555821561356f579182015b8281111561356f578251825591602001919060010190613554565b5061357b92915061357f565b5090565b5b8082111561357b5760008155600101613580565b60005b838110156135af578181015183820152602001613597565b83811115610fbc5750506000910152565b60208152600082518060208401526135df816040850160208701613594565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611e8857600080fd5b6000806040838503121561361b57600080fd5b8235613626816135f3565b946020939093013593505050565b60006020828403121561364657600080fd5b5035919050565b60008060006060848603121561366257600080fd5b833561366d816135f3565b9250602084013561367d816135f3565b929592945050506040919091013590565b600080600080608085870312156136a457600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156136d257600080fd5b81356136dd816135f3565b9392505050565b80358015158114611c7157600080fd5b6000806040838503121561370757600080fd5b8235613712816135f3565b9150613720602084016136e4565b90509250929050565b60006020828403121561373b57600080fd5b6136dd826136e4565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561376c57600080fd5b813567ffffffffffffffff8082111561378457600080fd5b818401915084601f83011261379857600080fd5b8135818111156137aa576137aa613744565b604051601f8201601f19908116603f011681019083821181831017156137d2576137d2613744565b816040528281528760208487010111156137eb57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000806040838503121561381e57600080fd5b8235613829816135f3565b91506020830135613839816135f3565b809150509250929050565b600181811c9082168061385857607f821691505b6020821081141561387957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156138e4576138e46138b4565b500290565b60008261390657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561391e5761391e6138b4565b500190565b600082821015613935576139356138b4565b500390565b60006020828403121561394c57600080fd5b81516136dd816135f3565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156139a757600080fd5b8351925060208401519150604084015190509250925092565b600082516139d2818460208701613594565b9190910192915050565b6000602082840312156139ee57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ae35784516001600160a01b031683529383019391830191600101613abe565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ed8414175a7d4bc7c16e31f1464d95b16c00725fe6faac62c1c1e6dfa1b4d26964736f6c634300080b0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.