Contract 0x22c7e84fcbf1dbc128e8b2ca0550fc7224523986

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x26e4ae385a84409d9a03430744d7c6286f820b81caaade32e943f774cd04230cWithdraw271558002022-04-15 5:52:56341 days 8 hrs ago0x430c3ca1513e80c29741bac2b83c4950e297e94b IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.00191688 42
0xdf5febf898db555737c010790d63fadf8ccaf8691ce7da53447c2b38a9225bfbWithdraw271557752022-04-15 5:52:02341 days 8 hrs ago0x430c3ca1513e80c29741bac2b83c4950e297e94b IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.00266868 42
0xc46a34b84da68d09dfaaa51630522010f2af56967e41d743a75e32323fe1706aToken Deposit271143922022-04-14 5:01:58342 days 8 hrs ago0x1776b74558224fc8b799cb417f9fee5101a6bb86 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.006556884677 30.118208943
0x7b97d59dfd7fcc29391cbf5cfe1005e262a0d91c0808323004f94ae6702c9808Token Deposit268561812022-04-07 15:20:11348 days 22 hrs ago0x2e04d5fe15cca32815494841ac700785737f6efd IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.009871189044 45.349540102
0x50697828daaf461c98ee7e00b76b73a9b1c0915f5d626b223b37835cb4477004Token Deposit265492462022-03-30 18:55:27356 days 18 hrs ago0x62fe057732a9c3aae0c46e619d284d11abb63c28 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.00712037184 30.329267664
0x0859977955d605c8bd581f5318758997b56216063d8b6fd7a8b907c7efacca65Withdraw264981662022-03-29 11:24:18358 days 2 hrs ago0x430c3ca1513e80c29741bac2b83c4950e297e94b IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.001910647799 30.069999999
0x6a4457758a118ebc227f5f72ab45137d3a848dc20e8cddffc3e9a20b922c017fToken Deposit264563142022-03-28 9:54:07359 days 4 hrs ago0xf93354ab7db5eae8349fe24a66e5de18df429a92 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.009924953188 30.013769169
0xdaaf3b6209dc29d24cafa0c98473974ff4922ec4b2614c735cbe69c0fe0ce09fToken Deposit264527182022-03-28 7:41:19359 days 6 hrs ago0x89f7a4695164430e064138664ac7784d63014494 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011820696745 31.339670039
0x5f9b43e09c5d1a646518fbb73f3e95caba06af3f155148d90ddf5cd872dfe395Token Deposit264523272022-03-28 7:26:19359 days 6 hrs ago0xa912e2a56e08fe443a0fb497c7821ad8771dcad7 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.01058954067 32.024691445
0x00ebd69c70d3733333ae11b02719d3550c4cc8e2a2a2d18ecdff3cda1d39472aToken Deposit264521382022-03-28 7:19:49359 days 6 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.012477447468 32.665185268
0x315463e3f7390fcc13696cc53c5715660cf9a33e03bd7e7a9f5b0744a66846d8Token Deposit264521022022-03-28 7:18:37359 days 6 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011616228986 30.569023648
0x012ef7ce067cc22241e4df4064dbd25228a8a1ee5c0f85416dc3145d140b44ccToken Deposit264519882022-03-28 7:14:41359 days 6 hrs ago0x19a5ef404f71f1bbd5ff47e86273abc519699f2e IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.006917126916 32.491096073
0x6c9c74e4bcc221cccd2beafaefa58e3c29832a6c70171ddd64669b6e30ddd586Token Deposit264500572022-03-28 6:01:54359 days 7 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.012163800007 32.01000002
0x5af137e9dbba4972d43e8a63f25bcc028cc2c7828fe2210d9609960ef167734eToken Deposit264499452022-03-28 5:58:02359 days 7 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.01361584544 35.831172211
0x172b2eef739e1b878e1f3e4bed787bca0b96aa4da0b040ade6d554954bff2e91Token Deposit264498982022-03-28 5:56:24359 days 7 hrs ago0xf93354ab7db5eae8349fe24a66e5de18df429a92 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011879975346 31.263093018
0xfc747aae504a03dd44f38db9ec49f1d47446343dbe36fa18de01ddc3ea37223cToken Deposit264496212022-03-28 5:44:46359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.012114564117 31.880431887
0x04f57e7782fac1d3cf9e211860cf8b5f18569259259755f8aab7ada4e6ef9821Token Deposit264496122022-03-28 5:44:28359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.012871512 33.8724
0x416b6250000f392302e7d1c4028a7d31d70c392075c0185ce4a00d173a32882cToken Deposit264495502022-03-28 5:42:20359 days 8 hrs ago0xf93354ab7db5eae8349fe24a66e5de18df429a92 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011823913896 31.115562885
0xc9b56bdcd7df1aaf29df76318b75afa42bc35099caa369cee8293ac9fcb80b40Token Deposit264488532022-03-28 5:18:22359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011773142977 30.981955203
0xf34a6f2a436ec7c93fbae544ca8700fb388ee00cc8bca19abdac9f59a3900decToken Deposit264488322022-03-28 5:17:40359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.01252648397 32.9644315
0xfaa934c4a40da4de173125d8df5d19a542703d896f192df5dfb7b80457e05768Token Deposit264487212022-03-28 5:13:50359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011514477894 30.301257616
0xe0f8c524258d1470d401b11fb02047a12112b737da3cf490c72c6bfaf9da1c86Token Deposit264487082022-03-28 5:13:24359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011537680112 30.362316085
0x732707406df31704199ab280d9638b9bcace71803abad7810f98b28f110be7c2Token Deposit264486982022-03-28 5:13:00359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.012381970895 32.584133936
0xe0c5184928ff75ca6ca422691e27ddf601330de86e56f51b1e8b8210485fd4ecToken Deposit264486402022-03-28 5:11:04359 days 8 hrs ago0x22de5eb768a4d53293302eb0fc88daafc35246b6 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011870595805 31.238410015
0xe965a76b26924ce26755845bc4b86b3d25e3670f609eeb1fa79152c56c477c96Token Deposit264479382022-03-28 4:44:48359 days 9 hrs ago0xa912e2a56e08fe443a0fb497c7821ad8771dcad7 IN  0x22c7e84fcbf1dbc128e8b2ca0550fc72245239860 MATIC0.011441344001 30.108800005
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ANKTPreSale

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-21
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `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);

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @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: @openzeppelin/contracts/utils/Context.sol

 
// OpenZeppelin Contracts v4.4.1 (utils/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: @openzeppelin/contracts/token/ERC20/ERC20.sol

 
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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}.
     *
     * 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:
     *
     * - `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, _allowances[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 = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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;
        }
        _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;
        _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;
        }
        _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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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: @openzeppelin/contracts/utils/Address.sol

 
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol

 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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

 
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol

 
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: contracts/ankotspresale.sol

 

