ETH Price: $3,388.78 (+0.94%)

Token

DRAGO (DRAGO)
 

Overview

Max Total Supply

69,000,000,000 DRAGO

Holders

121

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*وليعهدالمملكةالعربيةالسعودية.eth
Balance
41,437,778.866056724636804629 DRAGO

Value
$0.00
0x29c94fd33898B2D1AFA4a7Fc6df3077d4Be07c02
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DRAGO

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 Website  : https://dragoharrykiller.com/
 Telegram : https://t.me/DragoErc
 Twitter  : https://twitter.com/DragoErc20
**/

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

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 IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

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

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    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) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

     /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0xdead), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
            // _balances[address(0xdead)] += amount;
        }

        emit Transfer(account, address(0xdead), amount);

        _afterTokenTransfer(account, address(0xdead), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract DRAGO is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public uniswapRouter;
    address public uniswapV2Pair;

    bool private _interlock;
    bool private _tradeOpen;
    bool public providingLiquidity;
    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 69_000_000 * 10**decimals();
    uint256 public maxBuyLimit = 1_380_000_000 * 10**decimals();
    uint256 public maxSellLimit = 1_380_000_0000 * 10**decimals();
    uint256 public maxWalletLimit = 1_380_000_000 * 10**decimals();

    address public marketingWallet = 0xEDaEc6C43e7C7E34b39676f5767006FDD2aD7086;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(30, 0, 0);
    Taxes public sellTaxes = Taxes(60, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public blacklisted;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("DRAGO", "DRAGO") {
        _tokengeneration(marketingWallet, 69_000_000_000 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap V2
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        uniswapRouter = _router;
        uniswapV2Pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklisted[sender] && !blacklisted[recipient], "Error: Blacklsited!");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(_tradeOpen, "Trading not enabled");
        }

        if (sender == uniswapV2Pair && block.number < launchedAtBlock + 2 && !exemptFee[recipient]) {
            blacklisted[recipient] = true;
        }

        if (sender == uniswapV2Pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != uniswapV2Pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != uniswapV2Pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == uniswapV2Pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == uniswapV2Pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != uniswapV2Pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }
        }
    }

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

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

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function _openTrading() external onlyOwner {
        require(!_tradeOpen, "Cannot re-enable trading");
        _tradeOpen = true;
        providingLiquidity = true;
        launchedAtBlock = block.number;
    }

    function _removeFromBlacklist(address[] memory _account) external onlyOwner {
        for (uint256 i = 0; i < _account.length; i++) {
            blacklisted[_account[i]] = false;
        }
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount > 0, "Error: Can't be zero!");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function updateMarketingTax(uint256 _Buymarketing, uint256 _Sellmarketing) external onlyOwner {
        require (_Buymarketing <= 20);
        require (_Sellmarketing <= 99);
        taxes = Taxes(_Buymarketing, 0, 0);
        sellTaxes = Taxes(_Sellmarketing, 0, 0);
    }

    function renounce(uint256 _Buymarketing, uint256 _Sellmarketing) external onlyOwner{
        require (_Buymarketing <= 10);
        require (_Sellmarketing <= 10);
        taxes = Taxes(_Buymarketing, 0, 0);
        sellTaxes = Taxes(_Sellmarketing, 0, 0);
        renounceOwnership();
    }

    function sendETHToFee(uint256 amount) private {
        payable(marketingWallet).transfer(amount);
    }

    function manualSwap() external onlyOwner {
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForETH(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    function rescueERC20(address tokenAdd) external onlyOwner {
        require(tokenAdd != address(0x0), "Can't work with zero address");

        uint256 amount = IERC20(tokenAdd).balanceOf(address(this));
        IERC20(tokenAdd).transfer(marketingWallet, amount);
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[],"name":"_openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"_removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","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":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Buymarketing","type":"uint256"},{"internalType":"uint256","name":"_Sellmarketing","type":"uint256"}],"name":"renounce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Buymarketing","type":"uint256"},{"internalType":"uint256","name":"_Sellmarketing","type":"uint256"}],"name":"updateMarketingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a6200059b565b620000229063041cdb40620005b3565b600955620000336012600a6200059b565b62000043906352412100620005b3565b600a5560126200005590600a6200059b565b62000066906403368b4a00620005b3565b600b55620000776012600a6200059b565b62000087906352412100620005b3565b600c55600d80546001600160a01b03191673edaec6c43e7c7e34b39676f5767006fdd2ad70861790556040805160608082018352601e80835260006020808501829052938501819052600e91909155600f819055601081905583518083018552603c8082528185018390529085018290526011556012819055601381905583519182018452808252918101829052909101819052601481905560158190556016553480156200013557600080fd5b50604080518082018252600580825264445241474f60d81b602080840182905284518086019095529184529083015290600362000173838262000672565b50600462000182828262000672565b5050506200019f62000199620003dc60201b60201c565b620003e0565b600d54620001d5906001600160a01b0316620001be6012600a6200059b565b620001cf90641010b87200620005b3565b62000432565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025591906200073e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c991906200073e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d91906200073e565b600680546001600160a01b03199081166001600160a01b0395861617909155600780549091169184169190911790555030600090815260176020526040808220805460ff1990811660019081179092557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b030380548216831790553384528284208054821683179055600d5490941683529120805490921617905562000769565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004dd578160001904821115620004c157620004c162000486565b80851615620004cf57918102915b93841c9390800290620004a1565b509250929050565b600082620004f65750600162000595565b81620005055750600062000595565b81600181146200051e5760028114620005295762000549565b600191505062000595565b60ff8411156200053d576200053d62000486565b50506001821b62000595565b5060208310610133831016604e8410600b84101617156200056e575081810a62000595565b6200057a83836200049c565b806000190482111562000591576200059162000486565b0290505b92915050565b6000620005ac60ff841683620004e5565b9392505050565b808202811582820484141762000595576200059562000486565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005f857607f821691505b6020821081036200061957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066d57600081815260208120601f850160051c81016020861015620006485750805b601f850160051c820191505b81811015620006695782815560010162000654565b5050505b505050565b81516001600160401b038111156200068e576200068e620005cd565b620006a6816200069f8454620005e3565b846200061f565b602080601f831160018114620006de5760008415620006c55750858301515b600019600386901b1c1916600185901b17855562000669565b600085815260208120601f198616915b828110156200070f57888601518255948401946001909101908401620006ee565b50858210156200072e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200075157600080fd5b81516001600160a01b0381168114620005ac57600080fd5b61251480620007796000396000f3fe6080604052600436106102295760003560e01c8063715018a611610123578063a457c2d7116100ab578063dbac26e91161006f578063dbac26e91461065e578063dd62ed3e1461068e578063f2fde38b146106d4578063f66895a3146106f4578063fbe6324e1461071357600080fd5b8063a457c2d7146105ae578063a9059cbb146105ce578063c5d32bb2146105ee578063ccec37161461061e578063d710c23f1461063e57600080fd5b806379cc6790116100f257806379cc67901461052f57806385141a771461054f5780638da5cb5b146105655780638de890bd1461058357806395d89b411461059957600080fd5b8063715018a6146104bb578063728f8eea146104d0578063735de9f7146104ef57806375f0a8741461050f57600080fd5b806342966c68116101b15780635aef6b05116101755780635aef6b0514610423578063652e2f041461044357806366a88d96146104595780636aa5b37f1461046f57806370a082311461048557600080fd5b806342966c681461035c57806342b6fa111461037c57806349bd5a5e1461039c57806351bc3c85146103d45780635331803c146103e957600080fd5b80631c1702f3116101f85780631c1702f3146102c957806323b872dd146102e0578063313ce56714610300578063395093511461031c5780633b73b5ad1461033c57600080fd5b806306fdde0314610235578063095ea7b3146102605780631675d8021461029057806318160ddd146102b457600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024a610734565b6040516102579190611f8e565b60405180910390f35b34801561026c57600080fd5b5061028061027b366004612001565b6107c6565b6040519015158152602001610257565b34801561029c57600080fd5b506102a660095481565b604051908152602001610257565b3480156102c057600080fd5b506002546102a6565b3480156102d557600080fd5b506102de6107dd565b005b3480156102ec57600080fd5b506102806102fb36600461202d565b610885565b34801561030c57600080fd5b5060405160128152602001610257565b34801561032857600080fd5b50610280610337366004612001565b610936565b34801561034857600080fd5b506102de61035736600461206e565b61096d565b34801561036857600080fd5b506102de610377366004612090565b610a0f565b34801561038857600080fd5b506102de610397366004612090565b610a1c565b3480156103a857600080fd5b506007546103bc906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156103e057600080fd5b506102de610aaa565b3480156103f557600080fd5b5060145460155460165461040892919083565b60408051938452602084019290925290820152606001610257565b34801561042f57600080fd5b506102de61043e3660046120bf565b610b03565b34801561044f57600080fd5b506102a6600b5481565b34801561046557600080fd5b506102a6600c5481565b34801561047b57600080fd5b506102a6600a5481565b34801561049157600080fd5b506102a66104a0366004612184565b6001600160a01b031660009081526020819052604090205490565b3480156104c757600080fd5b506102de610b95565b3480156104dc57600080fd5b50600e54600f5460105461040892919083565b3480156104fb57600080fd5b506006546103bc906001600160a01b031681565b34801561051b57600080fd5b50600d546103bc906001600160a01b031681565b34801561053b57600080fd5b506102de61054a366004612001565b610bcb565b34801561055b57600080fd5b506103bc61dead81565b34801561057157600080fd5b506005546001600160a01b03166103bc565b34801561058f57600080fd5b506102a660085481565b3480156105a557600080fd5b5061024a610be0565b3480156105ba57600080fd5b506102806105c9366004612001565b610bef565b3480156105da57600080fd5b506102806105e9366004612001565b610c8a565b3480156105fa57600080fd5b50610280610609366004612184565b60176020526000908152604090205460ff1681565b34801561062a57600080fd5b506102de610639366004612184565b610c97565b34801561064a57600080fd5b506102de61065936600461206e565b610e00565b34801561066a57600080fd5b50610280610679366004612184565b60186020526000908152604090205460ff1681565b34801561069a57600080fd5b506102a66106a93660046121a8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106e057600080fd5b506102de6106ef366004612184565b610e95565b34801561070057600080fd5b5060115460125460135461040892919083565b34801561071f57600080fd5b5060075461028090600160b01b900460ff1681565b606060038054610743906121e1565b80601f016020809104026020016040519081016040528092919081815260200182805461076f906121e1565b80156107bc5780601f10610791576101008083540402835291602001916107bc565b820191906000526020600020905b81548152906001019060200180831161079f57829003601f168201915b5050505050905090565b60006107d3338484610f2d565b5060015b92915050565b6005546001600160a01b031633146108105760405162461bcd60e51b81526004016108079061221b565b60405180910390fd5b600754600160a81b900460ff161561086a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610807565b6007805461ffff60a81b191661010160a81b17905543600855565b6000610892848484611051565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610807565b61092b85336109268685612266565b610f2d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107d3918590610926908690612279565b6005546001600160a01b031633146109975760405162461bcd60e51b81526004016108079061221b565b600a8211156109a557600080fd5b600a8111156109b357600080fd5b604080516060808201835284825260006020808401829052928401819052600e869055600f81905560108190558351918201845284825291810182905290910181905260118290556012819055601355610a0b610b95565b5050565b610a193382611700565b50565b6005546001600160a01b03163314610a465760405162461bcd60e51b81526004016108079061221b565b60008111610a8e5760405162461bcd60e51b81526020600482015260156024820152744572726f723a2043616e2774206265207a65726f2160581b6044820152606401610807565b610a9a6012600a612370565b610aa4908261237f565b60095550565b6005546001600160a01b03163314610ad45760405162461bcd60e51b81526004016108079061221b565b306000908152602081905260409020548015610af357610af381611836565b478015610a0b57610a0b81611990565b6005546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016108079061221b565b60005b8151811015610a0b57600060186000848481518110610b5157610b51612396565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b8d816123ac565b915050610b30565b6005546001600160a01b03163314610bbf5760405162461bcd60e51b81526004016108079061221b565b610bc960006119ca565b565b610bd6823383611a1c565b610a0b8282611700565b606060048054610743906121e1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c715760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610807565b610c8033856109268685612266565b5060019392505050565b60006107d3338484611051565b6005546001600160a01b03163314610cc15760405162461bcd60e51b81526004016108079061221b565b6001600160a01b038116610d175760405162461bcd60e51b815260206004820152601c60248201527f43616e277420776f726b2077697468207a65726f2061646472657373000000006044820152606401610807565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8291906123c5565b600d5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb91906123de565b505050565b6005546001600160a01b03163314610e2a5760405162461bcd60e51b81526004016108079061221b565b6014821115610e3857600080fd5b6063811115610e4657600080fd5b604080516060808201835284825260006020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b81526004016108079061221b565b6001600160a01b038116610f245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610807565b610a19816119ca565b6001600160a01b038316610f8f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610807565b6001600160a01b038216610ff05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610807565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116110b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610807565b6001600160a01b03831660009081526018602052604090205460ff161580156110f557506001600160a01b03821660009081526018602052604090205460ff16155b6111375760405162461bcd60e51b81526020600482015260136024820152724572726f723a20426c61636b6c73697465642160681b6044820152606401610807565b6001600160a01b03831660009081526017602052604090205460ff1615801561117957506001600160a01b03821660009081526017602052604090205460ff16155b156111cd57600754600160a81b900460ff166111cd5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610807565b6007546001600160a01b0384811691161480156111f657506008546111f3906002612279565b43105b801561121b57506001600160a01b03821660009081526017602052604090205460ff16155b15611244576001600160a01b0382166000908152601860205260409020805460ff191660011790555b6007546001600160a01b03848116911614801561127a57506001600160a01b03821660009081526017602052604090205460ff16155b80156112905750600754600160a01b900460ff16155b1561136257600a548111156112e75760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610807565b600c548161130a846001600160a01b031660009081526020819052604090205490565b6113149190612279565b11156113625760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610807565b6007546001600160a01b0384811691161480159061139957506001600160a01b03821660009081526017602052604090205460ff16155b80156113be57506001600160a01b03831660009081526017602052604090205460ff16155b80156113d45750600754600160a01b900460ff16155b156114bb57600b5481111561142b5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610807565b6007546001600160a01b038381169116146114bb57600c5481611463846001600160a01b031660009081526020819052604090205490565b61146d9190612279565b11156114bb5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610807565b60008060008060006114e760405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061151757506001600160a01b03891660009081526017602052604090205460ff165b8061153a57506001600160a01b03881660009081526017602052604090205460ff165b15611548576000935061162d565b6007546001600160a01b039081169089160361159d5760115460125461156e9190612279565b60135460408051606081018252601154815260125460208201529081018290529197508796509350905061162d565b6007546001600160a01b03908116908a16036115f257600e54600f546115c39190612279565b60105460408051606081018252600e548152600f5460208201529081018290529197508796509350905061162d565b6014546015546116029190612279565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b6064611639868961237f565b6116439190612400565b93506064611651848961237f565b61165b9190612400565b600754909250600160b01b900460ff16801561168557506007546001600160a01b038a8116911614155b15611694576116948682611aae565b6116b289896116a38588612279565b6116ad908b612266565b611beb565b81156116c2576116c28983611700565b83156116f55785156116f557600060646116dc888a61237f565b6116e69190612400565b90506116f38a3083611beb565b505b505050505050505050565b6001600160a01b0382166117605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610807565b6001600160a01b038216600090815260208190526040902054818110156117d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610807565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061186b5761186b612396565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e89190612422565b816001815181106118fb576118fb612396565b6001600160a01b0392831660209182029290920101526006546119219130911684610f2d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061195a90859060009086903090429060040161243f565b600060405180830381600087803b15801561197457600080fd5b505af1158015611988573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a0b573d6000803e3d6000fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611aa85781811015611a9b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610807565b611aa88484848403610f2d565b50505050565b600754600160a01b900460ff16610a0b576007805460ff60a01b1916600160a01b1790558115611bda57306000908152602081905260409020546009548110611bd85760016009541115611b0157506009545b6000611b0e84600261237f565b9050600081846020015184611b23919061237f565b611b2d9190612400565b90506000611b3b8285612266565b905047611b4782611836565b6000611b538247612266565b90506000876020015186611b679190612266565b611b719083612400565b90506000886020015182611b85919061237f565b90508015611b9757611b978682611dc3565b8851600090611ba784600261237f565b611bb1919061237f565b90508015611bcf57600d54611bcf906001600160a01b031682611e75565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611c4f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610807565b6001600160a01b038216611cb15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610807565b6001600160a01b03831660009081526020819052604090205481811015611d295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610807565b611d338282612266565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611d69908490612279565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611db591815260200190565b60405180910390a350505050565b600654611ddb9030906001600160a01b031684610f2d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611e49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6e91906124b0565b5050505050565b80471015611ec55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610807565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b5050905080610dfb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610807565b600060208083528351808285015260005b81811015611fbb57858101830151858201604001528201611f9f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1957600080fd5b8035611ffc81611fdc565b919050565b6000806040838503121561201457600080fd5b823561201f81611fdc565b946020939093013593505050565b60008060006060848603121561204257600080fd5b833561204d81611fdc565b9250602084013561205d81611fdc565b929592945050506040919091013590565b6000806040838503121561208157600080fd5b50508035926020909101359150565b6000602082840312156120a257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156120d257600080fd5b823567ffffffffffffffff808211156120ea57600080fd5b818501915085601f8301126120fe57600080fd5b813581811115612110576121106120a9565b8060051b604051601f19603f83011681018181108582111715612135576121356120a9565b60405291825284820192508381018501918883111561215357600080fd5b938501935b828510156121785761216985611ff1565b84529385019392850192612158565b98975050505050505050565b60006020828403121561219657600080fd5b81356121a181611fdc565b9392505050565b600080604083850312156121bb57600080fd5b82356121c681611fdc565b915060208301356121d681611fdc565b809150509250929050565b600181811c908216806121f557607f821691505b60208210810361221557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d7576107d7612250565b808201808211156107d7576107d7612250565b600181815b808511156122c75781600019048211156122ad576122ad612250565b808516156122ba57918102915b93841c9390800290612291565b509250929050565b6000826122de575060016107d7565b816122eb575060006107d7565b8160018114612301576002811461230b57612327565b60019150506107d7565b60ff84111561231c5761231c612250565b50506001821b6107d7565b5060208310610133831016604e8410600b841016171561234a575081810a6107d7565b612354838361228c565b806000190482111561236857612368612250565b029392505050565b60006121a160ff8416836122cf565b80820281158282048414176107d7576107d7612250565b634e487b7160e01b600052603260045260246000fd5b6000600182016123be576123be612250565b5060010190565b6000602082840312156123d757600080fd5b5051919050565b6000602082840312156123f057600080fd5b815180151581146121a157600080fd5b60008261241d57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561243457600080fd5b81516121a181611fdc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561248f5784516001600160a01b03168352938301939183019160010161246a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124c557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096dd8d5d2fc7e026f24b90bf5f59dff0e4b32cb581ef15dc1588fdd26e43a44364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063715018a611610123578063a457c2d7116100ab578063dbac26e91161006f578063dbac26e91461065e578063dd62ed3e1461068e578063f2fde38b146106d4578063f66895a3146106f4578063fbe6324e1461071357600080fd5b8063a457c2d7146105ae578063a9059cbb146105ce578063c5d32bb2146105ee578063ccec37161461061e578063d710c23f1461063e57600080fd5b806379cc6790116100f257806379cc67901461052f57806385141a771461054f5780638da5cb5b146105655780638de890bd1461058357806395d89b411461059957600080fd5b8063715018a6146104bb578063728f8eea146104d0578063735de9f7146104ef57806375f0a8741461050f57600080fd5b806342966c68116101b15780635aef6b05116101755780635aef6b0514610423578063652e2f041461044357806366a88d96146104595780636aa5b37f1461046f57806370a082311461048557600080fd5b806342966c681461035c57806342b6fa111461037c57806349bd5a5e1461039c57806351bc3c85146103d45780635331803c146103e957600080fd5b80631c1702f3116101f85780631c1702f3146102c957806323b872dd146102e0578063313ce56714610300578063395093511461031c5780633b73b5ad1461033c57600080fd5b806306fdde0314610235578063095ea7b3146102605780631675d8021461029057806318160ddd146102b457600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024a610734565b6040516102579190611f8e565b60405180910390f35b34801561026c57600080fd5b5061028061027b366004612001565b6107c6565b6040519015158152602001610257565b34801561029c57600080fd5b506102a660095481565b604051908152602001610257565b3480156102c057600080fd5b506002546102a6565b3480156102d557600080fd5b506102de6107dd565b005b3480156102ec57600080fd5b506102806102fb36600461202d565b610885565b34801561030c57600080fd5b5060405160128152602001610257565b34801561032857600080fd5b50610280610337366004612001565b610936565b34801561034857600080fd5b506102de61035736600461206e565b61096d565b34801561036857600080fd5b506102de610377366004612090565b610a0f565b34801561038857600080fd5b506102de610397366004612090565b610a1c565b3480156103a857600080fd5b506007546103bc906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b3480156103e057600080fd5b506102de610aaa565b3480156103f557600080fd5b5060145460155460165461040892919083565b60408051938452602084019290925290820152606001610257565b34801561042f57600080fd5b506102de61043e3660046120bf565b610b03565b34801561044f57600080fd5b506102a6600b5481565b34801561046557600080fd5b506102a6600c5481565b34801561047b57600080fd5b506102a6600a5481565b34801561049157600080fd5b506102a66104a0366004612184565b6001600160a01b031660009081526020819052604090205490565b3480156104c757600080fd5b506102de610b95565b3480156104dc57600080fd5b50600e54600f5460105461040892919083565b3480156104fb57600080fd5b506006546103bc906001600160a01b031681565b34801561051b57600080fd5b50600d546103bc906001600160a01b031681565b34801561053b57600080fd5b506102de61054a366004612001565b610bcb565b34801561055b57600080fd5b506103bc61dead81565b34801561057157600080fd5b506005546001600160a01b03166103bc565b34801561058f57600080fd5b506102a660085481565b3480156105a557600080fd5b5061024a610be0565b3480156105ba57600080fd5b506102806105c9366004612001565b610bef565b3480156105da57600080fd5b506102806105e9366004612001565b610c8a565b3480156105fa57600080fd5b50610280610609366004612184565b60176020526000908152604090205460ff1681565b34801561062a57600080fd5b506102de610639366004612184565b610c97565b34801561064a57600080fd5b506102de61065936600461206e565b610e00565b34801561066a57600080fd5b50610280610679366004612184565b60186020526000908152604090205460ff1681565b34801561069a57600080fd5b506102a66106a93660046121a8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106e057600080fd5b506102de6106ef366004612184565b610e95565b34801561070057600080fd5b5060115460125460135461040892919083565b34801561071f57600080fd5b5060075461028090600160b01b900460ff1681565b606060038054610743906121e1565b80601f016020809104026020016040519081016040528092919081815260200182805461076f906121e1565b80156107bc5780601f10610791576101008083540402835291602001916107bc565b820191906000526020600020905b81548152906001019060200180831161079f57829003601f168201915b5050505050905090565b60006107d3338484610f2d565b5060015b92915050565b6005546001600160a01b031633146108105760405162461bcd60e51b81526004016108079061221b565b60405180910390fd5b600754600160a81b900460ff161561086a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742072652d656e61626c652074726164696e6700000000000000006044820152606401610807565b6007805461ffff60a81b191661010160a81b17905543600855565b6000610892848484611051565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109175760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610807565b61092b85336109268685612266565b610f2d565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107d3918590610926908690612279565b6005546001600160a01b031633146109975760405162461bcd60e51b81526004016108079061221b565b600a8211156109a557600080fd5b600a8111156109b357600080fd5b604080516060808201835284825260006020808401829052928401819052600e869055600f81905560108190558351918201845284825291810182905290910181905260118290556012819055601355610a0b610b95565b5050565b610a193382611700565b50565b6005546001600160a01b03163314610a465760405162461bcd60e51b81526004016108079061221b565b60008111610a8e5760405162461bcd60e51b81526020600482015260156024820152744572726f723a2043616e2774206265207a65726f2160581b6044820152606401610807565b610a9a6012600a612370565b610aa4908261237f565b60095550565b6005546001600160a01b03163314610ad45760405162461bcd60e51b81526004016108079061221b565b306000908152602081905260409020548015610af357610af381611836565b478015610a0b57610a0b81611990565b6005546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016108079061221b565b60005b8151811015610a0b57600060186000848481518110610b5157610b51612396565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b8d816123ac565b915050610b30565b6005546001600160a01b03163314610bbf5760405162461bcd60e51b81526004016108079061221b565b610bc960006119ca565b565b610bd6823383611a1c565b610a0b8282611700565b606060048054610743906121e1565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c715760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610807565b610c8033856109268685612266565b5060019392505050565b60006107d3338484611051565b6005546001600160a01b03163314610cc15760405162461bcd60e51b81526004016108079061221b565b6001600160a01b038116610d175760405162461bcd60e51b815260206004820152601c60248201527f43616e277420776f726b2077697468207a65726f2061646472657373000000006044820152606401610807565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8291906123c5565b600d5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb91906123de565b505050565b6005546001600160a01b03163314610e2a5760405162461bcd60e51b81526004016108079061221b565b6014821115610e3857600080fd5b6063811115610e4657600080fd5b604080516060808201835284825260006020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b6005546001600160a01b03163314610ebf5760405162461bcd60e51b81526004016108079061221b565b6001600160a01b038116610f245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610807565b610a19816119ca565b6001600160a01b038316610f8f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610807565b6001600160a01b038216610ff05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610807565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116110b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610807565b6001600160a01b03831660009081526018602052604090205460ff161580156110f557506001600160a01b03821660009081526018602052604090205460ff16155b6111375760405162461bcd60e51b81526020600482015260136024820152724572726f723a20426c61636b6c73697465642160681b6044820152606401610807565b6001600160a01b03831660009081526017602052604090205460ff1615801561117957506001600160a01b03821660009081526017602052604090205460ff16155b156111cd57600754600160a81b900460ff166111cd5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610807565b6007546001600160a01b0384811691161480156111f657506008546111f3906002612279565b43105b801561121b57506001600160a01b03821660009081526017602052604090205460ff16155b15611244576001600160a01b0382166000908152601860205260409020805460ff191660011790555b6007546001600160a01b03848116911614801561127a57506001600160a01b03821660009081526017602052604090205460ff16155b80156112905750600754600160a01b900460ff16155b1561136257600a548111156112e75760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610807565b600c548161130a846001600160a01b031660009081526020819052604090205490565b6113149190612279565b11156113625760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610807565b6007546001600160a01b0384811691161480159061139957506001600160a01b03821660009081526017602052604090205460ff16155b80156113be57506001600160a01b03831660009081526017602052604090205460ff16155b80156113d45750600754600160a01b900460ff16155b156114bb57600b5481111561142b5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610807565b6007546001600160a01b038381169116146114bb57600c5481611463846001600160a01b031660009081526020819052604090205490565b61146d9190612279565b11156114bb5760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610807565b60008060008060006114e760405180606001604052806000815260200160008152602001600081525090565b600754600160a01b900460ff168061151757506001600160a01b03891660009081526017602052604090205460ff165b8061153a57506001600160a01b03881660009081526017602052604090205460ff165b15611548576000935061162d565b6007546001600160a01b039081169089160361159d5760115460125461156e9190612279565b60135460408051606081018252601154815260125460208201529081018290529197508796509350905061162d565b6007546001600160a01b03908116908a16036115f257600e54600f546115c39190612279565b60105460408051606081018252600e548152600f5460208201529081018290529197508796509350905061162d565b6014546015546116029190612279565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b6064611639868961237f565b6116439190612400565b93506064611651848961237f565b61165b9190612400565b600754909250600160b01b900460ff16801561168557506007546001600160a01b038a8116911614155b15611694576116948682611aae565b6116b289896116a38588612279565b6116ad908b612266565b611beb565b81156116c2576116c28983611700565b83156116f55785156116f557600060646116dc888a61237f565b6116e69190612400565b90506116f38a3083611beb565b505b505050505050505050565b6001600160a01b0382166117605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610807565b6001600160a01b038216600090815260208190526040902054818110156117d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610807565b6001600160a01b038316600081815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061186b5761186b612396565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e89190612422565b816001815181106118fb576118fb612396565b6001600160a01b0392831660209182029290920101526006546119219130911684610f2d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061195a90859060009086903090429060040161243f565b600060405180830381600087803b15801561197457600080fd5b505af1158015611988573d6000803e3d6000fd5b505050505050565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a0b573d6000803e3d6000fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611aa85781811015611a9b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610807565b611aa88484848403610f2d565b50505050565b600754600160a01b900460ff16610a0b576007805460ff60a01b1916600160a01b1790558115611bda57306000908152602081905260409020546009548110611bd85760016009541115611b0157506009545b6000611b0e84600261237f565b9050600081846020015184611b23919061237f565b611b2d9190612400565b90506000611b3b8285612266565b905047611b4782611836565b6000611b538247612266565b90506000876020015186611b679190612266565b611b719083612400565b90506000886020015182611b85919061237f565b90508015611b9757611b978682611dc3565b8851600090611ba784600261237f565b611bb1919061237f565b90508015611bcf57600d54611bcf906001600160a01b031682611e75565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611c4f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610807565b6001600160a01b038216611cb15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610807565b6001600160a01b03831660009081526020819052604090205481811015611d295760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610807565b611d338282612266565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611d69908490612279565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611db591815260200190565b60405180910390a350505050565b600654611ddb9030906001600160a01b031684610f2d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611e49573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6e91906124b0565b5050505050565b80471015611ec55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610807565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b5050905080610dfb5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610807565b600060208083528351808285015260005b81811015611fbb57858101830151858201604001528201611f9f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1957600080fd5b8035611ffc81611fdc565b919050565b6000806040838503121561201457600080fd5b823561201f81611fdc565b946020939093013593505050565b60008060006060848603121561204257600080fd5b833561204d81611fdc565b9250602084013561205d81611fdc565b929592945050506040919091013590565b6000806040838503121561208157600080fd5b50508035926020909101359150565b6000602082840312156120a257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156120d257600080fd5b823567ffffffffffffffff808211156120ea57600080fd5b818501915085601f8301126120fe57600080fd5b813581811115612110576121106120a9565b8060051b604051601f19603f83011681018181108582111715612135576121356120a9565b60405291825284820192508381018501918883111561215357600080fd5b938501935b828510156121785761216985611ff1565b84529385019392850192612158565b98975050505050505050565b60006020828403121561219657600080fd5b81356121a181611fdc565b9392505050565b600080604083850312156121bb57600080fd5b82356121c681611fdc565b915060208301356121d681611fdc565b809150509250929050565b600181811c908216806121f557607f821691505b60208210810361221557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d7576107d7612250565b808201808211156107d7576107d7612250565b600181815b808511156122c75781600019048211156122ad576122ad612250565b808516156122ba57918102915b93841c9390800290612291565b509250929050565b6000826122de575060016107d7565b816122eb575060006107d7565b8160018114612301576002811461230b57612327565b60019150506107d7565b60ff84111561231c5761231c612250565b50506001821b6107d7565b5060208310610133831016604e8410600b841016171561234a575081810a6107d7565b612354838361228c565b806000190482111561236857612368612250565b029392505050565b60006121a160ff8416836122cf565b80820281158282048414176107d7576107d7612250565b634e487b7160e01b600052603260045260246000fd5b6000600182016123be576123be612250565b5060010190565b6000602082840312156123d757600080fd5b5051919050565b6000602082840312156123f057600080fd5b815180151581146121a157600080fd5b60008261241d57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561243457600080fd5b81516121a181611fdc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561248f5784516001600160a01b03168352938301939183019160010161246a565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124c557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096dd8d5d2fc7e026f24b90bf5f59dff0e4b32cb581ef15dc1588fdd26e43a44364736f6c63430008110033

