Contract 0x27cd006548df7c8c8e9fdc4a67fa05c2e3ca5cf9

Contract Overview

Plastiks: PLASTIK Token
Balance:
0 CELO

CELO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4c74e6cfa8017c6b6795144211b547231a0f9214d6d65e9b138d73e2318cfdb7Approve197055892023-06-08 3:49:5615 mins ago0x1f5dc0318c63f119614ca0412f8e630712088f07 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x733319ba125140e05bf1d153b6045fb8a2ba13bb00d09dd57ef72ff9f2111ddcApprove197055732023-06-08 3:48:3617 mins ago0x5bf93fece196811340bbb7eb4a8a377d0ef391fd IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x8a7191fa3a54a584cd74a6391d3516f84be3f4c9b4db93657004b7a89b317dd3Approve197051772023-06-08 3:15:3650 mins ago0xd26f17f014cc1a5c6b8a231a5acf0bef954687d7 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xa877e3ace21c53e5e8d2144fc4c3e525469359950345034d3b1af9ad7c3cce5fApprove197050692023-06-08 3:06:3659 mins ago0xc30e11c2188a8aa742fe42d30c379a383b843dd1 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x4dae0a6714955514621ac559dca200bc78b1a6dcd2217fb4afe65f649ed3b149Approve197050492023-06-08 3:04:561 hr ago0x55fae11ed3d90c0b90e6213525a98681b83fc528 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xbf96a5f8b30891a71547cba8279e077d26151b400d6cc224256f4054fc4f6ff2Approve197048162023-06-08 2:45:311 hr 20 mins ago0x018e447264fe93c3c21cef15fc0004a75fa4ed27 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xb238939ef1bfe34a9308e501fd1d8b70bc9e97e2c698014dc88c825f1dc52b6cApprove197044732023-06-08 2:16:561 hr 48 mins ago0x88bb586490b3c90b8bee10e0c6ecb604425aaf86 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xc34eaca7d07ccbcbc8284748df7bf92c70643e951bb761849394da72e68d1304Approve197039892023-06-08 1:36:362 hrs 29 mins ago0xede460597dd2156fdd509db69056252ec07ee8bc IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x414bad910de8f913807d56ba3eae94006111541ed62587d802b04bc01378f9a7Approve197038972023-06-08 1:28:562 hrs 36 mins ago0x4eaa789fc9f029e4554c4bceed50bc25795943fd IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x63853a4ab6398dfb762e81d276a64abc452770980f22d1543c6efea89000e6c1Approve197037532023-06-08 1:16:562 hrs 48 mins ago0xf131fd065a814f4cba731efe2e31085f405efaee IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xde4f38058469a6faae25e50dabb7edef7af322999296bfee32b2907e48c02472Approve197034852023-06-08 0:54:363 hrs 11 mins ago0x4e7e3dea9090c097447cf9559c77a5b7fdf4919d IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x1dce4fbf5bb7261406d1004566f99d7e2a627df997c957cd9eca9650a0baaf5aApprove197031412023-06-08 0:25:563 hrs 39 mins ago0x67cc13c614997e90fd215f4df4536e35f8f24938 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x919e7d1399f7c03c03c1662c62a2d0c9d069fa220332e70f586c77a6f42d6e69Approve197028732023-06-08 0:03:364 hrs 2 mins ago0xbc728f247808bb8e75e76ce7082c6f654a4e1c2f IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x4c9a272292de862a2a226be9b77a18fae4ddcf18cf30ef75913c47894d4fbf94Approve197023332023-06-07 23:18:364 hrs 47 mins ago0xf3df66f9e32a2679c6a8a09ee107304e686e7ad2 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0x0714b4d5e87c113d5c56bc0655115763e0c10d9d7e9d381e2597550a349ea18aApprove197022612023-06-07 23:12:364 hrs 53 mins ago0x1276b29444ec4c0db0d78c4eb4ca4c5bb48cb4e9 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xae96fe03a921ade180978a5006868ae0599ce2b56b7e126cf0b500ab9704b638Approve197020972023-06-07 22:58:565 hrs 6 mins ago0xe9f52c915e84c2dc4d6b7e1350e120ebc258e5d7 IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xb6719157871dcd530a9cd13eb9a0f8631629cc995759a3374f98ab5442d6718bApprove197019892023-06-07 22:49:565 hrs 15 mins ago0x0592cc258996b0230a1242226a8493b2658f2b0e IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xd16c5fe683ef69102fb4b93532dafc305a97b847edf6a9d16d4862abc7dcdda8Approve197018092023-06-07 22:34:565 hrs 30 mins ago0x13b651b6e071fd1bd546022272af33037dfb45fc IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xfbd99d2c76ea49cb37df2a5494204781c37192c76d7c4683d29fadb541405479Approve197017212023-06-07 22:27:365 hrs 38 mins ago0x216f04b87992e60638d7eb2ea682c02b1cc2d3af IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xf6eec8bf0d8f4ef6ed2415f63278ff2f8109c7969f9ccf64294251d01d9e3773Approve197015212023-06-07 22:10:565 hrs 54 mins ago0xef35477ad4a2cd7c4368f63c0fa2e5ae8ea4b4ef IN  Plastiks: PLASTIK Token0 CELO0.0045653
0xa7edad29ce6ead7e6cfd42c663079cc839021fa6af3b21f42568ac33be7dbac1Approve197013862023-06-07 21:59:416 hrs 5 mins ago0x014ed27c7f3f3e602ac1a512cf14af4bc7da55b2 IN  Plastiks: PLASTIK Token0 CELO0.0002235375
0x122a1fa318833794866d68d1792c66a9da8e10e7566e826d1d8436b5981dc02cApprove197011412023-06-07 21:39:166 hrs 26 mins ago0x7d251fa17e93572cbdec81e2915ff2478c3a1c38 IN  Plastiks: PLASTIK Token0 CELO0.0001929675
0xf07d92b1852a08d59bce73b9b746484a817ea435ad81d81390ed259ee0ecf172Approve197011382023-06-07 21:39:016 hrs 26 mins ago0x7d251fa17e93572cbdec81e2915ff2478c3a1c38 IN  Plastiks: PLASTIK Token0 CELO0.0001929675
0x7f83ab6c43b7611f47b7766acfafe431cb0d2fceb7f7fdb7e27abdcb054735a5Approve197011212023-06-07 21:37:366 hrs 28 mins ago0x7d251fa17e93572cbdec81e2915ff2478c3a1c38 IN  Plastiks: PLASTIK Token0 CELO0.0002237175
0xb5e305b7c832b4d23328a96252ee58de420116367e50416659c9e3b0e363e2dcApprove197011122023-06-07 21:36:516 hrs 28 mins ago0x7d251fa17e93572cbdec81e2915ff2478c3a1c38 IN  Plastiks: PLASTIK Token0 CELO0.0001929675
[ Download CSV Export 

OVERVIEW

Plastiks is a Greentech start-up that improves plastic recovery and recycling rates by connecting companies with recovery projects worldwide.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PlastikToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : PlastikToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";


contract PlastikToken is ERC20, ERC20Pausable {
    
    address private _owner;
    mapping(address => bool) private _lockers;
    mapping(address => uint256) private _locks;
    
    constructor() ERC20("PLASTIK Token", "PLASTIK") {
        _owner = _msgSender();
        _lockers[_msgSender()] = true;
        _mint(_msgSender(), 1000000000 * (10 ** decimals()));
    }

    modifier onlyOwner {
      require(msg.sender == _owner);
      _;
    }

    function pause() public virtual onlyOwner {
        _pause();
    }

    function unpause() public virtual onlyOwner {
        _unpause();
    }
    
    function decimals() public view virtual override(ERC20) returns (uint8) {
        return 9;
    }
    
    function setLocker(address locker, bool canLock) public virtual onlyOwner {
        _lockers[locker] = canLock;
    }
    
    function getLockupTime(address _address) public view virtual returns (uint256) {
        return _locks[_address];
    }

    function transferWithLockup(address recipient, uint256 amount, uint numMonthsLockup) public virtual returns (bool) {
        require(numMonthsLockup > 0 && numMonthsLockup <= 12, "Lockup cannot be smaller than 0 or greater than 12 months");
        require(_lockers[_msgSender()], "Only lockers can lock");
        uint256 previousBalance = balanceOf(recipient);
        transfer(recipient, amount);
        if(_locks[recipient] == 0 && previousBalance == 0) {
            _locks[recipient] = block.timestamp + (numMonthsLockup * 4 weeks );
        }
        return true;
    }

    function transferFromWithLockup(address sender, address recipient, uint256 amount, uint numMonthsLockup) public virtual returns (bool) {
        require(numMonthsLockup > 0 && numMonthsLockup <= 12, "Lockup cannot be smaller than 0 or greater than 12 months");
        require(_lockers[_msgSender()], "Only lockers can lock");
        uint256 previousBalance = balanceOf(recipient);
        transferFrom(sender, recipient, amount);
        if(_locks[recipient] == 0 && previousBalance == 0) {
            _locks[recipient] = block.timestamp + (numMonthsLockup * 4 weeks );
        }
        return true;
    }
    
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override(ERC20, ERC20Pausable) {
        require(_owner == from || _locks[from] == 0 || _locks[from] <= block.timestamp, "Wallet is locked");
        super._beforeTokenTransfer(from, to, amount);
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/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.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, 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;
        }
        _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 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 3 of 7 : ERC20Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Pausable.sol)

pragma solidity ^0.8.0;

import "../ERC20.sol";
import "../../../security/Pausable.sol";

/**
 * @dev ERC20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
abstract contract ERC20Pausable is ERC20, Pausable {
    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        require(!paused(), "ERC20Pausable: token transfer while paused");
    }
}

File 4 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/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 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/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 7 : Context.sol
// SPDX-License-Identifier: MIT
// 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 7 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

Settings
{
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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"}],"name":"getLockupTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"locker","type":"address"},{"internalType":"bool","name":"canLock","type":"bool"}],"name":"setLocker","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numMonthsLockup","type":"uint256"}],"name":"transferFromWithLockup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numMonthsLockup","type":"uint256"}],"name":"transferWithLockup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600d81526020017f504c415354494b20546f6b656e000000000000000000000000000000000000008152506040518060400160405280600781526020017f504c415354494b000000000000000000000000000000000000000000000000008152508160039080519060200190620000969291906200053a565b508060049080519060200190620000af9291906200053a565b5050506000600560006101000a81548160ff021916908315150217905550620000dd620001d960201b60201c565b600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016006600062000133620001d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001d362000198620001d960201b60201c565b620001a8620001e160201b60201c565b600a620001b6919062000784565b633b9aca00620001c79190620007d5565b620001ea60201b60201c565b62000ab3565b600033905090565b60006009905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200025d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002549062000897565b60405180910390fd5b62000271600083836200036360201b60201c565b8060026000828254620002859190620008b9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002dc9190620008b9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000343919062000927565b60405180910390a36200035f60008383620004a960201b60201c565b5050565b8273ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620003ff57506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b806200044a575042600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b6200048c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004839062000994565b60405180910390fd5b620004a4838383620004ae60201b62000c3d1760201c565b505050565b505050565b620004c68383836200051e60201b62000c951760201c565b620004d66200052360201b60201c565b1562000519576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005109062000a2c565b60405180910390fd5b505050565b505050565b6000600560009054906101000a900460ff16905090565b828054620005489062000a7d565b90600052602060002090601f0160209004810192826200056c5760008555620005b8565b82601f106200058757805160ff1916838001178555620005b8565b82800160010185558215620005b8579182015b82811115620005b75782518255916020019190600101906200059a565b5b509050620005c79190620005cb565b5090565b5b80821115620005e6576000816000905550600101620005cc565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620006785780860481111562000650576200064f620005ea565b5b6001851615620006605780820291505b8081029050620006708562000619565b945062000630565b94509492505050565b60008262000693576001905062000766565b81620006a3576000905062000766565b8160018114620006bc5760028114620006c757620006fd565b600191505062000766565b60ff841115620006dc57620006db620005ea565b5b8360020a915084821115620006f657620006f5620005ea565b5b5062000766565b5060208310610133831016604e8410600b8410161715620007375782820a905083811115620007315762000730620005ea565b5b62000766565b62000746848484600162000626565b9250905081840481111562000760576200075f620005ea565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000791826200076d565b91506200079e8362000777565b9250620007cd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000681565b905092915050565b6000620007e2826200076d565b9150620007ef836200076d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200082b576200082a620005ea565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200087f601f8362000836565b91506200088c8262000847565b602082019050919050565b60006020820190508181036000830152620008b28162000870565b9050919050565b6000620008c6826200076d565b9150620008d3836200076d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200090b576200090a620005ea565b5b828201905092915050565b62000921816200076d565b82525050565b60006020820190506200093e600083018462000916565b92915050565b7f57616c6c6574206973206c6f636b656400000000000000000000000000000000600082015250565b60006200097c60108362000836565b9150620009898262000944565b602082019050919050565b60006020820190508181036000830152620009af816200096d565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b600062000a14602a8362000836565b915062000a2182620009b6565b604082019050919050565b6000602082019050818103600083015262000a478162000a05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a9657607f821691505b6020821081141562000aad5762000aac62000a4e565b5b50919050565b6120698062000ac36000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80635c975abb116100a257806395d89b411161007157806395d89b41146102e3578063a3ca4b4014610301578063a457c2d714610331578063a9059cbb14610361578063dd62ed3e1461039157610116565b80635c975abb1461026f57806362370ce11461028d57806370a08231146102a95780638456cb59146102d957610116565b8063313ce567116100e9578063313ce567146101b757806339509351146101d55780633f4ba83a146102055780634a909d5f1461020f5780635a5991821461023f57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b6101236103c1565b60405161013091906114a5565b60405180910390f35b610153600480360381019061014e9190611560565b610453565b60405161016091906115bb565b60405180910390f35b610171610476565b60405161017e91906115e5565b60405180910390f35b6101a1600480360381019061019c9190611600565b610480565b6040516101ae91906115bb565b60405180910390f35b6101bf6104af565b6040516101cc919061166f565b60405180910390f35b6101ef60048036038101906101ea9190611560565b6104b8565b6040516101fc91906115bb565b60405180910390f35b61020d6104ef565b005b6102296004803603810190610224919061168a565b610553565b60405161023691906115bb565b60405180910390f35b610259600480360381019061025491906116dd565b61070d565b60405161026691906115e5565b60405180910390f35b610277610756565b60405161028491906115bb565b60405180910390f35b6102a760048036038101906102a29190611736565b61076d565b005b6102c360048036038101906102be91906116dd565b610822565b6040516102d091906115e5565b60405180910390f35b6102e161086a565b005b6102eb6108ce565b6040516102f891906114a5565b60405180910390f35b61031b60048036038101906103169190611776565b610960565b60405161032891906115bb565b60405180910390f35b61034b60048036038101906103469190611560565b610b1c565b60405161035891906115bb565b60405180910390f35b61037b60048036038101906103769190611560565b610b93565b60405161038891906115bb565b60405180910390f35b6103ab60048036038101906103a691906117dd565b610bb6565b6040516103b891906115e5565b60405180910390f35b6060600380546103d09061184c565b80601f01602080910402602001604051908101604052809291908181526020018280546103fc9061184c565b80156104495780601f1061041e57610100808354040283529160200191610449565b820191906000526020600020905b81548152906001019060200180831161042c57829003601f168201915b5050505050905090565b60008061045e610c9a565b905061046b818585610ca2565b600191505092915050565b6000600254905090565b60008061048b610c9a565b9050610498858285610e6d565b6104a3858585610ef9565b60019150509392505050565b60006009905090565b6000806104c3610c9a565b90506104e48185856104d58589610bb6565b6104df91906118ad565b610ca2565b600191505092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461054957600080fd5b61055161117a565b565b600080821180156105655750600c8211155b6105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90611975565b60405180910390fd5b600660006105b0610c9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062e906119e1565b60405180910390fd5b600061064285610822565b905061064e8585610b93565b506000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561069e5750600081145b15610701576224ea00836106b29190611a01565b426106bd91906118ad565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60019150509392505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900460ff16905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c757600080fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c457600080fd5b6108cc6111dd565b565b6060600480546108dd9061184c565b80601f01602080910402602001604051908101604052809291908181526020018280546109099061184c565b80156109565780601f1061092b57610100808354040283529160200191610956565b820191906000526020600020905b81548152906001019060200180831161093957829003601f168201915b5050505050905090565b600080821180156109725750600c8211155b6109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a890611975565b60405180910390fd5b600660006109bd610c9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b906119e1565b60405180910390fd5b6000610a4f85610822565b9050610a5c868686610480565b506000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054148015610aac5750600081145b15610b0f576224ea0083610ac09190611a01565b42610acb91906118ad565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001915050949350505050565b600080610b27610c9a565b90506000610b358286610bb6565b905083811015610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7190611acd565b60405180910390fd5b610b878286868403610ca2565b60019250505092915050565b600080610b9e610c9a565b9050610bab818585610ef9565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c48838383610c95565b610c50610756565b15610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611b5f565b60405180910390fd5b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990611bf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990611c83565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e6091906115e5565b60405180910390a3505050565b6000610e798484610bb6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ef35781811015610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90611cef565b60405180910390fd5b610ef28484848403610ca2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090611d81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd090611e13565b60405180910390fd5b610fe4838383611240565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190611ea5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110fd91906118ad565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161116191906115e5565b60405180910390a3611174848484611374565b50505050565b611182611379565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111c6610c9a565b6040516111d39190611ed4565b60405180910390a1565b6111e56113c2565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611229610c9a565b6040516112369190611ed4565b60405180910390a1565b8273ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112db57506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b80611325575042600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90611f3b565b60405180910390fd5b61136f838383610c3d565b505050565b505050565b611381610756565b6113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790611fa7565b60405180910390fd5b565b6113ca610756565b1561140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190612013565b60405180910390fd5b565b600081519050919050565b600082825260208201905092915050565b60005b8381101561144657808201518184015260208101905061142b565b83811115611455576000848401525b50505050565b6000601f19601f8301169050919050565b60006114778261140c565b6114818185611417565b9350611491818560208601611428565b61149a8161145b565b840191505092915050565b600060208201905081810360008301526114bf818461146c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114f7826114cc565b9050919050565b611507816114ec565b811461151257600080fd5b50565b600081359050611524816114fe565b92915050565b6000819050919050565b61153d8161152a565b811461154857600080fd5b50565b60008135905061155a81611534565b92915050565b60008060408385031215611577576115766114c7565b5b600061158585828601611515565b92505060206115968582860161154b565b9150509250929050565b60008115159050919050565b6115b5816115a0565b82525050565b60006020820190506115d060008301846115ac565b92915050565b6115df8161152a565b82525050565b60006020820190506115fa60008301846115d6565b92915050565b600080600060608486031215611619576116186114c7565b5b600061162786828701611515565b935050602061163886828701611515565b92505060406116498682870161154b565b9150509250925092565b600060ff82169050919050565b61166981611653565b82525050565b60006020820190506116846000830184611660565b92915050565b6000806000606084860312156116a3576116a26114c7565b5b60006116b186828701611515565b93505060206116c28682870161154b565b92505060406116d38682870161154b565b9150509250925092565b6000602082840312156116f3576116f26114c7565b5b600061170184828501611515565b91505092915050565b611713816115a0565b811461171e57600080fd5b50565b6000813590506117308161170a565b92915050565b6000806040838503121561174d5761174c6114c7565b5b600061175b85828601611515565b925050602061176c85828601611721565b9150509250929050565b600080600080608085870312156117905761178f6114c7565b5b600061179e87828801611515565b94505060206117af87828801611515565b93505060406117c08782880161154b565b92505060606117d18782880161154b565b91505092959194509250565b600080604083850312156117f4576117f36114c7565b5b600061180285828601611515565b925050602061181385828601611515565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061186457607f821691505b602082108114156118785761187761181d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118b88261152a565b91506118c38361152a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118f8576118f761187e565b5b828201905092915050565b7f4c6f636b75702063616e6e6f7420626520736d616c6c6572207468616e20302060008201527f6f722067726561746572207468616e203132206d6f6e74687300000000000000602082015250565b600061195f603983611417565b915061196a82611903565b604082019050919050565b6000602082019050818103600083015261198e81611952565b9050919050565b7f4f6e6c79206c6f636b6572732063616e206c6f636b0000000000000000000000600082015250565b60006119cb601583611417565b91506119d682611995565b602082019050919050565b600060208201905081810360008301526119fa816119be565b9050919050565b6000611a0c8261152a565b9150611a178361152a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a5057611a4f61187e565b5b828202905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ab7602583611417565b9150611ac282611a5b565b604082019050919050565b60006020820190508181036000830152611ae681611aaa565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000611b49602a83611417565b9150611b5482611aed565b604082019050919050565b60006020820190508181036000830152611b7881611b3c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611bdb602483611417565b9150611be682611b7f565b604082019050919050565b60006020820190508181036000830152611c0a81611bce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c6d602283611417565b9150611c7882611c11565b604082019050919050565b60006020820190508181036000830152611c9c81611c60565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611cd9601d83611417565b9150611ce482611ca3565b602082019050919050565b60006020820190508181036000830152611d0881611ccc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d6b602583611417565b9150611d7682611d0f565b604082019050919050565b60006020820190508181036000830152611d9a81611d5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611dfd602383611417565b9150611e0882611da1565b604082019050919050565b60006020820190508181036000830152611e2c81611df0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e8f602683611417565b9150611e9a82611e33565b604082019050919050565b60006020820190508181036000830152611ebe81611e82565b9050919050565b611ece816114ec565b82525050565b6000602082019050611ee96000830184611ec5565b92915050565b7f57616c6c6574206973206c6f636b656400000000000000000000000000000000600082015250565b6000611f25601083611417565b9150611f3082611eef565b602082019050919050565b60006020820190508181036000830152611f5481611f18565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000611f91601483611417565b9150611f9c82611f5b565b602082019050919050565b60006020820190508181036000830152611fc081611f84565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611ffd601083611417565b915061200882611fc7565b602082019050919050565b6000602082019050818103600083015261202c81611ff0565b905091905056fea2646970667358221220c2fd7062306a10fef6f2d3e6d6aa29439e0d0b194a53f160d5aa620debe4534d64736f6c63430008090033

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