pragma solidity ^0.8.0;





contract ANKTPreSale is Ownable {

    uint256 private constant REFERRAL_ANKT_TOKENS = 18 * (10 ** 18);
    uint256 private constant PURCHASE_ANKT_TOKENS = 83 * (10 ** 18);
    uint256 private total_ankt_purchased = 0;
    uint256 depositAmount = 5 * (10 ** 6);

    address public _usdtAddress;
    address public safeAddress;

    mapping(address => ReferralDetails) private userReferralInfo;
    mapping(address => transaction) transactions;

    struct ReferralSummary {
        uint256 timestamp;
        string userName;
        address walletAddress;
        uint256 tokensEarned;
    }

    struct ReferralDetails {
        string userName;
        address walletAddress;
        uint256 totalReferralCount;
        uint256 tokensPurchased;
        uint256 tokensEarned;
        bool apconverted;
        ReferralSummary[] referralHistory;
    }
    
    struct transaction {
        address userAddress;
        uint256 tokenDeposited;
        uint256 createdTime;
        bool doesExist;
    }

    event ReferralPointsUpdated(
        address _inviteeWalletAddress,
        address _inviterWalletAddress,
        string _inviterUserName
    );
    
    
    constructor(address depositAddress, address token) {
        safeAddress = depositAddress;
        _usdtAddress = token;
    }

    function tokenDeposit(
        string memory _userName,
        string memory _inviterUserName,
        address _inviterWalletAddress
    ) public returns (bool) {
        IERC20 _j = IERC20(_usdtAddress);
        require(
            _j.allowance(msg.sender, address(this)) >= depositAmount,
            "TokenDeposit: you have not approved PreSaleDeposit to spend your token"
        );
        require(
            transactions[msg.sender].doesExist == false,
            "User has already deposited USDT to obtain ANKT"
        );
        require(
            (total_ankt_purchased) <= 5990000 * (10 ** 18),
            "Limit exceeded for Deposit"
        );
        _j.transferFrom(msg.sender, address(this), depositAmount);
        transactions[msg.sender].userAddress = msg.sender;
        transactions[msg.sender].tokenDeposited += depositAmount;
        transactions[msg.sender].createdTime = block.timestamp;
        transactions[msg.sender].doesExist = true;
        updateUserReferral(_userName, _inviterUserName, _inviterWalletAddress);

        return (transactions[msg.sender].doesExist);
    }

    function withdraw() public payable onlyOwner {
        IERC20 _j = IERC20(_usdtAddress);
        _j.transfer(safeAddress, _j.balanceOf(address(this)));
    }

    function getTransactions(address userAddress) public view returns (bool) {
        return (transactions[userAddress].doesExist);
    }

    function contractBalance() public view returns (uint256) {
        ERC20 t = ERC20(_usdtAddress);
        return (t.balanceOf(address(this)));
    }

    function updateUserReferral(
        string memory _userName,
        string memory _inviterUserName,
        address _inviterWalletAddress
    ) internal returns (bool) {
        require(
            msg.sender != _inviterWalletAddress,
            "inviter wallet address and sender address is same!"
        );
        userReferralInfo[msg.sender].userName = _userName;
        userReferralInfo[msg.sender].walletAddress = msg.sender;
        userReferralInfo[msg.sender].tokensPurchased = PURCHASE_ANKT_TOKENS;
        total_ankt_purchased = SafeMath.add(
            total_ankt_purchased,
            PURCHASE_ANKT_TOKENS
        );
        
        if (_inviterWalletAddress != address(0)) {
            userReferralInfo[_inviterWalletAddress].userName = _inviterUserName;
            userReferralInfo[_inviterWalletAddress].walletAddress = _inviterWalletAddress;
            userReferralInfo[_inviterWalletAddress].totalReferralCount += 1;
            userReferralInfo[_inviterWalletAddress].tokensEarned += REFERRAL_ANKT_TOKENS;
            total_ankt_purchased = SafeMath.add(total_ankt_purchased,REFERRAL_ANKT_TOKENS);
            userReferralInfo[_inviterWalletAddress].referralHistory.push(
                ReferralSummary(
                    block.timestamp,
                    _userName,
                    msg.sender,
                    REFERRAL_ANKT_TOKENS
                )
            );
        }
        emit ReferralPointsUpdated(
            msg.sender,
            _inviterWalletAddress,
            _inviterUserName
        );
        return true;
    }

    function convertAPtoANKT(address[] memory listofAddresses, uint256[] memory APPoints) external  onlyOwner returns (bool)  {
        for(uint i=0; i< listofAddresses.length; i++){
            for(uint j=0; j<APPoints.length; j++){
                if(i==j){
                    require(userReferralInfo[listofAddresses[i]].apconverted == false, "AP already has been converted");
                    require(APPoints[j] < 3000000000000000000000, "Max AP Exceeded");
                    uint256 ankt_tokens = SafeMath.div(APPoints[j], 4);
                    userReferralInfo[listofAddresses[i]]
                            .tokensEarned += ankt_tokens;
                    userReferralInfo[listofAddresses[i]]
                            .walletAddress = listofAddresses[i];
                    userReferralInfo[listofAddresses[i]].apconverted = true;
                    userReferralInfo[listofAddresses[i]].referralHistory.push(
                            ReferralSummary(
                                block.timestamp,
                                "APtoANKT",
                                listofAddresses[i],
                                ankt_tokens
                            )
                    );
                    total_ankt_purchased = SafeMath.add(total_ankt_purchased,ankt_tokens);
                }
            }
        }
        return true;
    }



    function getUserReferralSummary()
        external
        view
        returns (ReferralSummary[] memory summary)
    {
        return userReferralInfo[msg.sender].referralHistory;
    }

    function getUserBalance() external view returns (uint256) {
        return
            userReferralInfo[msg.sender].tokensPurchased +
            userReferralInfo[msg.sender].tokensEarned;
    }

    function getUserReferralDetails()
        external
        view
        returns (ReferralDetails memory refDetails)
    {
        return userReferralInfo[msg.sender];
    }

     function getTotalPurchasedTokens()
        external
        view onlyOwner
        returns (uint256)
    {
        return total_ankt_purchased;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"depositAddress","type":"address"},{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"_inviteeWalletAddress","type":"address"},{"indexed":false,"internalType":"address","name":"_inviterWalletAddress","type":"address"},{"indexed":false,"internalType":"string","name":"_inviterUserName","type":"string"}],"name":"ReferralPointsUpdated","type":"event"},{"inputs":[],"name":"_usdtAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"listofAddresses","type":"address[]"},{"internalType":"uint256[]","name":"APPoints","type":"uint256[]"}],"name":"convertAPtoANKT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalPurchasedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getTransactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserReferralDetails","outputs":[{"components":[{"internalType":"string","name":"userName","type":"string"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"totalReferralCount","type":"uint256"},{"internalType":"uint256","name":"tokensPurchased","type":"uint256"},{"internalType":"uint256","name":"tokensEarned","type":"uint256"},{"internalType":"bool","name":"apconverted","type":"bool"},{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"userName","type":"string"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"tokensEarned","type":"uint256"}],"internalType":"struct ANKTPreSale.ReferralSummary[]","name":"referralHistory","type":"tuple[]"}],"internalType":"struct ANKTPreSale.ReferralDetails","name":"refDetails","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserReferralSummary","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"userName","type":"string"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"tokensEarned","type":"uint256"}],"internalType":"struct ANKTPreSale.ReferralSummary[]","name":"summary","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_userName","type":"string"},{"internalType":"string","name":"_inviterUserName","type":"string"},{"internalType":"address","name":"_inviterWalletAddress","type":"address"}],"name":"tokenDeposit","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":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600155624c4b406002553480156200001d57600080fd5b5060405162001b1e38038062001b1e8339810160408190526200004091620000ea565b6200004b336200007d565b600480546001600160a01b039384166001600160a01b0319918216179091556003805492909316911617905562000122565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000e557600080fd5b919050565b60008060408385031215620000fe57600080fd5b6200010983620000cd565b91506200011960208401620000cd565b90509250929050565b6119ec80620001326000396000f3fe6080604052600436106100dd5760003560e01c8063754096551161007f5780638da5cb5b116100595780638da5cb5b14610244578063a5d0a85d14610262578063b7013dc114610284578063f2fde38b1461029957600080fd5b806375409655146101ef5780637dfdbbe51461020f5780638b7afe2e1461022f57600080fd5b80635578110c116100bb5780635578110c1461015f578063575dbd641461019757806367fbd749146101b7578063715018a6146101da57600080fd5b80630f8cda20146100e25780633ccfd60b146101335780634db802e81461013d575b600080fd5b3480156100ee57600080fd5b5061011e6100fd3660046114bf565b6001600160a01b031660009081526006602052604090206003015460ff1690565b60405190151581526020015b60405180910390f35b61013b6102b9565b005b34801561014957600080fd5b506101526103fe565b60405161012a919061179b565b34801561016b57600080fd5b5060045461017f906001600160a01b031681565b6040516001600160a01b03909116815260200161012a565b3480156101a357600080fd5b5061011e6101b23660046115c3565b61065f565b3480156101c357600080fd5b506101cc610957565b60405190815260200161012a565b3480156101e657600080fd5b5061013b610989565b3480156101fb57600080fd5b5060035461017f906001600160a01b031681565b34801561021b57600080fd5b5061011e61022a3660046114da565b6109bf565b34801561023b57600080fd5b506101cc610da7565b34801561025057600080fd5b506000546001600160a01b031661017f565b34801561026e57600080fd5b50610277610e2b565b60405161012a91906116d2565b34801561029057600080fd5b506101cc610f57565b3480156102a557600080fd5b5061013b6102b43660046114bf565b610f80565b6000546001600160a01b031633146102ec5760405162461bcd60e51b81526004016102e390611766565b60405180910390fd5b600354600480546040516370a0823160e01b815230928101929092526001600160a01b0392831692839263a9059cbb92919091169083906370a082319060240160206040518083038186803b15801561034457600080fd5b505afa158015610358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037c9190611637565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156103c257600080fd5b505af11580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906115a1565b5050565b6104496040518060e001604052806060815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600015158152602001606081525090565b3360009081526005602052604090819020815160e081019092528054829082906104729061191e565b80601f016020809104026020016040519081016040528092919081815260200182805461049e9061191e565b80156104eb5780601f106104c0576101008083540402835291602001916104eb565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050918352505060018201546001600160a01b031660208083019190915260028301546040808401919091526003840154606084015260048401546080840152600584015460ff16151560a084015260068401805482518185028101850190935280835260c090940193919290919060009084015b8282101561065257838290600052602060002090600402016040518060800160405290816000820154815260200160018201805461059e9061191e565b80601f01602080910402602001604051908101604052809291908181526020018280546105ca9061191e565b80156106175780601f106105ec57610100808354040283529160200191610617565b820191906000526020600020905b8154815290600101906020018083116105fa57829003601f168201915b505050918352505060028201546001600160a01b03166020808301919091526003909201546040909101529082526001929092019101610561565b5050505081525050905090565b600354600254604051636eb1769f60e11b81523360048201523060248201526000926001600160a01b03169190829063dd62ed3e9060440160206040518083038186803b1580156106af57600080fd5b505afa1580156106c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e79190611637565b101561076a5760405162461bcd60e51b815260206004820152604660248201527f546f6b656e4465706f7369743a20796f752068617665206e6f7420617070726f60448201527f7665642050726553616c654465706f73697420746f207370656e6420796f7572606482015265103a37b5b2b760d11b608482015260a4016102e3565b3360009081526006602052604090206003015460ff16156107e45760405162461bcd60e51b815260206004820152602e60248201527f557365722068617320616c7265616479206465706f736974656420555344542060448201526d1d1bc81bd89d185a5b88105392d560921b60648201526084016102e3565b6a04f46e8cf803d713c0000060015411156108415760405162461bcd60e51b815260206004820152601a60248201527f4c696d697420657863656564656420666f72204465706f73697400000000000060448201526064016102e3565b6002546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b038216906323b872dd90606401602060405180830381600087803b15801561089357600080fd5b505af11580156108a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cb91906115a1565b5033600081815260066020526040812080546001600160a01b0319169092178255600254600190920180549091906109049084906118e4565b9091555050336000908152600660205260409020426002820155600301805460ff1916600117905561093785858561101b565b50503360009081526006602052604090206003015460ff16949350505050565b600080546001600160a01b031633146109825760405162461bcd60e51b81526004016102e390611766565b5060015490565b6000546001600160a01b031633146109b35760405162461bcd60e51b81526004016102e390611766565b6109bd60006112b9565b565b600080546001600160a01b031633146109ea5760405162461bcd60e51b81526004016102e390611766565b60005b8351811015610d9d5760005b8351811015610d8a5780821415610d785760056000868481518110610a2057610a2061198a565b6020908102919091018101516001600160a01b031682528101919091526040016000206005015460ff1615610a975760405162461bcd60e51b815260206004820152601d60248201527f415020616c726561647920686173206265656e20636f6e76657274656400000060448201526064016102e3565b68a2a15d09519be00000848281518110610ab357610ab361198a565b602002602001015110610afa5760405162461bcd60e51b815260206004820152600f60248201526e13585e08105408115e18d959591959608a1b60448201526064016102e3565b6000610b20858381518110610b1157610b1161198a565b60200260200101516004611309565b90508060056000888681518110610b3957610b3961198a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206004016000828254610b7391906118e4565b92505081905550858381518110610b8c57610b8c61198a565b602002602001015160056000888681518110610baa57610baa61198a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160056000888681518110610c1157610c1161198a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060050160006101000a81548160ff02191690831515021790555060056000878581518110610c6957610c6961198a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060060160405180608001604052804281526020016040518060400160405280600881526020016710541d1bd05392d560c21b8152508152602001888681518110610cdd57610cdd61198a565b6020908102919091018101516001600160a01b03168252908101849052825460018181018555600094855293829020835160049092020190815582820151805193949193610d3393928501929190910190611328565b5060408201516002820180546001600160a01b0319166001600160a01b03909216919091179055606090910151600390910155600154610d73908261131c565b600155505b80610d8281611959565b9150506109f9565b5080610d9581611959565b9150506109ed565b5060019392505050565b6003546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a082319060240160206040518083038186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e259190611637565b91505090565b336000908152600560209081526040808320600601805482518185028101850190935280835260609492939192909184015b82821015610f4e578382906000526020600020906004020160405180608001604052908160008201548152602001600182018054610e9a9061191e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec69061191e565b8015610f135780601f10610ee857610100808354040283529160200191610f13565b820191906000526020600020905b815481529060010190602001808311610ef657829003601f168201915b505050918352505060028201546001600160a01b03166020808301919091526003909201546040909101529082526001929092019101610e5d565b50505050905090565b3360009081526005602052604081206004810154600390910154610f7b91906118e4565b905090565b6000546001600160a01b03163314610faa5760405162461bcd60e51b81526004016102e390611766565b6001600160a01b03811661100f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e3565b611018816112b9565b50565b6000336001600160a01b03831614156110915760405162461bcd60e51b815260206004820152603260248201527f696e76697465722077616c6c6574206164647265737320616e642073656e64656044820152717220616464726573732069732073616d652160701b60648201526084016102e3565b33600090815260056020908152604090912085516110b192870190611328565b50336000818152600560205260409020600180820180546001600160a01b03191690931790925568047fdb3c3f456c0000600390910181905590546110f59161131c565b6001556001600160a01b03821615611274576001600160a01b0382166000908152600560209081526040909120845161113092860190611328565b506001600160a01b0382166000818152600560205260408120600180820180546001600160a01b03191690941790935560020180549091906111739084906118e4565b90915550506001600160a01b0382166000908152600560205260408120600401805467f9ccd8a1c508000092906111ab9084906118e4565b90915550506001546111c59067f9ccd8a1c508000061131c565b60019081556001600160a01b038316600090815260056020908152604080832081516080810183524281528084018a8152339382019390935267f9ccd8a1c508000060608201526006909101805480870182559085529383902081516004909502019384559051805191946112409390850192910190611328565b5060408201516002820180546001600160a01b0319166001600160a01b039092169190911790556060909101516003909101555b7fd21ad62084ccf9d003af1255fd14abd3c6d0c95c05d6eec945d2519e1a2d32843383856040516112a79392919061169d565b60405180910390a15060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061131582846118fc565b9392505050565b600061131582846118e4565b8280546113349061191e565b90600052602060002090601f016020900481019282611356576000855561139c565b82601f1061136f57805160ff191683800117855561139c565b8280016001018555821561139c579182015b8281111561139c578251825591602001919060010190611381565b506113a89291506113ac565b5090565b5b808211156113a857600081556001016113ad565b80356001600160a01b03811681146113d857600080fd5b919050565b600082601f8301126113ee57600080fd5b813560206114036113fe836118c0565b61188f565b80838252828201915082860187848660051b890101111561142357600080fd5b60005b8581101561144257813584529284019290840190600101611426565b5090979650505050505050565b600082601f83011261146057600080fd5b813567ffffffffffffffff81111561147a5761147a6119a0565b61148d601f8201601f191660200161188f565b8181528460208386010111156114a257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156114d157600080fd5b611315826113c1565b600080604083850312156114ed57600080fd5b823567ffffffffffffffff8082111561150557600080fd5b818501915085601f83011261151957600080fd5b813560206115296113fe836118c0565b8083825282820191508286018a848660051b890101111561154957600080fd5b600096505b848710156115735761155f816113c1565b83526001969096019591830191830161154e565b509650508601359250508082111561158a57600080fd5b50611597858286016113dd565b9150509250929050565b6000602082840312156115b357600080fd5b8151801515811461131557600080fd5b6000806000606084860312156115d857600080fd5b833567ffffffffffffffff808211156115f057600080fd5b6115fc8783880161144f565b9450602086013591508082111561161257600080fd5b5061161f8682870161144f565b92505061162e604085016113c1565b90509250925092565b60006020828403121561164957600080fd5b5051919050565b6000815180845260005b818110156116765760208185018101518683018201520161165a565b81811115611688576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038481168252831660208201526060604082018190526000906116c990830184611650565b95945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561175857603f19898403018552815160808151855288820151818a87015261172782870182611650565b838a01516001600160a01b0316878b01526060938401519390960192909252505093860193908601906001016116f9565b509098975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020808352835160e0828501526117b8610100850182611650565b905081850151604060018060a01b038083168288015281880151925060608381890152808901519350608084818a0152808a015160a08a015260a08a0151151560c08a015260c08a01519450601f19808a88030160e08b01528686518089528989019150898160051b8a01018a8901985060005b8281101561187d57848b83030184528951805183528c810151878e85015261185688850182611650565b828c01518b16858d01529189015193890193909352998c0199938c0193915060010161182c565b509d9c50505050505050505050505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156118b8576118b86119a0565b604052919050565b600067ffffffffffffffff8211156118da576118da6119a0565b5060051b60200190565b600082198211156118f7576118f7611974565b500190565b60008261191957634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061193257607f821691505b6020821081141561195357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561196d5761196d611974565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212201c383d5bb0ff68b80b97dd8b1b8d87b91e61636bafc147cd18ae00cef8d226a864736f6c634300080700330000000000000000000000006206e7052b338eda27a94cfef01da93e83880661000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f

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

