ETH Price: $3,281.03 (-0.56%)

Token

BIT (BIT)
 

Overview

Max Total Supply

10,000,000 BIT

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 BIT

Value
$0.00
0xb5b5af839e3255c99c22049d4ba7ef6f24cb71cf
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:
BIT

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 9: BIT.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;


//                                     %%%%%%%%%%%%%%%                                   
//                             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                           
//                       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                     
//                   %%%%%%%%%%%%%%%%%%%%#+-=-*#%%%%%%%%%%%%%%%%%%%%%%%%                 
//                %%%%%%%%%%%%%%%%%%%%#--*%%%%%+:=%%%%%%%%%%%%%%%%%%%%%%%%%              
//             %%%%%%%%%%%%%%%%%%%%+-=#%%%%%%%%%%%*--*%%%%%%%%%%%%%%%%%%%%%%%%           
//           %%%%%%%%%%%%%%%%%%#+-+#%%%%%%%%%%%%%%%%%*=-+#%%%%%%%%%%%%%%%%%%%%%%         
//         %%%%%%%%%%%%%%%%%#--*%%%%%%%%%%%%%%%%%%%%%%%%#=:+%%%%%%%%%%%%%%%%%%%%%%       
//       %%%%%%%%%%%%%%%%+-=#%%%%%%%%%%%%%%%%%%%%%%%%%*--*%#-=%%%%%%%%%%%%%%%%%%%%%%     
//      %%%%%%%%%%%%%%%%=--+#%%%%%%%%%%%%%%%%%%%%%%+-=*%%%%%%*-#%%%%%%%%%%%%%%%%%%%%%    
//     %%%%%%%%%%%%%%%%%=+%%+-=#%%%%%%%%%%%%%%%#+-+#%%%%%%%%%%#-+%%%%%%%%%%%%%%%%%%%%%   
//    %%%%%%%%%%%%%%%%%%=+%%%%%#-:*%%%%%%%%%#-:*%%%%%%%%%%%%%%%%=*%%%%%%%%%%%%%%%%%%%%%  
//   %%%%%%%%%%%%%%%%%%%=+%%%%%%%#---=#%%+-=#%%%%%%%%%%%%%%%%%%%#:#%%%%%%%%%%%%%%%%%%%%% 
//  %%%%%%%%%%%%%%%%%%%%=+%%%%*=-*%%%%+-:*%%%%%%%%%%%%%%%%%%%%%%%=+%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%---*#%%#*-==-#%%%%%%%%%%%%%%%%%%%%%=+%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%-%%%+--+#%%%%==%%%%%%%%%%%%%%%%%%%#-*%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%-*=-*%%*==#%*--=%%%%%%%%%%%%%%%%%%=+%%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%=-*#%%%%#+:-#%%=+%%%%%%%%%%%%%#+-===%%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%%%%+:==-+%%-#%%#:#%%%%%%%%%#=-+%%%%*-%%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%%%*-=**--++-%%%#-+%%%%%%*-=*%%%%%%%%*-%%%%%%%%%%%%%%%%%%%%%
//  %%%%%%%%%%%%%%%%%%%%=+%%%%-:*%%%%%%%%%*==*=+%%#+-=#%%%%%%%%%%%%-+%%%%%%%%%%%%%%%%%%%%
//   %%%%%%%%%%%%%%%%%%%=+%%%%-%+-=#%%#+-=#%%%-+=-+%%%%%%%%%%%%%%%%+=%%%%%%%%%%%%%%%%%%% 
//    %%%%%%%%%%%%%%%%%%=+%%%%-%%%%*::=%%%%%#--#%%%%%%%%%%%%%%%%%%%+=%%%%%%%%%%%%%%%%%%  
//     %%%%%%%%%%%%%%%%%=+%%%%-%*-=*%%#=-*%%%==%%%%%%%%%%%%%%%%%%%#-#%%%%%%%%%%%%%%%%%   
//      %%%%%%%%%%%%%%%%=+%%%%--*%%%%%%%%*-#%%+=%%%%%%%%%%%%%%%%#+-#%%%%%%%%%%%%%%%%%    
//       %%%%%%%%%%%%%%%=-*%%%%%+:=#%%%%%%#-%%%=+%%%%%%%%%%%%%=:+%%%%%%%%%%%%%%%%%%%     
//         %%%%%%%%%%%%%%%#=-+#%%%%*--*%%%%-%%%#:#%%%%%%%%*--*%%%%%%%%%%%%%%%%%%%%       
//           %%%%%%%%%%%%%%%%#+-=#%%%%#=---*%%%%-*%%%%#+-=#%%%%%%%%%%%%%%%%%%%%%         
//             %%%%%%%%%%%%%%%%%%*--*%%%%%%%%%%#-*%#=-+%%%%%%%%%%%%%%%%%%%%%%%           
//                %%%%%%%%%%%%%%%%%%#=-+%%%%%%%+---*%%%%%%%%%%%%%%%%%%%%%%%              
//                   %%%%%%%%%%%%%%%%%%#*=-=+=-=*%%%%%%%%%%%%%%%%%%%%%%%                 
//                       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                     
//                             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                           
//                                     %%%%%%%%%%%%%%%                                   
                                                                                     
                                                                           
import {ERC20} from "./ERC20.sol";
import {Ownable} from "./Ownable.sol";
import {IUniswapV2Router02} from "./IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "./IUniswapV2Factory.sol";