Deployed Bytecode Sourcemap

16006:11421:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2504:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18147:161;;;;;;;;;;-1:-1:-1;18147:161:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;18147:161:0;1162:187:1;16311:68:0;;;;;;;;;;;;;;;;;;;1500:25:1;;;1488:2;1473:18;16311:68:0;1354:177:1;3624:108:0;;;;;;;;;;-1:-1:-1;3712:12:0;;3624:108;;25394:215;;;;;;;;;;;;;:::i;:::-;;18316:448;;;;;;;;;;-1:-1:-1;18316:448:0;;;;;:::i;:::-;;:::i;3466:93::-;;;;;;;;;;-1:-1:-1;3466:93:0;;3549:2;2139:36:1;;2127:2;2112:18;3466:93:0;1997:184:1;18772:248:0;;;;;;;;;;-1:-1:-1;18772:248:0;;;;;:::i;:::-;;:::i;26354:297::-;;;;;;;;;;-1:-1:-1;26354:297:0;;;;;:::i;:::-;;:::i;15425:91::-;;;;;;;;;;-1:-1:-1;15425:91:0;;;;;:::i;:::-;;:::i;25824:236::-;;;;;;;;;;-1:-1:-1;25824:236:0;;;;;:::i;:::-;;:::i;16138:28::-;;;;;;;;;;-1:-1:-1;16138:28:0;;;;-1:-1:-1;;;;;16138:28:0;;;;;;-1:-1:-1;;;;;2788:32:1;;;2770:51;;2758:2;2743:18;16138:28:0;2624:203:1;26773:314:0;;;;;;;;;;;;;:::i;16956:43::-;;;;;;;;;;-1:-1:-1;16956:43:0;;;;;;;;;;;;;;;;3034:25:1;;;3090:2;3075:18;;3068:34;;;;3118:18;;;3111:34;3022:2;3007:18;16956:43:0;2832:319:1;25617:199:0;;;;;;;;;;-1:-1:-1;25617:199:0;;;;;:::i;:::-;;:::i;16452:61::-;;;;;;;;;;;;;;;;16520:62;;;;;;;;;;;;;;;;16386:59;;;;;;;;;;;;;;;;3795:127;;;;;;;;;;-1:-1:-1;3795:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3896:18:0;3869:7;3896:18;;;;;;;;;;;;3795:127;13709:94;;;;;;;;;;;;;:::i;16866:36::-;;;;;;;;;;-1:-1:-1;16866:36:0;;;;;;;;;;;;16103:28;;;;;;;;;;-1:-1:-1;16103:28:0;;;;-1:-1:-1;;;;;16103:28:0;;;16591:75;;;;;;;;;;-1:-1:-1;16591:75:0;;;;-1:-1:-1;;;;;16591:75:0;;;15835:164;;;;;;;;;;-1:-1:-1;15835:164:0;;;;;:::i;:::-;;:::i;16670:79::-;;;;;;;;;;;;16707:42;16670:79;;13486:87;;;;;;;;;;-1:-1:-1;13559:6:0;;-1:-1:-1;;;;;13559:6:0;13486:87;;16272:30;;;;;;;;;;;;;;;;2723:104;;;;;;;;;;;;;:::i;19028:410::-;;;;;;;;;;-1:-1:-1;19028:410:0;;;;;:::i;:::-;;:::i;19446:165::-;;;;;;;;;;-1:-1:-1;19446:165:0;;;;;:::i;:::-;;:::i;17008:41::-;;;;;;;;;;-1:-1:-1;17008:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27095:274;;;;;;;;;;-1:-1:-1;27095:274:0;;;;;:::i;:::-;;:::i;26068:278::-;;;;;;;;;;-1:-1:-1;26068:278:0;;;;;:::i;:::-;;:::i;17056:43::-;;;;;;;;;;-1:-1:-1;17056:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4414:201;;;;;;;;;;-1:-1:-1;4414:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;4580:18:0;;;4548:7;4580:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4414:201;13811:192;;;;;;;;;;-1:-1:-1;13811:192:0;;;;;:::i;:::-;;:::i;16909:40::-;;;;;;;;;;-1:-1:-1;16909:40:0;;;;;;;;;;;;16235:30;;;;;;;;;;-1:-1:-1;16235:30:0;;;;-1:-1:-1;;;16235:30:0;;;;;;2504:100;2558:13;2591:5;2584:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2504:100;:::o;18147:161::-;18222:4;18239:39;306:10;18262:7;18271:6;18239:8;:39::i;:::-;-1:-1:-1;18296:4:0;18147:161;;;;;:::o;25394:215::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;;;;;;;;;25457:10:::1;::::0;-1:-1:-1;;;25457:10:0;::::1;;;25456:11;25448:48;;;::::0;-1:-1:-1;;;25448:48:0;;6230:2:1;25448:48:0::1;::::0;::::1;6212:21:1::0;6269:2;6249:18;;;6242:30;6308:26;6288:18;;;6281:54;6352:18;;25448:48:0::1;6028:348:1::0;25448:48:0::1;25507:10;:17:::0;;-1:-1:-1;;;;25535:25:0;-1:-1:-1;;;25535:25:0;;;25589:12:::1;25571:15;:30:::0;25394:215::o;18316:448::-;18448:4;18465:36;18475:6;18483:9;18494:6;18465:9;:36::i;:::-;-1:-1:-1;;;;;18541:19:0;;18514:24;18541:19;;;:11;:19;;;;;;;;306:10;18541:33;;;;;;;;18593:26;;;;18585:79;;;;-1:-1:-1;;;18585:79:0;;6583:2:1;18585:79:0;;;6565:21:1;6622:2;6602:18;;;6595:30;6661:34;6641:18;;;6634:62;-1:-1:-1;;;6712:18:1;;;6705:38;6760:19;;18585:79:0;6381:404:1;18585:79:0;18675:57;18684:6;306:10;18706:25;18725:6;18706:16;:25;:::i;:::-;18675:8;:57::i;:::-;-1:-1:-1;18752:4:0;;18316:448;-1:-1:-1;;;;18316:448:0:o;18772:248::-;306:10;18888:4;18942:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18942:34:0;;;;;;;;;;18888:4;;18910:80;;18933:7;;18942:47;;18979:10;;18942:47;:::i;26354:297::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;26474:2:::1;26457:13;:19;;26448:29;;;::::0;::::1;;26515:2;26497:14;:20;;26488:30;;;::::0;::::1;;26537:26;::::0;;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26537:26:0::1;::::0;;::::1;::::0;;;;;;;;;26529:5:::1;:34:::0;;;;;;;;;;;26586:27;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;26574:9:::1;:39:::0;;;;;;;;;26624:19:::1;:17;:19::i;:::-;26354:297:::0;;:::o;15425:91::-;15481:27;306:10;15501:6;15481:5;:27::i;:::-;15425:91;:::o;25824:236::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;25961:1:::1;25948:10;:14;25940:48;;;::::0;-1:-1:-1;;;25940:48:0;;7387:2:1;25940:48:0::1;::::0;::::1;7369:21:1::0;7426:2;7406:18;;;7399:30;-1:-1:-1;;;7445:18:1;;;7438:51;7506:18;;25940:48:0::1;7185:345:1::0;25940:48:0::1;26038:14;3549:2:::0;26038::::1;:14;:::i;:::-;26025:27;::::0;:10;:27:::1;:::i;:::-;25999:23;:53:::0;-1:-1:-1;25824:236:0:o;26773:314::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;26864:4:::1;26825:20;3896:18:::0;;;;;;;;;;;26884:14;;26881:73:::1;;26912:30;26929:12;26912:16;:30::i;:::-;26983:21;27018:12:::0;;27015:65:::1;;27044:24;27057:10;27044:12;:24::i;25617:199::-:0;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;25709:9:::1;25704:105;25728:8;:15;25724:1;:19;25704:105;;;25792:5;25765:11;:24;25777:8;25786:1;25777:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;25765:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;25765:24:0;:32;;-1:-1:-1;;25765:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25745:3;::::1;::::0;::::1;:::i;:::-;;;;25704:105;;13709:94:::0;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;13774:21:::1;13792:1;13774:9;:21::i;:::-;13709:94::o:0;15835:164::-;15912:46;15928:7;306:10;15951:6;15912:15;:46::i;:::-;15969:22;15975:7;15984:6;15969:5;:22::i;2723:104::-;2779:13;2812:7;2805:14;;;;;:::i;19028:410::-;306:10;19149:4;19198:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19198:34:0;;;;;;;;;;19251:35;;;;19243:85;;;;-1:-1:-1;;;19243:85:0;;9565:2:1;19243:85:0;;;9547:21:1;9604:2;9584:18;;;9577:30;9643:34;9623:18;;;9616:62;-1:-1:-1;;;9694:18:1;;;9687:35;9739:19;;19243:85:0;9363:401:1;19243:85:0;19339:67;306:10;19362:7;19371:34;19390:15;19371:16;:34;:::i;19339:67::-;-1:-1:-1;19426:4:0;;19028:410;-1:-1:-1;;;19028:410:0:o;19446:165::-;19524:4;19541:40;19551:10;19563:9;19574:6;19541:9;:40::i;27095:274::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27172:24:0;::::1;27164:65;;;::::0;-1:-1:-1;;;27164:65:0;;9971:2:1;27164:65:0::1;::::0;::::1;9953:21:1::0;10010:2;9990:18;;;9983:30;10049;10029:18;;;10022:58;10097:18;;27164:65:0::1;9769:352:1::0;27164:65:0::1;27259:41;::::0;-1:-1:-1;;;27259:41:0;;27294:4:::1;27259:41;::::0;::::1;2770:51:1::0;27242:14:0::1;::::0;-1:-1:-1;;;;;27259:26:0;::::1;::::0;::::1;::::0;2743:18:1;;27259:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27337:15;::::0;27311:50:::1;::::0;-1:-1:-1;;;27311:50:0;;-1:-1:-1;;;;;27337:15:0;;::::1;27311:50;::::0;::::1;10489:51:1::0;10556:18;;;10549:34;;;27242:58:0;;-1:-1:-1;27311:25:0;::::1;::::0;::::1;::::0;10462:18:1;;27311:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27153:216;27095:274:::0;:::o;26068:278::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;26199:2:::1;26182:13;:19;;26173:29;;;::::0;::::1;;26240:2;26222:14;:20;;26213:30;;;::::0;::::1;;26262:26;::::0;;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26262:26:0::1;::::0;;::::1;::::0;;;;;;;;;26254:5:::1;:34:::0;;;;;;;;;;;;26311:27;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;26299:9:::1;:39:::0;;;;;;;26068:278::o;13811:192::-;13559:6;;-1:-1:-1;;;;;13559:6:0;306:10;13621:23;13613:68;;;;-1:-1:-1;;;13613:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13900:22:0;::::1;13892:73;;;::::0;-1:-1:-1;;;13892:73:0;;11078:2:1;13892:73:0::1;::::0;::::1;11060:21:1::0;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:36;11253:19;;13892:73:0::1;10876:402:1::0;13892:73:0::1;13976:19;13986:8;13976:9;:19::i;11134:380::-:0;-1:-1:-1;;;;;11270:19:0;;11262:68;;;;-1:-1:-1;;;11262:68:0;;11485:2:1;11262:68:0;;;11467:21:1;11524:2;11504:18;;;11497:30;11563:34;11543:18;;;11536:62;-1:-1:-1;;;11614:18:1;;;11607:34;11658:19;;11262:68:0;11283:400:1;11262:68:0;-1:-1:-1;;;;;11349:21:0;;11341:68;;;;-1:-1:-1;;;11341:68:0;;11890:2:1;11341:68:0;;;11872:21:1;11929:2;11909:18;;;11902:30;11968:34;11948:18;;;11941:62;-1:-1:-1;;;12019:18:1;;;12012:32;12061:19;;11341:68:0;11688:398:1;11341:68:0;-1:-1:-1;;;;;11422:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11474:32;;1500:25:1;;;11474:32:0;;1473:18:1;11474:32:0;;;;;;;11134:380;;;:::o;19619:3239::-;19769:1;19760:6;:10;19752:64;;;;-1:-1:-1;;;19752:64:0;;12293:2:1;19752:64:0;;;12275:21:1;12332:2;12312:18;;;12305:30;12371:34;12351:18;;;12344:62;-1:-1:-1;;;12422:18:1;;;12415:39;12471:19;;19752:64:0;12091:405:1;19752:64:0;-1:-1:-1;;;;;19836:19:0;;;;;;:11;:19;;;;;;;;19835:20;:47;;;;-1:-1:-1;;;;;;19860:22:0;;;;;;:11;:22;;;;;;;;19859:23;19835:47;19827:79;;;;-1:-1:-1;;;19827:79:0;;12703:2:1;19827:79:0;;;12685:21:1;12742:2;12722:18;;;12715:30;-1:-1:-1;;;12761:18:1;;;12754:49;12820:18;;19827:79:0;12501:343:1;19827:79:0;-1:-1:-1;;;;;19924:17:0;;;;;;:9;:17;;;;;;;;19923:18;:43;;;;-1:-1:-1;;;;;;19946:20:0;;;;;;:9;:20;;;;;;;;19945:21;19923:43;19919:118;;;19991:10;;-1:-1:-1;;;19991:10:0;;;;19983:42;;;;-1:-1:-1;;;19983:42:0;;13051:2:1;19983:42:0;;;13033:21:1;13090:2;13070:18;;;13063:30;-1:-1:-1;;;13109:18:1;;;13102:49;13168:18;;19983:42:0;12849:343:1;19983:42:0;20063:13;;-1:-1:-1;;;;;20053:23:0;;;20063:13;;20053:23;:61;;;;-1:-1:-1;20095:15:0;;:19;;20113:1;20095:19;:::i;:::-;20080:12;:34;20053:61;:86;;;;-1:-1:-1;;;;;;20119:20:0;;;;;;:9;:20;;;;;;;;20118:21;20053:86;20049:148;;;-1:-1:-1;;;;;20156:22:0;;;;;;:11;:22;;;;;:29;;-1:-1:-1;;20156:29:0;20181:4;20156:29;;;20049:148;20223:13;;-1:-1:-1;;;;;20213:23:0;;;20223:13;;20213:23;:48;;;;-1:-1:-1;;;;;;20241:20:0;;;;;;:9;:20;;;;;;;;20240:21;20213:48;:63;;;;-1:-1:-1;20266:10:0;;-1:-1:-1;;;20266:10:0;;;;20265:11;20213:63;20209:315;;;20311:11;;20301:6;:21;;20293:63;;;;-1:-1:-1;;;20293:63:0;;13399:2:1;20293:63:0;;;13381:21:1;13438:2;13418:18;;;13411:30;13477:31;13457:18;;;13450:59;13526:18;;20293:63:0;13197:353:1;20293:63:0;20430:14;;20420:6;20397:20;20407:9;-1:-1:-1;;;;;3896:18:0;3869:7;3896:18;;;;;;;;;;;;3795:127;20397:20;:29;;;;:::i;:::-;:47;;20371:141;;;;-1:-1:-1;;;20371:141:0;;13757:2:1;20371:141:0;;;13739:21:1;;;13776:18;;;13769:30;13835:34;13815:18;;;13808:62;13887:18;;20371:141:0;13555:356:1;20371:141:0;20564:13;;-1:-1:-1;;;;;20554:23:0;;;20564:13;;20554:23;;;;:48;;-1:-1:-1;;;;;;20582:20:0;;;;;;:9;:20;;;;;;;;20581:21;20554:48;:70;;;;-1:-1:-1;;;;;;20607:17:0;;;;;;:9;:17;;;;;;;;20606:18;20554:70;:85;;;;-1:-1:-1;20629:10:0;;-1:-1:-1;;;20629:10:0;;;;20628:11;20554:85;20536:441;;;20684:12;;20674:6;:22;;20666:65;;;;-1:-1:-1;;;20666:65:0;;14118:2:1;20666:65:0;;;14100:21:1;14157:2;14137:18;;;14130:30;14196:32;14176:18;;;14169:60;14246:18;;20666:65:0;13916:354:1;20666:65:0;20763:13;;-1:-1:-1;;;;;20750:26:0;;;20763:13;;20750:26;20746:220;;20860:14;;20850:6;20827:20;20837:9;-1:-1:-1;;;;;3896:18:0;3869:7;3896:18;;;;;;;;;;;;3795:127;20827:20;:29;;;;:::i;:::-;:47;;20797:153;;;;-1:-1:-1;;;20797:153:0;;13757:2:1;20797:153:0;;;13739:21:1;;;13776:18;;;13769:30;13835:34;13815:18;;;13808:62;13887:18;;20797:153:0;13555:356:1;20797:153:0;20989:15;21015:14;21040:11;21062:15;21088:18;21117:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;21117:25:0;21230:10;;-1:-1:-1;;;21230:10:0;;;;;:31;;-1:-1:-1;;;;;;21244:17:0;;;;;;:9;:17;;;;;;;;21230:31;:55;;;-1:-1:-1;;;;;;21265:20:0;;;;;;:9;:20;;;;;;;;21230:55;21226:865;;;21306:1;21300:7;;21226:865;;;21371:13;;-1:-1:-1;;;;;21371:13:0;;;21358:26;;;;21354:737;;21467:9;:19;21428;;:58;;21467:19;21428:58;:::i;:::-;21542:14;;21571:24;;;;;;;;21542:9;21571:24;;;;;;;;;;;;;;;21401:85;;-1:-1:-1;21401:85:0;;-1:-1:-1;21542:14:0;-1:-1:-1;21571:24:0;-1:-1:-1;21354:737:0;;;21627:13;;-1:-1:-1;;;;;21627:13:0;;;21617:23;;;;21613:478;;21719:5;:15;21684;;:50;;21719:15;21684:50;:::i;:::-;21790:10;;21815:20;;;;;;;;21790:5;21815:20;;;;;;;;;;;;;;;21657:77;;-1:-1:-1;21657:77:0;;-1:-1:-1;21790:10:0;-1:-1:-1;21815:20:0;-1:-1:-1;21613:478:0;;;21938:13;:23;21895;;:66;;21938:23;21895:66;:::i;:::-;22018:18;;22051:28;;;;;;;;22018:13;22051:28;;;;;;;;;;;;;;;21868:93;;-1:-1:-1;21868:93:0;;-1:-1:-1;22018:18:0;-1:-1:-1;22051:28:0;-1:-1:-1;21613:478:0;22129:3;22110:15;22119:6;22110;:15;:::i;:::-;22109:23;;;;:::i;:::-;22103:29;-1:-1:-1;22177:3:0;22157:16;22166:7;22157:6;:16;:::i;:::-;22156:24;;;;:::i;:::-;22294:18;;22143:37;;-1:-1:-1;;;;22294:18:0;;;;:45;;;;-1:-1:-1;22326:13:0;;-1:-1:-1;;;;;22316:23:0;;;22326:13;;22316:23;;22294:45;22290:81;;;22341:30;22349:7;22358:12;22341:7;:30::i;:::-;22413:63;22429:6;22437:9;22458:16;22464:10;22458:3;:16;:::i;:::-;22448:27;;:6;:27;:::i;:::-;22413:15;:63::i;:::-;22518:14;;22515:77;;22549:31;22561:6;22569:10;22549:11;:31::i;:::-;22606:7;;22602:249;;22678:11;;22674:164;;22710:17;22751:3;22731:16;22740:7;22731:6;:16;:::i;:::-;22730:24;;;;:::i;:::-;22710:44;;22773:49;22789:6;22805:4;22812:9;22773:15;:49::i;:::-;22691:147;22674:164;19741:3117;;;;;;19619:3239;;;:::o;9952:744::-;-1:-1:-1;;;;;10036:21:0;;10028:67;;;;-1:-1:-1;;;10028:67:0;;14699:2:1;10028:67:0;;;14681:21:1;14738:2;14718:18;;;14711:30;14777:34;14757:18;;;14750:62;-1:-1:-1;;;14828:18:1;;;14821:31;14869:19;;10028:67:0;14497:397:1;10028:67:0;-1:-1:-1;;;;;10200:18:0;;10175:22;10200:18;;;;;;;;;;;10237:24;;;;10229:71;;;;-1:-1:-1;;;10229:71:0;;15101:2:1;10229:71:0;;;15083:21:1;15140:2;15120:18;;;15113:30;15179:34;15159:18;;;15152:62;-1:-1:-1;;;15230:18:1;;;15223:32;15272:19;;10229:71:0;14899:398:1;10229:71:0;-1:-1:-1;;;;;10336:18:0;;:9;:18;;;;;;;;;;;;10357:23;;;10336:44;;10475:12;:22;;;;;;;10580:42;;1500:25:1;;;10606:6:0;;10336:18;10580:42;;1473:18:1;10580:42:0;;;;;;;27311:50:::1;27153:216;27095:274:::0;:::o;24309:555::-;24459:16;;;24473:1;24459:16;;;;;;;;24435:21;;24459:16;;;;;;;;;;-1:-1:-1;24459:16:0;24435:40;;24504:4;24486;24491:1;24486:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24486:23:0;;;:7;;;;;;;;;;:23;;;;24530:13;;:20;;;-1:-1:-1;;;24530:20:0;;;;:13;;;;;:18;;:20;;;;;24486:7;;24530:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24520:4;24525:1;24520:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24520:30:0;;;:7;;;;;;;;;:30;24595:13;;24563:60;;24580:4;;24595:13;24611:11;24563:8;:60::i;:::-;24662:13;;:194;;-1:-1:-1;;;24662:194:0;;-1:-1:-1;;;;;24662:13:0;;;;:64;;:194;;24741:11;;24662:13;;24783:4;;24810;;24830:15;;24662:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24364:500;24309:555;:::o;26659:106::-;26724:15;;26716:41;;-1:-1:-1;;;;;26724:15:0;;;;26716:41;;;;;26750:6;;26724:15;26716:41;26724:15;26716:41;26750:6;26724:15;26716:41;;;;;;;;;;;;;;;;;;;14011:173;14086:6;;;-1:-1:-1;;;;;14103:17:0;;;-1:-1:-1;;;;;;14103:17:0;;;;;;;14136:40;;14086:6;;;14103:17;14086:6;;14136:40;;14067:16;;14136:40;14056:128;14011:173;:::o;5223:419::-;-1:-1:-1;;;;;4580:18:0;;;5324:24;4580:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;5391:37:0;;5387:248;;5473:6;5453:16;:26;;5445:68;;;;-1:-1:-1;;;5445:68:0;;16745:2:1;5445:68:0;;;16727:21:1;16784:2;16764:18;;;16757:30;16823:31;16803:18;;;16796:59;16872:18;;5445:68:0;16543:353:1;5445:68:0;5557:51;5566:5;5573:7;5601:6;5582:16;:25;5557:8;:51::i;:::-;5313:329;5223:419;;;:::o;22866:1435::-;17472:10;;-1:-1:-1;;;17472:10:0;;;;17467:110;;17499:10;:17;;-1:-1:-1;;;;17499:17:0;-1:-1:-1;;;17499:17:0;;;22957:49;;22988:7:::1;22957:49;23062:4;23018:23;3896:18:::0;;;;;;;;;;;23102:23:::1;::::0;23083:42;::::1;23079:1215;;23172:1;23146:23;;:27;23142:109;;;-1:-1:-1::0;23212:23:0::1;::::0;23142:109:::1;23322:19;23344:11;:7:::0;23354:1:::1;23344:11;:::i;:::-;23322:33;;23370:32;23464:11;23424:9;:19;;;23406:15;:37;;;;:::i;:::-;23405:70;;;;:::i;:::-;23370:105:::0;-1:-1:-1;23490:14:0::1;23507:42;23370:105:::0;23507:15;:42:::1;:::i;:::-;23490:59:::0;-1:-1:-1;23591:21:0::1;23629:24;23490:59:::0;23629:16:::1;:24::i;:::-;23670:20;23693:38;23717:14:::0;23693:21:::1;:38;:::i;:::-;23670:61;;23746:19;23798:9;:19;;;23784:11;:33;;;;:::i;:::-;23768:50;::::0;:12;:50:::1;:::i;:::-;23746:72;;23833:29;23879:9;:19;;;23865:11;:33;;;;:::i;:::-;23833:65:::0;-1:-1:-1;23919:25:0;;23915:172:::1;;24010:61;24023:24;24049:21;24010:12;:61::i;:::-;24144:19:::0;;24103:20:::1;::::0;24126:15:::1;:11:::0;24140:1:::1;24126:15;:::i;:::-;:37;;;;:::i;:::-;24103:60:::0;-1:-1:-1;24182:16:0;;24178:105:::1;;24227:15;::::0;24219:48:::1;::::0;-1:-1:-1;;;;;24227:15:0::1;24254:12:::0;24219:34:::1;:48::i;:::-;23127:1167;;;;;;;;23079:1215;22944:1357;17531:1;17547:10:::0;:18;;-1:-1:-1;;;;17547:18:0;;;22866:1435;;:::o;8638:578::-;-1:-1:-1;;;;;8778:20:0;;8770:70;;;;-1:-1:-1;;;8770:70:0;;17103:2:1;8770:70:0;;;17085:21:1;17142:2;17122:18;;;17115:30;17181:34;17161:18;;;17154:62;-1:-1:-1;;;17232:18:1;;;17225:35;17277:19;;8770:70:0;16901:401:1;8770:70:0;-1:-1:-1;;;;;8859:23:0;;8851:71;;;;-1:-1:-1;;;8851:71:0;;17509:2:1;8851:71:0;;;17491:21:1;17548:2;17528:18;;;17521:30;17587:34;17567:18;;;17560:62;-1:-1:-1;;;17638:18:1;;;17631:33;17681:19;;8851:71:0;17307:399:1;8851:71:0;-1:-1:-1;;;;;8959:17:0;;8935:21;8959:17;;;;;;;;;;;8995:23;;;;8987:74;;;;-1:-1:-1;;;8987:74:0;;17913:2:1;8987:74:0;;;17895:21:1;17952:2;17932:18;;;17925:30;17991:34;17971:18;;;17964:62;-1:-1:-1;;;18042:18:1;;;18035:36;18088:19;;8987:74:0;17711:402:1;8987:74:0;9092:22;9108:6;9092:13;:22;:::i;:::-;-1:-1:-1;;;;;9072:17:0;;;:9;:17;;;;;;;;;;;:42;;;;9125:20;;;;;;;;:30;;9149:6;;9072:9;9125:30;;9149:6;;9125:30;:::i;:::-;;;;;;;;9190:9;-1:-1:-1;;;;;9173:35:0;9182:6;-1:-1:-1;;;;;9173:35:0;;9201:6;9173:35;;;;1500:25:1;;1488:2;1473:18;;1354:177;9173:35:0;;;;;;;;8759:457;8638:578;;;:::o;24872:514::-;25052:13;;25020:60;;25037:4;;-1:-1:-1;;;;;25052:13:0;25068:11;25020:8;:60::i;:::-;25123:13;;:255;;-1:-1:-1;;;25123:255:0;;25195:4;25123:255;;;18459:34:1;18509:18;;;18502:34;;;25123:13:0;18552:18:1;;;18545:34;;;18595:18;;;18588:34;16707:42:0;18638:19:1;;;18631:44;25352:15:0;18691:19:1;;;18684:35;-1:-1:-1;;;;;25123:13:0;;;;:29;;25161:9;;18393:19:1;;25123:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24872:514;;:::o;12929:319::-;13044:6;13019:21;:31;;13011:73;;;;-1:-1:-1;;;13011:73:0;;19243:2:1;13011:73:0;;;19225:21:1;19282:2;19262:18;;;19255:30;19321:31;19301:18;;;19294:59;19370:18;;13011:73:0;19041:353:1;13011:73:0;13098:12;13116:9;-1:-1:-1;;;;;13116:14:0;13139:6;13116:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13097:54;;;13170:7;13162:78;;;;-1:-1:-1;;;13162:78:0;;19811:2:1;13162:78:0;;;19793:21:1;19850:2;19830:18;;;19823:30;19889:34;19869:18;;;19862:62;19960:28;19940:18;;;19933:56;20006:19;;13162:78:0;19609:422:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;2186:248::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:52;;;2331:1;2328;2321:12;2283:52;-1:-1:-1;;2354:23:1;;;2424:2;2409:18;;;2396:32;;-1:-1:-1;2186:248:1:o;2439:180::-;2498:6;2551:2;2539:9;2530:7;2526:23;2522:32;2519:52;;;2567:1;2564;2557:12;2519:52;-1:-1:-1;2590:23:1;;2439:180;-1:-1:-1;2439:180:1:o;3156:127::-;3217:10;3212:3;3208:20;3205:1;3198:31;3248:4;3245:1;3238:15;3272:4;3269:1;3262:15;3288:1121;3372:6;3403:2;3446;3434:9;3425:7;3421:23;3417:32;3414:52;;;3462:1;3459;3452:12;3414:52;3502:9;3489:23;3531:18;3572:2;3564:6;3561:14;3558:34;;;3588:1;3585;3578:12;3558:34;3626:6;3615:9;3611:22;3601:32;;3671:7;3664:4;3660:2;3656:13;3652:27;3642:55;;3693:1;3690;3683:12;3642:55;3729:2;3716:16;3751:2;3747;3744:10;3741:36;;;3757:18;;:::i;:::-;3803:2;3800:1;3796:10;3835:2;3829:9;3898:2;3894:7;3889:2;3885;3881:11;3877:25;3869:6;3865:38;3953:6;3941:10;3938:22;3933:2;3921:10;3918:18;3915:46;3912:72;;;3964:18;;:::i;:::-;4000:2;3993:22;4050:18;;;4084:15;;;;-1:-1:-1;4126:11:1;;;4122:20;;;4154:19;;;4151:39;;;4186:1;4183;4176:12;4151:39;4210:11;;;;4230:148;4246:6;4241:3;4238:15;4230:148;;;4312:23;4331:3;4312:23;:::i;:::-;4300:36;;4263:12;;;;4356;;;;4230:148;;;4397:6;3288:1121;-1:-1:-1;;;;;;;;3288:1121:1:o;4414:247::-;4473:6;4526:2;4514:9;4505:7;4501:23;4497:32;4494:52;;;4542:1;4539;4532:12;4494:52;4581:9;4568:23;4600:31;4625:5;4600:31;:::i;:::-;4650:5;4414:247;-1:-1:-1;;;4414:247:1:o;4889:388::-;4957:6;4965;5018:2;5006:9;4997:7;4993:23;4989:32;4986:52;;;5034:1;5031;5024:12;4986:52;5073:9;5060:23;5092:31;5117:5;5092:31;:::i;:::-;5142:5;-1:-1:-1;5199:2:1;5184:18;;5171:32;5212:33;5171:32;5212:33;:::i;:::-;5264:7;5254:17;;;4889:388;;;;;:::o;5282:380::-;5361:1;5357:12;;;;5404;;;5425:61;;5479:4;5471:6;5467:17;5457:27;;5425:61;5532:2;5524:6;5521:14;5501:18;5498:38;5495:161;;5578:10;5573:3;5569:20;5566:1;5559:31;5613:4;5610:1;5603:15;5641:4;5638:1;5631:15;5495:161;;5282:380;;;:::o;5667:356::-;5869:2;5851:21;;;5888:18;;;5881:30;5947:34;5942:2;5927:18;;5920:62;6014:2;5999:18;;5667:356::o;6790:127::-;6851:10;6846:3;6842:20;6839:1;6832:31;6882:4;6879:1;6872:15;6906:4;6903:1;6896:15;6922:128;6989:9;;;7010:11;;;7007:37;;;7024:18;;:::i;7055:125::-;7120:9;;;7141:10;;;7138:36;;;7154:18;;:::i;7535:422::-;7624:1;7667:5;7624:1;7681:270;7702:7;7692:8;7689:21;7681:270;;;7761:4;7757:1;7753:6;7749:17;7743:4;7740:27;7737:53;;;7770:18;;:::i;:::-;7820:7;7810:8;7806:22;7803:55;;;7840:16;;;;7803:55;7919:22;;;;7879:15;;;;7681:270;;;7685:3;7535:422;;;;;:::o;7962:806::-;8011:5;8041:8;8031:80;;-1:-1:-1;8082:1:1;8096:5;;8031:80;8130:4;8120:76;;-1:-1:-1;8167:1:1;8181:5;;8120:76;8212:4;8230:1;8225:59;;;;8298:1;8293:130;;;;8205:218;;8225:59;8255:1;8246:10;;8269:5;;;8293:130;8330:3;8320:8;8317:17;8314:43;;;8337:18;;:::i;:::-;-1:-1:-1;;8393:1:1;8379:16;;8408:5;;8205:218;;8507:2;8497:8;8494:16;8488:3;8482:4;8479:13;8475:36;8469:2;8459:8;8456:16;8451:2;8445:4;8442:12;8438:35;8435:77;8432:159;;;-1:-1:-1;8544:19:1;;;8576:5;;8432:159;8623:34;8648:8;8642:4;8623:34;:::i;:::-;8693:6;8689:1;8685:6;8681:19;8672:7;8669:32;8666:58;;;8704:18;;:::i;:::-;8742:20;;7962:806;-1:-1:-1;;;7962:806:1:o;8773:140::-;8831:5;8860:47;8901:4;8891:8;8887:19;8881:4;8860:47;:::i;8918:168::-;8991:9;;;9022;;9039:15;;;9033:22;;9019:37;9009:71;;9060:18;;:::i;9091:127::-;9152:10;9147:3;9143:20;9140:1;9133:31;9183:4;9180:1;9173:15;9207:4;9204:1;9197:15;9223:135;9262:3;9283:17;;;9280:43;;9303:18;;:::i;:::-;-1:-1:-1;9350:1:1;9339:13;;9223:135::o;10126:184::-;10196:6;10249:2;10237:9;10228:7;10224:23;10220:32;10217:52;;;10265:1;10262;10255:12;10217:52;-1:-1:-1;10288:16:1;;10126:184;-1:-1:-1;10126:184:1:o;10594:277::-;10661:6;10714:2;10702:9;10693:7;10689:23;10685:32;10682:52;;;10730:1;10727;10720:12;10682:52;10762:9;10756:16;10815:5;10808:13;10801:21;10794:5;10791:32;10781:60;;10837:1;10834;10827:12;14275:217;14315:1;14341;14331:132;;14385:10;14380:3;14376:20;14373:1;14366:31;14420:4;14417:1;14410:15;14448:4;14445:1;14438:15;14331:132;-1:-1:-1;14477:9:1;;14275:217::o;15302:251::-;15372:6;15425:2;15413:9;15404:7;15400:23;15396:32;15393:52;;;15441:1;15438;15431:12;15393:52;15473:9;15467:16;15492:31;15517:5;15492:31;:::i;15558:980::-;15820:4;15868:3;15857:9;15853:19;15899:6;15888:9;15881:25;15925:2;15963:6;15958:2;15947:9;15943:18;15936:34;16006:3;16001:2;15990:9;15986:18;15979:31;16030:6;16065;16059:13;16096:6;16088;16081:22;16134:3;16123:9;16119:19;16112:26;;16173:2;16165:6;16161:15;16147:29;;16194:1;16204:195;16218:6;16215:1;16212:13;16204:195;;;16283:13;;-1:-1:-1;;;;;16279:39:1;16267:52;;16374:15;;;;16339:12;;;;16315:1;16233:9;16204:195;;;-1:-1:-1;;;;;;;16455:32:1;;;;16450:2;16435:18;;16428:60;-1:-1:-1;;;16519:3:1;16504:19;16497:35;16416:3;15558:980;-1:-1:-1;;;15558:980:1:o;18730:306::-;18818:6;18826;18834;18887:2;18875:9;18866:7;18862:23;18858:32;18855:52;;;18903:1;18900;18893:12;18855:52;18932:9;18926:16;18916:26;;18982:2;18971:9;18967:18;18961:25;18951:35;;19026:2;19015:9;19011:18;19005:25;18995:35;;18730:306;;;;;:::o

Swarm Source

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