ETH Price: $3,278.39 (-0.04%)
Gas: 12 Gwei

Token

RockstarApesCoin (ROCK)
 

Overview

Max Total Supply

769,998,455 ROCK

Holders

89

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
blueiceman.eth
Balance
777 ROCK

Value
$0.00
0xCdb21dF1551d3fa3c8119eDde8A09F0A234Fa81D
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RockstarApesCoin

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 10 of 10: TokenName.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "./ERC20.sol";
import "./Pausable.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";

//import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
//import "@openzeppelin/contracts/access/Ownable.sol";
//import "@openzeppelin/contracts/security/Pausable.sol";
//import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract RockstarApesCoin is ERC20, Pausable, Ownable, ReentrancyGuard{

    uint256 public maxSupply;

    address nftAddress = 0x3d899e0Ce7Ce47888d86595b5f7254eFB53fa4db;
    address stakingAddress = 0xc5884BD00Ea49F22174CdeB0d911c5be9dd5E88c; //must change

    constructor() ERC20("RockstarApesCoin", "ROCK"){
        maxSupply = 770000000 * (10**decimals());

        mintToken(nftAddress, 6042729);
        mintToken(stakingAddress, 250000000);
        mintToken(owner(), 513957271);
    }

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

    function unpause() public onlyOwner{
        _unpause();
    }


    function mintToken(address account, uint256 amount) public whenNotPaused onlyOwner{
        uint256 realAmount = amount * (10**decimals());
        require(totalSupply() + realAmount <= maxSupply);
        _mint(account, realAmount);
    }

    function spendToken(uint256 amount) public whenNotPaused{
        uint256 realAmount = amount * (10**decimals());
        _burn(_msgSender(), realAmount);
    }
}

