ETH Price: $3,799.25 (+6.44%)

Token

ZAIBOT.io (ZAI)
 

Overview

Max Total Supply

100,000,000 ZAI

Holders

317

Market

Price

$0.06 @ 0.000015 ETH (-5.54%)

Onchain Market Cap

$5,703,893.59

Circulating Supply Market Cap

$299,174.16

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,165.655172404565 ZAI

Value
$66.49 ( ~0.0175008394229035 Eth) [0.0012%]
0xab5ed612a7c8d4103cf3aff1dc759f0799d54aea
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Zaibot is not just a tool, it's a community-driven platform that keeps you engaged, informed, and ahead in the fast-paced world of cryptocurrency.

Market

Volume (24H):$2,690.49
Market Capitalization:$299,174.16
Circulating Supply:5,245,087.00 ZAI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZAIBOT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2024-02-25
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/**

THE VANGUARD OF AI BOTS.

Website: https://zaibot.io/
Twitter: https://x.com/zaibotio/      
Public Chat: https://t.me/zaibotpublic
Announcement channel: https://t.me/zaibotann

**/

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

  /**
   * @dev Returns the multiplication of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `*` operator.
   *
   * Requirements:
   * - Multiplication cannot overflow.
   */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
   * division by zero. The result is rounded towards zero.
   *
   * Counterpart to Solidity's `/` operator. Note: this function uses a
   * `revert` opcode (which leaves remaining gas untouched) while Solidity
   * uses an invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    // Solidity only automatically asserts when dividing by 0
    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;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message when dividing by zero.
   *
   * Counterpart to Solidity's `%` operator. This function uses a `revert`
   * opcode (which leaves remaining gas untouched) while Solidity uses an
   * invalid opcode to revert (consuming all remaining gas).
   *
   * Requirements:
   * - The divisor cannot be zero.
   */
  function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

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

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

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

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

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

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


contract LGEWhitelisted is Context {
    struct WhitelistRound {
        uint256 duration;
        uint256 amountMax;
        mapping(address => bool) addresses;
        mapping(address => uint256) purchased;
    }

    WhitelistRound[] public _lgeWhitelistRounds;

    uint256 public _lgeTimestamp;
    address public _lgePairAddress;

    address public _whitelister;

    event WhitelisterTransferred(address indexed previousWhitelister, address indexed newWhitelister);

    constructor() {
        _whitelister = _msgSender();
    }

    modifier onlyWhitelister() {
        require(_whitelister == _msgSender(), "Caller is not the whitelister");
        _;
    }

    function renounceWhitelister() external onlyWhitelister {
        emit WhitelisterTransferred(_whitelister, address(0));
        _whitelister = address(0);
    }

    function transferWhitelister(address newWhitelister) external onlyWhitelister {
        _transferWhitelister(newWhitelister);
    }

    function _transferWhitelister(address newWhitelister) internal {
        require(newWhitelister != address(0), "New whitelister is the zero address");
        emit WhitelisterTransferred(_whitelister, newWhitelister);
        _whitelister = newWhitelister;
    }

    /*
     * createLGEWhitelist - Call this after initial Token Generation Event (TGE)
     *
     * pairAddress - address generated from createPair() event on DEX
     * durations - array of durations (seconds) for each whitelist rounds
     * amountsMax - array of max amounts (TOKEN decimals) for each whitelist round
     *
     */

    function createLGEWhitelist(
        address pairAddress,
        uint256[] calldata durations,
        uint256[] calldata amountsMax
    ) external onlyWhitelister() {
        require(durations.length == amountsMax.length, "Invalid whitelist(s)");

        _lgePairAddress = pairAddress;

        if (durations.length > 0) {
            delete _lgeWhitelistRounds;

            for (uint256 i = 0; i < durations.length; i++) {
                WhitelistRound storage whitelistRound = _lgeWhitelistRounds.push();
                whitelistRound.duration = durations[i];
                whitelistRound.amountMax = amountsMax[i];
            }
        }
    }

    /*
     * modifyLGEWhitelistAddresses - Define what addresses are included/excluded from a whitelist round
     *
     * index - 0-based index of round to modify whitelist
     * duration - period in seconds from LGE event or previous whitelist round
     * amountMax - max amount (TOKEN decimals) for each whitelist round
     *
     */

    function modifyLGEWhitelist(
        uint256 index,
        uint256 duration,
        uint256 amountMax,
        address[] calldata addresses,
        bool enabled
    ) external onlyWhitelister() {
        require(index < _lgeWhitelistRounds.length, "Invalid index");
        require(amountMax > 0, "Invalid amountMax");

        if (duration != _lgeWhitelistRounds[index].duration) _lgeWhitelistRounds[index].duration = duration;

        if (amountMax != _lgeWhitelistRounds[index].amountMax) _lgeWhitelistRounds[index].amountMax = amountMax;

        for (uint256 i = 0; i < addresses.length; i++) {
            _lgeWhitelistRounds[index].addresses[addresses[i]] = enabled;
        }
    }

    /*
     *  getLGEWhitelistRound
     *
     *  returns:
     *
     *  1. whitelist round number ( 0 = no active round now )
     *  2. duration, in seconds, current whitelist round is active for
     *  3. timestamp current whitelist round closes at
     *  4. maximum amount a whitelister can purchase in this round
     *  5. is caller whitelisted
     *  6. how much caller has purchased in current whitelist round
     *
     */

    function getLGEWhitelistRound()
        public
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            bool,
            uint256
        )
    {
        if (_lgeTimestamp > 0) {
            uint256 wlCloseTimestampLast = _lgeTimestamp;

            for (uint256 i = 0; i < _lgeWhitelistRounds.length; i++) {
                WhitelistRound storage wlRound = _lgeWhitelistRounds[i];

                wlCloseTimestampLast = wlCloseTimestampLast + wlRound.duration;
                if (block.timestamp <= wlCloseTimestampLast)
                    return (
                        i + 1,
                        wlRound.duration,
                        wlCloseTimestampLast,
                        wlRound.amountMax,
                        wlRound.addresses[_msgSender()],
                        wlRound.purchased[_msgSender()]
                    );
            }
        }

        return (0, 0, 0, 0, false, 0);
    }

    /*
     * _applyLGEWhitelist - internal function to be called initially before any transfers
     *
     */

    function _applyLGEWhitelist(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        if (_lgePairAddress == address(0) || _lgeWhitelistRounds.length == 0) return;

        if (_lgeTimestamp == 0 && sender != _lgePairAddress && recipient == _lgePairAddress && amount > 0)
            _lgeTimestamp = block.timestamp;

        if (sender == _lgePairAddress && recipient != _lgePairAddress) {
            //buying

            (uint256 wlRoundNumber, , , , , ) = getLGEWhitelistRound();

            if (wlRoundNumber > 0) {
                WhitelistRound storage wlRound = _lgeWhitelistRounds[wlRoundNumber - 1];

                require(wlRound.addresses[recipient], "LGE - Buyer is not whitelisted");

                uint256 amountRemaining = 0;

                if (wlRound.purchased[recipient] < wlRound.amountMax)
                    amountRemaining = wlRound.amountMax - wlRound.purchased[recipient];

                require(amount <= amountRemaining, "LGE - Amount exceeds whitelist maximum");
                wlRound.purchased[recipient] = wlRound.purchased[recipient] + amount;
            }
        }
    }
}

