ETH Price: $2,465.34 (+5.73%)

Token

L AI ($LAI)
 

Overview

Max Total Supply

1,000,000 $LAI

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,034.449530804173593792 $LAI

Value
$0.00
0x6864d4e8f057738303edb138a059a95f80a6efe7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
L

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-04
*/

/**
L AI || $LAI

TG https://t.me/LAI_token

Website : www.lai-token.com

                                                                                                                                                                                                
LLLLLLLLLLL                                 AAA               IIIIIIIIII
L:::::::::L                                A:::A              I::::::::I
L:::::::::L                               A:::::A             I::::::::I
LL:::::::LL                              A:::::::A            II::::::II
  L:::::L                               A:::::::::A             I::::I  
  L:::::L                              A:::::A:::::A            I::::I  
  L:::::L                             A:::::A A:::::A           I::::I  
  L:::::L                            A:::::A   A:::::A          I::::I  
  L:::::L                           A:::::A     A:::::A         I::::I  
  L:::::L                          A:::::AAAAAAAAA:::::A        I::::I  
  L:::::L                         A:::::::::::::::::::::A       I::::I  
  L:::::L         LLLLLL         A:::::AAAAAAAAAAAAA:::::A      I::::I  
LL:::::::LLLLLLLLL:::::L        A:::::A             A:::::A   II::::::II
L::::::::::::::::::::::L       A:::::A               A:::::A  I::::::::I
L::::::::::::::::::::::L      A:::::A                 A:::::A I::::::::I
LLLLLLLLLLLLLLLLLLLLLLLL     AAAAAAA                   AAAAAAAIIIIIIIIII

 I have two rules:
1) I’m never wrong
2) if I’m wrong back to the first rule

With the amount of launches going around lately you can’t be sure where to invest … that’s where L AI comes in, our bot will investigate the CA 

Eth Trending
Tax 4/4
Locked
Verified
Experienced team 
Marketing 
Whale Backed
Utility almost done

*/