contract BIT is Ownable, ERC20 {
    event RemovedLimits();
    event TradingEnabled();
    event SwapBack(uint256 amount);

    address public uniswapV2Pair;
    IUniswapV2Router02 immutable router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    uint256 SUPPLY = 10_000_000 * 10 ** 18;

    uint256 totalFee = 5;
    uint256 maxAmount = SUPPLY / 100;
    uint256 public maxWallet;

    address public marketingWallet;
    address public _BITFund;

    bool private tradingEnable;
    bool public limitsInEffect = true;
    uint256 public swapAt = SUPPLY / 1000;

    mapping(address => bool) public isExcludedFromFees;

    constructor() ERC20("BIT", "BIT") {
        marketingWallet = _msgSender();
        address pair = IUniswapV2Factory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        uniswapV2Pair = pair;

        isExcludedFromFees[_msgSender()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(router)] = true;
        _approve(_msgSender(), address(router), type(uint256).max);
        _mint(_msgSender(), SUPPLY);
    }

    function updateSwapAt(uint256 value) external onlyOwner {
        require(
            value <= SUPPLY / 50,
            "Value must be less than or equal to SUPPLY / 50"
        );
        swapAt = value;
    }

    function openTrading() external onlyOwner {
        tradingEnable = true;
        maxWallet = SUPPLY / 100;
        emit TradingEnabled();
    }

    function excludedFromFees(
        address _address,
        bool _value
    ) external onlyOwner {
        isExcludedFromFees[_address] = _value;
    }

    function removeLimits() external onlyOwner {
        require(limitsInEffect, "Limits already removed");
        limitsInEffect = false;
        maxWallet = SUPPLY;
        emit RemovedLimits();
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (
            isExcludedFromFees[from] ||
            isExcludedFromFees[to] ||
            (to != uniswapV2Pair && from != uniswapV2Pair) ||
            inSwap
        ) {
            super._transfer(from, to, amount);
            return;
        }

        require(tradingEnable, "Trading is not open");

        if (limitsInEffect) {
            if (from == uniswapV2Pair || to == uniswapV2Pair) {
                require(amount <= maxAmount, "Max Tx Exceeded");
            }
            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount <= maxWallet,
                    "Max Wallet Exceeded"
                );
            }
        }

        uint256 fees = (amount * totalFee) / 100;

        if (to == uniswapV2Pair && balanceOf(address(this)) >= swapAt) {
            swapBack();
        }

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

    bool private inSwap = false;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    function swapBack() public swapping {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), swapAt);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAt,
            0,
            path,
            address(this),
            block.timestamp
        );

        emit SwapBack(swapAt);
    }

    function setMarketingWallet(address payable _marketingWallet) external {
        require(_msgSender() == marketingWallet, "Not authorized");
        marketingWallet = _marketingWallet;
    }

    function setBITFund(address payable __BITFund) external {
        require(
            _msgSender() == _BITFund || _msgSender() == owner(),
            "Not authorized"
        );
        _BITFund = __BITFund;
    }

    receive() external payable {
        uint256 value = msg.value;
        uint256 amountToBITFund = (value * 60) / 100; // 60%
        uint256 amountToMarketing = value - amountToBITFund;

        (bool sent, ) = payable(marketingWallet).call{value: amountToMarketing}(
            ""
        );

        require(sent, "Failed to send Ether");

        (sent, ) = payable(_BITFund).call{value: amountToBITFund}("");

        require(sent, "Failed to send Ether");
    }
}

File 2 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (Context.sol)

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 9: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

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

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

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

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

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

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

File 4 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

File 5 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

File 6 of 9: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

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

File 7 of 9: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

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

File 8 of 9: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