0000000000000000000000006206e7052b338eda27a94cfef01da93e83880661000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f

-----Decoded View---------------
Arg [0] : depositAddress (address): 0x6206e7052b338eda27a94cfef01da93e83880661
Arg [1] : token (address): 0xc2132d05d31c914a87c6611c10748aeb04b58e8f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006206e7052b338eda27a94cfef01da93e83880661
Arg [1] : 000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f


Deployed ByteCode Sourcemap

39552:6755:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42214:136;;;;;;;;;;-1:-1:-1;42214:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;42306:25:0;42281:4;42306:25;;;:12;:25;;;;;:35;;;;;;42214:136;;;;7366:14:1;;7359:22;7341:41;;7329:2;7314:18;42214:136:0;;;;;;;;42046:160;;;:::i;:::-;;45962:178;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39860:26::-;;;;;;;;;;-1:-1:-1;39860:26:0;;;;-1:-1:-1;;;;;39860:26:0;;;;;;-1:-1:-1;;;;;4493:32:1;;;4475:51;;4463:2;4448:18;39860:26:0;4329:203:1;40902:1136:0;;;;;;;;;;-1:-1:-1;40902:1136:0;;;;;:::i;:::-;;:::i;46149:155::-;;;;;;;;;;;;;:::i;:::-;;;12593:25:1;;;12581:2;12566:18;46149:155:0;12447:177:1;31627:103:0;;;;;;;;;;;;;:::i;39826:27::-;;;;;;;;;;-1:-1:-1;39826:27:0;;;;-1:-1:-1;;;;;39826:27:0;;;44144:1399;;;;;;;;;;-1:-1:-1;44144:1399:0;;;;;:::i;:::-;;:::i;42358:151::-;;;;;;;;;;;;;:::i;30976:87::-;;;;;;;;;;-1:-1:-1;31022:7:0;31049:6;-1:-1:-1;;;;;31049:6:0;30976:87;;45555:193;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45756:198::-;;;;;;;;;;;;;:::i;31885:201::-;;;;;;;;;;-1:-1:-1;31885:201:0;;;;;:::i;:::-;;:::i;42046:160::-;31022:7;31049:6;-1:-1:-1;;;;;31049:6:0;4345:10;31196:23;31188:68;;;;-1:-1:-1;;;31188:68:0;;;;;;;:::i;:::-;;;;;;;;;42121:12:::1;::::0;42157:11:::1;::::0;;42170:27:::1;::::0;-1:-1:-1;;;42170:27:0;;42191:4:::1;42170:27:::0;;::::1;4475:51:1::0;;;;-1:-1:-1;;;;;42121:12:0;;::::1;::::0;;;42145:11:::1;::::0;42157;;;::::1;::::0;42121:12;;42170::::1;::::0;4448:18:1;;42170:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42145:53;::::0;-1:-1:-1;;;;;;42145:53:0::1;::::0;;;;;;-1:-1:-1;;;;;5841:32:1;;;42145:53:0::1;::::0;::::1;5823:51:1::0;5890:18;;;5883:34;5796:18;;42145:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42091:115;42046:160::o:0;45962:178::-;46046:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46046:33:0;46121:10;46104:28;;;;:16;:28;;;;;;;46097:35;;;;;;;;;;;;46104:28;;46097:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46097:35:0;;;-1:-1:-1;;46097:35:0;;;;-1:-1:-1;;;;;46097:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;46097:35:0;;;-1:-1:-1;;46097:35:0;;;;-1:-1:-1;;;;;46097:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45962:178;:::o;40902:1136::-;41098:12;;41187:13;;41144:39;;-1:-1:-1;;;41144:39:0;;41157:10;41144:39;;;4749:34:1;41177:4:0;4799:18:1;;;4792:43;41062:4:0;;-1:-1:-1;;;;;41098:12:0;;41187:13;41098:12;;41144;;4684:18:1;;41144:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;41122:176;;;;-1:-1:-1;;;41122:176:0;;9555:2:1;41122:176:0;;;9537:21:1;9594:2;9574:18;;;9567:30;9633:34;9613:18;;;9606:62;9704:34;9684:18;;;9677:62;-1:-1:-1;;;9755:19:1;;;9748:37;9802:19;;41122:176:0;9353:474:1;41122:176:0;41344:10;41331:24;;;;:12;:24;;;;;:34;;;;;:43;41309:139;;;;-1:-1:-1;;;41309:139:0;;8779:2:1;41309:139:0;;;8761:21:1;8818:2;8798:18;;;8791:30;8857:34;8837:18;;;8830:62;-1:-1:-1;;;8908:18:1;;;8901:44;8962:19;;41309:139:0;8577:410:1;41309:139:0;41507:20;41482;;41481:46;;41459:122;;;;-1:-1:-1;;;41459:122:0;;10378:2:1;41459:122:0;;;10360:21:1;10417:2;10397:18;;;10390:30;10456:28;10436:18;;;10429:56;10502:18;;41459:122:0;10176:350:1;41459:122:0;41635:13;;41592:57;;-1:-1:-1;;;41592:57:0;;41608:10;41592:57;;;5509:34:1;41628:4:0;5559:18:1;;;5552:43;5611:18;;;5604:34;;;;-1:-1:-1;;;;;41592:15:0;;;;;5444:18:1;;41592:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;41699:10:0;41660:24;;;;:12;:24;;;;;:49;;-1:-1:-1;;;;;;41660:49:0;;;;;;41763:13;;41660:49;41720:39;;;:56;;:39;;41660:24;41720:56;;41763:13;;41720:56;:::i;:::-;;;;-1:-1:-1;;41800:10:0;41787:24;;;;:12;:24;;;;;41826:15;41787:36;;;:54;41852:34;;:41;;-1:-1:-1;;41852:41:0;41889:4;41852:41;;;41904:70;41923:9;41934:16;41952:21;41904:18;:70::i;:::-;-1:-1:-1;;42008:10:0;41995:24;;;;:12;:24;;;;;:34;;;;;;40902:1136;-1:-1:-1;;;;40902:1136:0:o;46149:155::-;46244:7;31049:6;;-1:-1:-1;;;;;31049:6:0;4345:10;31196:23;31188:68;;;;-1:-1:-1;;;31188:68:0;;;;;;;:::i;:::-;-1:-1:-1;46276:20:0::1;::::0;46149:155;:::o;31627:103::-;31022:7;31049:6;-1:-1:-1;;;;;31049:6:0;4345:10;31196:23;31188:68;;;;-1:-1:-1;;;31188:68:0;;;;;;;:::i;:::-;31692:30:::1;31719:1;31692:18;:30::i;:::-;31627:103::o:0;44144:1399::-;44259:4;31049:6;;-1:-1:-1;;;;;31049:6:0;4345:10;31196:23;31188:68;;;;-1:-1:-1;;;31188:68:0;;;;;;;:::i;:::-;44281:6:::1;44277:1237;44294:15;:22;44291:1;:25;44277:1237;;;44341:6;44337:1166;44353:8;:15;44351:1;:17;44337:1166;;;44399:1;44396;:4;44393:1095;;;44432:16;:36;44449:15;44465:1;44449:18;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;44432:36:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;44432:36:0;:48:::1;;::::0;::::1;;:57;44424:99;;;::::0;-1:-1:-1;;;44424:99:0;;8421:2:1;44424:99:0::1;::::0;::::1;8403:21:1::0;8460:2;8440:18;;;8433:30;8499:31;8479:18;;;8472:59;8548:18;;44424:99:0::1;8219:353:1::0;44424:99:0::1;44568:22;44554:8;44563:1;44554:11;;;;;;;;:::i;:::-;;;;;;;:36;44546:64;;;::::0;-1:-1:-1;;;44546:64:0;;10034:2:1;44546:64:0::1;::::0;::::1;10016:21:1::0;10073:2;10053:18;;;10046:30;-1:-1:-1;;;10092:18:1;;;10085:45;10147:18;;44546:64:0::1;9832:339:1::0;44546:64:0::1;44633:19;44655:28;44668:8;44677:1;44668:11;;;;;;;;:::i;:::-;;;;;;;44681:1;44655:12;:28::i;:::-;44633:50;;44789:11;44706:16;:36;44723:15;44739:1;44723:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44706:36:0::1;-1:-1:-1::0;;;;;44706:36:0::1;;;;;;;;;;;;:79;;;:94;;;;;;;:::i;:::-;;;;;;;;44906:15;44922:1;44906:18;;;;;;;;:::i;:::-;;;;;;;44823:16;:36;44840:15;44856:1;44840:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44823:36:0::1;-1:-1:-1::0;;;;;44823:36:0::1;;;;;;;;;;;;:80;;;:101;;;;;-1:-1:-1::0;;;;;44823:101:0::1;;;;;-1:-1:-1::0;;;;;44823:101:0::1;;;;;;44998:4;44947:16;:36;44964:15;44980:1;44964:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;44947:36:0::1;-1:-1:-1::0;;;;;44947:36:0::1;;;;;;;;;;;;:48;;;:55;;;;;;;;;;;;;;;;;;45025:16;:36;45042:15;45058:1;45042:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;45025:36:0::1;-1:-1:-1::0;;;;;45025:36:0::1;;;;;;;;;;;;:52;;45113:240;;;;;;;;45163:15;45113:240;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;45113:240:0::1;;::::0;::::1;;;;45258:15;45274:1;45258:18;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;45113:240:0::1;::::0;;;;::::1;::::0;;;45025:351;;::::1;::::0;;::::1;::::0;;-1:-1:-1;45025:351:0;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;45025:351:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;45025:351:0::1;-1:-1:-1::0;;;;;45025:351:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;45435:20:0;45422:46:::1;::::0;45456:11;45422:12:::1;:46::i;:::-;45399:20;:69:::0;-1:-1:-1;44393:1095:0::1;44370:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44337:1166;;;-1:-1:-1::0;44318:3:0;::::1;::::0;::::1;:::i;:::-;;;;44277:1237;;;-1:-1:-1::0;45531:4:0::1;::::0;44144:1399;-1:-1:-1;;;44144:1399:0:o;42358:151::-;42442:12;;42474:26;;-1:-1:-1;;;42474:26:0;;42494:4;42474:26;;;4475:51:1;42406:7:0;;-1:-1:-1;;;;;42442:12:0;;;;42474:11;;4448:18:1;;42474:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42466:35;;;42358:151;:::o;45555:193::-;45713:10;45696:28;;;;:16;:28;;;;;;;;:44;;45689:51;;;;;;;;;;;;;;;;;45639:32;;45689:51;;45696:44;;45689:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;45689:51:0;;;-1:-1:-1;;45689:51:0;;;;-1:-1:-1;;;;;45689:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45555:193;:::o;45756:198::-;45922:10;45805:7;45905:28;;;:16;:28;;;;;:41;;;;45845:44;;;;;:101;;45905:41;45845:101;:::i;:::-;45825:121;;45756:198;:::o;31885:201::-;31022:7;31049:6;-1:-1:-1;;;;;31049:6:0;4345:10;31196:23;31188:68;;;;-1:-1:-1;;;31188:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31974:22:0;::::1;31966:73;;;::::0;-1:-1:-1;;;31966:73:0;;8014:2:1;31966:73:0::1;::::0;::::1;7996:21:1::0;8053:2;8033:18;;;8026:30;8092:34;8072:18;;;8065:62;-1:-1:-1;;;8143:18:1;;;8136:36;8189:19;;31966:73:0::1;7812:402:1::0;31966:73:0::1;32050:28;32069:8;32050:18;:28::i;:::-;31885:201:::0;:::o;42517:1619::-;42685:4;42724:10;-1:-1:-1;;;;;42724:35:0;;;;42702:135;;;;-1:-1:-1;;;42702:135:0;;7595:2:1;42702:135:0;;;7577:21:1;7634:2;7614:18;;;7607:30;7673:34;7653:18;;;7646:62;-1:-1:-1;;;7724:18:1;;;7717:48;7782:19;;42702:135:0;7393:414:1;42702:135:0;42865:10;42848:28;;;;:16;:28;;;;;;;;:49;;;;;;;;:::i;:::-;-1:-1:-1;42953:10:0;42908:28;;;;:16;:28;;;;;:42;;;;:55;;-1:-1:-1;;;;;;42908:55:0;;;;;;;39711:15;42974:44;;;;:67;;;43102:20;;43075:93;;:12;:93::i;:::-;43052:20;:116;-1:-1:-1;;;;;43193:35:0;;;43189:778;;-1:-1:-1;;;;;43245:39:0;;;;;;:16;:39;;;;;;;;:67;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;43327:39:0;;;;;;:16;:39;;;;;:53;;;;:77;;-1:-1:-1;;;;;;43327:77:0;;;;;;;43419:58;;:63;;:58;;43327:39;43419:63;;43327:53;;43419:63;:::i;:::-;;;;-1:-1:-1;;;;;;;43497:39:0;;;;;;:16;:39;;;;;:52;;:76;;39641:15;;43497:39;:76;;39641:15;;43497:76;:::i;:::-;;;;-1:-1:-1;;43624:20:0;;43611:55;;39641:15;43611:12;:55::i;:::-;43588:20;:78;;;-1:-1:-1;;;;;43681:39:0;;;;;;:16;:39;;;;;;;;43760:180;;;;;;;43798:15;43760:180;;;;;;;;43868:10;43760:180;;;;;;;39641:15;43760:180;;;;43681:55;;;;:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;43760:180;;43681:274;;;;;;;;;;:::i;:::-;-1:-1:-1;43681:274:0;;;;;;;;;-1:-1:-1;;;;;;43681:274:0;-1:-1:-1;;;;;43681:274:0;;;;;;;;;;;;;;;;;;;43189:778;43982:124;44018:10;44043:21;44079:16;43982:124;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;44124:4:0;42517:1619;;;;;:::o;32246:191::-;32320:16;32339:6;;-1:-1:-1;;;;;32356:17:0;;;-1:-1:-1;;;;;;32356:17:0;;;;;;32389:40;;32339:6;;;;;;;32389:40;;32320:16;32389:40;32309:128;32246:191;:::o;36444:98::-;36502:7;36529:5;36533:1;36529;:5;:::i;:::-;36522:12;36444:98;-1:-1:-1;;;36444:98:0:o;35307:::-;35365:7;35392:5;35396:1;35392;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:673::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;403:60;419:43;459:2;419:43;:::i;:::-;403:60;:::i;:::-;485:3;509:2;504:3;497:15;537:2;532:3;528:12;521:19;;572:2;564:6;560:15;624:3;619:2;613;610:1;606:10;598:6;594:23;590:32;587:41;584:61;;;641:1;638;631:12;584:61;663:1;673:163;687:2;684:1;681:9;673:163;;;744:17;;732:30;;782:12;;;;814;;;;705:1;698:9;673:163;;;-1:-1:-1;854:5:1;;192:673;-1:-1:-1;;;;;;;192:673:1:o;870:531::-;913:5;966:3;959:4;951:6;947:17;943:27;933:55;;984:1;981;974:12;933:55;1020:6;1007:20;1046:18;1042:2;1039:26;1036:52;;;1068:18;;:::i;:::-;1112:55;1155:2;1136:13;;-1:-1:-1;;1132:27:1;1161:4;1128:38;1112:55;:::i;:::-;1192:2;1183:7;1176:19;1238:3;1231:4;1226:2;1218:6;1214:15;1210:26;1207:35;1204:55;;;1255:1;1252;1245:12;1204:55;1320:2;1313:4;1305:6;1301:17;1294:4;1285:7;1281:18;1268:55;1368:1;1343:16;;;1361:4;1339:27;1332:38;;;;1347:7;870:531;-1:-1:-1;;;870:531:1:o;1406:186::-;1465:6;1518:2;1506:9;1497:7;1493:23;1489:32;1486:52;;;1534:1;1531;1524:12;1486:52;1557:29;1576:9;1557:29;:::i;1597:1157::-;1715:6;1723;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1832:9;1819:23;1861:18;1902:2;1894:6;1891:14;1888:34;;;1918:1;1915;1908:12;1888:34;1956:6;1945:9;1941:22;1931:32;;2001:7;1994:4;1990:2;1986:13;1982:27;1972:55;;2023:1;2020;2013:12;1972:55;2059:2;2046:16;2081:4;2105:60;2121:43;2161:2;2121:43;:::i;2105:60::-;2187:3;2211:2;2206:3;2199:15;2239:2;2234:3;2230:12;2223:19;;2270:2;2266;2262:11;2318:7;2313:2;2307;2304:1;2300:10;2296:2;2292:19;2288:28;2285:41;2282:61;;;2339:1;2336;2329:12;2282:61;2361:1;2352:10;;2371:169;2385:2;2382:1;2379:9;2371:169;;;2442:23;2461:3;2442:23;:::i;:::-;2430:36;;2403:1;2396:9;;;;;2486:12;;;;2518;;2371:169;;;-1:-1:-1;2559:5:1;-1:-1:-1;;2602:18:1;;2589:32;;-1:-1:-1;;2633:16:1;;;2630:36;;;2662:1;2659;2652:12;2630:36;;2685:63;2740:7;2729:8;2718:9;2714:24;2685:63;:::i;:::-;2675:73;;;1597:1157;;;;;:::o;2759:277::-;2826:6;2879:2;2867:9;2858:7;2854:23;2850:32;2847:52;;;2895:1;2892;2885:12;2847:52;2927:9;2921:16;2980:5;2973:13;2966:21;2959:5;2956:32;2946:60;;3002:1;2999;2992:12;3041:617;3138:6;3146;3154;3207:2;3195:9;3186:7;3182:23;3178:32;3175:52;;;3223:1;3220;3213:12;3175:52;3263:9;3250:23;3292:18;3333:2;3325:6;3322:14;3319:34;;;3349:1;3346;3339:12;3319:34;3372:50;3414:7;3405:6;3394:9;3390:22;3372:50;:::i;:::-;3362:60;;3475:2;3464:9;3460:18;3447:32;3431:48;;3504:2;3494:8;3491:16;3488:36;;;3520:1;3517;3510:12;3488:36;;3543:52;3587:7;3576:8;3565:9;3561:24;3543:52;:::i;:::-;3533:62;;;3614:38;3648:2;3637:9;3633:18;3614:38;:::i;:::-;3604:48;;3041:617;;;;;:::o;3663:184::-;3733:6;3786:2;3774:9;3765:7;3761:23;3757:32;3754:52;;;3802:1;3799;3792:12;3754:52;-1:-1:-1;3825:16:1;;3663:184;-1:-1:-1;3663:184:1:o;3852:472::-;3894:3;3932:5;3926:12;3959:6;3954:3;3947:19;3984:1;3994:162;4008:6;4005:1;4002:13;3994:162;;;4070:4;4126:13;;;4122:22;;4116:29;4098:11;;;4094:20;;4087:59;4023:12;3994:162;;;4174:6;4171:1;4168:13;4165:87;;;4240:1;4233:4;4224:6;4219:3;4215:16;4211:27;4204:38;4165:87;-1:-1:-1;4306:2:1;4285:15;-1:-1:-1;;4281:29:1;4272:39;;;;4313:4;4268:50;;3852:472;-1:-1:-1;;3852:472:1:o;4846:418::-;-1:-1:-1;;;;;5089:15:1;;;5071:34;;5141:15;;5136:2;5121:18;;5114:43;5193:2;5188;5173:18;;5166:30;;;5014:4;;5213:45;;5239:18;;5231:6;5213:45;:::i;:::-;5205:53;4846:418;-1:-1:-1;;;;;4846:418:1:o;5928:1268::-;6136:4;6165:2;6205;6194:9;6190:18;6235:2;6224:9;6217:21;6258:6;6293;6287:13;6324:6;6316;6309:22;6350:2;6340:12;;6383:2;6372:9;6368:18;6361:25;;6445:2;6435:6;6432:1;6428:14;6417:9;6413:30;6409:39;6483:2;6475:6;6471:15;6504:1;6514:653;6528:6;6525:1;6522:13;6514:653;;;6621:2;6617:7;6605:9;6597:6;6593:22;6589:36;6584:3;6577:49;6655:6;6649:13;6685:4;6723:2;6717:9;6709:6;6702:25;6774:2;6770;6766:11;6760:18;6815:2;6810;6802:6;6798:15;6791:27;6845:48;6889:2;6881:6;6877:15;6863:12;6845:48;:::i;:::-;6940:11;;;6934:18;-1:-1:-1;;;;;6930:44:1;6913:15;;;6906:69;6998:4;7045:11;;;7039:18;7022:15;;;;7015:43;;;;-1:-1:-1;;7145:12:1;;;;7110:15;;;;6971:1;6543:9;6514:653;;;-1:-1:-1;7184:6:1;;5928:1268;-1:-1:-1;;;;;;;;5928:1268:1:o;8992:356::-;9194:2;9176:21;;;9213:18;;;9206:30;9272:34;9267:2;9252:18;;9245:62;9339:2;9324:18;;8992:356::o;10531:1911::-;10689:4;10718:2;10747;10736:9;10729:21;10785:6;10779:13;10828:4;10823:2;10812:9;10808:18;10801:32;10856:52;10903:3;10892:9;10888:19;10874:12;10856:52;:::i;:::-;10842:66;;10957:2;10949:6;10945:15;10939:22;10980:2;11018:1;11014;11009:3;11005:11;11001:19;11076:2;11060:14;11056:23;11051:2;11040:9;11036:18;11029:51;11117:2;11109:6;11105:15;11099:22;11089:32;;11140:2;11178;11173;11162:9;11158:18;11151:30;11218:2;11210:6;11206:15;11200:22;11190:32;;11241:3;11280:2;11275;11264:9;11260:18;11253:30;11338:2;11330:6;11326:15;11320:22;11314:3;11303:9;11299:19;11292:51;11412:3;11404:6;11400:16;11394:23;11387:31;11380:39;11374:3;11363:9;11359:19;11352:68;11469:3;11461:6;11457:16;11451:23;11429:45;;11497:2;11493:7;11566:2;11554:9;11546:6;11542:22;11538:31;11531:4;11520:9;11516:20;11509:61;11590:6;11625:14;11619:21;11664:6;11656;11649:22;11699:2;11691:6;11687:15;11680:22;;11758:2;11748:6;11745:1;11741:14;11733:6;11729:27;11725:36;11804:2;11788:14;11784:23;11770:37;;11825:1;11835:578;11849:6;11846:1;11843:13;11835:578;;;11935:2;11926:6;11918;11914:19;11910:28;11905:3;11898:41;11968:6;11962:13;12009:2;12003:9;11995:6;11988:25;12062:2;12058;12054:11;12048:18;12103:2;12098;12090:6;12086:15;12079:27;12133:50;12179:2;12171:6;12167:15;12151:14;12133:50;:::i;:::-;12230:11;;;12224:18;12220:27;;12203:15;;;12196:52;12291:11;;;12285:18;12268:15;;;12261:43;;;;12356:15;;;;12391:12;;;;12119:64;-1:-1:-1;11871:1:1;11864:9;11835:578;;;-1:-1:-1;12430:6:1;10531:1911;-1:-1:-1;;;;;;;;;;;;;10531:1911:1:o;12629:275::-;12700:2;12694:9;12765:2;12746:13;;-1:-1:-1;;12742:27:1;12730:40;;12800:18;12785:34;;12821:22;;;12782:62;12779:88;;;12847:18;;:::i;:::-;12883:2;12876:22;12629:275;;-1:-1:-1;12629:275:1:o;12909:183::-;12969:4;13002:18;12994:6;12991:30;12988:56;;;13024:18;;:::i;:::-;-1:-1:-1;13069:1:1;13065:14;13081:4;13061:25;;12909:183::o;13097:128::-;13137:3;13168:1;13164:6;13161:1;13158:13;13155:39;;;13174:18;;:::i;:::-;-1:-1:-1;13210:9:1;;13097:128::o;13230:217::-;13270:1;13296;13286:132;;13340:10;13335:3;13331:20;13328:1;13321:31;13375:4;13372:1;13365:15;13403:4;13400:1;13393:15;13286:132;-1:-1:-1;13432:9:1;;13230:217::o;13452:380::-;13531:1;13527:12;;;;13574;;;13595:61;;13649:4;13641:6;13637:17;13627:27;;13595:61;13702:2;13694:6;13691:14;13671:18;13668:38;13665:161;;;13748:10;13743:3;13739:20;13736:1;13729:31;13783:4;13780:1;13773:15;13811:4;13808:1;13801:15;13665:161;;13452:380;;;:::o;13837:135::-;13876:3;-1:-1:-1;;13897:17:1;;13894:43;;;13917:18;;:::i;:::-;-1:-1:-1;13964:1:1;13953:13;;13837:135::o;13977:127::-;14038:10;14033:3;14029:20;14026:1;14019:31;14069:4;14066:1;14059:15;14093:4;14090:1;14083:15;14109:127;14170:10;14165:3;14161:20;14158:1;14151:31;14201:4;14198:1;14191:15;14225:4;14222:1;14215:15;14241:127;14302:10;14297:3;14293:20;14290:1;14283:31;14333:4;14330:1;14323:15;14357:4;14354:1;14347:15

Swarm Source

ipfs://1c383d5bb0ff68b80b97dd8b1b8d87b91e61636bafc147cd18ae00cef8d226a8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.