// SPDX-License-Identifier: Unlicensed

    pragma solidity ^0.8.0;

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

    library SafeMath {
        
        function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                uint256 c = a + b;
                if (c < a) return (false, 0);
                return (true, c);
            }
        }
        
        function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b > a) return (false, 0);
                return (true, a - b);
            }
        }
        
        function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                // 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 (true, 0);
                uint256 c = a * b;
                if (c / a != b) return (false, 0);
                return (true, c);
            }
        }
        
        function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a / b);
            }
        }
        
        function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
            unchecked {
                if (b == 0) return (false, 0);
                return (true, a % b);
            }
        }

        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            return a + b;
        }


        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return a - b;
        }


        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            return a * b;
        }
        
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return a / b;
        }


        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return a % b;
        }
        
        function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b <= a, errorMessage);
                return a - b;
            }
        }
        
        function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a / b;
            }
        }
        
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            unchecked {
                require(b > 0, errorMessage);
                return a % b;
            }
        }
    }

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

    library Address {
        
        function isContract(address account) internal view returns (bool) {
            uint256 size;
            assembly { size := extcodesize(account) }
            return size > 0;
        }

        function sendValue(address payable recipient, uint256 amount) internal {
            require(address(this).balance >= amount, "Address: insufficient balance");
            (bool success, ) = recipient.call{ value: amount }("");
            require(success, "Address: unable to send value, recipient may have reverted");
        }
        
        function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        }
        
        function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            return functionCallWithValue(target, data, 0, errorMessage);
        }
        
        function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
            return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
        }
        
        function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
            require(address(this).balance >= value, "Address: insufficient balance for call");
            require(isContract(target), "Address: call to non-contract");
            (bool success, bytes memory returndata) = target.call{ value: value }(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }
        
        function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
            return functionStaticCall(target, data, "Address: low-level static call failed");
        }
        
        function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
            require(isContract(target), "Address: static call to non-contract");
            (bool success, bytes memory returndata) = target.staticcall(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }


        function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
            return functionDelegateCall(target, data, "Address: low-level delegate call failed");
        }
        
        function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            require(isContract(target), "Address: delegate call to non-contract");
            (bool success, bytes memory returndata) = target.delegatecall(data);
            return _verifyCallResult(success, returndata, errorMessage);
        }

        function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
            if (success) {
                return returndata;
            } else {
                if (returndata.length > 0) {
                    assembly {
                        let returndata_size := mload(returndata)
                        revert(add(32, returndata), returndata_size)
                    }
                } else {
                    revert(errorMessage);
                }
            }
        }
    }

    abstract contract Ownable is Context {
        address internal _owner;
        address private _previousOwner;

        event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
        constructor () {
            _owner = _msgSender();
            emit OwnershipTransferred(address(0), _owner);
        }
        
        function owner() public view virtual returns (address) {
            return _owner;
        }
        
        modifier onlyOwner() {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
            _;
        }
        
        function renounceOwnership() public virtual onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = address(0);
        }


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

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

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

        /**
        * @dev Returns the decimals places of the token.
        */
        function decimals() external view returns (uint8);
    }
    contract ERC20 is Context,Ownable, IERC20, IERC20Metadata {
        using SafeMath for uint256;

        mapping(address => uint256) private _balances;

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

        uint256 private _totalSupply;

        string private _name;
        string private _symbol;

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

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

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

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

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

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

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

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

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

        /**
        * @dev See {IERC20-transferFrom}.
        *
        * Emits an {Approval} event indicating the updated allowance. This is not
        * required by the EIP. See the note at the beginning of {ERC20}.
        *
        * Requirements:
        *
        * - `sender` and `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        * - the caller must have allowance for ``sender``'s tokens of at least
        * `amount`.
        */
        function transferFrom(
            address sender,
            address recipient,
            uint256 amount
        ) public virtual override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

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

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

        /**
        * @dev Moves tokens `amount` from `sender` to `recipient`.
        *
        * This is internal function is equivalent to {transfer}, and can be used to
        * e.g. implement automatic token fees, slashing mechanisms, etc.
        *
        * Emits a {Transfer} event.
        *
        * Requirements:
        *
        * - `sender` cannot be the zero address.
        * - `recipient` cannot be the zero address.
        * - `sender` must have a balance of at least `amount`.
        */
        function _transfer(
            address sender,
            address recipient,
            uint256 amount
        ) internal virtual {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");

            _beforeTokenTransfer(sender, recipient, amount);

            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }

        /** @dev Creates `amount` tokens and assigns them to `account`, increasing
        * the total supply.
        *
        * Emits a {Transfer} event with `from` set to the zero address.
        *
        * Requirements:
        *
        * - `account` cannot be the zero address.
        */
        function _mint(address account, uint256 amount) internal virtual {
            require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

            _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
            _totalSupply = _totalSupply.sub(amount);
            emit Transfer(account, address(0), amount);
        }

        /**
        * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
        *
        * This internal function is equivalent to `approve`, and can be used to
        * e.g. set automatic allowances for certain subsystems, etc.
        *
        * Emits an {Approval} event.
        *
        * Requirements:
        *
        * - `owner` cannot be the zero address.
        * - `spender` cannot be the zero address.
        */
        function _approve(
            address owner,
            address spender,
            uint256 amount
        ) internal virtual {
            require(owner != address(0), "ERC20: approve from the zero address");
            require(spender != address(0), "ERC20: approve to the zero address");

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

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


    interface IUniswapV2Factory {
        event PairCreated(address indexed token0, address indexed token1, address pair, uint);
        function feeTo() external view returns (address);
        function feeToSetter() external view returns (address);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
        function allPairs(uint) external view returns (address pair);
        function allPairsLength() external view returns (uint);
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function setFeeTo(address) external;
        function setFeeToSetter(address) external;
    }

    interface IUniswapV2Pair {
        event Approval(address indexed owner, address indexed spender, uint value);
        event Transfer(address indexed from, address indexed to, uint value);
        function name() external pure returns (string memory);
        function symbol() external pure returns (string memory);
        function decimals() external pure returns (uint8);
        function totalSupply() external view returns (uint);
        function balanceOf(address owner) external view returns (uint);
        function allowance(address owner, address spender) external view returns (uint);
        function approve(address spender, uint value) external returns (bool);
        function transfer(address to, uint value) external returns (bool);
        function transferFrom(address from, address to, uint value) external returns (bool);
        function DOMAIN_SEPARATOR() external view returns (bytes32);
        function PERMIT_TYPEHASH() external pure returns (bytes32);
        function nonces(address owner) external view returns (uint);
        function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
        event Mint(address indexed sender, uint amount0, uint amount1);
        event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
        event Swap(
            address indexed sender,
            uint amount0In,
            uint amount1In,
            uint amount0Out,
            uint amount1Out,
            address indexed to
        );
        event Sync(uint112 reserve0, uint112 reserve1);
        function MINIMUM_LIQUIDITY() external pure returns (uint);
        function factory() external view returns (address);
        function token0() external view returns (address);
        function token1() external view returns (address);
        function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
        function price0CumulativeLast() external view returns (uint);
        function price1CumulativeLast() external view returns (uint);
        function kLast() external view returns (uint);
        function mint(address to) external returns (uint liquidity);
        function burn(address to) external returns (uint amount0, uint amount1);
        function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
        function skim(address to) external;
        function sync() external;
        function initialize(address, address) external;
    }

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

    contract L is ERC20 {
        using SafeMath for uint256;
        using Address for address;

        mapping (address => bool) private _isExcludedFromFee;
        mapping(address => bool) private _isExcludedFromMaxWallet;
        mapping(address => bool) private _isExcludedFromMaxTnxLimit;

        address public _devWalletAddress;    

        uint256 public _buyDevFee = 5;  
        uint256 public _sellDevFee = 45; 

        IUniswapV2Router02 public uniswapV2Router;
        address public uniswapV2Pair;
        bool inSwapAndLiquify;
        bool public swapAndSendFeeEnabled = true;
        uint256 public _maxWalletBalance;
        uint256 public _maxTxAmount;
        uint256 public numTokensSellToSendEthToDev;
        event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
        event swapAndSendFeeEnabledUpdated(bool enabled);
        event SwapAndLiquify(
            uint256 tokensSwapped,
            uint256 ethReceived,
            uint256 tokensIntoLiqudity
        );
        
        modifier lockTheSwap {
            inSwapAndLiquify = true;
            _;
            inSwapAndLiquify = false;
        }
        
        constructor () ERC20("L AI", "$LAI"){

            numTokensSellToSendEthToDev = 5000 * 10 ** decimals();
            _devWalletAddress = 0x6E3921CF861CB03bfC635F03f1E1C4E5254A8AF9;
            
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            // Create a uniswap pair for this new token
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());

            // set the rest of the contract variables
            uniswapV2Router = _uniswapV2Router;
            
            //exclude owner and this contract from fee
            _isExcludedFromFee[_msgSender()] = true;
            _isExcludedFromFee[address(this)] = true;
            _isExcludedFromFee[_devWalletAddress] = true;

            // exclude from the Max wallet balance 
            _isExcludedFromMaxWallet[owner()] = true;
            _isExcludedFromMaxWallet[address(this)] = true;
            _isExcludedFromMaxWallet[_devWalletAddress] = true;

            // exclude from the max tnx limit 
            _isExcludedFromMaxTnxLimit[owner()] = true;
            _isExcludedFromMaxTnxLimit[address(this)] = true;
            _isExcludedFromMaxTnxLimit[_devWalletAddress] = true;


            /*
                _mint is an internal function in ERC20.sol that is only called here,
                and CANNOT be called ever again
            */
            _mint(owner(), 1000000 * 10 ** decimals());		
            _maxWalletBalance = (totalSupply() * 2 ) / 100;
            _maxTxAmount = (totalSupply() * 2 ) / 100;

            
        }

        function includeAndExcludeInWhitelist(address account, bool value) public onlyOwner {
            _isExcludedFromFee[account] = value;
        }

        function includeAndExcludedFromMaxWallet(address account, bool value) public onlyOwner {
            _isExcludedFromMaxWallet[account] = value;
        }

        function includeAndExcludedFromMaxTnxLimit(address account, bool value) public onlyOwner {
            _isExcludedFromMaxTnxLimit[account] = value;
        }

        function isExcludedFromFee(address account) public view returns(bool) {
            return _isExcludedFromFee[account];
        }

        function isExcludedFromMaxWallet(address account) public view returns(bool){
            return _isExcludedFromMaxWallet[account];
        }

        function isExcludedFromMaxTnxLimit(address account) public view returns(bool) {
            return _isExcludedFromMaxTnxLimit[account];
        }

        function setMaxWalletBalance(uint256 maxBalancePercent) external onlyOwner {
        _maxWalletBalance = maxBalancePercent * 10** decimals();
        }

        function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount * 10** decimals();
       }


        function setSellDevFess(
            uint256 dFee
        ) external onlyOwner {
            _sellDevFee = dFee;
        }

        function setBuyDevFees(
            uint256 dFee
        ) external onlyOwner {
            _buyDevFee = dFee;
        }
        function setDevWalletAddress(address _addr) external onlyOwner {
            _devWalletAddress = _addr;
        }  
        
        function setnumTokensSellToSendEthToDev(uint256 amount) external onlyOwner {
            numTokensSellToSendEthToDev = amount * 10 ** decimals();
        }

        function setRouterAddress(address newRouter) external onlyOwner {
            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
            uniswapV2Router = _uniswapV2Router;
        }

        function setSwapAndSendFeeEnabled(bool _enabled) external onlyOwner {
            swapAndSendFeeEnabled = _enabled;
            emit swapAndSendFeeEnabledUpdated(_enabled);
        }
        
        //to recieve ETH from uniswapV2Router when swaping
        receive() external payable {}

        // to withdraw stucked ETH 
        function withdrawStuckedETH(uint amount) external onlyOwner{
            // This is the current recommended method to use.
            (bool sent,) = _owner.call{value: amount}("");
            require(sent, "Failed to send ETH");    
            }

           // Withdraw stuked tokens 
        function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
        }
    
        function _transfer(
            address from,
            address to,
            uint256 amount
        ) internal override {
            require(from != address(0), "ERC20: transfer from the zero address");
            require(to != address(0), "ERC20: transfer to the zero address");
            require(amount > 0, "Transfer amount must be greater than zero");
        
        if (from != owner() && to != owner())
            require( _isExcludedFromMaxTnxLimit[from] || _isExcludedFromMaxTnxLimit[to] || 
                amount <= _maxTxAmount,
                "ERC20: Transfer amount exceeds the maxTxAmount."
            );
        
        
        if (
            from != owner() &&
            to != address(this) &&
            to != uniswapV2Pair ) 
        {
            uint256 currentBalance = balanceOf(to);
            require(_isExcludedFromMaxWallet[to] || (currentBalance + amount <= _maxWalletBalance),
                    "ERC20: Reached max wallet holding");
        }
      
            uint256 contractTokenBalance = balanceOf(address(this)); 
            bool overMinTokenBalance = contractTokenBalance >= numTokensSellToSendEthToDev;
            if (
                overMinTokenBalance &&
                !inSwapAndLiquify &&
                from != uniswapV2Pair &&
                swapAndSendFeeEnabled
            ) {
                contractTokenBalance = numTokensSellToSendEthToDev;
                swapTokensForFees(contractTokenBalance);
            }

            bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            super._transfer(from, to, amount);
            takeFee = false;
        } else {

            if (from == uniswapV2Pair) {
                // Buy
                uint256 DevTokens = amount.mul(_buyDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);

            } else if (to == uniswapV2Pair) {
                // Sell
                uint256 DevTokens = amount.mul(_sellDevFee).div(100);

                amount= amount.sub(DevTokens);
                super._transfer(from, address(this), DevTokens);
                super._transfer(from, to, amount);
            } else {
                // Transfer
                super._transfer(from, to, amount);
            }
        
        }

        }

        function swapTokensForFees(uint256 tokenAmount) private lockTheSwap {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = uniswapV2Router.WETH();
            _approve(address(this), address(uniswapV2Router), tokenAmount);
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of ETH
                path,
                _devWalletAddress,
                block.timestamp
            );
        }
    }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndSendFeeEnabledUpdated","type":"event"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludeInWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxTnxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"includeAndExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTnxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToSendEthToDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dFee","type":"uint256"}],"name":"setBuyDevFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxWalletBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dFee","type":"uint256"}],"name":"setSellDevFess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setnumTokensSellToSendEthToDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndSendFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526005600b55602d600c55600e805460ff60a81b1916600160a81b1790553480156200002e57600080fd5b50604051806040016040528060048152602001634c20414960e01b81525060405180604001604052806004815260200163244c414960e01b81525062000079620004b660201b60201c565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38151620000d6906005906020850190620005dc565b508051620000ec906006906020840190620005dc565b50620000fa915050620004ba565b6200010790600a6200078e565b620001159061138862000879565b601155600a80546001600160a01b031916736e3921cf861cb03bfc635f03f1e1c4e5254a8af91790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a015591600480820192602092909190829003018186803b1580156200018d57600080fd5b505afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c8919062000682565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c919062000682565b6040518363ffffffff1660e01b81526004016200026b929190620006ab565b602060405180830381600087803b1580156200028657600080fd5b505af11580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000682565b600e80546001600160a01b03199081166001600160a01b0393841617909155600d805490911691831691909117905560016007600062000300620004b6565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600a5490911683529082208054909316811790925560089062000367620004bf565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600a54909116835290822080549093168117909255600990620003ce620004bf565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600a549091168352912080549092161790556200045f62000433620004bf565b6200043d620004ba565b6200044a90600a6200078e565b6200045990620f424062000879565b620004ce565b60646200046b620005bc565b6200047890600262000879565b62000484919062000720565b600f55606462000493620005bc565b620004a090600262000879565b620004ac919062000720565b60105550620008ee565b3390565b601290565b6000546001600160a01b031690565b6001600160a01b038216620005005760405162461bcd60e51b8152600401620004f790620006c5565b60405180910390fd5b6200050e60008383620005c2565b6200052a81600454620005c760201b620012771790919060201c565b6004556001600160a01b0382166000908152600260209081526040909120546200055f91839062001277620005c7821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005b0908590620006fc565b60405180910390a35050565b60045490565b505050565b6000620005d5828462000705565b9392505050565b828054620005ea906200089b565b90600052602060002090601f0160209004810192826200060e576000855562000659565b82601f106200062957805160ff191683800117855562000659565b8280016001018555821562000659579182015b82811115620006595782518255916020019190600101906200063c565b50620006679291506200066b565b5090565b5b808211156200066757600081556001016200066c565b60006020828403121562000694578081fd5b81516001600160a01b0381168114620005d5578182fd5b6001600160a01b0392831681529116602082015260400190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b600082198211156200071b576200071b620008d8565b500190565b6000826200073c57634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861162000755575062000785565b8187048211156200076a576200076a620008d8565b808616156200077857918102915b9490941c93800262000744565b94509492505050565b6000620005d560001960ff851684600082620007ad57506001620005d5565b81620007bc57506000620005d5565b8160018114620007d55760028114620007e05762000814565b6001915050620005d5565b60ff841115620007f457620007f4620008d8565b6001841b9150848211156200080d576200080d620008d8565b50620005d5565b5060208310610133831016604e8410600b84101617156200084c575081810a83811115620008465762000846620008d8565b620005d5565b6200085b848484600162000741565b808604821115620008705762000870620008d8565b02949350505050565b6000816000190483118215151615620008965762000896620008d8565b500290565b600281046001821680620008b057607f821691505b60208210811415620008d257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61214180620008fe6000396000f3fe6080604052600436106102345760003560e01c806368d71cbe1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af8414610632578063dd62ed3e14610647578063ea50cf4e14610667578063ec28438a14610687578063f2fde38b146106a75761023b565b8063a457c2d7146105a8578063a9059cbb146105c8578063b425bac3146105e8578063c9cf7789146105fd578063ca14a523146106125761023b565b80638da5cb5b116100f25780638da5cb5b1461051e5780638e4d62af146105335780639063d77d1461055357806395d89b41146105735780639904a1c3146105885761023b565b806368d71cbe146104945780636dd3d39f146104b457806370a08231146104d4578063715018a6146104f45780637d1db4a5146105095761023b565b80633d0dbec0116101bc57806349bd5a5e1161018057806349bd5a5e1461040a5780635342acb41461041f57806355874a791461043f5780635d729d8c1461045f578063620158521461047f5761023b565b80633d0dbec01461038057806341cb87fc14610395578063456b10a5146103b557806347de4c5d146103d557806348eb61b6146103ea5761023b565b806318160ddd1161020357806318160ddd146102dc57806323b872dd146102fe578063313ce5671461031e57806339509351146103405780633a9e00de146103605761023b565b806306fdde0314610240578063095ea7b31461026b578063120a0612146102985780631694505e146102ba5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102556106c7565b6040516102629190611b34565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611a64565b610759565b6040516102629190611b29565b3480156102a457600080fd5b506102b86102b3366004611987565b610776565b005b3480156102c657600080fd5b506102cf6107e0565b6040516102629190611ae2565b3480156102e857600080fd5b506102f16107ef565b6040516102629190611e15565b34801561030a57600080fd5b5061028b6103193660046119f7565b6107f5565b34801561032a57600080fd5b5061033361087d565b6040516102629190611e8e565b34801561034c57600080fd5b5061028b61035b366004611a64565b610882565b34801561036c57600080fd5b506102b861037b366004611ac7565b6108d0565b34801561038c57600080fd5b5061028b610932565b3480156103a157600080fd5b506102b86103b0366004611987565b610942565b3480156103c157600080fd5b506102b86103d0366004611ac7565b610b18565b3480156103e157600080fd5b506102f1610bdc565b3480156103f657600080fd5b506102b8610405366004611a37565b610be2565b34801561041657600080fd5b506102cf610c4c565b34801561042b57600080fd5b5061028b61043a366004611987565b610c5b565b34801561044b57600080fd5b5061028b61045a366004611987565b610c79565b34801561046b57600080fd5b5061028b61047a366004611a64565b610c97565b34801561048b57600080fd5b506102f1610d58565b3480156104a057600080fd5b506102b86104af366004611ac7565b610d5e565b3480156104c057600080fd5b5061028b6104cf366004611987565b610da2565b3480156104e057600080fd5b506102f16104ef366004611987565b610dc0565b34801561050057600080fd5b506102b8610ddb565b34801561051557600080fd5b506102f1610e64565b34801561052a57600080fd5b506102cf610e6a565b34801561053f57600080fd5b506102b861054e366004611a37565b610e79565b34801561055f57600080fd5b506102b861056e366004611ac7565b610ee3565b34801561057f57600080fd5b50610255610f45565b34801561059457600080fd5b506102b86105a3366004611a37565b610f54565b3480156105b457600080fd5b5061028b6105c3366004611a64565b610fbe565b3480156105d457600080fd5b5061028b6105e3366004611a64565b611026565b3480156105f457600080fd5b506102cf61103a565b34801561060957600080fd5b506102f1611049565b34801561061e57600080fd5b506102b861062d366004611ac7565b61104f565b34801561063e57600080fd5b506102f1611093565b34801561065357600080fd5b506102f16106623660046119bf565b611099565b34801561067357600080fd5b506102b8610682366004611a8f565b6110c4565b34801561069357600080fd5b506102b86106a2366004611ac7565b611155565b3480156106b357600080fd5b506102b86106c2366004611987565b6111b7565b6060600580546106d690612021565b80601f016020809104026020016040519081016040528092919081815260200182805461070290612021565b801561074f5780601f106107245761010080835404028352916020019161074f565b820191906000526020600020905b81548152906001019060200180831161073257829003601f168201915b5050505050905090565b600061076d610766611283565b8484611287565b50600192915050565b61077e611283565b6001600160a01b031661078f610e6a565b6001600160a01b0316146107be5760405162461bcd60e51b81526004016107b590611ca1565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031681565b60045490565b600061080284848461133b565b6108728461080e611283565b61086d856040518060600160405280602881526020016120bf602891396001600160a01b038a1660009081526003602052604081209061084c611283565b6001600160a01b031681526020810191909152604001600020549190611674565b611287565b5060015b9392505050565b601290565b600061076d61088f611283565b8461086d85600360006108a0611283565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611277565b6108d8611283565b6001600160a01b03166108e9610e6a565b6001600160a01b03161461090f5760405162461bcd60e51b81526004016107b590611ca1565b61091761087d565b61092290600a611f1a565b61092c9082611feb565b600f5550565b600e54600160a81b900460ff1681565b61094a611283565b6001600160a01b031661095b610e6a565b6001600160a01b0316146109815760405162461bcd60e51b81526004016107b590611ca1565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f791906119a3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3f57600080fd5b505afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7791906119a3565b6040518363ffffffff1660e01b8152600401610a94929190611af6565b602060405180830381600087803b158015610aae57600080fd5b505af1158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae691906119a3565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b610b20611283565b6001600160a01b0316610b31610e6a565b6001600160a01b031614610b575760405162461bcd60e51b81526004016107b590611ca1565b600080546040516001600160a01b03909116908390610b7590611adf565b60006040518083038185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b5050905080610bd85760405162461bcd60e51b81526004016107b590611d1f565b5050565b60115481565b610bea611283565b6001600160a01b0316610bfb610e6a565b6001600160a01b031614610c215760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600e546001600160a01b031681565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b031660009081526009602052604090205460ff1690565b6000610ca1611283565b6001600160a01b0316610cb2610e6a565b6001600160a01b031614610cd85760405162461bcd60e51b81526004016107b590611ca1565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610d069033908690600401611b10565b602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108769190611aab565b600b5481565b610d66611283565b6001600160a01b0316610d77610e6a565b6001600160a01b031614610d9d5760405162461bcd60e51b81526004016107b590611ca1565b600c55565b6001600160a01b031660009081526008602052604090205460ff1690565b6001600160a01b031660009081526002602052604090205490565b610de3611283565b6001600160a01b0316610df4610e6a565b6001600160a01b031614610e1a5760405162461bcd60e51b81526004016107b590611ca1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60105481565b6000546001600160a01b031690565b610e81611283565b6001600160a01b0316610e92610e6a565b6001600160a01b031614610eb85760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610eeb611283565b6001600160a01b0316610efc610e6a565b6001600160a01b031614610f225760405162461bcd60e51b81526004016107b590611ca1565b610f2a61087d565b610f3590600a611f1a565b610f3f9082611feb565b60115550565b6060600680546106d690612021565b610f5c611283565b6001600160a01b0316610f6d610e6a565b6001600160a01b031614610f935760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061076d610fcb611283565b8461086d856040518060600160405280602581526020016120e76025913960036000610ff5611283565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611674565b600061076d611033611283565b848461133b565b600a546001600160a01b031681565b600c5481565b611057611283565b6001600160a01b0316611068610e6a565b6001600160a01b03161461108e5760405162461bcd60e51b81526004016107b590611ca1565b600b55565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6110cc611283565b6001600160a01b03166110dd610e6a565b6001600160a01b0316146111035760405162461bcd60e51b81526004016107b590611ca1565b600e805460ff60a81b1916600160a81b831515021790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea9061114a908390611b29565b60405180910390a150565b61115d611283565b6001600160a01b031661116e610e6a565b6001600160a01b0316146111945760405162461bcd60e51b81526004016107b590611ca1565b61119c61087d565b6111a790600a611f1a565b6111b19082611feb565b60105550565b6111bf611283565b6001600160a01b03166111d0610e6a565b6001600160a01b0316146111f65760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03811661121c5760405162461bcd60e51b81526004016107b590611bca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006108768284611e9c565b3390565b6001600160a01b0383166112ad5760405162461bcd60e51b81526004016107b590611dd1565b6001600160a01b0382166112d35760405162461bcd60e51b81526004016107b590611c10565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061132e908590611e15565b60405180910390a3505050565b6001600160a01b0383166113615760405162461bcd60e51b81526004016107b590611d4b565b6001600160a01b0382166113875760405162461bcd60e51b81526004016107b590611b87565b600081116113a75760405162461bcd60e51b81526004016107b590611cd6565b6113af610e6a565b6001600160a01b0316836001600160a01b0316141580156113e957506113d3610e6a565b6001600160a01b0316826001600160a01b031614155b15611456576001600160a01b03831660009081526009602052604090205460ff168061142d57506001600160a01b03821660009081526009602052604090205460ff165b8061143a57506010548111155b6114565760405162461bcd60e51b81526004016107b590611c52565b61145e610e6a565b6001600160a01b0316836001600160a01b03161415801561148857506001600160a01b0382163014155b80156114a25750600e546001600160a01b03838116911614155b156115055760006114b283610dc0565b6001600160a01b03841660009081526008602052604090205490915060ff16806114e75750600f546114e48383611e9c565b11155b6115035760405162461bcd60e51b81526004016107b590611d90565b505b600061151030610dc0565b601154909150811080159081906115315750600e54600160a01b900460ff16155b801561154b5750600e546001600160a01b03868116911614155b80156115605750600e54600160a81b900460ff165b15611573576011549150611573826116a0565b6001600160a01b03851660009081526007602052604090205460019060ff16806115b557506001600160a01b03851660009081526007602052604090205460ff165b156115cd576115c5868686611849565b50600061166c565b600e546001600160a01b038781169116141561162f57600061160560646115ff600b548861195e90919063ffffffff16565b9061196a565b90506116118582611976565b945061161e873083611849565b611629878787611849565b5061166c565b600e546001600160a01b038681169116141561166157600061160560646115ff600c548861195e90919063ffffffff16565b61166c868686611849565b505050505050565b600081848411156116985760405162461bcd60e51b81526004016107b59190611b34565b505050900390565b600e805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106116f657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561174a57600080fd5b505afa15801561175e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178291906119a3565b816001815181106117a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546117c99130911684611287565b600d54600a5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261180692879260009288929116904290600401611e1e565b600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6001600160a01b03831661186f5760405162461bcd60e51b81526004016107b590611d4b565b6001600160a01b0382166118955760405162461bcd60e51b81526004016107b590611b87565b6118a0838383611982565b6118dd81604051806060016040528060268152602001612099602691396001600160a01b0386166000908152600260205260409020549190611674565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461190c9082611277565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061132e908590611e15565b60006108768284611feb565b60006108768284611eb4565b6000610876828461200a565b505050565b600060208284031215611998578081fd5b813561087681612072565b6000602082840312156119b4578081fd5b815161087681612072565b600080604083850312156119d1578081fd5b82356119dc81612072565b915060208301356119ec81612072565b809150509250929050565b600080600060608486031215611a0b578081fd5b8335611a1681612072565b92506020840135611a2681612072565b929592945050506040919091013590565b60008060408385031215611a49578182fd5b8235611a5481612072565b915060208301356119ec8161208a565b60008060408385031215611a76578182fd5b8235611a8181612072565b946020939093013593505050565b600060208284031215611aa0578081fd5b81356108768161208a565b600060208284031215611abc578081fd5b81516108768161208a565b600060208284031215611ad8578081fd5b5035919050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015611b6057858101830151858201604001528201611b44565b81811115611b715783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602f908201527f45524332303a205472616e7366657220616d6f756e742065786365656473207460408201526e34329036b0bc2a3c20b6b7bab73a1760891b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526012908201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526021908201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6040820152606760f81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611e6d5784516001600160a01b031683529383019391830191600101611e48565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115611eaf57611eaf61205c565b500190565b600082611ecf57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611611ee65750611f11565b818704821115611ef857611ef861205c565b80861615611f0557918102915b9490941c938002611ed7565b94509492505050565b600061087660001960ff851684600082611f3657506001610876565b81611f4357506000610876565b8160018114611f595760028114611f6357611f90565b6001915050610876565b60ff841115611f7457611f7461205c565b6001841b915084821115611f8a57611f8a61205c565b50610876565b5060208310610133831016604e8410600b8410161715611fc3575081810a83811115611fbe57611fbe61205c565b610876565b611fd08484846001611ed4565b808604821115611fe257611fe261205c565b02949350505050565b60008160001904831182151516156120055761200561205c565b500290565b60008282101561201c5761201c61205c565b500390565b60028104600182168061203557607f821691505b6020821081141561205657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461208757600080fd5b50565b801515811461208757600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204116af1015950597e5887c1d39aaf9cb9fad4b580d6b843b8982e1b89b40549464736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806368d71cbe1161012e578063a457c2d7116100ab578063d4a5af841161006f578063d4a5af8414610632578063dd62ed3e14610647578063ea50cf4e14610667578063ec28438a14610687578063f2fde38b146106a75761023b565b8063a457c2d7146105a8578063a9059cbb146105c8578063b425bac3146105e8578063c9cf7789146105fd578063ca14a523146106125761023b565b80638da5cb5b116100f25780638da5cb5b1461051e5780638e4d62af146105335780639063d77d1461055357806395d89b41146105735780639904a1c3146105885761023b565b806368d71cbe146104945780636dd3d39f146104b457806370a08231146104d4578063715018a6146104f45780637d1db4a5146105095761023b565b80633d0dbec0116101bc57806349bd5a5e1161018057806349bd5a5e1461040a5780635342acb41461041f57806355874a791461043f5780635d729d8c1461045f578063620158521461047f5761023b565b80633d0dbec01461038057806341cb87fc14610395578063456b10a5146103b557806347de4c5d146103d557806348eb61b6146103ea5761023b565b806318160ddd1161020357806318160ddd146102dc57806323b872dd146102fe578063313ce5671461031e57806339509351146103405780633a9e00de146103605761023b565b806306fdde0314610240578063095ea7b31461026b578063120a0612146102985780631694505e146102ba5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102556106c7565b6040516102629190611b34565b60405180910390f35b34801561027757600080fd5b5061028b610286366004611a64565b610759565b6040516102629190611b29565b3480156102a457600080fd5b506102b86102b3366004611987565b610776565b005b3480156102c657600080fd5b506102cf6107e0565b6040516102629190611ae2565b3480156102e857600080fd5b506102f16107ef565b6040516102629190611e15565b34801561030a57600080fd5b5061028b6103193660046119f7565b6107f5565b34801561032a57600080fd5b5061033361087d565b6040516102629190611e8e565b34801561034c57600080fd5b5061028b61035b366004611a64565b610882565b34801561036c57600080fd5b506102b861037b366004611ac7565b6108d0565b34801561038c57600080fd5b5061028b610932565b3480156103a157600080fd5b506102b86103b0366004611987565b610942565b3480156103c157600080fd5b506102b86103d0366004611ac7565b610b18565b3480156103e157600080fd5b506102f1610bdc565b3480156103f657600080fd5b506102b8610405366004611a37565b610be2565b34801561041657600080fd5b506102cf610c4c565b34801561042b57600080fd5b5061028b61043a366004611987565b610c5b565b34801561044b57600080fd5b5061028b61045a366004611987565b610c79565b34801561046b57600080fd5b5061028b61047a366004611a64565b610c97565b34801561048b57600080fd5b506102f1610d58565b3480156104a057600080fd5b506102b86104af366004611ac7565b610d5e565b3480156104c057600080fd5b5061028b6104cf366004611987565b610da2565b3480156104e057600080fd5b506102f16104ef366004611987565b610dc0565b34801561050057600080fd5b506102b8610ddb565b34801561051557600080fd5b506102f1610e64565b34801561052a57600080fd5b506102cf610e6a565b34801561053f57600080fd5b506102b861054e366004611a37565b610e79565b34801561055f57600080fd5b506102b861056e366004611ac7565b610ee3565b34801561057f57600080fd5b50610255610f45565b34801561059457600080fd5b506102b86105a3366004611a37565b610f54565b3480156105b457600080fd5b5061028b6105c3366004611a64565b610fbe565b3480156105d457600080fd5b5061028b6105e3366004611a64565b611026565b3480156105f457600080fd5b506102cf61103a565b34801561060957600080fd5b506102f1611049565b34801561061e57600080fd5b506102b861062d366004611ac7565b61104f565b34801561063e57600080fd5b506102f1611093565b34801561065357600080fd5b506102f16106623660046119bf565b611099565b34801561067357600080fd5b506102b8610682366004611a8f565b6110c4565b34801561069357600080fd5b506102b86106a2366004611ac7565b611155565b3480156106b357600080fd5b506102b86106c2366004611987565b6111b7565b6060600580546106d690612021565b80601f016020809104026020016040519081016040528092919081815260200182805461070290612021565b801561074f5780601f106107245761010080835404028352916020019161074f565b820191906000526020600020905b81548152906001019060200180831161073257829003601f168201915b5050505050905090565b600061076d610766611283565b8484611287565b50600192915050565b61077e611283565b6001600160a01b031661078f610e6a565b6001600160a01b0316146107be5760405162461bcd60e51b81526004016107b590611ca1565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031681565b60045490565b600061080284848461133b565b6108728461080e611283565b61086d856040518060600160405280602881526020016120bf602891396001600160a01b038a1660009081526003602052604081209061084c611283565b6001600160a01b031681526020810191909152604001600020549190611674565b611287565b5060015b9392505050565b601290565b600061076d61088f611283565b8461086d85600360006108a0611283565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611277565b6108d8611283565b6001600160a01b03166108e9610e6a565b6001600160a01b03161461090f5760405162461bcd60e51b81526004016107b590611ca1565b61091761087d565b61092290600a611f1a565b61092c9082611feb565b600f5550565b600e54600160a81b900460ff1681565b61094a611283565b6001600160a01b031661095b610e6a565b6001600160a01b0316146109815760405162461bcd60e51b81526004016107b590611ca1565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156109bf57600080fd5b505afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f791906119a3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3f57600080fd5b505afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7791906119a3565b6040518363ffffffff1660e01b8152600401610a94929190611af6565b602060405180830381600087803b158015610aae57600080fd5b505af1158015610ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae691906119a3565b600e80546001600160a01b039283166001600160a01b031991821617909155600d805493909216921691909117905550565b610b20611283565b6001600160a01b0316610b31610e6a565b6001600160a01b031614610b575760405162461bcd60e51b81526004016107b590611ca1565b600080546040516001600160a01b03909116908390610b7590611adf565b60006040518083038185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b5050905080610bd85760405162461bcd60e51b81526004016107b590611d1f565b5050565b60115481565b610bea611283565b6001600160a01b0316610bfb610e6a565b6001600160a01b031614610c215760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600e546001600160a01b031681565b6001600160a01b031660009081526007602052604090205460ff1690565b6001600160a01b031660009081526009602052604090205460ff1690565b6000610ca1611283565b6001600160a01b0316610cb2610e6a565b6001600160a01b031614610cd85760405162461bcd60e51b81526004016107b590611ca1565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610d069033908690600401611b10565b602060405180830381600087803b158015610d2057600080fd5b505af1158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108769190611aab565b600b5481565b610d66611283565b6001600160a01b0316610d77610e6a565b6001600160a01b031614610d9d5760405162461bcd60e51b81526004016107b590611ca1565b600c55565b6001600160a01b031660009081526008602052604090205460ff1690565b6001600160a01b031660009081526002602052604090205490565b610de3611283565b6001600160a01b0316610df4610e6a565b6001600160a01b031614610e1a5760405162461bcd60e51b81526004016107b590611ca1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60105481565b6000546001600160a01b031690565b610e81611283565b6001600160a01b0316610e92610e6a565b6001600160a01b031614610eb85760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610eeb611283565b6001600160a01b0316610efc610e6a565b6001600160a01b031614610f225760405162461bcd60e51b81526004016107b590611ca1565b610f2a61087d565b610f3590600a611f1a565b610f3f9082611feb565b60115550565b6060600680546106d690612021565b610f5c611283565b6001600160a01b0316610f6d610e6a565b6001600160a01b031614610f935760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600061076d610fcb611283565b8461086d856040518060600160405280602581526020016120e76025913960036000610ff5611283565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611674565b600061076d611033611283565b848461133b565b600a546001600160a01b031681565b600c5481565b611057611283565b6001600160a01b0316611068610e6a565b6001600160a01b03161461108e5760405162461bcd60e51b81526004016107b590611ca1565b600b55565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6110cc611283565b6001600160a01b03166110dd610e6a565b6001600160a01b0316146111035760405162461bcd60e51b81526004016107b590611ca1565b600e805460ff60a81b1916600160a81b831515021790556040517f4a4d2d81da99ab5c8fa132c1c87d7b3cd070a00ab9b3baef07d19c615b035aea9061114a908390611b29565b60405180910390a150565b61115d611283565b6001600160a01b031661116e610e6a565b6001600160a01b0316146111945760405162461bcd60e51b81526004016107b590611ca1565b61119c61087d565b6111a790600a611f1a565b6111b19082611feb565b60105550565b6111bf611283565b6001600160a01b03166111d0610e6a565b6001600160a01b0316146111f65760405162461bcd60e51b81526004016107b590611ca1565b6001600160a01b03811661121c5760405162461bcd60e51b81526004016107b590611bca565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006108768284611e9c565b3390565b6001600160a01b0383166112ad5760405162461bcd60e51b81526004016107b590611dd1565b6001600160a01b0382166112d35760405162461bcd60e51b81526004016107b590611c10565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061132e908590611e15565b60405180910390a3505050565b6001600160a01b0383166113615760405162461bcd60e51b81526004016107b590611d4b565b6001600160a01b0382166113875760405162461bcd60e51b81526004016107b590611b87565b600081116113a75760405162461bcd60e51b81526004016107b590611cd6565b6113af610e6a565b6001600160a01b0316836001600160a01b0316141580156113e957506113d3610e6a565b6001600160a01b0316826001600160a01b031614155b15611456576001600160a01b03831660009081526009602052604090205460ff168061142d57506001600160a01b03821660009081526009602052604090205460ff165b8061143a57506010548111155b6114565760405162461bcd60e51b81526004016107b590611c52565b61145e610e6a565b6001600160a01b0316836001600160a01b03161415801561148857506001600160a01b0382163014155b80156114a25750600e546001600160a01b03838116911614155b156115055760006114b283610dc0565b6001600160a01b03841660009081526008602052604090205490915060ff16806114e75750600f546114e48383611e9c565b11155b6115035760405162461bcd60e51b81526004016107b590611d90565b505b600061151030610dc0565b601154909150811080159081906115315750600e54600160a01b900460ff16155b801561154b5750600e546001600160a01b03868116911614155b80156115605750600e54600160a81b900460ff165b15611573576011549150611573826116a0565b6001600160a01b03851660009081526007602052604090205460019060ff16806115b557506001600160a01b03851660009081526007602052604090205460ff165b156115cd576115c5868686611849565b50600061166c565b600e546001600160a01b038781169116141561162f57600061160560646115ff600b548861195e90919063ffffffff16565b9061196a565b90506116118582611976565b945061161e873083611849565b611629878787611849565b5061166c565b600e546001600160a01b038681169116141561166157600061160560646115ff600c548861195e90919063ffffffff16565b61166c868686611849565b505050505050565b600081848411156116985760405162461bcd60e51b81526004016107b59190611b34565b505050900390565b600e805460ff60a01b1916600160a01b17905560408051600280825260608201835260009260208301908036833701905050905030816000815181106116f657634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561174a57600080fd5b505afa15801561175e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178291906119a3565b816001815181106117a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546117c99130911684611287565b600d54600a5460405163791ac94760e01b81526001600160a01b039283169263791ac9479261180692879260009288929116904290600401611e1e565b600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b5050600e805460ff60a01b1916905550505050565b6001600160a01b03831661186f5760405162461bcd60e51b81526004016107b590611d4b565b6001600160a01b0382166118955760405162461bcd60e51b81526004016107b590611b87565b6118a0838383611982565b6118dd81604051806060016040528060268152602001612099602691396001600160a01b0386166000908152600260205260409020549190611674565b6001600160a01b03808516600090815260026020526040808220939093559084168152205461190c9082611277565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061132e908590611e15565b60006108768284611feb565b60006108768284611eb4565b6000610876828461200a565b505050565b600060208284031215611998578081fd5b813561087681612072565b6000602082840312156119b4578081fd5b815161087681612072565b600080604083850312156119d1578081fd5b82356119dc81612072565b915060208301356119ec81612072565b809150509250929050565b600080600060608486031215611a0b578081fd5b8335611a1681612072565b92506020840135611a2681612072565b929592945050506040919091013590565b60008060408385031215611a49578182fd5b8235611a5481612072565b915060208301356119ec8161208a565b60008060408385031215611a76578182fd5b8235611a8181612072565b946020939093013593505050565b600060208284031215611aa0578081fd5b81356108768161208a565b600060208284031215611abc578081fd5b81516108768161208a565b600060208284031215611ad8578081fd5b5035919050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015611b6057858101830151858201604001528201611b44565b81811115611b715783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602f908201527f45524332303a205472616e7366657220616d6f756e742065786365656473207460408201526e34329036b0bc2a3c20b6b7bab73a1760891b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526012908201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526021908201527f45524332303a2052656163686564206d61782077616c6c657420686f6c64696e6040820152606760f81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611e6d5784516001600160a01b031683529383019391830191600101611e48565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115611eaf57611eaf61205c565b500190565b600082611ecf57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611611ee65750611f11565b818704821115611ef857611ef861205c565b80861615611f0557918102915b9490941c938002611ed7565b94509492505050565b600061087660001960ff851684600082611f3657506001610876565b81611f4357506000610876565b8160018114611f595760028114611f6357611f90565b6001915050610876565b60ff841115611f7457611f7461205c565b6001841b915084821115611f8a57611f8a61205c565b50610876565b5060208310610133831016604e8410600b8410161715611fc3575081810a83811115611fbe57611fbe61205c565b610876565b611fd08484846001611ed4565b808604821115611fe257611fe261205c565b02949350505050565b60008160001904831182151516156120055761200561205c565b500290565b60008282101561201c5761201c61205c565b500390565b60028104600182168061203557607f821691505b6020821081141561205657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461208757600080fd5b50565b801515811461208757600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204116af1015950597e5887c1d39aaf9cb9fad4b580d6b843b8982e1b89b40549464736f6c63430008000033