File 9 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_BITFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"excludedFromFees","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":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"__BITFund","type":"address"}],"name":"setBITFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateSwapAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052737a250d5630b4cf539739df2c5dacb4c659f2488d6080526a084595161401484a0000006007819055600560085562000040906064906200055f565b600955600c805460ff60a81b1916600160a81b17905560075462000068906103e8906200055f565b600d55600f805460ff1916905534801562000081575f80fd5b506040518060400160405280600381526020016210925560ea1b8152506040518060400160405280600381526020016210925560ea1b815250620000d4620000ce6200031960201b60201c565b6200031d565b6004620000e283826200061e565b506005620000f182826200061e565b50620000fd9150503390565b600b5f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505f6080516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000162573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001889190620006e6565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fc9190620006e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000247573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026d9190620006e6565b600680546001600160a01b0319166001600160a01b03831617905590506001600e5f620002973390565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152600e90935281832080548516600190811790915560805190911683529120805490921617905562000304620002f93390565b6080515f196200036c565b620003123360075462000497565b506200073b565b3390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620003d45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004375760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003cb565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620004ef5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003cb565b8060035f82825462000502919062000715565b90915550506001600160a01b0382165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f826200057a57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005a857607f821691505b602082108103620005c757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200055a575f81815260208120601f850160051c81016020861015620005f55750805b601f850160051c820191505b81811015620006165782815560010162000601565b505050505050565b81516001600160401b038111156200063a576200063a6200057f565b62000652816200064b845462000593565b84620005cd565b602080601f83116001811462000688575f8415620006705750858301515b5f19600386901b1c1916600185901b17855562000616565b5f85815260208120601f198616915b82811015620006b85788860151825594840194600190910190840162000697565b5085821015620006d657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620006f7575f80fd5b81516001600160a01b03811681146200070e575f80fd5b9392505050565b808201808211156200073557634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516116aa620007625f395f8181610904015281816109bb01526109fc01526116aa5ff3fe6080604052600436106101b2575f3560e01c80636ac5eeee116100e757806395d89b4111610087578063c9567bf911610062578063c9567bf914610623578063dd62ed3e14610637578063f2fde38b14610656578063f8b45b0514610675575f80fd5b806395d89b41146105d1578063a457c2d7146105e5578063a9059cbb14610604575f80fd5b8063751039fc116100c2578063751039fc1461056357806375f0a874146105775780638618f628146105965780638da5cb5b146105b5575f80fd5b80636ac5eeee1461050757806370a082311461051b578063715018a61461054f575f80fd5b80633659273b116101525780634a62bb651161012d5780634a62bb651461047b5780634fbee1931461049b5780635d098b38146104c95780636abfe846146104e8575f80fd5b80633659273b14610406578063395093511461043d57806349bd5a5e1461045c575f80fd5b806316697fc51161018d57806316697fc51461039957806318160ddd146103b857806323b872dd146103cc578063313ce567146103eb575f80fd5b806306fdde031461031d57806308aa269514610347578063095ea7b31461036a575f80fd5b3661031957345f60646101c683603c6113db565b6101d091906113f2565b90505f6101dd8284611411565b600b546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f811461022c576040519150601f19603f3d011682016040523d82523d5f602084013e610231565b606091505b505090508061027e5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b600c546040516001600160a01b039091169084905f81818185875af1925050503d805f81146102c8576040519150601f19603f3d011682016040523d82523d5f602084013e6102cd565b606091505b505080915050806103175760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610275565b005b5f80fd5b348015610328575f80fd5b5061033161068a565b60405161033e9190611424565b60405180910390f35b348015610352575f80fd5b5061035c600d5481565b60405190815260200161033e565b348015610375575f80fd5b50610389610384366004611483565b61071a565b604051901515815260200161033e565b3480156103a4575f80fd5b506103176103b33660046114ad565b610733565b3480156103c3575f80fd5b5060035461035c565b3480156103d7575f80fd5b506103896103e63660046114e8565b610765565b3480156103f6575f80fd5b506040516012815260200161033e565b348015610411575f80fd5b50600c54610425906001600160a01b031681565b6040516001600160a01b03909116815260200161033e565b348015610448575f80fd5b50610389610457366004611483565b610788565b348015610467575f80fd5b50600654610425906001600160a01b031681565b348015610486575f80fd5b50600c5461038990600160a81b900460ff1681565b3480156104a6575f80fd5b506103896104b5366004611526565b600e6020525f908152604090205460ff1681565b3480156104d4575f80fd5b506103176104e3366004611526565b6107a9565b3480156104f3575f80fd5b50610317610502366004611548565b61081f565b348015610512575f80fd5b506103176108a2565b348015610526575f80fd5b5061035c610535366004611526565b6001600160a01b03165f9081526001602052604090205490565b34801561055a575f80fd5b50610317610aad565b34801561056e575f80fd5b50610317610ac0565b348015610582575f80fd5b50600b54610425906001600160a01b031681565b3480156105a1575f80fd5b506103176105b0366004611526565b610b57565b3480156105c0575f80fd5b505f546001600160a01b0316610425565b3480156105dc575f80fd5b50610331610be1565b3480156105f0575f80fd5b506103896105ff366004611483565b610bf0565b34801561060f575f80fd5b5061038961061e366004611483565b610c6a565b34801561062e575f80fd5b50610317610c77565b348015610642575f80fd5b5061035c61065136600461155f565b610cce565b348015610661575f80fd5b50610317610670366004611526565b610cf8565b348015610680575f80fd5b5061035c600a5481565b6060600480546106999061158b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c59061158b565b80156107105780601f106106e757610100808354040283529160200191610710565b820191905f5260205f20905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b5f33610727818585610d71565b60019150505b92915050565b61073b610e94565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f33610772858285610eed565b61077d858585610f65565b506001949350505050565b5f3361072781858561079a8383610cce565b6107a491906115c3565b610d71565b600b546001600160a01b0316336001600160a01b0316146107fd5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610275565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b610827610e94565b603260075461083691906113f2565b81111561089d5760405162461bcd60e51b815260206004820152602f60248201527f56616c7565206d757374206265206c657373207468616e206f7220657175616c60448201526e020746f20535550504c59202f20353608c1b6064820152608401610275565b600d55565b600f805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106108e2576108e26115d6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098291906115ea565b81600181518110610995576109956115d6565b60200260200101906001600160a01b031690816001600160a01b0316815250506109e2307f0000000000000000000000000000000000000000000000000000000000000000600d54610d71565b600d5460405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163791ac94791610a3891905f90869030904290600401611605565b5f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b505050507fd851aeb8e2074b285cc12da5e2fbf79e642e38f62ef8e59590790c157491ee05600d54604051610a9891815260200190565b60405180910390a150600f805460ff19169055565b610ab5610e94565b610abe5f6111cf565b565b610ac8610e94565b600c54600160a81b900460ff16610b1a5760405162461bcd60e51b8152602060048201526016602482015275131a5b5a5d1cc8185b1c9958591e481c995b5bdd995960521b6044820152606401610275565b600c805460ff60a81b19169055600754600a556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b600c546001600160a01b0316336001600160a01b03161480610b8257505f546001600160a01b031633145b610bbf5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610275565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600580546106999061158b565b5f3381610bfd8286610cce565b905083811015610c5d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610275565b61077d8286868403610d71565b5f33610727818585610f65565b610c7f610e94565b600c805460ff60a01b1916600160a01b179055600754610ca1906064906113f2565b600a556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a1565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610d00610e94565b6001600160a01b038116610d655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610275565b610d6e816111cf565b50565b6001600160a01b038316610dd35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610275565b6001600160a01b038216610e345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610275565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f546001600160a01b03163314610abe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610275565b5f610ef88484610cce565b90505f198114610f5f5781811015610f525760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610275565b610f5f8484848403610d71565b50505050565b6001600160a01b0383165f908152600e602052604090205460ff1680610fa257506001600160a01b0382165f908152600e602052604090205460ff165b80610fd457506006546001600160a01b03838116911614801590610fd457506006546001600160a01b03848116911614155b80610fe15750600f5460ff165b15610ff657610ff183838361121e565b505050565b600c54600160a01b900460ff166110455760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b6044820152606401610275565b600c54600160a81b900460ff161561114e576006546001600160a01b038481169116148061108057506006546001600160a01b038381169116145b156110c9576009548111156110c95760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08115e18d959591959608a1b6044820152606401610275565b6006546001600160a01b0383811691161461114e57600a5481611100846001600160a01b03165f9081526001602052604090205490565b61110a91906115c3565b111561114e5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610275565b5f60646008548361115f91906113db565b61116991906113f2565b6006549091506001600160a01b0384811691161480156111995750600d54305f9081526001602052604090205410155b156111a6576111a66108a2565b80156111c4576111b784308361121e565b6111c18183611411565b91505b610f5f84848461121e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166112825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610275565b6001600160a01b0382166112e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610275565b6001600160a01b0383165f908152600160205260409020548181101561135b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610275565b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ba9086815260200190565b60405180910390a3610f5f565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761072d5761072d6113c7565b5f8261140c57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561072d5761072d6113c7565b5f6020808352835180828501525f5b8181101561144f57858101830151858201604001528201611433565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6e575f80fd5b5f8060408385031215611494575f80fd5b823561149f8161146f565b946020939093013593505050565b5f80604083850312156114be575f80fd5b82356114c98161146f565b9150602083013580151581146114dd575f80fd5b809150509250929050565b5f805f606084860312156114fa575f80fd5b83356115058161146f565b925060208401356115158161146f565b929592945050506040919091013590565b5f60208284031215611536575f80fd5b81356115418161146f565b9392505050565b5f60208284031215611558575f80fd5b5035919050565b5f8060408385031215611570575f80fd5b823561157b8161146f565b915060208301356114dd8161146f565b600181811c9082168061159f57607f821691505b6020821081036115bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561072d5761072d6113c7565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156115fa575f80fd5b81516115418161146f565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156116535784516001600160a01b03168352938301939183019160010161162e565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f5765cc61538745fc7d9c8b1e0da882c51278e6dd203a78392b9515b1d68dcbe64736f6c63430008150033

Deployed Bytecode