File 1 of 10: 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 2 of 10: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.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 `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 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 10: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 4 of 10: 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 10: 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 10: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 7 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

    /**
     * @dev 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 8 of 10: Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "./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 Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

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

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        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());
    }
}

File 9 of 10: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spendToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052733d899e0ce7ce47888d86595b5f7254efb53fa4db600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c5884bd00ea49f22174cdeb0d911c5be9dd5e88c600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000bb57600080fd5b506040518060400160405280601081526020017f526f636b7374617241706573436f696e000000000000000000000000000000008152506040518060400160405280600481526020017f524f434b0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014092919062000666565b5080600490805190602001906200015992919062000666565b5050506000600560006101000a81548160ff021916908315150217905550620001976200018b6200026e60201b60201c565b6200027660201b60201c565b6001600681905550620001af6200033c60201b60201c565b600a620001bd9190620008b0565b632de54480620001ce919062000901565b6007819055506200020b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16625c34696200034560201b60201c565b62000243600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16630ee6b2806200034560201b60201c565b62000268620002576200049960201b60201c565b631ea25d976200034560201b60201c565b62000bb8565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b62000355620004c360201b60201c565b1562000398576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038f90620009c3565b60405180910390fd5b620003a86200026e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003ce6200049960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041e9062000a35565b60405180910390fd5b6000620004396200033c60201b60201c565b600a620004479190620008b0565b8262000454919062000901565b9050600754816200046a620004da60201b60201c565b62000476919062000a57565b11156200048257600080fd5b620004948382620004e460201b60201c565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900460ff16905090565b6000600254905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000556576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054d9062000b04565b60405180910390fd5b6200056a600083836200065c60201b60201c565b80600260008282546200057e919062000a57565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005d5919062000a57565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200063c919062000b37565b60405180910390a362000658600083836200066160201b60201c565b5050565b505050565b505050565b828054620006749062000b83565b90600052602060002090601f016020900481019282620006985760008555620006e4565b82601f10620006b357805160ff1916838001178555620006e4565b82800160010185558215620006e4579182015b82811115620006e3578251825591602001919060010190620006c6565b5b509050620006f39190620006f7565b5090565b5b8082111562000712576000816000905550600101620006f8565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007a4578086048111156200077c576200077b62000716565b5b60018516156200078c5780820291505b80810290506200079c8562000745565b94506200075c565b94509492505050565b600082620007bf576001905062000892565b81620007cf576000905062000892565b8160018114620007e85760028114620007f35762000829565b600191505062000892565b60ff84111562000808576200080762000716565b5b8360020a91508482111562000822576200082162000716565b5b5062000892565b5060208310610133831016604e8410600b8410161715620008635782820a9050838111156200085d576200085c62000716565b5b62000892565b62000872848484600162000752565b925090508184048111156200088c576200088b62000716565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620008bd8262000899565b9150620008ca83620008a3565b9250620008f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007ad565b905092915050565b60006200090e8262000899565b91506200091b8362000899565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000957576200095662000716565b5b828202905092915050565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620009ab60108362000962565b9150620009b88262000973565b602082019050919050565b60006020820190508181036000830152620009de816200099c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a1d60208362000962565b915062000a2a82620009e5565b602082019050919050565b6000602082019050818103600083015262000a508162000a0e565b9050919050565b600062000a648262000899565b915062000a718362000899565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000aa95762000aa862000716565b5b828201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000aec601f8362000962565b915062000af98262000ab4565b602082019050919050565b6000602082019050818103600083015262000b1f8162000add565b9050919050565b62000b318162000899565b82525050565b600060208201905062000b4e600083018462000b26565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b9c57607f821691505b60208210810362000bb25762000bb162000b54565b5b50919050565b6123248062000bc86000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806379c65068116100ad578063a457c2d711610071578063a457c2d7146102fb578063a9059cbb1461032b578063d5abeb011461035b578063dd62ed3e14610379578063f2fde38b146103a95761012c565b806379c650681461027d5780638456cb59146102995780638da5cb5b146102a357806395d89b41146102c1578063a2d74227146102df5761012c565b806339509351116100f457806339509351146101eb5780633f4ba83a1461021b5780635c975abb1461022557806370a0823114610243578063715018a6146102735761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103c5565b6040516101469190611616565b60405180910390f35b610169600480360381019061016491906116d1565b610457565b604051610176919061172c565b60405180910390f35b61018761047a565b6040516101949190611756565b60405180910390f35b6101b760048036038101906101b29190611771565b610484565b6040516101c4919061172c565b60405180910390f35b6101d56104b3565b6040516101e291906117e0565b60405180910390f35b610205600480360381019061020091906116d1565b6104bc565b604051610212919061172c565b60405180910390f35b6102236104f3565b005b61022d610579565b60405161023a919061172c565b60405180910390f35b61025d600480360381019061025891906117fb565b610590565b60405161026a9190611756565b60405180910390f35b61027b6105d8565b005b610297600480360381019061029291906116d1565b610660565b005b6102a1610777565b005b6102ab6107fd565b6040516102b89190611837565b60405180910390f35b6102c9610827565b6040516102d69190611616565b60405180910390f35b6102f960048036038101906102f49190611852565b6108b9565b005b610315600480360381019061031091906116d1565b610939565b604051610322919061172c565b60405180910390f35b610345600480360381019061034091906116d1565b6109b0565b604051610352919061172c565b60405180910390f35b6103636109d3565b6040516103709190611756565b60405180910390f35b610393600480360381019061038e919061187f565b6109d9565b6040516103a09190611756565b60405180910390f35b6103c360048036038101906103be91906117fb565b610a60565b005b6060600380546103d4906118ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610400906118ee565b801561044d5780601f106104225761010080835404028352916020019161044d565b820191906000526020600020905b81548152906001019060200180831161043057829003601f168201915b5050505050905090565b600080610462610b57565b905061046f818585610b5f565b600191505092915050565b6000600254905090565b60008061048f610b57565b905061049c858285610d28565b6104a7858585610db4565b60019150509392505050565b60006012905090565b6000806104c7610b57565b90506104e88185856104d985896109d9565b6104e3919061194e565b610b5f565b600191505092915050565b6104fb610b57565b73ffffffffffffffffffffffffffffffffffffffff166105196107fd565b73ffffffffffffffffffffffffffffffffffffffff161461056f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610566906119f0565b60405180910390fd5b610577611033565b565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105e0610b57565b73ffffffffffffffffffffffffffffffffffffffff166105fe6107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b906119f0565b60405180910390fd5b61065e60006110d5565b565b610668610579565b156106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90611a5c565b60405180910390fd5b6106b0610b57565b73ffffffffffffffffffffffffffffffffffffffff166106ce6107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071b906119f0565b60405180910390fd5b600061072e6104b3565b600a61073a9190611baf565b826107459190611bfa565b90506007548161075361047a565b61075d919061194e565b111561076857600080fd5b610772838261119b565b505050565b61077f610b57565b73ffffffffffffffffffffffffffffffffffffffff1661079d6107fd565b73ffffffffffffffffffffffffffffffffffffffff16146107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea906119f0565b60405180910390fd5b6107fb6112fa565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610836906118ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610862906118ee565b80156108af5780601f10610884576101008083540402835291602001916108af565b820191906000526020600020905b81548152906001019060200180831161089257829003601f168201915b5050505050905090565b6108c1610579565b15610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890611a5c565b60405180910390fd5b600061090b6104b3565b600a6109179190611baf565b826109229190611bfa565b905061093561092f610b57565b8261139d565b5050565b600080610944610b57565b9050600061095282866109d9565b905083811015610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90611cc6565b60405180910390fd5b6109a48286868403610b5f565b60019250505092915050565b6000806109bb610b57565b90506109c8818585610db4565b600191505092915050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610a68610b57565b73ffffffffffffffffffffffffffffffffffffffff16610a866107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906119f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290611d58565b60405180910390fd5b610b54816110d5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590611dea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490611e7c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d1b9190611756565b60405180910390a3505050565b6000610d3484846109d9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dae5781811015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790611ee8565b60405180910390fd5b610dad8484848403610b5f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a90611f7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e899061200c565b60405180910390fd5b610e9d838383611573565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a9061209e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb6919061194e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161101a9190611756565b60405180910390a361102d848484611578565b50505050565b61103b610579565b61107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110719061210a565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110be610b57565b6040516110cb9190611837565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190612176565b60405180910390fd5b61121660008383611573565b8060026000828254611228919061194e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461127d919061194e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112e29190611756565b60405180910390a36112f660008383611578565b5050565b611302610579565b15611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990611a5c565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611386610b57565b6040516113939190611837565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612208565b60405180910390fd5b61141882600083611573565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561149e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114959061229a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546114f591906122ba565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161155a9190611756565b60405180910390a361156e83600084611578565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115b757808201518184015260208101905061159c565b838111156115c6576000848401525b50505050565b6000601f19601f8301169050919050565b60006115e88261157d565b6115f28185611588565b9350611602818560208601611599565b61160b816115cc565b840191505092915050565b6000602082019050818103600083015261163081846115dd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116688261163d565b9050919050565b6116788161165d565b811461168357600080fd5b50565b6000813590506116958161166f565b92915050565b6000819050919050565b6116ae8161169b565b81146116b957600080fd5b50565b6000813590506116cb816116a5565b92915050565b600080604083850312156116e8576116e7611638565b5b60006116f685828601611686565b9250506020611707858286016116bc565b9150509250929050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b6117508161169b565b82525050565b600060208201905061176b6000830184611747565b92915050565b60008060006060848603121561178a57611789611638565b5b600061179886828701611686565b93505060206117a986828701611686565b92505060406117ba868287016116bc565b9150509250925092565b600060ff82169050919050565b6117da816117c4565b82525050565b60006020820190506117f560008301846117d1565b92915050565b60006020828403121561181157611810611638565b5b600061181f84828501611686565b91505092915050565b6118318161165d565b82525050565b600060208201905061184c6000830184611828565b92915050565b60006020828403121561186857611867611638565b5b6000611876848285016116bc565b91505092915050565b6000806040838503121561189657611895611638565b5b60006118a485828601611686565b92505060206118b585828601611686565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061190657607f821691505b602082108103611919576119186118bf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119598261169b565b91506119648361169b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119995761199861191f565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119da602083611588565b91506119e5826119a4565b602082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611a46601083611588565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115611ad357808604811115611aaf57611aae61191f565b5b6001851615611abe5780820291505b8081029050611acc85611a7c565b9450611a93565b94509492505050565b600082611aec5760019050611ba8565b81611afa5760009050611ba8565b8160018114611b105760028114611b1a57611b49565b6001915050611ba8565b60ff841115611b2c57611b2b61191f565b5b8360020a915084821115611b4357611b4261191f565b5b50611ba8565b5060208310610133831016604e8410600b8410161715611b7e5782820a905083811115611b7957611b7861191f565b5b611ba8565b611b8b8484846001611a89565b92509050818404811115611ba257611ba161191f565b5b81810290505b9392505050565b6000611bba8261169b565b9150611bc5836117c4565b9250611bf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611adc565b905092915050565b6000611c058261169b565b9150611c108361169b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4957611c4861191f565b5b828202905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cb0602583611588565b9150611cbb82611c54565b604082019050919050565b60006020820190508181036000830152611cdf81611ca3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d42602683611588565b9150611d4d82611ce6565b604082019050919050565b60006020820190508181036000830152611d7181611d35565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611dd4602483611588565b9150611ddf82611d78565b604082019050919050565b60006020820190508181036000830152611e0381611dc7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e66602283611588565b9150611e7182611e0a565b604082019050919050565b60006020820190508181036000830152611e9581611e59565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611ed2601d83611588565b9150611edd82611e9c565b602082019050919050565b60006020820190508181036000830152611f0181611ec5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f64602583611588565b9150611f6f82611f08565b604082019050919050565b60006020820190508181036000830152611f9381611f57565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611ff6602383611588565b915061200182611f9a565b604082019050919050565b6000602082019050818103600083015261202581611fe9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612088602683611588565b91506120938261202c565b604082019050919050565b600060208201905081810360008301526120b78161207b565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006120f4601483611588565b91506120ff826120be565b602082019050919050565b60006020820190508181036000830152612123816120e7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612160601f83611588565b915061216b8261212a565b602082019050919050565b6000602082019050818103600083015261218f81612153565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006121f2602183611588565b91506121fd82612196565b604082019050919050565b60006020820190508181036000830152612221816121e5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612284602283611588565b915061228f82612228565b604082019050919050565b600060208201905081810360008301526122b381612277565b9050919050565b60006122c58261169b565b91506122d08361169b565b9250828210156122e3576122e261191f565b5b82820390509291505056fea26469706673582212207de17b8af23793deba030197eb4183996b6f2659412d0dd571fd334881da802664736f6c634300080e0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806379c65068116100ad578063a457c2d711610071578063a457c2d7146102fb578063a9059cbb1461032b578063d5abeb011461035b578063dd62ed3e14610379578063f2fde38b146103a95761012c565b806379c650681461027d5780638456cb59146102995780638da5cb5b146102a357806395d89b41146102c1578063a2d74227146102df5761012c565b806339509351116100f457806339509351146101eb5780633f4ba83a1461021b5780635c975abb1461022557806370a0823114610243578063715018a6146102735761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103c5565b6040516101469190611616565b60405180910390f35b610169600480360381019061016491906116d1565b610457565b604051610176919061172c565b60405180910390f35b61018761047a565b6040516101949190611756565b60405180910390f35b6101b760048036038101906101b29190611771565b610484565b6040516101c4919061172c565b60405180910390f35b6101d56104b3565b6040516101e291906117e0565b60405180910390f35b610205600480360381019061020091906116d1565b6104bc565b604051610212919061172c565b60405180910390f35b6102236104f3565b005b61022d610579565b60405161023a919061172c565b60405180910390f35b61025d600480360381019061025891906117fb565b610590565b60405161026a9190611756565b60405180910390f35b61027b6105d8565b005b610297600480360381019061029291906116d1565b610660565b005b6102a1610777565b005b6102ab6107fd565b6040516102b89190611837565b60405180910390f35b6102c9610827565b6040516102d69190611616565b60405180910390f35b6102f960048036038101906102f49190611852565b6108b9565b005b610315600480360381019061031091906116d1565b610939565b604051610322919061172c565b60405180910390f35b610345600480360381019061034091906116d1565b6109b0565b604051610352919061172c565b60405180910390f35b6103636109d3565b6040516103709190611756565b60405180910390f35b610393600480360381019061038e919061187f565b6109d9565b6040516103a09190611756565b60405180910390f35b6103c360048036038101906103be91906117fb565b610a60565b005b6060600380546103d4906118ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610400906118ee565b801561044d5780601f106104225761010080835404028352916020019161044d565b820191906000526020600020905b81548152906001019060200180831161043057829003601f168201915b5050505050905090565b600080610462610b57565b905061046f818585610b5f565b600191505092915050565b6000600254905090565b60008061048f610b57565b905061049c858285610d28565b6104a7858585610db4565b60019150509392505050565b60006012905090565b6000806104c7610b57565b90506104e88185856104d985896109d9565b6104e3919061194e565b610b5f565b600191505092915050565b6104fb610b57565b73ffffffffffffffffffffffffffffffffffffffff166105196107fd565b73ffffffffffffffffffffffffffffffffffffffff161461056f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610566906119f0565b60405180910390fd5b610577611033565b565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105e0610b57565b73ffffffffffffffffffffffffffffffffffffffff166105fe6107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b906119f0565b60405180910390fd5b61065e60006110d5565b565b610668610579565b156106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90611a5c565b60405180910390fd5b6106b0610b57565b73ffffffffffffffffffffffffffffffffffffffff166106ce6107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071b906119f0565b60405180910390fd5b600061072e6104b3565b600a61073a9190611baf565b826107459190611bfa565b90506007548161075361047a565b61075d919061194e565b111561076857600080fd5b610772838261119b565b505050565b61077f610b57565b73ffffffffffffffffffffffffffffffffffffffff1661079d6107fd565b73ffffffffffffffffffffffffffffffffffffffff16146107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea906119f0565b60405180910390fd5b6107fb6112fa565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610836906118ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610862906118ee565b80156108af5780601f10610884576101008083540402835291602001916108af565b820191906000526020600020905b81548152906001019060200180831161089257829003601f168201915b5050505050905090565b6108c1610579565b15610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890611a5c565b60405180910390fd5b600061090b6104b3565b600a6109179190611baf565b826109229190611bfa565b905061093561092f610b57565b8261139d565b5050565b600080610944610b57565b9050600061095282866109d9565b905083811015610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90611cc6565b60405180910390fd5b6109a48286868403610b5f565b60019250505092915050565b6000806109bb610b57565b90506109c8818585610db4565b600191505092915050565b60075481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610a68610b57565b73ffffffffffffffffffffffffffffffffffffffff16610a866107fd565b73ffffffffffffffffffffffffffffffffffffffff1614610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906119f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290611d58565b60405180910390fd5b610b54816110d5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590611dea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490611e7c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d1b9190611756565b60405180910390a3505050565b6000610d3484846109d9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dae5781811015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790611ee8565b60405180910390fd5b610dad8484848403610b5f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a90611f7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e899061200c565b60405180910390fd5b610e9d838383611573565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a9061209e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb6919061194e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161101a9190611756565b60405180910390a361102d848484611578565b50505050565b61103b610579565b61107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110719061210a565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6110be610b57565b6040516110cb9190611837565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190612176565b60405180910390fd5b61121660008383611573565b8060026000828254611228919061194e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461127d919061194e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112e29190611756565b60405180910390a36112f660008383611578565b5050565b611302610579565b15611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990611a5c565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611386610b57565b6040516113939190611837565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612208565b60405180910390fd5b61141882600083611573565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561149e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114959061229a565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546114f591906122ba565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161155a9190611756565b60405180910390a361156e83600084611578565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115b757808201518184015260208101905061159c565b838111156115c6576000848401525b50505050565b6000601f19601f8301169050919050565b60006115e88261157d565b6115f28185611588565b9350611602818560208601611599565b61160b816115cc565b840191505092915050565b6000602082019050818103600083015261163081846115dd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116688261163d565b9050919050565b6116788161165d565b811461168357600080fd5b50565b6000813590506116958161166f565b92915050565b6000819050919050565b6116ae8161169b565b81146116b957600080fd5b50565b6000813590506116cb816116a5565b92915050565b600080604083850312156116e8576116e7611638565b5b60006116f685828601611686565b9250506020611707858286016116bc565b9150509250929050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b6117508161169b565b82525050565b600060208201905061176b6000830184611747565b92915050565b60008060006060848603121561178a57611789611638565b5b600061179886828701611686565b93505060206117a986828701611686565b92505060406117ba868287016116bc565b9150509250925092565b600060ff82169050919050565b6117da816117c4565b82525050565b60006020820190506117f560008301846117d1565b92915050565b60006020828403121561181157611810611638565b5b600061181f84828501611686565b91505092915050565b6118318161165d565b82525050565b600060208201905061184c6000830184611828565b92915050565b60006020828403121561186857611867611638565b5b6000611876848285016116bc565b91505092915050565b6000806040838503121561189657611895611638565b5b60006118a485828601611686565b92505060206118b585828601611686565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061190657607f821691505b602082108103611919576119186118bf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119598261169b565b91506119648361169b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119995761199861191f565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119da602083611588565b91506119e5826119a4565b602082019050919050565b60006020820190508181036000830152611a09816119cd565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000611a46601083611588565b9150611a5182611a10565b602082019050919050565b60006020820190508181036000830152611a7581611a39565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115611ad357808604811115611aaf57611aae61191f565b5b6001851615611abe5780820291505b8081029050611acc85611a7c565b9450611a93565b94509492505050565b600082611aec5760019050611ba8565b81611afa5760009050611ba8565b8160018114611b105760028114611b1a57611b49565b6001915050611ba8565b60ff841115611b2c57611b2b61191f565b5b8360020a915084821115611b4357611b4261191f565b5b50611ba8565b5060208310610133831016604e8410600b8410161715611b7e5782820a905083811115611b7957611b7861191f565b5b611ba8565b611b8b8484846001611a89565b92509050818404811115611ba257611ba161191f565b5b81810290505b9392505050565b6000611bba8261169b565b9150611bc5836117c4565b9250611bf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611adc565b905092915050565b6000611c058261169b565b9150611c108361169b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c4957611c4861191f565b5b828202905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cb0602583611588565b9150611cbb82611c54565b604082019050919050565b60006020820190508181036000830152611cdf81611ca3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d42602683611588565b9150611d4d82611ce6565b604082019050919050565b60006020820190508181036000830152611d7181611d35565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611dd4602483611588565b9150611ddf82611d78565b604082019050919050565b60006020820190508181036000830152611e0381611dc7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e66602283611588565b9150611e7182611e0a565b604082019050919050565b60006020820190508181036000830152611e9581611e59565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611ed2601d83611588565b9150611edd82611e9c565b602082019050919050565b60006020820190508181036000830152611f0181611ec5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f64602583611588565b9150611f6f82611f08565b604082019050919050565b60006020820190508181036000830152611f9381611f57565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611ff6602383611588565b915061200182611f9a565b604082019050919050565b6000602082019050818103600083015261202581611fe9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612088602683611588565b91506120938261202c565b604082019050919050565b600060208201905081810360008301526120b78161207b565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006120f4601483611588565b91506120ff826120be565b602082019050919050565b60006020820190508181036000830152612123816120e7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612160601f83611588565b915061216b8261212a565b602082019050919050565b6000602082019050818103600083015261218f81612153565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006121f2602183611588565b91506121fd82612196565b604082019050919050565b60006020820190508181036000830152612221816121e5565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612284602283611588565b915061228f82612228565b604082019050919050565b600060208201905081810360008301526122b381612277565b9050919050565b60006122c58261169b565b91506122d08361169b565b9250828210156122e3576122e261191f565b5b82820390509291505056fea26469706673582212207de17b8af23793deba030197eb4183996b6f2659412d0dd571fd334881da802664736f6c634300080e0033

Deployed Bytecode Sourcemap

398:1041:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5171:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3072:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;963:62:9;;;:::i;:::-;;1091:84:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3387:125:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:6;;;:::i;:::-;;1032:239:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;899:58;;;:::i;:::-;;1029:85:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2346:102:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1277:160:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6573:427:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;475:24:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3955:149:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2135:98:1;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;4511:13;4527:12;:10;:12::i;:::-;4511:28;;4549:32;4558:5;4565:7;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;:::o;3223:106::-;3284:7;3310:12;;3303:19;;3223:106;:::o;5171:286::-;5298:4;5314:15;5332:12;:10;:12::i;:::-;5314:30;;5354:38;5370:4;5376:7;5385:6;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;:::o;3072:91::-;3130:5;3154:2;3147:9;;3072:91;:::o;5852:234::-;5940:4;5956:13;5972:12;:10;:12::i;:::-;5956:28;;5994:64;6003:5;6010:7;6047:10;6019:25;6029:5;6036:7;6019:9;:25::i;:::-;:38;;;;:::i;:::-;5994:8;:64::i;:::-;6075:4;6068:11;;;5852:234;;;;:::o;963:62:9:-;1252:12:6;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1008:10:9::1;:8;:10::i;:::-;963:62::o:0;1091:84:7:-;1138:4;1161:7;;;;;;;;;;;1154:14;;1091:84;:::o;3387:125:1:-;3461:7;3487:9;:18;3497:7;3487:18;;;;;;;;;;;;;;;;3480:25;;3387:125;;;:::o;1661:101:6:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1032:239:9:-;1405:8:7;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1252:12:6::1;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1124:18:9::2;1159:10;:8;:10::i;:::-;1155:2;:14;;;;:::i;:::-;1145:6;:25;;;;:::i;:::-;1124:46;;1218:9;;1204:10;1188:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:39;;1180:48;;;::::0;::::2;;1238:26;1244:7;1253:10;1238:5;:26::i;:::-;1114:157;1032:239:::0;;:::o;899:58::-;1252:12:6;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;942:8:9::1;:6;:8::i;:::-;899:58::o:0;1029:85:6:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2346:102:1:-;2402:13;2434:7;2427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:102;:::o;1277:160:9:-;1405:8:7;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:18:9::1;1378:10;:8;:10::i;:::-;1374:2;:14;;;;:::i;:::-;1364:6;:25;;;;:::i;:::-;1343:46;;1399:31;1405:12;:10;:12::i;:::-;1419:10;1399:5;:31::i;:::-;1333:104;1277:160:::0;:::o;6573:427:1:-;6666:4;6682:13;6698:12;:10;:12::i;:::-;6682:28;;6720:24;6747:25;6757:5;6764:7;6747:9;:25::i;:::-;6720:52;;6810:15;6790:16;:35;;6782:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6901:60;6910:5;6917:7;6945:15;6926:16;:34;6901:8;:60::i;:::-;6989:4;6982:11;;;;6573:427;;;;:::o;3708:189::-;3787:4;3803:13;3819:12;:10;:12::i;:::-;3803:28;;3841;3851:5;3858:2;3862:6;3841:9;:28::i;:::-;3886:4;3879:11;;;3708:189;;;;:::o;475:24:9:-;;;;:::o;3955:149:1:-;4044:7;4070:11;:18;4082:5;4070:18;;;;;;;;;;;;;;;:27;4089:7;4070:27;;;;;;;;;;;;;;;;4063:34;;3955:149;;;;:::o;1911:198:6:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;::::0;1991:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10098:370:1:-;10246:1;10229:19;;:5;:19;;;10221:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10326:1;10307:21;;:7;:21;;;10299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10408:6;10378:11;:18;10390:5;10378:18;;;;;;;;;;;;;;;:27;10397:7;10378:27;;;;;;;;;;;;;;;:36;;;;10445:7;10429:32;;10438:5;10429:32;;;10454:6;10429:32;;;;;;:::i;:::-;;;;;;;;10098:370;;;:::o;10749:441::-;10879:24;10906:25;10916:5;10923:7;10906:9;:25::i;:::-;10879:52;;10965:17;10945:16;:37;10941:243;;11026:6;11006:16;:26;;10998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10941:243;10869:321;10749:441;;;:::o;7463:651::-;7605:1;7589:18;;:4;:18;;;7581:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7681:1;7667:16;;:2;:16;;;7659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7734:38;7755:4;7761:2;7765:6;7734:20;:38::i;:::-;7783:19;7805:9;:15;7815:4;7805:15;;;;;;;;;;;;;;;;7783:37;;7853:6;7838:11;:21;;7830:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7968:6;7954:11;:20;7936:9;:15;7946:4;7936:15;;;;;;;;;;;;;;;:38;;;;8011:6;7994:9;:13;8004:2;7994:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8048:2;8033:26;;8042:4;8033:26;;;8052:6;8033:26;;;;;;:::i;:::-;;;;;;;;8070:37;8090:4;8096:2;8100:6;8070:19;:37::i;:::-;7571:543;7463:651;;;:::o;2103:117:7:-;1670:8;:6;:8::i;:::-;1662:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2171:5:::1;2161:7;;:15;;;;;;;;;;;;;;;;;;2191:22;2200:12;:10;:12::i;:::-;2191:22;;;;;;:::i;:::-;;;;;;;;2103:117::o:0;2263:187:6:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;8390:389:1:-;8492:1;8473:21;;:7;:21;;;8465:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8541:49;8570:1;8574:7;8583:6;8541:20;:49::i;:::-;8617:6;8601:12;;:22;;;;;;;:::i;:::-;;;;;;;;8655:6;8633:9;:18;8643:7;8633:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8697:7;8676:37;;8693:1;8676:37;;;8706:6;8676:37;;;;;;:::i;:::-;;;;;;;;8724:48;8752:1;8756:7;8765:6;8724:19;:48::i;:::-;8390:389;;:::o;1856:115:7:-;1405:8;:6;:8::i;:::-;1404:9;1396:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1925:4:::1;1915:7;;:14;;;;;;;;;;;;;;;;;;1944:20;1951:12;:10;:12::i;:::-;1944:20;;;;;;:::i;:::-;;;;;;;;1856:115::o:0;9099:576:1:-;9201:1;9182:21;;:7;:21;;;9174:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9252:49;9273:7;9290:1;9294:6;9252:20;:49::i;:::-;9312:22;9337:9;:18;9347:7;9337:18;;;;;;;;;;;;;;;;9312:43;;9391:6;9373:14;:24;;9365:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9508:6;9491:14;:23;9470:9;:18;9480:7;9470:18;;;;;;;;;;;;;;;:44;;;;9550:6;9534:12;;:22;;;;;;;:::i;:::-;;;;;;;;9598:1;9572:37;;9581:7;9572:37;;;9602:6;9572:37;;;;;;:::i;:::-;;;;;;;;9620:48;9640:7;9657:1;9661:6;9620:19;:48::i;:::-;9164:511;9099:576;;:::o;11774:121::-;;;;:::o;12483:120::-;;;;:::o;7:99:10:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:118::-;5323:24;5341:5;5323:24;:::i;:::-;5318:3;5311:37;5236:118;;:::o;5360:222::-;5453:4;5491:2;5480:9;5476:18;5468:26;;5504:71;5572:1;5561:9;5557:17;5548:6;5504:71;:::i;:::-;5360:222;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:474::-;5991:6;5999;6048:2;6036:9;6027:7;6023:23;6019:32;6016:119;;;6054:79;;:::i;:::-;6016:119;6174:1;6199:53;6244:7;6235:6;6224:9;6220:22;6199:53;:::i;:::-;6189:63;;6145:117;6301:2;6327:53;6372:7;6363:6;6352:9;6348:22;6327:53;:::i;:::-;6317:63;;6272:118;5923:474;;;;;:::o;6403:180::-;6451:77;6448:1;6441:88;6548:4;6545:1;6538:15;6572:4;6569:1;6562:15;6589:320;6633:6;6670:1;6664:4;6660:12;6650:22;;6717:1;6711:4;6707:12;6738:18;6728:81;;6794:4;6786:6;6782:17;6772:27;;6728:81;6856:2;6848:6;6845:14;6825:18;6822:38;6819:84;;6875:18;;:::i;:::-;6819:84;6640:269;6589:320;;;:::o;6915:180::-;6963:77;6960:1;6953:88;7060:4;7057:1;7050:15;7084:4;7081:1;7074:15;7101:305;7141:3;7160:20;7178:1;7160:20;:::i;:::-;7155:25;;7194:20;7212:1;7194:20;:::i;:::-;7189:25;;7348:1;7280:66;7276:74;7273:1;7270:81;7267:107;;;7354:18;;:::i;:::-;7267:107;7398:1;7395;7391:9;7384:16;;7101:305;;;;:::o;7412:182::-;7552:34;7548:1;7540:6;7536:14;7529:58;7412:182;:::o;7600:366::-;7742:3;7763:67;7827:2;7822:3;7763:67;:::i;:::-;7756:74;;7839:93;7928:3;7839:93;:::i;:::-;7957:2;7952:3;7948:12;7941:19;;7600:366;;;:::o;7972:419::-;8138:4;8176:2;8165:9;8161:18;8153:26;;8225:9;8219:4;8215:20;8211:1;8200:9;8196:17;8189:47;8253:131;8379:4;8253:131;:::i;:::-;8245:139;;7972:419;;;:::o;8397:166::-;8537:18;8533:1;8525:6;8521:14;8514:42;8397:166;:::o;8569:366::-;8711:3;8732:67;8796:2;8791:3;8732:67;:::i;:::-;8725:74;;8808:93;8897:3;8808:93;:::i;:::-;8926:2;8921:3;8917:12;8910:19;;8569:366;;;:::o;8941:419::-;9107:4;9145:2;9134:9;9130:18;9122:26;;9194:9;9188:4;9184:20;9180:1;9169:9;9165:17;9158:47;9222:131;9348:4;9222:131;:::i;:::-;9214:139;;8941:419;;;:::o;9366:102::-;9408:8;9455:5;9452:1;9448:13;9427:34;;9366:102;;;:::o;9474:848::-;9535:5;9542:4;9566:6;9557:15;;9590:5;9581:14;;9604:712;9625:1;9615:8;9612:15;9604:712;;;9720:4;9715:3;9711:14;9705:4;9702:24;9699:50;;;9729:18;;:::i;:::-;9699:50;9779:1;9769:8;9765:16;9762:451;;;10194:4;10187:5;10183:16;10174:25;;9762:451;10244:4;10238;10234:15;10226:23;;10274:32;10297:8;10274:32;:::i;:::-;10262:44;;9604:712;;;9474:848;;;;;;;:::o;10328:1073::-;10382:5;10573:8;10563:40;;10594:1;10585:10;;10596:5;;10563:40;10622:4;10612:36;;10639:1;10630:10;;10641:5;;10612:36;10708:4;10756:1;10751:27;;;;10792:1;10787:191;;;;10701:277;;10751:27;10769:1;10760:10;;10771:5;;;10787:191;10832:3;10822:8;10819:17;10816:43;;;10839:18;;:::i;:::-;10816:43;10888:8;10885:1;10881:16;10872:25;;10923:3;10916:5;10913:14;10910:40;;;10930:18;;:::i;:::-;10910:40;10963:5;;;10701:277;;11087:2;11077:8;11074:16;11068:3;11062:4;11059:13;11055:36;11037:2;11027:8;11024:16;11019:2;11013:4;11010:12;11006:35;10990:111;10987:246;;;11143:8;11137:4;11133:19;11124:28;;11178:3;11171:5;11168:14;11165:40;;;11185:18;;:::i;:::-;11165:40;11218:5;;10987:246;11258:42;11296:3;11286:8;11280:4;11277:1;11258:42;:::i;:::-;11243:57;;;;11332:4;11327:3;11323:14;11316:5;11313:25;11310:51;;;11341:18;;:::i;:::-;11310:51;11390:4;11383:5;11379:16;11370:25;;10328:1073;;;;;;:::o;11407:281::-;11465:5;11489:23;11507:4;11489:23;:::i;:::-;11481:31;;11533:25;11549:8;11533:25;:::i;:::-;11521:37;;11577:104;11614:66;11604:8;11598:4;11577:104;:::i;:::-;11568:113;;11407:281;;;;:::o;11694:348::-;11734:7;11757:20;11775:1;11757:20;:::i;:::-;11752:25;;11791:20;11809:1;11791:20;:::i;:::-;11786:25;;11979:1;11911:66;11907:74;11904:1;11901:81;11896:1;11889:9;11882:17;11878:105;11875:131;;;11986:18;;:::i;:::-;11875:131;12034:1;12031;12027:9;12016:20;;11694:348;;;;:::o;12048:224::-;12188:34;12184:1;12176:6;12172:14;12165:58;12257:7;12252:2;12244:6;12240:15;12233:32;12048:224;:::o;12278:366::-;12420:3;12441:67;12505:2;12500:3;12441:67;:::i;:::-;12434:74;;12517:93;12606:3;12517:93;:::i;:::-;12635:2;12630:3;12626:12;12619:19;;12278:366;;;:::o;12650:419::-;12816:4;12854:2;12843:9;12839:18;12831:26;;12903:9;12897:4;12893:20;12889:1;12878:9;12874:17;12867:47;12931:131;13057:4;12931:131;:::i;:::-;12923:139;;12650:419;;;:::o;13075:225::-;13215:34;13211:1;13203:6;13199:14;13192:58;13284:8;13279:2;13271:6;13267:15;13260:33;13075:225;:::o;13306:366::-;13448:3;13469:67;13533:2;13528:3;13469:67;:::i;:::-;13462:74;;13545:93;13634:3;13545:93;:::i;:::-;13663:2;13658:3;13654:12;13647:19;;13306:366;;;:::o;13678:419::-;13844:4;13882:2;13871:9;13867:18;13859:26;;13931:9;13925:4;13921:20;13917:1;13906:9;13902:17;13895:47;13959:131;14085:4;13959:131;:::i;:::-;13951:139;;13678:419;;;:::o;14103:223::-;14243:34;14239:1;14231:6;14227:14;14220:58;14312:6;14307:2;14299:6;14295:15;14288:31;14103:223;:::o;14332:366::-;14474:3;14495:67;14559:2;14554:3;14495:67;:::i;:::-;14488:74;;14571:93;14660:3;14571:93;:::i;:::-;14689:2;14684:3;14680:12;14673:19;;14332:366;;;:::o;14704:419::-;14870:4;14908:2;14897:9;14893:18;14885:26;;14957:9;14951:4;14947:20;14943:1;14932:9;14928:17;14921:47;14985:131;15111:4;14985:131;:::i;:::-;14977:139;;14704:419;;;:::o;15129:221::-;15269:34;15265:1;15257:6;15253:14;15246:58;15338:4;15333:2;15325:6;15321:15;15314:29;15129:221;:::o;15356:366::-;15498:3;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15356:366;;;:::o;15728:419::-;15894:4;15932:2;15921:9;15917:18;15909:26;;15981:9;15975:4;15971:20;15967:1;15956:9;15952:17;15945:47;16009:131;16135:4;16009:131;:::i;:::-;16001:139;;15728:419;;;:::o;16153:179::-;16293:31;16289:1;16281:6;16277:14;16270:55;16153:179;:::o;16338:366::-;16480:3;16501:67;16565:2;16560:3;16501:67;:::i;:::-;16494:74;;16577:93;16666:3;16577:93;:::i;:::-;16695:2;16690:3;16686:12;16679:19;;16338:366;;;:::o;16710:419::-;16876:4;16914:2;16903:9;16899:18;16891:26;;16963:9;16957:4;16953:20;16949:1;16938:9;16934:17;16927:47;16991:131;17117:4;16991:131;:::i;:::-;16983:139;;16710:419;;;:::o;17135:224::-;17275:34;17271:1;17263:6;17259:14;17252:58;17344:7;17339:2;17331:6;17327:15;17320:32;17135:224;:::o;17365:366::-;17507:3;17528:67;17592:2;17587:3;17528:67;:::i;:::-;17521:74;;17604:93;17693:3;17604:93;:::i;:::-;17722:2;17717:3;17713:12;17706:19;;17365:366;;;:::o;17737:419::-;17903:4;17941:2;17930:9;17926:18;17918:26;;17990:9;17984:4;17980:20;17976:1;17965:9;17961:17;17954:47;18018:131;18144:4;18018:131;:::i;:::-;18010:139;;17737:419;;;:::o;18162:222::-;18302:34;18298:1;18290:6;18286:14;18279:58;18371:5;18366:2;18358:6;18354:15;18347:30;18162:222;:::o;18390:366::-;18532:3;18553:67;18617:2;18612:3;18553:67;:::i;:::-;18546:74;;18629:93;18718:3;18629:93;:::i;:::-;18747:2;18742:3;18738:12;18731:19;;18390:366;;;:::o;18762:419::-;18928:4;18966:2;18955:9;18951:18;18943:26;;19015:9;19009:4;19005:20;19001:1;18990:9;18986:17;18979:47;19043:131;19169:4;19043:131;:::i;:::-;19035:139;;18762:419;;;:::o;19187:225::-;19327:34;19323:1;19315:6;19311:14;19304:58;19396:8;19391:2;19383:6;19379:15;19372:33;19187:225;:::o;19418:366::-;19560:3;19581:67;19645:2;19640:3;19581:67;:::i;:::-;19574:74;;19657:93;19746:3;19657:93;:::i;:::-;19775:2;19770:3;19766:12;19759:19;;19418:366;;;:::o;19790:419::-;19956:4;19994:2;19983:9;19979:18;19971:26;;20043:9;20037:4;20033:20;20029:1;20018:9;20014:17;20007:47;20071:131;20197:4;20071:131;:::i;:::-;20063:139;;19790:419;;;:::o;20215:170::-;20355:22;20351:1;20343:6;20339:14;20332:46;20215:170;:::o;20391:366::-;20533:3;20554:67;20618:2;20613:3;20554:67;:::i;:::-;20547:74;;20630:93;20719:3;20630:93;:::i;:::-;20748:2;20743:3;20739:12;20732:19;;20391:366;;;:::o;20763:419::-;20929:4;20967:2;20956:9;20952:18;20944:26;;21016:9;21010:4;21006:20;21002:1;20991:9;20987:17;20980:47;21044:131;21170:4;21044:131;:::i;:::-;21036:139;;20763:419;;;:::o;21188:181::-;21328:33;21324:1;21316:6;21312:14;21305:57;21188:181;:::o;21375:366::-;21517:3;21538:67;21602:2;21597:3;21538:67;:::i;:::-;21531:74;;21614:93;21703:3;21614:93;:::i;:::-;21732:2;21727:3;21723:12;21716:19;;21375:366;;;:::o;21747:419::-;21913:4;21951:2;21940:9;21936:18;21928:26;;22000:9;21994:4;21990:20;21986:1;21975:9;21971:17;21964:47;22028:131;22154:4;22028:131;:::i;:::-;22020:139;;21747:419;;;:::o;22172:220::-;22312:34;22308:1;22300:6;22296:14;22289:58;22381:3;22376:2;22368:6;22364:15;22357:28;22172:220;:::o;22398:366::-;22540:3;22561:67;22625:2;22620:3;22561:67;:::i;:::-;22554:74;;22637:93;22726:3;22637:93;:::i;:::-;22755:2;22750:3;22746:12;22739:19;;22398:366;;;:::o;22770:419::-;22936:4;22974:2;22963:9;22959:18;22951:26;;23023:9;23017:4;23013:20;23009:1;22998:9;22994:17;22987:47;23051:131;23177:4;23051:131;:::i;:::-;23043:139;;22770:419;;;:::o;23195:221::-;23335:34;23331:1;23323:6;23319:14;23312:58;23404:4;23399:2;23391:6;23387:15;23380:29;23195:221;:::o;23422:366::-;23564:3;23585:67;23649:2;23644:3;23585:67;:::i;:::-;23578:74;;23661:93;23750:3;23661:93;:::i;:::-;23779:2;23774:3;23770:12;23763:19;;23422:366;;;:::o;23794:419::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24047:9;24041:4;24037:20;24033:1;24022:9;24018:17;24011:47;24075:131;24201:4;24075:131;:::i;:::-;24067:139;;23794:419;;;:::o;24219:191::-;24259:4;24279:20;24297:1;24279:20;:::i;:::-;24274:25;;24313:20;24331:1;24313:20;:::i;:::-;24308:25;;24352:1;24349;24346:8;24343:34;;;24357:18;;:::i;:::-;24343:34;24402:1;24399;24395:9;24387:17;;24219:191;;;;:::o

Swarm Source

ipfs://7de17b8af23793deba030197eb4183996b6f2659412d0dd571fd334881da8026
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.