Deployed Bytecode Sourcemap

30059:9026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12006:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14391:181;;;;;;;;;;-1:-1:-1;14391:181:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34503:115::-;;;;;;;;;;-1:-1:-1;34503:115:0;;;;;:::i;:::-;;:::i;:::-;;30504:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13225:116::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15098:387::-;;;;;;;;;;-1:-1:-1;15098:387:0;;;;;:::i;:::-;;:::i;13045:101::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15935:230::-;;;;;;;;;;-1:-1:-1;15935:230:0;;;;;:::i;:::-;;:::i;33922:153::-;;;;;;;;;;-1:-1:-1;33922:153:0;;;;;:::i;:::-;;:::i;30627:40::-;;;;;;;;;;;;;:::i;34809:334::-;;;;;;;;;;-1:-1:-1;34809:334:0;;;;;:::i;:::-;;:::i;35498:252::-;;;;;;;;;;-1:-1:-1;35498:252:0;;;;;:::i;:::-;;:::i;30759:42::-;;;;;;;;;;;;;:::i;33128:155::-;;;;;;;;;;-1:-1:-1;33128:155:0;;;;;:::i;:::-;;:::i;30556:28::-;;;;;;;;;;;;;:::i;33466:131::-;;;;;;;;;;-1:-1:-1;33466:131:0;;;;;:::i;:::-;;:::i;33763:147::-;;;;;;;;;;-1:-1:-1;33763:147:0;;;;;:::i;:::-;;:::i;35801:189::-;;;;;;;;;;-1:-1:-1;35801:189:0;;;;;:::i;:::-;;:::i;30417:29::-;;;;;;;;;;;;;:::i;34231:126::-;;;;;;;;;;-1:-1:-1;34231:126:0;;;;;:::i;:::-;;:::i;33609:142::-;;;;;;;;;;-1:-1:-1;33609:142:0;;;;;:::i;:::-;;:::i;13418:135::-;;;;;;;;;;-1:-1:-1;13418:135:0;;;;;:::i;:::-;;:::i;10174:160::-;;;;;;;;;;;;;:::i;30721:27::-;;;;;;;;;;;;;:::i;9907:95::-;;;;;;;;;;;;;:::i;32970:146::-;;;;;;;;;;-1:-1:-1;32970:146:0;;;;;:::i;:::-;;:::i;34640:157::-;;;;;;;;;;-1:-1:-1;34640:157:0;;;;;:::i;:::-;;:::i;12250:112::-;;;;;;;;;;;;;:::i;33295:159::-;;;;;;;;;;-1:-1:-1;33295:159:0;;;;;:::i;:::-;;:::i;16715:281::-;;;;;;;;;;-1:-1:-1;16715:281:0;;;;;:::i;:::-;;:::i;13795:187::-;;;;;;;;;;-1:-1:-1;13795:187:0;;;;;:::i;:::-;;:::i;30368:32::-;;;;;;;;;;;;;:::i;30459:31::-;;;;;;;;;;;;;:::i;34369:124::-;;;;;;;;;;-1:-1:-1;34369:124:0;;;;;:::i;:::-;;:::i;30678:32::-;;;;;;;;;;;;;:::i;14059:159::-;;;;;;;;;;-1:-1:-1;14059:159:0;;;;;:::i;:::-;;:::i;35155:185::-;;;;;;;;;;-1:-1:-1;35155:185:0;;;;;:::i;:::-;;:::i;34087:130::-;;;;;;;;;;-1:-1:-1;34087:130:0;;;;;:::i;:::-;;:::i;10348:260::-;;;;;;;;;;-1:-1:-1;10348:260:0;;;;;:::i;:::-;;:::i;12006:108::-;12060:13;12097:5;12090:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12006:108;:::o;14391:181::-;14474:4;14495:39;14504:12;:10;:12::i;:::-;14518:7;14527:6;14495:8;:39::i;:::-;-1:-1:-1;14556:4:0;14391:181;;;;:::o;34503:115::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;;;;;;;;;34581:17:::1;:25:::0;;-1:-1:-1;;;;;;34581:25:0::1;-1:-1:-1::0;;;;;34581:25:0;;;::::1;::::0;;;::::1;::::0;;34503:115::o;30504:41::-;;;-1:-1:-1;;;;;30504:41:0;;:::o;13225:116::-;13317:12;;13225:116;:::o;15098:387::-;15254:4;15275:36;15285:6;15293:9;15304:6;15275:9;:36::i;:::-;15326:121;15335:6;15343:12;:10;:12::i;:::-;15357:89;15395:6;15357:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15357:19:0;;;;;;:11;:19;;;;;;15377:12;:10;:12::i;:::-;-1:-1:-1;;;;;15357:33:0;;;;;;;;;;;;-1:-1:-1;15357:33:0;;;:89;:37;:89::i;:::-;15326:8;:121::i;:::-;-1:-1:-1;15469:4:0;15098:387;;;;;;:::o;13045:101::-;13132:2;13045:101;:::o;15935:230::-;16023:4;16044:83;16053:12;:10;:12::i;:::-;16067:7;16076:50;16115:10;16076:11;:25;16088:12;:10;:12::i;:::-;-1:-1:-1;;;;;16076:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16076:25:0;;;:34;;;;;;;;;;;:38;:50::i;33922:153::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34053:10:::1;:8;:10::i;:::-;34048:15;::::0;:2:::1;:15;:::i;:::-;34028:35;::::0;:17;:35:::1;:::i;:::-;34008:17;:55:::0;-1:-1:-1;33922:153:0:o;30627:40::-;;;-1:-1:-1;;;30627:40:0;;;;;:::o;34809:334::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34888:35:::1;34945:9;34888:67;;35004:16;-1:-1:-1::0;;;;;35004:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34986:56:0::1;;35051:4;35058:16;-1:-1:-1::0;;;;;35058:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34986:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34970:13;:112:::0;;-1:-1:-1;;;;;34970:112:0;;::::1;-1:-1:-1::0;;;;;;34970:112:0;;::::1;;::::0;;;35097:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;34809:334:0:o;35498:252::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;35636:9:::1;35650:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;35650:6:0;;::::1;::::0;35669;;35650:30:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35635:45;;;35703:4;35695:35;;;;-1:-1:-1::0;;;35695:35:0::1;;;;;;;:::i;:::-;10141:1;35498:252:::0;:::o;30759:42::-;;;;:::o;33128:155::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33230:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;33230:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33128:155::o;30556:28::-;;;-1:-1:-1;;;;;30556:28:0;;:::o;33466:131::-;-1:-1:-1;;;;;33558:27:0;33530:4;33558:27;;;:18;:27;;;;;;;;;33466:131::o;33763:147::-;-1:-1:-1;;;;;33863:35:0;33835:4;33863:35;;;:26;:35;;;;;;;;;33763:147::o;35801:189::-;35898:12;10077;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;35929:49:::1;::::0;-1:-1:-1;;;35929:49:0;;-1:-1:-1;;;;;35929:29:0;::::1;::::0;::::1;::::0;:49:::1;::::0;35959:10:::1;::::0;35971:6;;35929:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30417:29::-:0;;;;:::o;34231:126::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34327:11:::1;:18:::0;34231:126::o;33609:142::-;-1:-1:-1;;;;;33706:33:0;33679:4;33706:33;;;:24;:33;;;;;;;;;33609:142::o;13418:135::-;-1:-1:-1;;;;;13523:18:0;13492:7;13523:18;;;:9;:18;;;;;;;13418:135::o;10174:160::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;10285:1:::1;10269:6:::0;;10248:40:::1;::::0;-1:-1:-1;;;;;10269:6:0;;::::1;::::0;10248:40:::1;::::0;10285:1;;10248:40:::1;10320:1;10303:19:::0;;-1:-1:-1;;;;;;10303:19:0::1;::::0;;10174:160::o;30721:27::-;;;;:::o;9907:95::-;9953:7;9984:6;-1:-1:-1;;;;;9984:6:0;9907:95;:::o;32970:146::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33069:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33069:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32970:146::o;34640:157::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34775:10:::1;:8;:10::i;:::-;34769:16;::::0;:2:::1;:16;:::i;:::-;34760:25;::::0;:6;:25:::1;:::i;:::-;34730:27;:55:::0;-1:-1:-1;34640:157:0:o;12250:112::-;12306:13;12343:7;12336:14;;;;;:::i;33295:159::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33399:35:0;;;::::1;;::::0;;;:26:::1;:35;::::0;;;;:43;;-1:-1:-1;;33399:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33295:159::o;16715:281::-;16808:4;16829:129;16838:12;:10;:12::i;:::-;16852:7;16861:96;16900:15;16861:96;;;;;;;;;;;;;;;;;:11;:25;16873:12;:10;:12::i;:::-;-1:-1:-1;;;;;16861:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16861:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;13795:187::-;13881:4;13902:42;13912:12;:10;:12::i;:::-;13926:9;13937:6;13902:9;:42::i;30368:32::-;;;-1:-1:-1;;;;;30368:32:0;;:::o;30459:31::-;;;;:::o;34369:124::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34464:10:::1;:17:::0;34369:124::o;30678:32::-;;;;:::o;14059:159::-;-1:-1:-1;;;;;14179:18:0;;;14148:7;14179:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14059:159::o;35155:185::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;35238:21:::1;:32:::0;;-1:-1:-1;;;;35238:32:0::1;-1:-1:-1::0;;;35238:32:0;::::1;;;;::::0;;35290:38:::1;::::0;::::1;::::0;::::1;::::0;35238:32;;35290:38:::1;:::i;:::-;;;;;;;;35155:185:::0;:::o;34087:130::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;34196:10:::1;:8;:10::i;:::-;34191:15;::::0;:2:::1;:15;:::i;:::-;34177:29;::::0;:11;:29:::1;:::i;:::-;34162:12;:44:::0;-1:-1:-1;34087:130:0:o;10348:260::-;10077:12;:10;:12::i;:::-;-1:-1:-1;;;;;10066:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;10066:23:0;;10058:68;;;;-1:-1:-1;;;10058:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10441:22:0;::::1;10433:73;;;;-1:-1:-1::0;;;10433:73:0::1;;;;;;;:::i;:::-;10547:6;::::0;;10526:38:::1;::::0;-1:-1:-1;;;;;10526:38:0;;::::1;::::0;10547:6;::::1;::::0;10526:38:::1;::::0;::::1;10579:6;:17:::0;;-1:-1:-1;;;;;;10579:17:0::1;-1:-1:-1::0;;;;;10579:17:0;;;::::1;::::0;;;::::1;::::0;;10348:260::o;4193:106::-;4251:7;4282:5;4286:1;4282;:5;:::i;5573:106::-;5657:10;5573:106;:::o;20166:416::-;-1:-1:-1;;;;;20322:19:0;;20314:68;;;;-1:-1:-1;;;20314:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20405:21:0;;20397:68;;;;-1:-1:-1;;;20397:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20482:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;20538:32;;;;;20512:6;;20538:32;:::i;:::-;;;;;;;;20166:416;;;:::o;36006:2496::-;-1:-1:-1;;;;;36158:18:0;;36150:68;;;;-1:-1:-1;;;36150:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36241:16:0;;36233:64;;;;-1:-1:-1;;;36233:64:0;;;;;;;:::i;:::-;36329:1;36320:6;:10;36312:64;;;;-1:-1:-1;;;36312:64:0;;;;;;;:::i;:::-;36409:7;:5;:7::i;:::-;-1:-1:-1;;;;;36401:15:0;:4;-1:-1:-1;;;;;36401:15:0;;;:32;;;;;36426:7;:5;:7::i;:::-;-1:-1:-1;;;;;36420:13:0;:2;-1:-1:-1;;;;;36420:13:0;;;36401:32;36397:253;;;-1:-1:-1;;;;;36457:32:0;;;;;;:26;:32;;;;;;;;;:66;;-1:-1:-1;;;;;;36493:30:0;;;;;;:26;:30;;;;;;;;36457:66;:110;;;;36555:12;;36545:6;:22;;36457:110;36448:202;;;;-1:-1:-1;;;36448:202:0;;;;;;;:::i;:::-;36707:7;:5;:7::i;:::-;-1:-1:-1;;;;;36699:15:0;:4;-1:-1:-1;;;;;36699:15:0;;;:51;;;;-1:-1:-1;;;;;;36731:19:0;;36745:4;36731:19;;36699:51;:87;;;;-1:-1:-1;36773:13:0;;-1:-1:-1;;;;;36767:19:0;;;36773:13;;36767:19;;36699:87;36681:343;;;36814:22;36839:13;36849:2;36839:9;:13::i;:::-;-1:-1:-1;;;;;36875:28:0;;;;;;:24;:28;;;;;;36814:38;;-1:-1:-1;36875:28:0;;;:78;;-1:-1:-1;36935:17:0;;36908:23;36925:6;36908:14;:23;:::i;:::-;:44;;36875:78;36867:145;;;;-1:-1:-1;;;36867:145:0;;;;;;;:::i;:::-;36681:343;;37046:28;37077:24;37095:4;37077:9;:24::i;:::-;37168:27;;37046:55;;-1:-1:-1;37144:51:0;;;;;;;37232:57;;-1:-1:-1;37273:16:0;;-1:-1:-1;;;37273:16:0;;;;37272:17;37232:57;:99;;;;-1:-1:-1;37318:13:0;;-1:-1:-1;;;;;37310:21:0;;;37318:13;;37310:21;;37232:99;:141;;;;-1:-1:-1;37352:21:0;;-1:-1:-1;;;37352:21:0;;;;37232:141;37210:322;;;37431:27;;37408:50;;37477:39;37495:20;37477:17;:39::i;:::-;-1:-1:-1;;;;;37582:24:0;;37548:12;37582:24;;;:18;:24;;;;;;37563:4;;37582:24;;;:50;;-1:-1:-1;;;;;;37610:22:0;;;;;;:18;:22;;;;;;;;37582:50;37578:911;;;37649:33;37665:4;37671:2;37675:6;37649:15;:33::i;:::-;-1:-1:-1;37707:5:0;37578:911;;;37759:13;;-1:-1:-1;;;;;37751:21:0;;;37759:13;;37751:21;37747:721;;;37817:17;37837:31;37864:3;37837:22;37848:10;;37837:6;:10;;:22;;;;:::i;:::-;:26;;:31::i;:::-;37817:51;-1:-1:-1;37897:21:0;:6;37817:51;37897:10;:21::i;:::-;37889:29;;37937:47;37953:4;37967;37974:9;37937:15;:47::i;:::-;38003:33;38019:4;38025:2;38029:6;38003:15;:33::i;:::-;37747:721;;;;38070:13;;-1:-1:-1;;;;;38064:19:0;;;38070:13;;38064:19;38060:408;;;38129:17;38149:32;38177:3;38149:23;38160:11;;38149:6;:10;;:23;;;;:::i;38060:408::-;38419:33;38435:4;38441:2;38445:6;38419:15;:33::i;:::-;36006:2496;;;;;;:::o;4805:226::-;4891:7;4960:12;4952:6;;;;4944:29;;;;-1:-1:-1;;;4944:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4999:5:0;;;4805:226::o;38514:564::-;31142:16;:23;;-1:-1:-1;;;;31142:23:0;-1:-1:-1;;;31142:23:0;;;38621:16:::1;::::0;;38635:1:::1;38621:16:::0;;;;;::::1;::::0;;-1:-1:-1;;38621:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38621:16:0::1;38597:40;;38670:4;38652;38657:1;38652:7;;;;;;-1:-1:-1::0;;;38652:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;38652:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;38700:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;38700:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;38652:7;;38700:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38690:4;38695:1;38690:7;;;;;;-1:-1:-1::0;;;38690:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;38690:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;38769:15:::1;::::0;38737:62:::1;::::0;38754:4:::1;::::0;38769:15:::1;38787:11:::0;38737:8:::1;:62::i;:::-;38814:15;::::0;39000:17:::1;::::0;38814:252:::1;::::0;-1:-1:-1;;;38814:252:0;;-1:-1:-1;;;;;38814:15:0;;::::1;::::0;:66:::1;::::0;:252:::1;::::0;38899:11;;38814:15:::1;::::0;38977:4;;39000:17;::::1;::::0;39036:15:::1;::::0;38814:252:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31196:16:0;:24;;-1:-1:-1;;;;31196:24:0;;;-1:-1:-1;;;;38514:564:0:o;17533:617::-;-1:-1:-1;;;;;17693:20:0;;17685:70;;;;-1:-1:-1;;;17685:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17778:23:0;;17770:71;;;;-1:-1:-1;;;17770:71:0;;;;;;;:::i;:::-;17858:47;17879:6;17887:9;17898:6;17858:20;:47::i;:::-;17942:71;17964:6;17942:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17942:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;17922:17:0;;;;;;;:9;:17;;;;;;:91;;;;18051:20;;;;;;;:32;;18076:6;18051:24;:32::i;:::-;-1:-1:-1;;;;;18028:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18103:35;;;;;;;;;;18131:6;;18103:35;:::i;4433:106::-;4491:7;4522:5;4526:1;4522;:5;:::i;4559:106::-;4617:7;4648:5;4652:1;4648;:5;:::i;4313:106::-;4371:7;4402:5;4406:1;4402;:5;:::i;21232:141::-;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:396::-;;;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:33;1665:5;1638:33;:::i;:::-;1690:5;-1:-1:-1;1747:2:1;1732:18;;1719:32;1760;1719;1760;:::i;1829:327::-;;;1958:2;1946:9;1937:7;1933:23;1929:32;1926:2;;;1979:6;1971;1964:22;1926:2;2023:9;2010:23;2042:33;2069:5;2042:33;:::i;:::-;2094:5;2146:2;2131:18;;;;2118:32;;-1:-1:-1;;;1916:240:1:o;2161:253::-;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;2335:9;2322:23;2354:30;2378:5;2354:30;:::i;2419:257::-;;2539:2;2527:9;2518:7;2514:23;2510:32;2507:2;;;2560:6;2552;2545:22;2507:2;2597:9;2591:16;2616:30;2640:5;2616:30;:::i;2681:190::-;;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2814:6;2806;2799:22;2761:2;-1:-1:-1;2842:23:1;;2751:120;-1:-1:-1;2751:120:1:o;2876:205::-;3076:3;3067:14::o;3086:203::-;-1:-1:-1;;;;;3250:32:1;;;;3232:51;;3220:2;3205:18;;3187:102::o;3294:304::-;-1:-1:-1;;;;;3524:15:1;;;3506:34;;3576:15;;3571:2;3556:18;;3549:43;3456:2;3441:18;;3423:175::o;3603:274::-;-1:-1:-1;;;;;3795:32:1;;;;3777:51;;3859:2;3844:18;;3837:34;3765:2;3750:18;;3732:145::o;3882:187::-;4047:14;;4040:22;4022:41;;4010:2;3995:18;;3977:92::o;4309:603::-;;4450:2;4479;4468:9;4461:21;4511:6;4505:13;4554:6;4549:2;4538:9;4534:18;4527:34;4579:4;4592:140;4606:6;4603:1;4600:13;4592:140;;;4701:14;;;4697:23;;4691:30;4667:17;;;4686:2;4663:26;4656:66;4621:10;;4592:140;;;4750:6;4747:1;4744:13;4741:2;;;4820:4;4815:2;4806:6;4795:9;4791:22;4787:31;4780:45;4741:2;-1:-1:-1;4896:2:1;4875:15;-1:-1:-1;;4871:29:1;4856:45;;;;4903:2;4852:54;;4430:482;-1:-1:-1;;;4430:482:1:o;4917:399::-;5119:2;5101:21;;;5158:2;5138:18;;;5131:30;5197:34;5192:2;5177:18;;5170:62;-1:-1:-1;;;5263:2:1;5248:18;;5241:33;5306:3;5291:19;;5091:225::o;5321:402::-;5523:2;5505:21;;;5562:2;5542:18;;;5535:30;5601:34;5596:2;5581:18;;5574:62;-1:-1:-1;;;5667:2:1;5652:18;;5645:36;5713:3;5698:19;;5495:228::o;5728:398::-;5930:2;5912:21;;;5969:2;5949:18;;;5942:30;6008:34;6003:2;5988:18;;5981:62;-1:-1:-1;;;6074:2:1;6059:18;;6052:32;6116:3;6101:19;;5902:224::o;6131:411::-;6333:2;6315:21;;;6372:2;6352:18;;;6345:30;6411:34;6406:2;6391:18;;6384:62;-1:-1:-1;;;6477:2:1;6462:18;;6455:45;6532:3;6517:19;;6305:237::o;6547:356::-;6749:2;6731:21;;;6768:18;;;6761:30;6827:34;6822:2;6807:18;;6800:62;6894:2;6879:18;;6721:182::o;6908:405::-;7110:2;7092:21;;;7149:2;7129:18;;;7122:30;7188:34;7183:2;7168:18;;7161:62;-1:-1:-1;;;7254:2:1;7239:18;;7232:39;7303:3;7288:19;;7082:231::o;7318:342::-;7520:2;7502:21;;;7559:2;7539:18;;;7532:30;-1:-1:-1;;;7593:2:1;7578:18;;7571:48;7651:2;7636:18;;7492:168::o;7665:401::-;7867:2;7849:21;;;7906:2;7886:18;;;7879:30;7945:34;7940:2;7925:18;;7918:62;-1:-1:-1;;;8011:2:1;7996:18;;7989:35;8056:3;8041:19;;7839:227::o;8071:397::-;8273:2;8255:21;;;8312:2;8292:18;;;8285:30;8351:34;8346:2;8331:18;;8324:62;-1:-1:-1;;;8417:2:1;8402:18;;8395:31;8458:3;8443:19;;8245:223::o;8473:400::-;8675:2;8657:21;;;8714:2;8694:18;;;8687:30;8753:34;8748:2;8733:18;;8726:62;-1:-1:-1;;;8819:2:1;8804:18;;8797:34;8863:3;8848:19;;8647:226::o;8878:177::-;9024:25;;;9012:2;8997:18;;8979:76::o;9060:983::-;;9370:3;9359:9;9355:19;9401:6;9390:9;9383:25;9427:2;9465:6;9460:2;9449:9;9445:18;9438:34;9508:3;9503:2;9492:9;9488:18;9481:31;9532:6;9567;9561:13;9598:6;9590;9583:22;9636:3;9625:9;9621:19;9614:26;;9675:2;9667:6;9663:15;9649:29;;9696:4;9709:195;9723:6;9720:1;9717:13;9709:195;;;9788:13;;-1:-1:-1;;;;;9784:39:1;9772:52;;9879:15;;;;9844:12;;;;9820:1;9738:9;9709:195;;;-1:-1:-1;;;;;;;9960:32:1;;;;9955:2;9940:18;;9933:60;-1:-1:-1;;;10024:3:1;10009:19;10002:35;9921:3;9331:712;-1:-1:-1;;;9331:712:1:o;10048:184::-;10220:4;10208:17;;;;10190:36;;10178:2;10163:18;;10145:87::o;10237:128::-;;10308:1;10304:6;10301:1;10298:13;10295:2;;;10314:18;;:::i;:::-;-1:-1:-1;10350:9:1;;10285:80::o;10370:217::-;;10436:1;10426:2;;-1:-1:-1;;;10461:31:1;;10515:4;10512:1;10505:15;10543:4;10468:1;10533:15;10426:2;-1:-1:-1;10572:9:1;;10416:171::o;10592:453::-;10688:6;10711:5;10725:314;10774:1;10811:2;10801:8;10798:16;10788:2;;10818:5;;;10788:2;10859:4;10854:3;10850:14;10844:4;10841:24;10838:2;;;10868:18;;:::i;:::-;10918:2;10908:8;10904:17;10901:2;;;10933:16;;;;10901:2;11012:17;;;;;10972:15;;10725:314;;;10669:376;;;;;;;:::o;11050:148::-;;11137:55;-1:-1:-1;;11178:4:1;11164:19;;11158:4;11203:922;11287:8;11277:2;;-1:-1:-1;11328:1:1;11342:5;;11277:2;11376:4;11366:2;;-1:-1:-1;11413:1:1;11427:5;;11366:2;11458:4;11476:1;11471:59;;;;11544:1;11539:183;;;;11451:271;;11471:59;11501:1;11492:10;;11515:5;;;11539:183;11576:3;11566:8;11563:17;11560:2;;;11583:18;;:::i;:::-;11639:1;11629:8;11625:16;11616:25;;11667:3;11660:5;11657:14;11654:2;;;11674:18;;:::i;:::-;11707:5;;;11451:271;;11806:2;11796:8;11793:16;11787:3;11781:4;11778:13;11774:36;11768:2;11758:8;11755:16;11750:2;11744:4;11741:12;11737:35;11734:77;11731:2;;;-1:-1:-1;11843:19:1;;;11878:14;;;11875:2;;;11895:18;;:::i;:::-;11928:5;;11731:2;11975:42;12013:3;12003:8;11997:4;11994:1;11975:42;:::i;:::-;12050:6;12045:3;12041:16;12032:7;12029:29;12026:2;;;12061:18;;:::i;:::-;12099:20;;11267:858;-1:-1:-1;;;;11267:858:1:o;12130:168::-;;12236:1;12232;12228:6;12224:14;12221:1;12218:21;12213:1;12206:9;12199:17;12195:45;12192:2;;;12243:18;;:::i;:::-;-1:-1:-1;12283:9:1;;12182:116::o;12303:125::-;;12371:1;12368;12365:8;12362:2;;;12376:18;;:::i;:::-;-1:-1:-1;12413:9:1;;12352:76::o;12433:380::-;12518:1;12508:12;;12565:1;12555:12;;;12576:2;;12630:4;12622:6;12618:17;12608:27;;12576:2;12683;12675:6;12672:14;12652:18;12649:38;12646:2;;;12729:10;12724:3;12720:20;12717:1;12710:31;12764:4;12761:1;12754:15;12792:4;12789:1;12782:15;12646:2;;12488:325;;;:::o;12818:127::-;12879:10;12874:3;12870:20;12867:1;12860:31;12910:4;12907:1;12900:15;12934:4;12931:1;12924:15;12950:133;-1:-1:-1;;;;;13027:31:1;;13017:42;;13007:2;;13073:1;13070;13063:12;13007:2;12997:86;:::o;13088:120::-;13176:5;13169:13;13162:21;13155:5;13152:32;13142:2;;13198:1;13195;13188:12

Swarm Source

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