0x6080604052600436106101b2575f3560e01c80636ac5eeee116100e757806395d89b4111610087578063c9567bf911610062578063c9567bf914610623578063dd62ed3e14610637578063f2fde38b14610656578063f8b45b0514610675575f80fd5b806395d89b41146105d1578063a457c2d7146105e5578063a9059cbb14610604575f80fd5b8063751039fc116100c2578063751039fc1461056357806375f0a874146105775780638618f628146105965780638da5cb5b146105b5575f80fd5b80636ac5eeee1461050757806370a082311461051b578063715018a61461054f575f80fd5b80633659273b116101525780634a62bb651161012d5780634a62bb651461047b5780634fbee1931461049b5780635d098b38146104c95780636abfe846146104e8575f80fd5b80633659273b14610406578063395093511461043d57806349bd5a5e1461045c575f80fd5b806316697fc51161018d57806316697fc51461039957806318160ddd146103b857806323b872dd146103cc578063313ce567146103eb575f80fd5b806306fdde031461031d57806308aa269514610347578063095ea7b31461036a575f80fd5b3661031957345f60646101c683603c6113db565b6101d091906113f2565b90505f6101dd8284611411565b600b546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f811461022c576040519150601f19603f3d011682016040523d82523d5f602084013e610231565b606091505b505090508061027e5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b600c546040516001600160a01b039091169084905f81818185875af1925050503d805f81146102c8576040519150601f19603f3d011682016040523d82523d5f602084013e6102cd565b606091505b505080915050806103175760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610275565b005b5f80fd5b348015610328575f80fd5b5061033161068a565b60405161033e9190611424565b60405180910390f35b348015610352575f80fd5b5061035c600d5481565b60405190815260200161033e565b348015610375575f80fd5b50610389610384366004611483565b61071a565b604051901515815260200161033e565b3480156103a4575f80fd5b506103176103b33660046114ad565b610733565b3480156103c3575f80fd5b5060035461035c565b3480156103d7575f80fd5b506103896103e63660046114e8565b610765565b3480156103f6575f80fd5b506040516012815260200161033e565b348015610411575f80fd5b50600c54610425906001600160a01b031681565b6040516001600160a01b03909116815260200161033e565b348015610448575f80fd5b50610389610457366004611483565b610788565b348015610467575f80fd5b50600654610425906001600160a01b031681565b348015610486575f80fd5b50600c5461038990600160a81b900460ff1681565b3480156104a6575f80fd5b506103896104b5366004611526565b600e6020525f908152604090205460ff1681565b3480156104d4575f80fd5b506103176104e3366004611526565b6107a9565b3480156104f3575f80fd5b50610317610502366004611548565b61081f565b348015610512575f80fd5b506103176108a2565b348015610526575f80fd5b5061035c610535366004611526565b6001600160a01b03165f9081526001602052604090205490565b34801561055a575f80fd5b50610317610aad565b34801561056e575f80fd5b50610317610ac0565b348015610582575f80fd5b50600b54610425906001600160a01b031681565b3480156105a1575f80fd5b506103176105b0366004611526565b610b57565b3480156105c0575f80fd5b505f546001600160a01b0316610425565b3480156105dc575f80fd5b50610331610be1565b3480156105f0575f80fd5b506103896105ff366004611483565b610bf0565b34801561060f575f80fd5b5061038961061e366004611483565b610c6a565b34801561062e575f80fd5b50610317610c77565b348015610642575f80fd5b5061035c61065136600461155f565b610cce565b348015610661575f80fd5b50610317610670366004611526565b610cf8565b348015610680575f80fd5b5061035c600a5481565b6060600480546106999061158b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c59061158b565b80156107105780601f106106e757610100808354040283529160200191610710565b820191905f5260205f20905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b5f33610727818585610d71565b60019150505b92915050565b61073b610e94565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f33610772858285610eed565b61077d858585610f65565b506001949350505050565b5f3361072781858561079a8383610cce565b6107a491906115c3565b610d71565b600b546001600160a01b0316336001600160a01b0316146107fd5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610275565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b610827610e94565b603260075461083691906113f2565b81111561089d5760405162461bcd60e51b815260206004820152602f60248201527f56616c7565206d757374206265206c657373207468616e206f7220657175616c60448201526e020746f20535550504c59202f20353608c1b6064820152608401610275565b600d55565b600f805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106108e2576108e26115d6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098291906115ea565b81600181518110610995576109956115d6565b60200260200101906001600160a01b031690816001600160a01b0316815250506109e2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d600d54610d71565b600d5460405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163791ac94791610a3891905f90869030904290600401611605565b5f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b505050507fd851aeb8e2074b285cc12da5e2fbf79e642e38f62ef8e59590790c157491ee05600d54604051610a9891815260200190565b60405180910390a150600f805460ff19169055565b610ab5610e94565b610abe5f6111cf565b565b610ac8610e94565b600c54600160a81b900460ff16610b1a5760405162461bcd60e51b8152602060048201526016602482015275131a5b5a5d1cc8185b1c9958591e481c995b5bdd995960521b6044820152606401610275565b600c805460ff60a81b19169055600754600a556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b600c546001600160a01b0316336001600160a01b03161480610b8257505f546001600160a01b031633145b610bbf5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610275565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600580546106999061158b565b5f3381610bfd8286610cce565b905083811015610c5d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610275565b61077d8286868403610d71565b5f33610727818585610f65565b610c7f610e94565b600c805460ff60a01b1916600160a01b179055600754610ca1906064906113f2565b600a556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c7905f90a1565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610d00610e94565b6001600160a01b038116610d655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610275565b610d6e816111cf565b50565b6001600160a01b038316610dd35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610275565b6001600160a01b038216610e345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610275565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f546001600160a01b03163314610abe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610275565b5f610ef88484610cce565b90505f198114610f5f5781811015610f525760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610275565b610f5f8484848403610d71565b50505050565b6001600160a01b0383165f908152600e602052604090205460ff1680610fa257506001600160a01b0382165f908152600e602052604090205460ff165b80610fd457506006546001600160a01b03838116911614801590610fd457506006546001600160a01b03848116911614155b80610fe15750600f5460ff165b15610ff657610ff183838361121e565b505050565b600c54600160a01b900460ff166110455760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b6044820152606401610275565b600c54600160a81b900460ff161561114e576006546001600160a01b038481169116148061108057506006546001600160a01b038381169116145b156110c9576009548111156110c95760405162461bcd60e51b815260206004820152600f60248201526e13585e08151e08115e18d959591959608a1b6044820152606401610275565b6006546001600160a01b0383811691161461114e57600a5481611100846001600160a01b03165f9081526001602052604090205490565b61110a91906115c3565b111561114e5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610275565b5f60646008548361115f91906113db565b61116991906113f2565b6006549091506001600160a01b0384811691161480156111995750600d54305f9081526001602052604090205410155b156111a6576111a66108a2565b80156111c4576111b784308361121e565b6111c18183611411565b91505b610f5f84848461121e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166112825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610275565b6001600160a01b0382166112e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610275565b6001600160a01b0383165f908152600160205260409020548181101561135b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610275565b6001600160a01b038085165f8181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ba9086815260200190565b60405180910390a3610f5f565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761072d5761072d6113c7565b5f8261140c57634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561072d5761072d6113c7565b5f6020808352835180828501525f5b8181101561144f57858101830151858201604001528201611433565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6e575f80fd5b5f8060408385031215611494575f80fd5b823561149f8161146f565b946020939093013593505050565b5f80604083850312156114be575f80fd5b82356114c98161146f565b9150602083013580151581146114dd575f80fd5b809150509250929050565b5f805f606084860312156114fa575f80fd5b83356115058161146f565b925060208401356115158161146f565b929592945050506040919091013590565b5f60208284031215611536575f80fd5b81356115418161146f565b9392505050565b5f60208284031215611558575f80fd5b5035919050565b5f8060408385031215611570575f80fd5b823561157b8161146f565b915060208301356114dd8161146f565b600181811c9082168061159f57607f821691505b6020821081036115bd57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561072d5761072d6113c7565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156115fa575f80fd5b81516115418161146f565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156116535784516001600160a01b03168352938301939183019160010161162e565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220f5765cc61538745fc7d9c8b1e0da882c51278e6dd203a78392b9515b1d68dcbe64736f6c63430008150033