contract ZAIBOT is Context, IERC20, Ownable, LGEWhitelisted {
    
    using SafeMath for uint256;
    
    mapping (address => uint256) private _balances;
    
    mapping (address => mapping (address => uint256)) private _allowances;
    
    uint256 private _totalSupply;
    uint8 private _decimals;
    string private _symbol;
    string private _name;
	
	mapping(address => bool) public _feeExcluded;

	uint256 public _feeBurnPct;
	uint256 public _feeRewardPct;
	
	address public _feeRewardAddress;

	mapping(address => bool) public _pair;
	
	address public _router;
	
	address[] public _feeRewardSwapPath;
    
    constructor(uint256 feeBurnPct, uint256 feeRewardPct, address feeRewardAddress, address router) {
	
        _name = "ZAIBOT.io";
        _symbol = "ZAI";
        _decimals = 18;
        _totalSupply = 100000000e18;
		
		IUniswapV2Router02 r = IUniswapV2Router02(router);
        
        address[] memory feeRewardSwapPath = new address[](2);
            
        feeRewardSwapPath[0] = address(this);
        feeRewardSwapPath[1] = r.WETH();
		
		setFees(feeBurnPct, feeRewardPct, feeRewardSwapPath, feeRewardAddress);
		
		_router = router;
		
		setFeeExcluded(_msgSender(), true);
		setFeeExcluded(address(this), true);
		
		
        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }
	
	function setRouter(address r) public onlyOwner {
        _router = r;
    }
	
	function setPair(address a, bool pair) public onlyOwner {
        _pair[a] = pair;
    }

	function setFeeExcluded(address a, bool excluded) public onlyOwner {
        _feeExcluded[a] = excluded;
    }
    
    function setFees(uint256 feeBurnPct, uint256 feeRewardPct, address[] memory feeRewardSwapPath, address feeRewardAddress) public onlyOwner {
        require(feeBurnPct.add(feeRewardPct) <= 2500, "Fees must not total more than 100%");
        require(feeRewardSwapPath.length > 1, "Invalid path");
		require(feeRewardAddress != address(0), "Fee reward address must not be zero address");
		
		_feeBurnPct = feeBurnPct;
		_feeRewardPct = feeRewardPct;
		_feeRewardSwapPath = feeRewardSwapPath;
		_feeRewardAddress = feeRewardAddress;
		
    }
	
	function burn(uint256 amount) external {
        _burn(_msgSender(), amount);
    }

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

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }
    
    /**
    * @dev Returns the token decimals.
    */
    function decimals() external view override returns (uint8) {
        return _decimals;
    }
    
    /**
    * @dev Returns the token symbol.
    */
    function symbol() external view override returns (string memory) {
        return _symbol;
    }
    
    /**
    * @dev Returns the token name.
    */
    function name() external view override returns (string memory) {
        return _name;
    }
    
    /**
    * @dev See {ERC20-totalSupply}.
    */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
    
    /**
    * @dev See {ERC20-balanceOf}.
    */
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }
    
    /**
    * @dev See {ERC20-transfer}.
    *
    * Requirements:
    *
    * - `recipient` cannot be the zero address.
    * - the caller must have a balance of at least `amount`.
    */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    
    /**
    * @dev See {ERC20-allowance}.
    */
    function allowance(address owner, address spender) external view override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    /**
    * @dev See {ERC20-approve}.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    /**
    * @dev See {ERC20-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) external 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 {ERC20-approve}.
    *
    * Emits an {Approval} event indicating the updated allowance.
    *
    * Requirements:
    *
    * - `spender` cannot be the zero address.
    */
    function increaseAllowance(address spender, uint256 addedValue) external 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 {ERC20-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) external returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
	
    function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal {
	
		LGEWhitelisted._applyLGEWhitelist(sender, recipient, amount);
		
    }

    function _afterTokenTransfer(address sender, address recipient, uint256 amount) internal {}
    
    /**
    * @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 {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        _beforeTokenTransfer(sender, recipient, amount);
		
		if(recipient == address(0x000000000000000000000000000000000000dEaD)) {
            _burn(sender, amount);
            return;
        }
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
		
		if(_pair[recipient] && !_feeExcluded[sender]) {
			
			uint256 feeBurnAmount = 0;
			
			if(_feeBurnPct > 0) {
			
				feeBurnAmount = amount.mul(_feeBurnPct).div(10000);

				_totalSupply = _totalSupply.sub(feeBurnAmount);
				emit Transfer(sender, address(0), feeBurnAmount);
				
			}
			
			uint256 feeRewardAmount = 0;
			
			if(_feeRewardPct > 0 && _feeRewardAddress != address(0))  {
			    
				feeRewardAmount = amount.mul(_feeRewardPct).div(10000);
				
				if(_router != address(0)) {
				    
    				_balances[address(this)] = _balances[address(this)].add(feeRewardAmount);
    				
    				emit Transfer(sender, address(this), feeRewardAmount);
    				
    				IUniswapV2Router02 r = IUniswapV2Router02(_router);
                    
                    _approve(address(this), _router, feeRewardAmount);
    
                    r.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                        feeRewardAmount,
                        0,
                        _feeRewardSwapPath,
                        _feeRewardAddress,
                        block.timestamp
                    );
                
				} else {
				    _balances[_feeRewardAddress] = _balances[_feeRewardAddress].add(feeRewardAmount);
				    emit Transfer(sender, _feeRewardAddress, feeRewardAmount);
				}
				
			}
			
			amount = amount.sub(feeBurnAmount).sub(feeRewardAmount);
			
		}
		
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
		
		_afterTokenTransfer(sender, recipient, amount);
    }
    
    /**
    * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
    *
    * This is 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 {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address","name":"feeRewardAddress","type":"address"},{"internalType":"address","name":"router","type":"address"}],"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousWhitelister","type":"address"},{"indexed":true,"internalType":"address","name":"newWhitelister","type":"address"}],"name":"WhitelisterTransferred","type":"event"},{"inputs":[],"name":"_feeBurnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeRewardPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_feeRewardSwapPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgePairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lgeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_lgeWhitelistRounds","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_pair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelister","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256[]","name":"durations","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsMax","type":"uint256[]"}],"name":"createLGEWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLGEWhitelistRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"amountMax","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"modifyLGEWhitelist","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setFeeExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeBurnPct","type":"uint256"},{"internalType":"uint256","name":"feeRewardPct","type":"uint256"},{"internalType":"address[]","name":"feeRewardSwapPath","type":"address[]"},{"internalType":"address","name":"feeRewardAddress","type":"address"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"pair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newWhitelister","type":"address"}],"name":"transferWhitelister","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002a2c38038062002a2c8339810160408190526200003491620005b9565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600480546001600160a01b031916331790556040805180820190915260098152685a4149424f542e696f60b81b6020820152600a90620000b69082620006a9565b506040805180820190915260038152625a414960e81b6020820152600990620000e09082620006a9565b506008805460ff191660121790556a52b7d2dcc80cd2e400000060075560408051600280825260608201835283926000929190602083019080368337019050509050308160008151811062000139576200013962000775565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000198573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001be91906200078b565b81600181518110620001d457620001d462000775565b6001600160a01b0390921660209283029190910190910152620001fa868683876200028d565b601080546001600160a01b0319166001600160a01b03851617905562000229620002213390565b600162000439565b6200023630600162000439565b60075433600081815260056020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505050620007d2565b6000546001600160a01b03163314620002dc5760405162461bcd60e51b8152602060048201819052602482015260008051602062002a0c83398151915260448201526064015b60405180910390fd5b6109c4620002eb8585620004af565b1115620003465760405162461bcd60e51b815260206004820152602260248201527f46656573206d757374206e6f7420746f74616c206d6f7265207468616e203130604482015261302560f01b6064820152608401620002d3565b6001825111620003885760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401620002d3565b6001600160a01b038116620003f45760405162461bcd60e51b815260206004820152602b60248201527f466565207265776172642061646472657373206d757374206e6f74206265207a60448201526a65726f206164647265737360a81b6064820152608401620002d3565b600c849055600d8390558151620004139060119060208501906200051b565b50600e80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6000546001600160a01b03163314620004845760405162461bcd60e51b8152602060048201819052602482015260008051602062002a0c8339815191526044820152606401620002d3565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080620004be8385620007b0565b905083811015620005125760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620002d3565b90505b92915050565b82805482825590600052602060002090810192821562000573579160200282015b828111156200057357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200053c565b506200058192915062000585565b5090565b5b8082111562000581576000815560010162000586565b80516001600160a01b0381168114620005b457600080fd5b919050565b60008060008060808587031215620005d057600080fd5b8451935060208501519250620005e9604086016200059c565b9150620005f9606086016200059c565b905092959194509250565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200062f57607f821691505b6020821081036200065057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006a457600081815260208120601f850160051c810160208610156200067f5750805b601f850160051c820191505b81811015620006a0578281556001016200068b565b5050505b505050565b81516001600160401b03811115620006c557620006c562000604565b620006dd81620006d684546200061a565b8462000656565b602080601f831160018114620007155760008415620006fc5750858301515b600019600386901b1c1916600185901b178555620006a0565b600085815260208120601f198616915b82811015620007465788860151825594840194600190910190840162000725565b5085821015620007655787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200079e57600080fd5b620007a9826200059c565b9392505050565b808201808211156200051557634e487b7160e01b600052601160045260246000fd5b61222a80620007e26000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063771a0b2811610125578063c9f1f47f116100ad578063e3f4f30c1161007c578063e3f4f30c146104ca578063eba116d8146104dd578063edae876f14610500578063f2fde38b14610513578063ffc877d81461052657600080fd5b8063c9f1f47f14610462578063d5215d1114610475578063da91b76e14610488578063dd62ed3e1461049157600080fd5b80639ad3a7ba116100f45780639ad3a7ba146103f9578063a457c2d714610401578063a77cac7a14610414578063a9059cbb1461043c578063c0d786551461044f57600080fd5b8063771a0b28146103c457806386a22eff146103cd5780638da5cb5b146103e057806395d89b41146103f157600080fd5b806342966c68116101a857806363c6b3d71161017757806363c6b3d714610354578063688a09421461036757806370a082311461037057806371088c6d14610399578063715018a6146103bc57600080fd5b806342966c68146102f057806344ade3c5146103035780634944889814610316578063532f1fed1461034157600080fd5b806323b872dd116101e457806323b872dd146102a05780632e15e5c7146102b3578063313ce567146102c857806339509351146102dd57600080fd5b806306fdde0314610216578063095ea7b31461023457806318160ddd146102575780631b29b0cd14610269575b600080fd5b61021e610539565b60405161022b9190611bf2565b60405180910390f35b610247610242366004611c5c565b6105cb565b604051901515815260200161022b565b6007545b60405190815260200161022b565b6102716105e2565b6040805196875260208701959095529385019290925260608401521515608083015260a082015260c00161022b565b6102476102ae366004611c86565b6106c2565b6102c66102c1366004611cc2565b61072b565b005b60085460405160ff909116815260200161022b565b6102476102eb366004611c5c565b61076a565b6102c66102fe366004611cdd565b6107a0565b6102c6610311366004611d52565b6107aa565b600354610329906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102c661034f366004611dc2565b61099b565b610329610362366004611cdd565b610ad2565b61025b600d5481565b61025b61037e366004611cc2565b6001600160a01b031660009081526005602052604090205490565b6102476103a7366004611cc2565b600b6020526000908152604090205460ff1681565b6102c6610afc565b61025b600c5481565b6102c66103db366004611e43565b610b70565b6000546001600160a01b0316610329565b61021e610bc5565b6102c6610bd4565b61024761040f366004611c5c565b610c48565b610427610422366004611cdd565b610c97565b6040805192835260208301919091520161022b565b61024761044a366004611c5c565b610cc5565b6102c661045d366004611cc2565b610cd2565b6102c6610470366004611e43565b610d1e565b600454610329906001600160a01b031681565b61025b60025481565b61025b61049f366004611e76565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6102c66104d8366004611eb6565b610d73565b6102476104eb366004611cc2565b600f6020526000908152604090205460ff1681565b601054610329906001600160a01b031681565b6102c6610521366004611cc2565b610ef0565b600e54610329906001600160a01b031681565b6060600a805461054890611fa1565b80601f016020809104026020016040519081016040528092919081815260200182805461057490611fa1565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b5050505050905090565b60006105d8338484610fda565b5060015b92915050565b600080600080600080600060025411156106a75760025460005b6001548110156106a45760006001828154811061061b5761061b611fdb565b9060005260206000209060040201905080600001548361063b9190612007565b92508242116106915761064f826001612007565b815460018301543360009081526002850160209081526040808320546003909701909152902054929b5090995093975092955060ff1693509091506106ba9050565b508061069c8161201a565b9150506105fc565b50505b5060009450849350839250829150819050805b909192939495565b60006106cf8484846110ff565b610721843361071c85604051806060016040528060288152602001612188602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611525565b610fda565b5060019392505050565b6004546001600160a01b0316331461075e5760405162461bcd60e51b815260040161075590612033565b60405180910390fd5b6107678161155f565b50565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916105d891859061071c908661161d565b6107673382611683565b6004546001600160a01b031633146107d45760405162461bcd60e51b815260040161075590612033565b60015486106108155760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610755565b600084116108595760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b6044820152606401610755565b6001868154811061086c5761086c611fdb565b90600052602060002090600402016000015485146108aa57846001878154811061089857610898611fdb565b60009182526020909120600490910201555b600186815481106108bd576108bd611fdb565b90600052602060002090600402016001015484146108ff5783600187815481106108e9576108e9611fdb565b9060005260206000209060040201600101819055505b60005b8281101561099257816001888154811061091e5761091e611fdb565b9060005260206000209060040201600201600086868581811061094357610943611fdb565b90506020020160208101906109589190611cc2565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061098a8161201a565b915050610902565b50505050505050565b6004546001600160a01b031633146109c55760405162461bcd60e51b815260040161075590612033565b828114610a0b5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b6044820152606401610755565b600380546001600160a01b0319166001600160a01b0387161790558215610acb57610a3860016000611b3c565b60005b83811015610ac9576001805480820182556000919091526004027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601858583818110610a8957610a89611fdb565b6020029190910135825550838383818110610aa657610aa6611fdb565b905060200201358160010181905550508080610ac19061201a565b915050610a3b565b505b5050505050565b60118181548110610ae257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016107559061206a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b9a5760405162461bcd60e51b81526004016107559061206a565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60606009805461054890611fa1565b6004546001600160a01b03163314610bfe5760405162461bcd60e51b815260040161075590612033565b6004546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3600480546001600160a01b0319169055565b60006105d8338461071c856040518060600160405280602581526020016121d0602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611525565b60018181548110610ca757600080fd5b60009182526020909120600490910201805460019091015490915082565b60006105d83384846110ff565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b81526004016107559061206a565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d485760405162461bcd60e51b81526004016107559061206a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107559061206a565b6109c4610daa858561161d565b1115610e035760405162461bcd60e51b815260206004820152602260248201527f46656573206d757374206e6f7420746f74616c206d6f7265207468616e203130604482015261302560f01b6064820152608401610755565b6001825111610e435760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610755565b6001600160a01b038116610ead5760405162461bcd60e51b815260206004820152602b60248201527f466565207265776172642061646472657373206d757374206e6f74206265207a60448201526a65726f206164647265737360a81b6064820152608401610755565b600c849055600d8390558151610eca906011906020850190611b5d565b50600e80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016107559061206a565b6001600160a01b038116610f7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610755565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661103c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610755565b6001600160a01b03821661109d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610755565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610755565b6001600160a01b0382166111c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610755565b6111d08383836117a9565b61deac196001600160a01b038316016111f2576111ed8382611683565b505050565b61122f81604051806060016040528060268152602001612162602691396001600160a01b0386166000908152600560205260409020549190611525565b6001600160a01b038085166000908152600560209081526040808320949094559185168152600f909152205460ff16801561128357506001600160a01b0383166000908152600b602052604090205460ff16155b156114c057600c54600090156112f7576112b46127106112ae600c54856117b490919063ffffffff16565b90611836565b6007549091506112c49082611878565b6007556040518181526000906001600160a01b038616906000805160206121b08339815191529060200160405180910390a35b600080600d541180156113145750600e546001600160a01b031615155b156114a7576113346127106112ae600d54866117b490919063ffffffff16565b6010549091506001600160a01b0316156114345730600090815260056020526040902054611362908261161d565b30600081815260056020526040908190209290925590516001600160a01b038716906000805160206121b0833981519152906113a19085815260200190565b60405180910390a36010546001600160a01b03166113c0308284610fda565b600e54604051635c11d79560e01b81526001600160a01b0383811692635c11d795926113fc92879260009260119290911690429060040161209f565b600060405180830381600087803b15801561141657600080fd5b505af115801561142a573d6000803e3d6000fd5b50505050506114a7565b600e546001600160a01b0316600090815260056020526040902054611459908261161d565b600e80546001600160a01b03908116600090815260056020908152604091829020949094559154915184815291811692908816916000805160206121b0833981519152910160405180910390a35b6114bb816114b58585611878565b90611878565b925050505b6001600160a01b0382166000908152600560205260409020546114e3908261161d565b6001600160a01b0380841660008181526005602052604090819020939093559151908516906000805160206121b0833981519152906110f29085815260200190565b600081848411156115495760405162461bcd60e51b81526004016107559190611bf2565b5060006115568486612115565b95945050505050565b6001600160a01b0381166115c15760405162461bcd60e51b815260206004820152602360248201527f4e65772077686974656c697374657220697320746865207a65726f206164647260448201526265737360e81b6064820152608401610755565b6004546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008061162a8385612007565b90508381101561167c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610755565b9392505050565b6001600160a01b0382166116e35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610755565b6116ef826000836117a9565b6001600160a01b038216600090815260056020526040902054818110156117635760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610755565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192916000805160206121b083398151915291016110f2565b6111ed8383836118ba565b6000826000036117c6575060006105dc565b60006117d28385612128565b9050826117df858361213f565b1461167c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610755565b600061167c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b0e565b600061167c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611525565b6003546001600160a01b031615806118d25750600154155b156118dc57505050565b6002541580156118fa57506003546001600160a01b03848116911614155b801561191357506003546001600160a01b038381169116145b801561191f5750600081115b1561192957426002555b6003546001600160a01b03848116911614801561195457506003546001600160a01b03838116911614155b156111ed5760006119636105e2565b505050505090506000811115611b0857600060016119818184612115565b8154811061199157611991611fdb565b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16611a0c5760405162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c697374656400006044820152606401610755565b60018101546001600160a01b038516600090815260038301602052604081205490911115611a61576001600160a01b03851660009081526003830160205260409020546001830154611a5e9190612115565b90505b80841115611ac05760405162461bcd60e51b815260206004820152602660248201527f4c4745202d20416d6f756e7420657863656564732077686974656c697374206d6044820152656178696d756d60d01b6064820152608401610755565b6001600160a01b0385166000908152600383016020526040902054611ae6908590612007565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183611b2f5760405162461bcd60e51b81526004016107559190611bf2565b506000611556848661213f565b50805460008255600402906000526020600020908101906107679190611bc2565b828054828255906000526020600020908101928215611bb2579160200282015b82811115611bb257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611b7d565b50611bbe929150611bdd565b5090565b5b80821115611bbe5760008082556001820155600401611bc3565b5b80821115611bbe5760008155600101611bde565b600060208083528351808285015260005b81811015611c1f57858101830151858201604001528201611c03565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c5757600080fd5b919050565b60008060408385031215611c6f57600080fd5b611c7883611c40565b946020939093013593505050565b600080600060608486031215611c9b57600080fd5b611ca484611c40565b9250611cb260208501611c40565b9150604084013590509250925092565b600060208284031215611cd457600080fd5b61167c82611c40565b600060208284031215611cef57600080fd5b5035919050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b6020830191508360208260051b8501011115611d3b57600080fd5b9250929050565b80358015158114611c5757600080fd5b60008060008060008060a08789031215611d6b57600080fd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115611d9757600080fd5b611da389828a01611cf6565b9094509250611db6905060808801611d42565b90509295509295509295565b600080600080600060608688031215611dda57600080fd5b611de386611c40565b9450602086013567ffffffffffffffff80821115611e0057600080fd5b611e0c89838a01611cf6565b90965094506040880135915080821115611e2557600080fd5b50611e3288828901611cf6565b969995985093965092949392505050565b60008060408385031215611e5657600080fd5b611e5f83611c40565b9150611e6d60208401611d42565b90509250929050565b60008060408385031215611e8957600080fd5b611e9283611c40565b9150611e6d60208401611c40565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611ecc57600080fd5b843593506020808601359350604086013567ffffffffffffffff80821115611ef357600080fd5b818801915088601f830112611f0757600080fd5b813581811115611f1957611f19611ea0565b8060051b604051601f19603f83011681018181108582111715611f3e57611f3e611ea0565b60405291825284820192508381018501918b831115611f5c57600080fd5b938501935b82851015611f8157611f7285611c40565b84529385019392850192611f61565b809750505050505050611f9660608601611c40565b905092959194509250565b600181811c90821680611fb557607f821691505b602082108103611fd557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156105dc576105dc611ff1565b60006001820161202c5761202c611ff1565b5060010190565b6020808252601d908201527f43616c6c6572206973206e6f74207468652077686974656c6973746572000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156120f45784546001600160a01b0316835260019485019492840192016120cf565b50506001600160a01b03969096166060850152505050608001529392505050565b818103818111156105dc576105dc611ff1565b80820281158282048414176105dc576105dc611ff1565b60008261215c57634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028396450c00c3bcbee1dfa595bc35628c83e7f3c1bd434495a3ef8e1d9cb2aef64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006572aa9bf9bfd78c8bc958f392a3ab722a13805a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063771a0b2811610125578063c9f1f47f116100ad578063e3f4f30c1161007c578063e3f4f30c146104ca578063eba116d8146104dd578063edae876f14610500578063f2fde38b14610513578063ffc877d81461052657600080fd5b8063c9f1f47f14610462578063d5215d1114610475578063da91b76e14610488578063dd62ed3e1461049157600080fd5b80639ad3a7ba116100f45780639ad3a7ba146103f9578063a457c2d714610401578063a77cac7a14610414578063a9059cbb1461043c578063c0d786551461044f57600080fd5b8063771a0b28146103c457806386a22eff146103cd5780638da5cb5b146103e057806395d89b41146103f157600080fd5b806342966c68116101a857806363c6b3d71161017757806363c6b3d714610354578063688a09421461036757806370a082311461037057806371088c6d14610399578063715018a6146103bc57600080fd5b806342966c68146102f057806344ade3c5146103035780634944889814610316578063532f1fed1461034157600080fd5b806323b872dd116101e457806323b872dd146102a05780632e15e5c7146102b3578063313ce567146102c857806339509351146102dd57600080fd5b806306fdde0314610216578063095ea7b31461023457806318160ddd146102575780631b29b0cd14610269575b600080fd5b61021e610539565b60405161022b9190611bf2565b60405180910390f35b610247610242366004611c5c565b6105cb565b604051901515815260200161022b565b6007545b60405190815260200161022b565b6102716105e2565b6040805196875260208701959095529385019290925260608401521515608083015260a082015260c00161022b565b6102476102ae366004611c86565b6106c2565b6102c66102c1366004611cc2565b61072b565b005b60085460405160ff909116815260200161022b565b6102476102eb366004611c5c565b61076a565b6102c66102fe366004611cdd565b6107a0565b6102c6610311366004611d52565b6107aa565b600354610329906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102c661034f366004611dc2565b61099b565b610329610362366004611cdd565b610ad2565b61025b600d5481565b61025b61037e366004611cc2565b6001600160a01b031660009081526005602052604090205490565b6102476103a7366004611cc2565b600b6020526000908152604090205460ff1681565b6102c6610afc565b61025b600c5481565b6102c66103db366004611e43565b610b70565b6000546001600160a01b0316610329565b61021e610bc5565b6102c6610bd4565b61024761040f366004611c5c565b610c48565b610427610422366004611cdd565b610c97565b6040805192835260208301919091520161022b565b61024761044a366004611c5c565b610cc5565b6102c661045d366004611cc2565b610cd2565b6102c6610470366004611e43565b610d1e565b600454610329906001600160a01b031681565b61025b60025481565b61025b61049f366004611e76565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6102c66104d8366004611eb6565b610d73565b6102476104eb366004611cc2565b600f6020526000908152604090205460ff1681565b601054610329906001600160a01b031681565b6102c6610521366004611cc2565b610ef0565b600e54610329906001600160a01b031681565b6060600a805461054890611fa1565b80601f016020809104026020016040519081016040528092919081815260200182805461057490611fa1565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b5050505050905090565b60006105d8338484610fda565b5060015b92915050565b600080600080600080600060025411156106a75760025460005b6001548110156106a45760006001828154811061061b5761061b611fdb565b9060005260206000209060040201905080600001548361063b9190612007565b92508242116106915761064f826001612007565b815460018301543360009081526002850160209081526040808320546003909701909152902054929b5090995093975092955060ff1693509091506106ba9050565b508061069c8161201a565b9150506105fc565b50505b5060009450849350839250829150819050805b909192939495565b60006106cf8484846110ff565b610721843361071c85604051806060016040528060288152602001612188602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611525565b610fda565b5060019392505050565b6004546001600160a01b0316331461075e5760405162461bcd60e51b815260040161075590612033565b60405180910390fd5b6107678161155f565b50565b3360008181526006602090815260408083206001600160a01b038716845290915281205490916105d891859061071c908661161d565b6107673382611683565b6004546001600160a01b031633146107d45760405162461bcd60e51b815260040161075590612033565b60015486106108155760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610755565b600084116108595760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840c2dadeeadce89ac2f607b1b6044820152606401610755565b6001868154811061086c5761086c611fdb565b90600052602060002090600402016000015485146108aa57846001878154811061089857610898611fdb565b60009182526020909120600490910201555b600186815481106108bd576108bd611fdb565b90600052602060002090600402016001015484146108ff5783600187815481106108e9576108e9611fdb565b9060005260206000209060040201600101819055505b60005b8281101561099257816001888154811061091e5761091e611fdb565b9060005260206000209060040201600201600086868581811061094357610943611fdb565b90506020020160208101906109589190611cc2565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061098a8161201a565b915050610902565b50505050505050565b6004546001600160a01b031633146109c55760405162461bcd60e51b815260040161075590612033565b828114610a0b5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642077686974656c69737428732960601b6044820152606401610755565b600380546001600160a01b0319166001600160a01b0387161790558215610acb57610a3860016000611b3c565b60005b83811015610ac9576001805480820182556000919091526004027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601858583818110610a8957610a89611fdb565b6020029190910135825550838383818110610aa657610aa6611fdb565b905060200201358160010181905550508080610ac19061201a565b915050610a3b565b505b5050505050565b60118181548110610ae257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016107559061206a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b9a5760405162461bcd60e51b81526004016107559061206a565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60606009805461054890611fa1565b6004546001600160a01b03163314610bfe5760405162461bcd60e51b815260040161075590612033565b6004546040516000916001600160a01b0316907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b4908390a3600480546001600160a01b0319169055565b60006105d8338461071c856040518060600160405280602581526020016121d0602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611525565b60018181548110610ca757600080fd5b60009182526020909120600490910201805460019091015490915082565b60006105d83384846110ff565b6000546001600160a01b03163314610cfc5760405162461bcd60e51b81526004016107559061206a565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d485760405162461bcd60e51b81526004016107559061206a565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107559061206a565b6109c4610daa858561161d565b1115610e035760405162461bcd60e51b815260206004820152602260248201527f46656573206d757374206e6f7420746f74616c206d6f7265207468616e203130604482015261302560f01b6064820152608401610755565b6001825111610e435760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610755565b6001600160a01b038116610ead5760405162461bcd60e51b815260206004820152602b60248201527f466565207265776172642061646472657373206d757374206e6f74206265207a60448201526a65726f206164647265737360a81b6064820152608401610755565b600c849055600d8390558151610eca906011906020850190611b5d565b50600e80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6000546001600160a01b03163314610f1a5760405162461bcd60e51b81526004016107559061206a565b6001600160a01b038116610f7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610755565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661103c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610755565b6001600160a01b03821661109d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610755565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166111635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610755565b6001600160a01b0382166111c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610755565b6111d08383836117a9565b61deac196001600160a01b038316016111f2576111ed8382611683565b505050565b61122f81604051806060016040528060268152602001612162602691396001600160a01b0386166000908152600560205260409020549190611525565b6001600160a01b038085166000908152600560209081526040808320949094559185168152600f909152205460ff16801561128357506001600160a01b0383166000908152600b602052604090205460ff16155b156114c057600c54600090156112f7576112b46127106112ae600c54856117b490919063ffffffff16565b90611836565b6007549091506112c49082611878565b6007556040518181526000906001600160a01b038616906000805160206121b08339815191529060200160405180910390a35b600080600d541180156113145750600e546001600160a01b031615155b156114a7576113346127106112ae600d54866117b490919063ffffffff16565b6010549091506001600160a01b0316156114345730600090815260056020526040902054611362908261161d565b30600081815260056020526040908190209290925590516001600160a01b038716906000805160206121b0833981519152906113a19085815260200190565b60405180910390a36010546001600160a01b03166113c0308284610fda565b600e54604051635c11d79560e01b81526001600160a01b0383811692635c11d795926113fc92879260009260119290911690429060040161209f565b600060405180830381600087803b15801561141657600080fd5b505af115801561142a573d6000803e3d6000fd5b50505050506114a7565b600e546001600160a01b0316600090815260056020526040902054611459908261161d565b600e80546001600160a01b03908116600090815260056020908152604091829020949094559154915184815291811692908816916000805160206121b0833981519152910160405180910390a35b6114bb816114b58585611878565b90611878565b925050505b6001600160a01b0382166000908152600560205260409020546114e3908261161d565b6001600160a01b0380841660008181526005602052604090819020939093559151908516906000805160206121b0833981519152906110f29085815260200190565b600081848411156115495760405162461bcd60e51b81526004016107559190611bf2565b5060006115568486612115565b95945050505050565b6001600160a01b0381166115c15760405162461bcd60e51b815260206004820152602360248201527f4e65772077686974656c697374657220697320746865207a65726f206164647260448201526265737360e81b6064820152608401610755565b6004546040516001600160a01b038084169216907f4e78506f3260e366dc9440ee0b4eca2d03aa91536b7605deb90e873d3fc4e5b490600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008061162a8385612007565b90508381101561167c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610755565b9392505050565b6001600160a01b0382166116e35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610755565b6116ef826000836117a9565b6001600160a01b038216600090815260056020526040902054818110156117635760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610755565b6001600160a01b03831660008181526005602090815260408083208686039055600780548790039055518581529192916000805160206121b083398151915291016110f2565b6111ed8383836118ba565b6000826000036117c6575060006105dc565b60006117d28385612128565b9050826117df858361213f565b1461167c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610755565b600061167c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b0e565b600061167c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611525565b6003546001600160a01b031615806118d25750600154155b156118dc57505050565b6002541580156118fa57506003546001600160a01b03848116911614155b801561191357506003546001600160a01b038381169116145b801561191f5750600081115b1561192957426002555b6003546001600160a01b03848116911614801561195457506003546001600160a01b03838116911614155b156111ed5760006119636105e2565b505050505090506000811115611b0857600060016119818184612115565b8154811061199157611991611fdb565b600091825260208083206001600160a01b03881684526002600490930201918201905260409091205490915060ff16611a0c5760405162461bcd60e51b815260206004820152601e60248201527f4c4745202d204275796572206973206e6f742077686974656c697374656400006044820152606401610755565b60018101546001600160a01b038516600090815260038301602052604081205490911115611a61576001600160a01b03851660009081526003830160205260409020546001830154611a5e9190612115565b90505b80841115611ac05760405162461bcd60e51b815260206004820152602660248201527f4c4745202d20416d6f756e7420657863656564732077686974656c697374206d6044820152656178696d756d60d01b6064820152608401610755565b6001600160a01b0385166000908152600383016020526040902054611ae6908590612007565b6001600160a01b03861660009081526003909301602052604090922091909155505b50505050565b60008183611b2f5760405162461bcd60e51b81526004016107559190611bf2565b506000611556848661213f565b50805460008255600402906000526020600020908101906107679190611bc2565b828054828255906000526020600020908101928215611bb2579160200282015b82811115611bb257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611b7d565b50611bbe929150611bdd565b5090565b5b80821115611bbe5760008082556001820155600401611bc3565b5b80821115611bbe5760008155600101611bde565b600060208083528351808285015260005b81811015611c1f57858101830151858201604001528201611c03565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c5757600080fd5b919050565b60008060408385031215611c6f57600080fd5b611c7883611c40565b946020939093013593505050565b600080600060608486031215611c9b57600080fd5b611ca484611c40565b9250611cb260208501611c40565b9150604084013590509250925092565b600060208284031215611cd457600080fd5b61167c82611c40565b600060208284031215611cef57600080fd5b5035919050565b60008083601f840112611d0857600080fd5b50813567ffffffffffffffff811115611d2057600080fd5b6020830191508360208260051b8501011115611d3b57600080fd5b9250929050565b80358015158114611c5757600080fd5b60008060008060008060a08789031215611d6b57600080fd5b863595506020870135945060408701359350606087013567ffffffffffffffff811115611d9757600080fd5b611da389828a01611cf6565b9094509250611db6905060808801611d42565b90509295509295509295565b600080600080600060608688031215611dda57600080fd5b611de386611c40565b9450602086013567ffffffffffffffff80821115611e0057600080fd5b611e0c89838a01611cf6565b90965094506040880135915080821115611e2557600080fd5b50611e3288828901611cf6565b969995985093965092949392505050565b60008060408385031215611e5657600080fd5b611e5f83611c40565b9150611e6d60208401611d42565b90509250929050565b60008060408385031215611e8957600080fd5b611e9283611c40565b9150611e6d60208401611c40565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611ecc57600080fd5b843593506020808601359350604086013567ffffffffffffffff80821115611ef357600080fd5b818801915088601f830112611f0757600080fd5b813581811115611f1957611f19611ea0565b8060051b604051601f19603f83011681018181108582111715611f3e57611f3e611ea0565b60405291825284820192508381018501918b831115611f5c57600080fd5b938501935b82851015611f8157611f7285611c40565b84529385019392850192611f61565b809750505050505050611f9660608601611c40565b905092959194509250565b600181811c90821680611fb557607f821691505b602082108103611fd557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156105dc576105dc611ff1565b60006001820161202c5761202c611ff1565b5060010190565b6020808252601d908201527f43616c6c6572206973206e6f74207468652077686974656c6973746572000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156120f45784546001600160a01b0316835260019485019492840192016120cf565b50506001600160a01b03969096166060850152505050608001529392505050565b818103818111156105dc576105dc611ff1565b80820281158282048414176105dc576105dc611ff1565b60008261215c57634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028396450c00c3bcbee1dfa595bc35628c83e7f3c1bd434495a3ef8e1d9cb2aef64736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006572aa9bf9bfd78c8bc958f392a3ab722a13805a0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : feeBurnPct (uint256): 0
Arg [1] : feeRewardPct (uint256): 0
Arg [2] : feeRewardAddress (address): 0x6572aa9BF9bfD78C8BC958F392A3Ab722a13805a
Arg [3] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000006572aa9bf9bfd78c8bc958f392a3ab722a13805a
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

20327:11001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24093:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25271:163;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;25271:163:0;1004:187:1;24253:102:0;24335:12;;24253:102;;;1342:25:1;;;1330:2;1315:18;24253:102:0;1196:177:1;17984:1022:0;;;:::i;:::-;;;;1659:25:1;;;1715:2;1700:18;;1693:34;;;;1743:18;;;1736:34;;;;1801:2;1786:18;;1779:34;1857:14;1850:22;1844:3;1829:19;;1822:51;1904:3;1889:19;;1882:35;1646:3;1631:19;17984:1022:0;1378:545:1;25898:315:0;;;;;;:::i;:::-;;:::i;15018:133::-;;;;;;:::i;:::-;;:::i;:::-;;23769:94;23846:9;;23769:94;;23846:9;;;;2594:36:1;;2582:2;2567:18;23769:94:0;2452:184:1;26614:212:0;;;;;;:::i;:::-;;:::i;22607:85::-;;;;;;:::i;:::-;;:::i;16813:710::-;;;;;;:::i;:::-;;:::i;14461:30::-;;;;;-1:-1:-1;;;;;14461:30:0;;;;;;-1:-1:-1;;;;;4243:32:1;;;4225:51;;4213:2;4198:18;14461:30:0;4079:203:1;15780:673:0;;;;;;:::i;:::-;;:::i;20927:35::-;;;;;;:::i;:::-;;:::i;20781:28::-;;;;;;24419:121;;;;;;:::i;:::-;-1:-1:-1;;;;;24514:18:0;24487:7;24514:18;;;:9;:18;;;;;;;24419:121;20701:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13590:148;;;:::i;20751:26::-;;;;;;21833:90;;;;;;:::i;:::-;;:::i;12939:87::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;12939:87;;23930:98;;;:::i;14846:164::-;;;:::i;27319:263::-;;;;;;:::i;:::-;;:::i;14374:43::-;;;;;;:::i;:::-;;:::i;:::-;;;;5572:25:1;;;5628:2;5613:18;;5606:34;;;;5545:18;14374:43:0;5398:248:1;24749:169:0;;;;;;:::i;:::-;;:::i;21750:77::-;;;;;;:::i;:::-;;:::i;21928:112::-;;;;;;:::i;:::-;;:::i;14500:27::-;;;;;-1:-1:-1;;;;;14500:27:0;;;14426:28;;;;;;24982:145;;;;;;:::i;:::-;-1:-1:-1;;;;;25092:18:0;;;25065:7;25092:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24982:145;22052:549;;;;;;:::i;:::-;;:::i;20854:37::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20898:22;;;;;-1:-1:-1;;;;;20898:22:0;;;13893:244;;;;;;:::i;:::-;;:::i;20816:32::-;;;;;-1:-1:-1;;;;;20816:32:0;;;24093:94;24141:13;24174:5;24167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24093:94;:::o;25271:163::-;25348:4;25365:39;11608:10;25388:7;25397:6;25365:8;:39::i;:::-;-1:-1:-1;25422:4:0;25271:163;;;;;:::o;17984:1022::-;18078:7;18100;18122;18144;18166:4;18185:7;18240:1;18224:13;;:17;18220:737;;;18289:13;;18258:28;18319:627;18343:19;:26;18339:30;;18319:627;;;18395:30;18428:19;18448:1;18428:22;;;;;;;;:::i;:::-;;;;;;;;;;;18395:55;;18517:7;:16;;;18494:20;:39;;;;:::i;:::-;18471:62;;18575:20;18556:15;:39;18552:378;;18652:5;:1;18656;18652:5;:::i;:::-;18684:16;;18774:17;;;;11608:10;18684:16;18818:31;;;:17;;;:31;;;;;;;;;18876:17;;;;:31;;;;;;18618:312;;-1:-1:-1;18684:16:0;;-1:-1:-1;18727:20:0;;-1:-1:-1;18774:17:0;;-1:-1:-1;18818:31:0;;;-1:-1:-1;18876:31:0;;-1:-1:-1;18618:312:0;;-1:-1:-1;18618:312:0;18552:378;-1:-1:-1;18371:3:0;;;;:::i;:::-;;;;18319:627;;;;18243:714;18220:737;-1:-1:-1;18977:1:0;;-1:-1:-1;18977:1:0;;-1:-1:-1;18977:1:0;;-1:-1:-1;18977:1:0;;-1:-1:-1;18977:1:0;;-1:-1:-1;18977:1:0;17984:1022;;;;;;;:::o;25898:315::-;25998:4;26015:36;26025:6;26033:9;26044:6;26015:9;:36::i;:::-;26062:121;26071:6;11608:10;26093:89;26131:6;26093:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26093:19:0;;;;;;:11;:19;;;;;;;;11608:10;26093:33;;;;;;;;;;:37;:89::i;:::-;26062:8;:121::i;:::-;-1:-1:-1;26201:4:0;25898:315;;;;;:::o;15018:133::-;14756:12;;-1:-1:-1;;;;;14756:12:0;11608:10;14756:28;14748:70;;;;-1:-1:-1;;;14748:70:0;;;;;;;:::i;:::-;;;;;;;;;15107:36:::1;15128:14;15107:20;:36::i;:::-;15018:133:::0;:::o;26614:212::-;11608:10;26696:4;26745:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26745:34:0;;;;;;;;;;26696:4;;26713:83;;26736:7;;26745:50;;26784:10;26745:38;:50::i;22607:85::-;22657:27;11608:10;22677:6;22657:5;:27::i;16813:710::-;14756:12;;-1:-1:-1;;;;;14756:12:0;11608:10;14756:28;14748:70;;;;-1:-1:-1;;;14748:70:0;;;;;;;:::i;:::-;17043:19:::1;:26:::0;17035:34;::::1;17027:60;;;::::0;-1:-1:-1;;;17027:60:0;;8864:2:1;17027:60:0::1;::::0;::::1;8846:21:1::0;8903:2;8883:18;;;8876:30;-1:-1:-1;;;8922:18:1;;;8915:43;8975:18;;17027:60:0::1;8662:337:1::0;17027:60:0::1;17118:1;17106:9;:13;17098:43;;;::::0;-1:-1:-1;;;17098:43:0;;9206:2:1;17098:43:0::1;::::0;::::1;9188:21:1::0;9245:2;9225:18;;;9218:30;-1:-1:-1;;;9264:18:1;;;9257:47;9321:18;;17098:43:0::1;9004:341:1::0;17098:43:0::1;17170:19;17190:5;17170:26;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;;17158:8;:47;17154:99;;17245:8;17207:19;17227:5;17207:26;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:46:::0;17154:99:::1;17283:19;17303:5;17283:26;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;;17270:9;:49;17266:103;;17360:9;17321:19;17341:5;17321:26;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;:48;;;;17266:103;17387:9;17382:134;17402:20:::0;;::::1;17382:134;;;17497:7;17444:19;17464:5;17444:26;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;:50;17481:9;;17491:1;17481:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17444:50:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17444:50:0;:60;;-1:-1:-1;;17444:60:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17424:3;::::1;::::0;::::1;:::i;:::-;;;;17382:134;;;;16813:710:::0;;;;;;:::o;15780:673::-;14756:12;;-1:-1:-1;;;;;14756:12:0;11608:10;14756:28;14748:70;;;;-1:-1:-1;;;14748:70:0;;;;;;;:::i;:::-;15970:37;;::::1;15962:70;;;::::0;-1:-1:-1;;;15962:70:0;;9552:2:1;15962:70:0::1;::::0;::::1;9534:21:1::0;9591:2;9571:18;;;9564:30;-1:-1:-1;;;9610:18:1;;;9603:50;9670:18;;15962:70:0::1;9350:344:1::0;15962:70:0::1;16045:15;:29:::0;;-1:-1:-1;;;;;;16045:29:0::1;-1:-1:-1::0;;;;;16045:29:0;::::1;;::::0;;16091:20;;16087:359:::1;;16128:26;16135:19;;16128:26;:::i;:::-;16176:9;16171:264;16191:20:::0;;::::1;16171:264;;;16277:19;:26:::0;;;;::::1;::::0;;16237:37:::1;16277:26:::0;;;;::::1;;::::0;::::1;16348:9:::0;;16358:1;16348:12;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;16322:38:::0;;-1:-1:-1;16406:10:0;;16417:1;16406:13;;::::1;;;;;:::i;:::-;;;;;;;16379:14;:24;;:40;;;;16218:217;16213:3;;;;;:::i;:::-;;;;16171:264;;;;16087:359;15780:673:::0;;;;;:::o;20927:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20927:35:0;;-1:-1:-1;20927:35:0;:::o;13590:148::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;13697:1:::1;13681:6:::0;;13660:40:::1;::::0;-1:-1:-1;;;;;13681:6:0;;::::1;::::0;13660:40:::1;::::0;13697:1;;13660:40:::1;13728:1;13711:19:::0;;-1:-1:-1;;;;;;13711:19:0::1;::::0;;13590:148::o;21833:90::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21900:8:0;;;::::1;;::::0;;;:5:::1;:8;::::0;;;;:15;;-1:-1:-1;;21900:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21833:90::o;23930:98::-;23980:13;24013:7;24006:14;;;;;:::i;14846:164::-;14756:12;;-1:-1:-1;;;;;14756:12:0;11608:10;14756:28;14748:70;;;;-1:-1:-1;;;14748:70:0;;;;;;;:::i;:::-;14941:12:::1;::::0;14918:48:::1;::::0;14963:1:::1;::::0;-1:-1:-1;;;;;14941:12:0::1;::::0;14918:48:::1;::::0;14963:1;;14918:48:::1;14977:12;:25:::0;;-1:-1:-1;;;;;;14977:25:0::1;::::0;;14846:164::o;27319:263::-;27406:4;27423:129;11608:10;27446:7;27455:96;27494:15;27455:96;;;;;;;;;;;;;;;;;11608:10;27455:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27455:34:0;;;;;;;;;;;;:38;:96::i;14374:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14374:43:0;:::o;24749:169::-;24829:4;24846:42;11608:10;24870:9;24881:6;24846:9;:42::i;21750:77::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;21808:7:::1;:11:::0;;-1:-1:-1;;;;;;21808:11:0::1;-1:-1:-1::0;;;;;21808:11:0;;;::::1;::::0;;;::::1;::::0;;21750:77::o;21928:112::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22006:15:0;;;::::1;;::::0;;;:12:::1;:15;::::0;;;;:26;;-1:-1:-1;;22006:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21928:112::o;22052:549::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;22241:4:::1;22209:28;:10:::0;22224:12;22209:14:::1;:28::i;:::-;:36;;22201:83;;;::::0;-1:-1:-1;;;22201:83:0;;10262:2:1;22201:83:0::1;::::0;::::1;10244:21:1::0;10301:2;10281:18;;;10274:30;10340:34;10320:18;;;10313:62;-1:-1:-1;;;10391:18:1;;;10384:32;10433:19;;22201:83:0::1;10060:398:1::0;22201:83:0::1;22330:1;22303:17;:24;:28;22295:53;;;::::0;-1:-1:-1;;;22295:53:0;;10665:2:1;22295:53:0::1;::::0;::::1;10647:21:1::0;10704:2;10684:18;;;10677:30;-1:-1:-1;;;10723:18:1;;;10716:42;10775:18;;22295:53:0::1;10463:336:1::0;22295:53:0::1;-1:-1:-1::0;;;;;22361:30:0;::::1;22353:86;;;::::0;-1:-1:-1;;;22353:86:0;;11006:2:1;22353:86:0::1;::::0;::::1;10988:21:1::0;11045:2;11025:18;;;11018:30;11084:34;11064:18;;;11057:62;-1:-1:-1;;;11135:18:1;;;11128:41;11186:19;;22353:86:0::1;10804:407:1::0;22353:86:0::1;22448:11;:24:::0;;;22477:13:::1;:28:::0;;;22510:38;;::::1;::::0;:18:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;22553:17:0::1;:36:::0;;-1:-1:-1;;;;;;22553:36:0::1;-1:-1:-1::0;;;;;22553:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22052:549:0:o;13893:244::-;12985:7;13012:6;-1:-1:-1;;;;;13012:6:0;11608:10;13159:23;13151:68;;;;-1:-1:-1;;;13151:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13982:22:0;::::1;13974:73;;;::::0;-1:-1:-1;;;13974:73:0;;11418:2:1;13974:73:0::1;::::0;::::1;11400:21:1::0;11457:2;11437:18;;;11430:30;11496:34;11476:18;;;11469:62;-1:-1:-1;;;11547:18:1;;;11540:36;11593:19;;13974:73:0::1;11216:402:1::0;13974:73:0::1;14084:6;::::0;;14063:38:::1;::::0;-1:-1:-1;;;;;14063:38:0;;::::1;::::0;14084:6;::::1;::::0;14063:38:::1;::::0;::::1;14112:6;:17:::0;;-1:-1:-1;;;;;;14112:17:0::1;-1:-1:-1::0;;;;;14112:17:0;;;::::1;::::0;;;::::1;::::0;;13893:244::o;30973:346::-;-1:-1:-1;;;;;31067:19:0;;31059:68;;;;-1:-1:-1;;;31059:68:0;;11825:2:1;31059:68:0;;;11807:21:1;11864:2;11844:18;;;11837:30;11903:34;11883:18;;;11876:62;-1:-1:-1;;;11954:18:1;;;11947:34;11998:19;;31059:68:0;11623:400:1;31059:68:0;-1:-1:-1;;;;;31146:21:0;;31138:68;;;;-1:-1:-1;;;31138:68:0;;12230:2:1;31138:68:0;;;12212:21:1;12269:2;12249:18;;;12242:30;12308:34;12288:18;;;12281:62;-1:-1:-1;;;12359:18:1;;;12352:32;12401:19;;31138:68:0;12028:398:1;31138:68:0;-1:-1:-1;;;;;31227:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31279:32;;1342:25:1;;;31279:32:0;;1315:18:1;31279:32:0;;;;;;;;30973:346;;;:::o;28341:2200::-;-1:-1:-1;;;;;28439:20:0;;28431:70;;;;-1:-1:-1;;;28431:70:0;;12633:2:1;28431:70:0;;;12615:21:1;12672:2;12652:18;;;12645:30;12711:34;12691:18;;;12684:62;-1:-1:-1;;;12762:18:1;;;12755:35;12807:19;;28431:70:0;12431:401:1;28431:70:0;-1:-1:-1;;;;;28520:23:0;;28512:71;;;;-1:-1:-1;;;28512:71:0;;13039:2:1;28512:71:0;;;13021:21:1;13078:2;13058:18;;;13051:30;13117:34;13097:18;;;13090:62;-1:-1:-1;;;13168:18:1;;;13161:33;13211:19;;28512:71:0;12837:399:1;28512:71:0;28604:47;28625:6;28633:9;28644:6;28604:20;:47::i;:::-;-1:-1:-1;;;;;;;28663:64:0;;;28660:138;;28744:21;28750:6;28758;28744:5;:21::i;:::-;28341:2200;;;:::o;28660:138::-;28838:71;28860:6;28838:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28838:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28818:17:0;;;;;;;:9;:17;;;;;;;;:91;;;;28921:16;;;;;:5;:16;;;;;;;:41;;;;-1:-1:-1;;;;;;28942:20:0;;;;;;:12;:20;;;;;;;;28941:21;28921:41;28918:1440;;;29014:11;;28975:21;;29014:15;29011:205;;29059:34;29087:5;29059:23;29070:11;;29059:6;:10;;:23;;;;:::i;:::-;:27;;:34::i;:::-;29117:12;;29043:50;;-1:-1:-1;29117:31:0;;29043:50;29117:16;:31::i;:::-;29102:12;:46;29160:43;;1342:25:1;;;29185:1:0;;-1:-1:-1;;;;;29160:43:0;;;-1:-1:-1;;;;;;;;;;;29160:43:0;1330:2:1;1315:18;29160:43:0;;;;;;;29011:205;29226:23;29283:1;29267:13;;:17;:52;;;;-1:-1:-1;29288:17:0;;-1:-1:-1;;;;;29288:17:0;:31;;29267:52;29264:1018;;;29356:36;29386:5;29356:25;29367:13;;29356:6;:10;;:25;;;;:::i;:36::-;29408:7;;29338:54;;-1:-1:-1;;;;;;29408:7:0;:21;29405:865;;29497:4;29479:24;;;;:9;:24;;;;;;:45;;29508:15;29479:28;:45::i;:::-;29470:4;29452:24;;;;:9;:24;;;;;;;:72;;;;29550:48;;-1:-1:-1;;;;;29550:48:0;;;-1:-1:-1;;;;;;;;;;;29550:48:0;;;29582:15;1342:25:1;;1330:2;1315:18;;1196:177;29550:48:0;;;;;;;;29661:7;;-1:-1:-1;;;;;29661:7:0;29714:49;29731:4;29661:7;29747:15;29714:8;:49::i;:::-;29989:17;;29792:279;;-1:-1:-1;;;29792:279:0;;-1:-1:-1;;;;;29792:55:0;;;;;;:279;;29874:15;;29916:1;;29944:18;;29989:17;;;;30033:15;;29792:279;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29431:666;29405:865;;;30155:17;;-1:-1:-1;;;;;30155:17:0;30145:28;;;;:9;:28;;;;;;:49;;30178:15;30145:32;:49::i;:::-;30124:17;;;-1:-1:-1;;;;;30124:17:0;;;30114:28;;;;:9;:28;;;;;;;;;:80;;;;30227:17;;30210:52;;1342:25:1;;;30227:17:0;;;;30210:52;;;;-1:-1:-1;;;;;;;;;;;30210:52:0;1315:18:1;30210:52:0;;;;;;;29405:865;30301:46;30331:15;30301:25;:6;30312:13;30301:10;:25::i;:::-;:29;;:46::i;:::-;30292:55;;28964:1394;;28918:1440;-1:-1:-1;;;;;30395:20:0;;;;;;:9;:20;;;;;;:32;;30420:6;30395:24;:32::i;:::-;-1:-1:-1;;;;;30372:20:0;;;;;;;:9;:20;;;;;;;:55;;;;30443:35;;;;;;-1:-1:-1;;;;;;;;;;;30443:35:0;;;30471:6;1342:25:1;;1330:2;1315:18;;1196:177;1900:178:0;1986:7;2018:12;2010:6;;;;2002:29;;;;-1:-1:-1;;;2002:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2038:9:0;2050:5;2054:1;2050;:5;:::i;:::-;2038:17;1900:178;-1:-1:-1;;;;;1900:178:0:o;15159:266::-;-1:-1:-1;;;;;15241:28:0;;15233:76;;;;-1:-1:-1;;;15233:76:0;;14584:2:1;15233:76:0;;;14566:21:1;14623:2;14603:18;;;14596:30;14662:34;14642:18;;;14635:62;-1:-1:-1;;;14713:18:1;;;14706:33;14756:19;;15233:76:0;14382:399:1;15233:76:0;15348:12;;15325:52;;-1:-1:-1;;;;;15325:52:0;;;;15348:12;;15325:52;;15348:12;;15325:52;15388:12;:29;;-1:-1:-1;;;;;;15388:29:0;-1:-1:-1;;;;;15388:29:0;;;;;;;;;;15159:266::o;1073:167::-;1131:7;;1159:5;1163:1;1159;:5;:::i;:::-;1147:17;;1184:1;1179;:6;;1171:46;;;;-1:-1:-1;;;1171:46:0;;14988:2:1;1171:46:0;;;14970:21:1;15027:2;15007:18;;;15000:30;15066:29;15046:18;;;15039:57;15113:18;;1171:46:0;14786:351:1;1171:46:0;1233:1;1073:167;-1:-1:-1;;;1073:167:0:o;23025:675::-;-1:-1:-1;;;;;23109:21:0;;23101:67;;;;-1:-1:-1;;;23101:67:0;;15344:2:1;23101:67:0;;;15326:21:1;15383:2;15363:18;;;15356:30;15422:34;15402:18;;;15395:62;-1:-1:-1;;;15473:18:1;;;15466:31;15514:19;;23101:67:0;15142:397:1;23101:67:0;23181:49;23202:7;23219:1;23223:6;23181:20;:49::i;:::-;-1:-1:-1;;;;;23268:18:0;;23243:22;23268:18;;;:9;:18;;;;;;23305:24;;;;23297:71;;;;-1:-1:-1;;;23297:71:0;;15746:2:1;23297:71:0;;;15728:21:1;15785:2;15765:18;;;15758:30;15824:34;15804:18;;;15797:62;-1:-1:-1;;;15875:18:1;;;15868:32;15917:19;;23297:71:0;15544:398:1;23297:71:0;-1:-1:-1;;;;;23404:18:0;;;;;;:9;:18;;;;;;;;23425:23;;;23404:44;;23543:12;:22;;;;;;;23594:37;1342:25:1;;;23404:18:0;;;-1:-1:-1;;;;;;;;;;;23594:37:0;1315:18:1;23594:37:0;1196:177:1;27591:170:0;27689:60;27723:6;27731:9;27742:6;27689:33;:60::i;2309:431::-;2367:7;2596:1;2601;2596:6;2592:37;;-1:-1:-1;2620:1:0;2613:8;;2592:37;2637:9;2649:5;2653:1;2649;:5;:::i;:::-;2637:17;-1:-1:-1;2678:1:0;2669:5;2673:1;2637:17;2669:5;:::i;:::-;:10;2661:56;;;;-1:-1:-1;;;2661:56:0;;16544:2:1;2661:56:0;;;16526:21:1;16583:2;16563:18;;;16556:30;16622:34;16602:18;;;16595:62;-1:-1:-1;;;16673:18:1;;;16666:31;16714:19;;2661:56:0;16342:397:1;3184:126:0;3242:7;3265:39;3269:1;3272;3265:39;;;;;;;;;;;;;;;;;:3;:39::i;1495:130::-;1553:7;1576:43;1580:1;1583;1576:43;;;;;;;;;;;;;;;;;:3;:43::i;19132:1188::-;19269:15;;-1:-1:-1;;;;;19269:15:0;:29;;:64;;-1:-1:-1;19302:19:0;:26;:31;19269:64;19265:77;;;19132:1188;;;:::o;19265:77::-;19358:13;;:18;:47;;;;-1:-1:-1;19390:15:0;;-1:-1:-1;;;;;19380:25:0;;;19390:15;;19380:25;;19358:47;:79;;;;-1:-1:-1;19422:15:0;;-1:-1:-1;;;;;19409:28:0;;;19422:15;;19409:28;19358:79;:93;;;;;19450:1;19441:6;:10;19358:93;19354:143;;;19482:15;19466:13;:31;19354:143;19524:15;;-1:-1:-1;;;;;19514:25:0;;;19524:15;;19514:25;:57;;;;-1:-1:-1;19556:15:0;;-1:-1:-1;;;;;19543:28:0;;;19556:15;;19543:28;;19514:57;19510:803;;;19613:21;19648:22;:20;:22::i;:::-;19612:58;;;;;;;19707:1;19691:13;:17;19687:615;;;19729:30;19762:19;19782:17;19762:19;19782:13;:17;:::i;:::-;19762:38;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19829:28:0;;;;:17;19762:38;;;;;19829:17;;;:28;;;;;;;19762:38;;-1:-1:-1;19829:28:0;;19821:71;;;;-1:-1:-1;;;19821:71:0;;16946:2:1;19821:71:0;;;16928:21:1;16985:2;16965:18;;;16958:30;17024:32;17004:18;;;16997:60;17074:18;;19821:71:0;16744:354:1;19821:71:0;19996:17;;;;-1:-1:-1;;;;;19965:28:0;;19913:23;19965:28;;;:17;;;:28;;;;;;19913:23;;-1:-1:-1;19961:141:0;;;-1:-1:-1;;;;;20074:28:0;;;;;;:17;;;:28;;;;;;20054:17;;;;:48;;20074:28;20054:48;:::i;:::-;20036:66;;19961:141;20141:15;20131:6;:25;;20123:76;;;;-1:-1:-1;;;20123:76:0;;17305:2:1;20123:76:0;;;17287:21:1;17344:2;17324:18;;;17317:30;17383:34;17363:18;;;17356:62;-1:-1:-1;;;17434:18:1;;;17427:36;17480:19;;20123:76:0;17103:402:1;20123:76:0;-1:-1:-1;;;;;20249:28:0;;;;;;:17;;;:28;;;;;;:37;;20280:6;;20249:37;:::i;:::-;-1:-1:-1;;;;;20218:28:0;;;;;;:17;;;;:28;;;;;;:68;;;;-1:-1:-1;19687:615:0;19573:740;19132:1188;;;:::o;3774:323::-;3860:7;3954:12;3947:5;3939:28;;;;-1:-1:-1;;;3939:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3974:9:0;3986:5;3990:1;3986;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1928:328::-;2005:6;2013;2021;2074:2;2062:9;2053:7;2049:23;2045:32;2042:52;;;2090:1;2087;2080:12;2042:52;2113:29;2132:9;2113:29;:::i;:::-;2103:39;;2161:38;2195:2;2184:9;2180:18;2161:38;:::i;:::-;2151:48;;2246:2;2235:9;2231:18;2218:32;2208:42;;1928:328;;;;;:::o;2261:186::-;2320:6;2373:2;2361:9;2352:7;2348:23;2344:32;2341:52;;;2389:1;2386;2379:12;2341:52;2412:29;2431:9;2412:29;:::i;2641:180::-;2700:6;2753:2;2741:9;2732:7;2728:23;2724:32;2721:52;;;2769:1;2766;2759:12;2721:52;-1:-1:-1;2792:23:1;;2641:180;-1:-1:-1;2641:180:1:o;2826:367::-;2889:8;2899:6;2953:3;2946:4;2938:6;2934:17;2930:27;2920:55;;2971:1;2968;2961:12;2920:55;-1:-1:-1;2994:20:1;;3037:18;3026:30;;3023:50;;;3069:1;3066;3059:12;3023:50;3106:4;3098:6;3094:17;3082:29;;3166:3;3159:4;3149:6;3146:1;3142:14;3134:6;3130:27;3126:38;3123:47;3120:67;;;3183:1;3180;3173:12;3120:67;2826:367;;;;;:::o;3198:160::-;3263:20;;3319:13;;3312:21;3302:32;;3292:60;;3348:1;3345;3338:12;3363:711;3482:6;3490;3498;3506;3514;3522;3575:3;3563:9;3554:7;3550:23;3546:33;3543:53;;;3592:1;3589;3582:12;3543:53;3628:9;3615:23;3605:33;;3685:2;3674:9;3670:18;3657:32;3647:42;;3736:2;3725:9;3721:18;3708:32;3698:42;;3791:2;3780:9;3776:18;3763:32;3818:18;3810:6;3807:30;3804:50;;;3850:1;3847;3840:12;3804:50;3889:70;3951:7;3942:6;3931:9;3927:22;3889:70;:::i;:::-;3978:8;;-1:-1:-1;3863:96:1;-1:-1:-1;4032:36:1;;-1:-1:-1;4063:3:1;4048:19;;4032:36;:::i;:::-;4022:46;;3363:711;;;;;;;;:::o;4287:847::-;4418:6;4426;4434;4442;4450;4503:2;4491:9;4482:7;4478:23;4474:32;4471:52;;;4519:1;4516;4509:12;4471:52;4542:29;4561:9;4542:29;:::i;:::-;4532:39;;4622:2;4611:9;4607:18;4594:32;4645:18;4686:2;4678:6;4675:14;4672:34;;;4702:1;4699;4692:12;4672:34;4741:70;4803:7;4794:6;4783:9;4779:22;4741:70;:::i;:::-;4830:8;;-1:-1:-1;4715:96:1;-1:-1:-1;4918:2:1;4903:18;;4890:32;;-1:-1:-1;4934:16:1;;;4931:36;;;4963:1;4960;4953:12;4931:36;;5002:72;5066:7;5055:8;5044:9;5040:24;5002:72;:::i;:::-;4287:847;;;;-1:-1:-1;4287:847:1;;-1:-1:-1;5093:8:1;;4976:98;4287:847;-1:-1:-1;;;4287:847:1:o;5139:254::-;5204:6;5212;5265:2;5253:9;5244:7;5240:23;5236:32;5233:52;;;5281:1;5278;5271:12;5233:52;5304:29;5323:9;5304:29;:::i;:::-;5294:39;;5352:35;5383:2;5372:9;5368:18;5352:35;:::i;:::-;5342:45;;5139:254;;;;;:::o;5651:260::-;5719:6;5727;5780:2;5768:9;5759:7;5755:23;5751:32;5748:52;;;5796:1;5793;5786:12;5748:52;5819:29;5838:9;5819:29;:::i;:::-;5809:39;;5867:38;5901:2;5890:9;5886:18;5867:38;:::i;5916:127::-;5977:10;5972:3;5968:20;5965:1;5958:31;6008:4;6005:1;5998:15;6032:4;6029:1;6022:15;6048:1332;6159:6;6167;6175;6183;6236:3;6224:9;6215:7;6211:23;6207:33;6204:53;;;6253:1;6250;6243:12;6204:53;6289:9;6276:23;6266:33;;6318:2;6367;6356:9;6352:18;6339:32;6329:42;;6422:2;6411:9;6407:18;6394:32;6445:18;6486:2;6478:6;6475:14;6472:34;;;6502:1;6499;6492:12;6472:34;6540:6;6529:9;6525:22;6515:32;;6585:7;6578:4;6574:2;6570:13;6566:27;6556:55;;6607:1;6604;6597:12;6556:55;6643:2;6630:16;6665:2;6661;6658:10;6655:36;;;6671:18;;:::i;:::-;6717:2;6714:1;6710:10;6749:2;6743:9;6812:2;6808:7;6803:2;6799;6795:11;6791:25;6783:6;6779:38;6867:6;6855:10;6852:22;6847:2;6835:10;6832:18;6829:46;6826:72;;;6878:18;;:::i;:::-;6914:2;6907:22;6964:18;;;6998:15;;;;-1:-1:-1;7040:11:1;;;7036:20;;;7068:19;;;7065:39;;;7100:1;7097;7090:12;7065:39;7124:11;;;;7144:148;7160:6;7155:3;7152:15;7144:148;;;7226:23;7245:3;7226:23;:::i;:::-;7214:36;;7177:12;;;;7270;;;;7144:148;;;7311:6;7301:16;;;;;;;;7336:38;7370:2;7359:9;7355:18;7336:38;:::i;:::-;7326:48;;6048:1332;;;;;;;:::o;7385:380::-;7464:1;7460:12;;;;7507;;;7528:61;;7582:4;7574:6;7570:17;7560:27;;7528:61;7635:2;7627:6;7624:14;7604:18;7601:38;7598:161;;7681:10;7676:3;7672:20;7669:1;7662:31;7716:4;7713:1;7706:15;7744:4;7741:1;7734:15;7598:161;;7385:380;;;:::o;7770:127::-;7831:10;7826:3;7822:20;7819:1;7812:31;7862:4;7859:1;7852:15;7886:4;7883:1;7876:15;7902:127;7963:10;7958:3;7954:20;7951:1;7944:31;7994:4;7991:1;7984:15;8018:4;8015:1;8008:15;8034:125;8099:9;;;8120:10;;;8117:36;;;8133:18;;:::i;8164:135::-;8203:3;8224:17;;;8221:43;;8244:18;;:::i;:::-;-1:-1:-1;8291:1:1;8280:13;;8164:135::o;8304:353::-;8506:2;8488:21;;;8545:2;8525:18;;;8518:30;8584:31;8579:2;8564:18;;8557:59;8648:2;8633:18;;8304:353::o;9699:356::-;9901:2;9883:21;;;9920:18;;;9913:30;9979:34;9974:2;9959:18;;9952:62;10046:2;10031:18;;9699:356::o;13241:1003::-;13500:4;13548:3;13537:9;13533:19;13579:6;13568:9;13561:25;13605:2;13643:6;13638:2;13627:9;13623:18;13616:34;13686:3;13681:2;13670:9;13666:18;13659:31;13710:6;13745;13739:13;13776:6;13768;13761:22;13814:3;13803:9;13799:19;13792:26;;13837:6;13834:1;13827:17;13880:2;13877:1;13867:16;13853:30;;13901:1;13911:194;13925:6;13922:1;13919:13;13911:194;;;13990:13;;-1:-1:-1;;;;;13986:39:1;13974:52;;14022:1;14081:14;;;;14046:12;;;;13940:9;13911:194;;;-1:-1:-1;;;;;;;14161:32:1;;;;14156:2;14141:18;;14134:60;-1:-1:-1;;;14225:3:1;14210:19;14203:35;14122:3;13241:1003;-1:-1:-1;;;13241:1003:1:o;14249:128::-;14316:9;;;14337:11;;;14334:37;;;14351:18;;:::i;15947:168::-;16020:9;;;16051;;16068:15;;;16062:22;;16048:37;16038:71;;16089:18;;:::i;16120:217::-;16160:1;16186;16176:132;;16230:10;16225:3;16221:20;16218:1;16211:31;16265:4;16262:1;16255:15;16293:4;16290:1;16283:15;16176:132;-1:-1:-1;16322:9:1;;16120:217::o

Swarm Source

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