Deployed Bytecode Sourcemap

3520:4660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7750:9;7734:13;7811:3;7797:10;7750:9;7805:2;7797:10;:::i;:::-;7796:18;;;;:::i;:::-;7770:44;-1:-1:-1;7832:25:0;7860:23;7770:44;7860:5;:23;:::i;:::-;7920:15;;7912:83;;7832:51;;-1:-1:-1;7897:9:0;;-1:-1:-1;;;;;7920:15:0;;;;7832:51;;7897:9;7912:83;7897:9;7912:83;7832:51;7920:15;7912:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7896:99;;;8016:4;8008:37;;;;-1:-1:-1;;;8008:37:0;;1086:2:9;8008:37:0;;;1068:21:9;1125:2;1105:18;;;1098:30;-1:-1:-1;;;1144:18:9;;;1137:50;1204:18;;8008:37:0;;;;;;;;;8077:8;;8069:50;;-1:-1:-1;;;;;8077:8:0;;;;8099:15;;8069:50;;;;8099:15;8077:8;8069:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8058:61;;;;;8140:4;8132:37;;;;-1:-1:-1;;;8132:37:0;;1086:2:9;8132:37:0;;;1068:21:9;1125:2;1105:18;;;1098:30;-1:-1:-1;;;1144:18:9;;;1137:50;1204:18;;8132:37:0;884:344:9;8132:37:0;7723:454;3520:4660;;;;2186:100:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4095:37:0;;;;;;;;;;;;;;;;;;;1932:25:9;;;1920:2;1905:18;4095:37:0;1786:177:9;4546:201:2;;;;;;;;;;-1:-1:-1;4546:201:2;;;;;:::i;:::-;;:::i;:::-;;;2589:14:9;;2582:22;2564:41;;2552:2;2537:18;4546:201:2;2424:187:9;5105:157:0;;;;;;;;;;-1:-1:-1;5105:157:0;;;;;:::i;:::-;;:::i;3315:108:2:-;;;;;;;;;;-1:-1:-1;3403:12:2;;3315:108;;5327:261;;;;;;;;;;-1:-1:-1;5327:261:2;;;;;:::i;:::-;;:::i;3157:93::-;;;;;;;;;;-1:-1:-1;3157:93:2;;3240:2;3640:36:9;;3628:2;3613:18;3157:93:2;3498:184:9;3990:23:0;;;;;;;;;;-1:-1:-1;3990:23:0;;;;-1:-1:-1;;;;;3990:23:0;;;;;;-1:-1:-1;;;;;3851:32:9;;;3833:51;;3821:2;3806:18;3990:23:0;3687:203:9;5997:238:2;;;;;;;;;;-1:-1:-1;5997:238:2;;;;;:::i;:::-;;:::i;3654:28:0:-;;;;;;;;;;-1:-1:-1;3654:28:0;;;;-1:-1:-1;;;;;3654:28:0;;;4055:33;;;;;;;;;;-1:-1:-1;4055:33:0;;;;-1:-1:-1;;;4055:33:0;;;;;;4141:50;;;;;;;;;;-1:-1:-1;4141:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7266:193;;;;;;;;;;-1:-1:-1;7266:193:0;;;;;:::i;:::-;;:::i;4724:217::-;;;;;;;;;;-1:-1:-1;4724:217:0;;;;;:::i;:::-;;:::i;6805:453::-;;;;;;;;;;;;;:::i;3486:127:2:-;;;;;;;;;;-1:-1:-1;3486:127:2;;;;;:::i;:::-;-1:-1:-1;;;;;3587:18:2;3560:7;3587:18;;;:9;:18;;;;;;;3486:127;1870:103:8;;;;;;;;;;;;;:::i;5270:204:0:-;;;;;;;;;;;;;:::i;3953:30::-;;;;;;;;;;-1:-1:-1;3953:30:0;;;;-1:-1:-1;;;;;3953:30:0;;;7467:221;;;;;;;;;;-1:-1:-1;7467:221:0;;;;;:::i;:::-;;:::i;1229:87:8:-;;;;;;;;;;-1:-1:-1;1275:7:8;1302:6;-1:-1:-1;;;;;1302:6:8;1229:87;;2405:104:2;;;;;;;;;;;;;:::i;6738:436::-;;;;;;;;;;-1:-1:-1;6738:436:2;;;;;:::i;:::-;;:::i;3819:193::-;;;;;;;;;;-1:-1:-1;3819:193:2;;;;;:::i;:::-;;:::i;4949:148:0:-;;;;;;;;;;;;;:::i;4075:151:2:-;;;;;;;;;;-1:-1:-1;4075:151:2;;;;;:::i;:::-;;:::i;2128:201:8:-;;;;;;;;;;-1:-1:-1;2128:201:8;;;;;:::i;:::-;;:::i;3920:24:0:-;;;;;;;;;;;;;;;;2186:100:2;2240:13;2273:5;2266:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2186:100;:::o;4546:201::-;4629:4;730:10:1;4685:32:2;730:10:1;4701:7:2;4710:6;4685:8;:32::i;:::-;4735:4;4728:11;;;4546:201;;;;;:::o;5105:157:0:-;1115:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;5217:28:0;;;::::1;;::::0;;;:18:::1;:28;::::0;;;;:37;;-1:-1:-1;;5217:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;5105:157::o;5327:261:2:-;5424:4;730:10:1;5482:38:2;5498:4;730:10:1;5513:6:2;5482:15;:38::i;:::-;5531:27;5541:4;5547:2;5551:6;5531:9;:27::i;:::-;-1:-1:-1;5576:4:2;;5327:261;-1:-1:-1;;;;5327:261:2:o;5997:238::-;6085:4;730:10:1;6141:64:2;730:10:1;6157:7:2;6194:10;6166:25;730:10:1;6157:7:2;6166:9;:25::i;:::-;:38;;;;:::i;:::-;6141:8;:64::i;7266:193:0:-;7372:15;;-1:-1:-1;;;;;7372:15:0;730:10:1;-1:-1:-1;;;;;7356:31:0;;7348:58;;;;-1:-1:-1;;;7348:58:0;;5702:2:9;7348:58:0;;;5684:21:9;5741:2;5721:18;;;5714:30;-1:-1:-1;;;5760:18:9;;;5753:44;5814:18;;7348:58:0;5500:338:9;7348:58:0;7417:15;:34;;-1:-1:-1;;;;;;7417:34:0;-1:-1:-1;;;;;7417:34:0;;;;;;;;;;7266:193::o;4724:217::-;1115:13:8;:11;:13::i;:::-;4831:2:0::1;4822:6;;:11;;;;:::i;:::-;4813:5;:20;;4791:117;;;::::0;-1:-1:-1;;;4791:117:0;;6045:2:9;4791:117:0::1;::::0;::::1;6027:21:9::0;6084:2;6064:18;;;6057:30;6123:34;6103:18;;;6096:62;-1:-1:-1;;;6174:18:9;;;6167:45;6229:19;;4791:117:0::1;5843:411:9::0;4791:117:0::1;4919:6;:14:::0;4724:217::o;6805:453::-;6739:6;:13;;-1:-1:-1;;6739:13:0;6748:4;6739:13;;;6876:16:::1;::::0;;6890:1:::1;6876:16:::0;;;;;::::1;::::0;;-1:-1:-1;;6876:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;6876:16:0::1;6852:40;;6921:4;6903;6908:1;6903:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;6903:23:0::1;;;-1:-1:-1::0;;;;;6903:23:0::1;;;::::0;::::1;6947:6;-1:-1:-1::0;;;;;6947:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6937:4;6942:1;6937:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;6937:23:0::1;;;-1:-1:-1::0;;;;;6937:23:0::1;;;::::0;::::1;6973:48;6990:4;7005:6;7014;;6973:8;:48::i;:::-;7106:6;::::0;7034:182:::1;::::0;-1:-1:-1;;;7034:182:0;;-1:-1:-1;;;;;7034:6:0::1;:57;::::0;::::1;::::0;:182:::1;::::0;7106:6;7127:1:::1;::::0;7143:4;;7170::::1;::::0;7190:15:::1;::::0;7034:182:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7234:16;7243:6;;7234:16;;;;1932:25:9::0;;1920:2;1905:18;;1786:177;7234:16:0::1;;;;;;;;-1:-1:-1::0;6775:6:0;:14;;-1:-1:-1;;6775:14:0;;;6805:453::o;1870:103:8:-;1115:13;:11;:13::i;:::-;1935:30:::1;1962:1;1935:18;:30::i;:::-;1870:103::o:0;5270:204:0:-;1115:13:8;:11;:13::i;:::-;5332:14:0::1;::::0;-1:-1:-1;;;5332:14:0;::::1;;;5324:49;;;::::0;-1:-1:-1;;;5324:49:0;;7966:2:9;5324:49:0::1;::::0;::::1;7948:21:9::0;8005:2;7985:18;;;7978:30;-1:-1:-1;;;8024:18:9;;;8017:52;8086:18;;5324:49:0::1;7764:346:9::0;5324:49:0::1;5384:14;:22:::0;;-1:-1:-1;;;;5384:22:0::1;::::0;;5429:6:::1;::::0;5417:9:::1;:18:::0;5451:15:::1;::::0;::::1;::::0;5401:5:::1;::::0;5451:15:::1;5270:204::o:0;7467:221::-;7572:8;;-1:-1:-1;;;;;7572:8:0;730:10:1;-1:-1:-1;;;;;7556:24:0;;:51;;;-1:-1:-1;1275:7:8;1302:6;-1:-1:-1;;;;;1302:6:8;730:10:1;7584:23:0;7556:51;7534:115;;;;-1:-1:-1;;;7534:115:0;;5702:2:9;7534:115:0;;;5684:21:9;5741:2;5721:18;;;5714:30;-1:-1:-1;;;5760:18:9;;;5753:44;5814:18;;7534:115:0;5500:338:9;7534:115:0;7660:8;:20;;-1:-1:-1;;;;;;7660:20:0;-1:-1:-1;;;;;7660:20:0;;;;;;;;;;7467:221::o;2405:104:2:-;2461:13;2494:7;2487:14;;;;;:::i;6738:436::-;6831:4;730:10:1;6831:4:2;6914:25;730:10:1;6931:7:2;6914:9;:25::i;:::-;6887:52;;6978:15;6958:16;:35;;6950:85;;;;-1:-1:-1;;;6950:85:2;;8317:2:9;6950:85:2;;;8299:21:9;8356:2;8336:18;;;8329:30;8395:34;8375:18;;;8368:62;-1:-1:-1;;;8446:18:9;;;8439:35;8491:19;;6950:85:2;8115:401:9;6950:85:2;7071:60;7080:5;7087:7;7115:15;7096:16;:34;7071:8;:60::i;3819:193::-;3898:4;730:10:1;3954:28:2;730:10:1;3971:2:2;3975:6;3954:9;:28::i;4949:148:0:-;1115:13:8;:11;:13::i;:::-;5002::0::1;:20:::0;;-1:-1:-1;;;;5002:20:0::1;-1:-1:-1::0;;;5002:20:0::1;::::0;;5045:6:::1;::::0;:12:::1;::::0;5054:3:::1;::::0;5045:12:::1;:::i;:::-;5033:9;:24:::0;5073:16:::1;::::0;::::1;::::0;;;::::1;4949:148::o:0;4075:151:2:-;-1:-1:-1;;;;;4191:18:2;;;4164:7;4191:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4075:151::o;2128:201:8:-;1115:13;:11;:13::i;:::-;-1:-1:-1;;;;;2217:22:8;::::1;2209:73;;;::::0;-1:-1:-1;;;2209:73:8;;8723:2:9;2209:73:8::1;::::0;::::1;8705:21:9::0;8762:2;8742:18;;;8735:30;8801:34;8781:18;;;8774:62;-1:-1:-1;;;8852:18:9;;;8845:36;8898:19;;2209:73:8::1;8521:402:9::0;2209:73:8::1;2293:28;2312:8;2293:18;:28::i;:::-;2128:201:::0;:::o;10731:346:2:-;-1:-1:-1;;;;;10833:19:2;;10825:68;;;;-1:-1:-1;;;10825:68:2;;9130:2:9;10825:68:2;;;9112:21:9;9169:2;9149:18;;;9142:30;9208:34;9188:18;;;9181:62;-1:-1:-1;;;9259:18:9;;;9252:34;9303:19;;10825:68:2;8928:400:9;10825:68:2;-1:-1:-1;;;;;10912:21:2;;10904:68;;;;-1:-1:-1;;;10904:68:2;;9535:2:9;10904:68:2;;;9517:21:9;9574:2;9554:18;;;9547:30;9613:34;9593:18;;;9586:62;-1:-1:-1;;;9664:18:9;;;9657:32;9706:19;;10904:68:2;9333:398:9;10904:68:2;-1:-1:-1;;;;;10985:18:2;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11037:32;;1932:25:9;;;11037:32:2;;1905:18:9;11037:32:2;;;;;;;10731:346;;;:::o;1394:132:8:-;1275:7;1302:6;-1:-1:-1;;;;;1302:6:8;730:10:1;1458:23:8;1450:68;;;;-1:-1:-1;;;1450:68:8;;9938:2:9;1450:68:8;;;9920:21:9;;;9957:18;;;9950:30;10016:34;9996:18;;;9989:62;10068:18;;1450:68:8;9736:356:9;11368:419:2;11469:24;11496:25;11506:5;11513:7;11496:9;:25::i;:::-;11469:52;;-1:-1:-1;;11536:16:2;:37;11532:248;;11618:6;11598:16;:26;;11590:68;;;;-1:-1:-1;;;11590:68:2;;10299:2:9;11590:68:2;;;10281:21:9;10338:2;10318:18;;;10311:30;10377:31;10357:18;;;10350:59;10426:18;;11590:68:2;10097:353:9;11590:68:2;11702:51;11711:5;11718:7;11746:6;11727:16;:25;11702:8;:51::i;:::-;11458:329;11368:419;;;:::o;5482:1182:0:-;-1:-1:-1;;;;;5624:24:0;;;;;;:18;:24;;;;;;;;;:63;;-1:-1:-1;;;;;;5665:22:0;;;;;;:18;:22;;;;;;;;5624:63;:126;;;-1:-1:-1;5711:13:0;;-1:-1:-1;;;;;5705:19:0;;;5711:13;;5705:19;;;;:44;;-1:-1:-1;5736:13:0;;-1:-1:-1;;;;;5728:21:0;;;5736:13;;5728:21;;5705:44;5624:149;;;-1:-1:-1;5767:6:0;;;;5624:149;5606:260;;;5800:33;5816:4;5822:2;5826:6;5800:15;:33::i;:::-;5482:1182;;;:::o;5606:260::-;5886:13;;-1:-1:-1;;;5886:13:0;;;;5878:45;;;;-1:-1:-1;;;5878:45:0;;10657:2:9;5878:45:0;;;10639:21:9;10696:2;10676:18;;;10669:30;-1:-1:-1;;;10715:18:9;;;10708:49;10774:18;;5878:45:0;10455:343:9;5878:45:0;5940:14;;-1:-1:-1;;;5940:14:0;;;;5936:380;;;5983:13;;-1:-1:-1;;;;;5975:21:0;;;5983:13;;5975:21;;:44;;-1:-1:-1;6006:13:0;;-1:-1:-1;;;;;6000:19:0;;;6006:13;;6000:19;5975:44;5971:132;;;6058:9;;6048:6;:19;;6040:47;;;;-1:-1:-1;;;6040:47:0;;11005:2:9;6040:47:0;;;10987:21:9;11044:2;11024:18;;;11017:30;-1:-1:-1;;;11063:18:9;;;11056:45;11118:18;;6040:47:0;10803:339:9;6040:47:0;6127:13;;-1:-1:-1;;;;;6121:19:0;;;6127:13;;6121:19;6117:188;;6217:9;;6207:6;6191:13;6201:2;-1:-1:-1;;;;;3587:18:2;3560:7;3587:18;;;:9;:18;;;;;;;3486:127;6191:13:0;:22;;;;:::i;:::-;:35;;6161:128;;;;-1:-1:-1;;;6161:128:0;;11349:2:9;6161:128:0;;;11331:21:9;11388:2;11368:18;;;11361:30;-1:-1:-1;;;11407:18:9;;;11400:49;11466:18;;6161:128:0;11147:343:9;6161:128:0;6328:12;6365:3;6353:8;;6344:6;:17;;;;:::i;:::-;6343:25;;;;:::i;:::-;6391:13;;6328:40;;-1:-1:-1;;;;;;6385:19:0;;;6391:13;;6385:19;:57;;;;-1:-1:-1;6436:6:0;;6426:4;3560:7:2;3587:18;;;:9;:18;;;;;;6408:34:0;;6385:57;6381:100;;;6459:10;:8;:10::i;:::-;6497:8;;6493:120;;6522:42;6538:4;6552;6559;6522:15;:42::i;:::-;6588:13;6597:4;6588:6;:13;:::i;:::-;6579:22;;6493:120;6623:33;6639:4;6645:2;6649:6;6623:15;:33::i;2489:191:8:-;2563:16;2582:6;;-1:-1:-1;;;;;2599:17:8;;;-1:-1:-1;;;;;;2599:17:8;;;;;;2632:40;;2582:6;;;;;;;2632:40;;2563:16;2632:40;2552:128;2489:191;:::o;7644:806:2:-;-1:-1:-1;;;;;7741:18:2;;7733:68;;;;-1:-1:-1;;;7733:68:2;;11697:2:9;7733:68:2;;;11679:21:9;11736:2;11716:18;;;11709:30;11775:34;11755:18;;;11748:62;-1:-1:-1;;;11826:18:9;;;11819:35;11871:19;;7733:68:2;11495:401:9;7733:68:2;-1:-1:-1;;;;;7820:16:2;;7812:64;;;;-1:-1:-1;;;7812:64:2;;12103:2:9;7812:64:2;;;12085:21:9;12142:2;12122:18;;;12115:30;12181:34;12161:18;;;12154:62;-1:-1:-1;;;12232:18:9;;;12225:33;12275:19;;7812:64:2;11901:399:9;7812:64:2;-1:-1:-1;;;;;7962:15:2;;7940:19;7962:15;;;:9;:15;;;;;;7996:21;;;;7988:72;;;;-1:-1:-1;;;7988:72:2;;12507:2:9;7988:72:2;;;12489:21:9;12546:2;12526:18;;;12519:30;12585:34;12565:18;;;12558:62;-1:-1:-1;;;12636:18:9;;;12629:36;12682:19;;7988:72:2;12305:402:9;7988:72:2;-1:-1:-1;;;;;8096:15:2;;;;;;;:9;:15;;;;;;8114:20;;;8096:38;;8314:13;;;;;;;;;;:23;;;;;;8366:26;;;;;;8128:6;1932:25:9;;1920:2;1905:18;;1786:177;8366:26:2;;;;;;;;8405:37;5482:1182:0;14:127:9;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:168;219:9;;;250;;267:15;;;261:22;;247:37;237:71;;288:18;;:::i;319:217::-;359:1;385;375:132;;429:10;424:3;420:20;417:1;410:31;464:4;461:1;454:15;492:4;489:1;482:15;375:132;-1:-1:-1;521:9:9;;319:217::o;541:128::-;608:9;;;629:11;;;626:37;;;643:18;;:::i;1233:548::-;1345:4;1374:2;1403;1392:9;1385:21;1435:6;1429:13;1478:6;1473:2;1462:9;1458:18;1451:34;1503:1;1513:140;1527:6;1524:1;1521:13;1513:140;;;1622:14;;;1618:23;;1612:30;1588:17;;;1607:2;1584:26;1577:66;1542:10;;1513:140;;;1517:3;1702:1;1697:2;1688:6;1677:9;1673:22;1669:31;1662:42;1772:2;1765;1761:7;1756:2;1748:6;1744:15;1740:29;1729:9;1725:45;1721:54;1713:62;;;;1233:548;;;;:::o;1968:131::-;-1:-1:-1;;;;;2043:31:9;;2033:42;;2023:70;;2089:1;2086;2079:12;2104:315;2172:6;2180;2233:2;2221:9;2212:7;2208:23;2204:32;2201:52;;;2249:1;2246;2239:12;2201:52;2288:9;2275:23;2307:31;2332:5;2307:31;:::i;:::-;2357:5;2409:2;2394:18;;;;2381:32;;-1:-1:-1;;;2104:315:9:o;2616:416::-;2681:6;2689;2742:2;2730:9;2721:7;2717:23;2713:32;2710:52;;;2758:1;2755;2748:12;2710:52;2797:9;2784:23;2816:31;2841:5;2816:31;:::i;:::-;2866:5;-1:-1:-1;2923:2:9;2908:18;;2895:32;2965:15;;2958:23;2946:36;;2936:64;;2996:1;2993;2986:12;2936:64;3019:7;3009:17;;;2616:416;;;;;:::o;3037:456::-;3114:6;3122;3130;3183:2;3171:9;3162:7;3158:23;3154:32;3151:52;;;3199:1;3196;3189:12;3151:52;3238:9;3225:23;3257:31;3282:5;3257:31;:::i;:::-;3307:5;-1:-1:-1;3364:2:9;3349:18;;3336:32;3377:33;3336:32;3377:33;:::i;:::-;3037:456;;3429:7;;-1:-1:-1;;;3483:2:9;3468:18;;;;3455:32;;3037:456::o;3895:247::-;3954:6;4007:2;3995:9;3986:7;3982:23;3978:32;3975:52;;;4023:1;4020;4013:12;3975:52;4062:9;4049:23;4081:31;4106:5;4081:31;:::i;:::-;4131:5;3895:247;-1:-1:-1;;;3895:247:9:o;4407:180::-;4466:6;4519:2;4507:9;4498:7;4494:23;4490:32;4487:52;;;4535:1;4532;4525:12;4487:52;-1:-1:-1;4558:23:9;;4407:180;-1:-1:-1;4407:180:9:o;4592:388::-;4660:6;4668;4721:2;4709:9;4700:7;4696:23;4692:32;4689:52;;;4737:1;4734;4727:12;4689:52;4776:9;4763:23;4795:31;4820:5;4795:31;:::i;:::-;4845:5;-1:-1:-1;4902:2:9;4887:18;;4874:32;4915:33;4874:32;4915:33;:::i;4985:380::-;5064:1;5060:12;;;;5107;;;5128:61;;5182:4;5174:6;5170:17;5160:27;;5128:61;5235:2;5227:6;5224:14;5204:18;5201:38;5198:161;;5281:10;5276:3;5272:20;5269:1;5262:31;5316:4;5313:1;5306:15;5344:4;5341:1;5334:15;5198:161;;4985:380;;;:::o;5370:125::-;5435:9;;;5456:10;;;5453:36;;;5469:18;;:::i;6391:127::-;6452:10;6447:3;6443:20;6440:1;6433:31;6483:4;6480:1;6473:15;6507:4;6504:1;6497:15;6523:251;6593:6;6646:2;6634:9;6625:7;6621:23;6617:32;6614:52;;;6662:1;6659;6652:12;6614:52;6694:9;6688:16;6713:31;6738:5;6713:31;:::i;6779:980::-;7041:4;7089:3;7078:9;7074:19;7120:6;7109:9;7102:25;7146:2;7184:6;7179:2;7168:9;7164:18;7157:34;7227:3;7222:2;7211:9;7207:18;7200:31;7251:6;7286;7280:13;7317:6;7309;7302:22;7355:3;7344:9;7340:19;7333:26;;7394:2;7386:6;7382:15;7368:29;;7415:1;7425:195;7439:6;7436:1;7433:13;7425:195;;;7504:13;;-1:-1:-1;;;;;7500:39:9;7488:52;;7595:15;;;;7560:12;;;;7536:1;7454:9;7425:195;;;-1:-1:-1;;;;;;;7676:32:9;;;;7671:2;7656:18;;7649:60;-1:-1:-1;;;7740:3:9;7725:19;7718:35;7637:3;6779:980;-1:-1:-1;;;6779:980:9:o

Swarm Source

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