S Price: $0.437028 (+6.46%)

Token

Test RT (TRT)

Overview

Max Total Supply

510,000.0000000000001 TRT

Holders

3

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 TRT

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MintableToken

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-01-03
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.20;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys a `value` amount of tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 value) public virtual {
        _burn(_msgSender(), value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, deducting from
     * the caller's allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `value`.
     */
    function burnFrom(address account, uint256 value) public virtual {
        _spendAllowance(account, _msgSender(), value);
        _burn(account, value);
    }
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev External interface of AccessControl declared to support ERC-165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * 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[ERC 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: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

pragma solidity ^0.8.20;




/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```solidity
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```solidity
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
 * to enforce additional security measures for this role.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address account => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 role => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with an {AccessControlUnauthorizedAccount} error including the required role.
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual returns (bool) {
        return _roles[role].hasRole[account];
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
     * is missing `role`.
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address callerConfirmation) public virtual {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

// File: gravity/reward-token-stars.sol


pragma solidity ^0.8.20;



contract MintableToken is ERC20Burnable, AccessControl {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");

    constructor(string memory name, string memory symbol, address owner) ERC20(name, symbol) {
        _grantRole(DEFAULT_ADMIN_ROLE, owner);
        _grantRole(MINTER_ROLE, owner);
    }

    function mint(address to, uint256 amount) external onlyRole(MINTER_ROLE) {
        _mint(to, amount);
    }

    function addMinter(address account) external onlyRole(DEFAULT_ADMIN_ROLE) {
        grantRole(MINTER_ROLE, account);
    }

    function removeMinter(address account) external onlyRole(DEFAULT_ADMIN_ROLE) {
        revokeRole(MINTER_ROLE, account);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b50604051611f50380380611f50833981810160405281019061003191906103a9565b82828160039081610042919061063e565b508060049081610052919061063e565b5050506100675f801b826100a160201b60201c565b506100987f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826100a160201b60201c565b5050505061070d565b5f6100b2838361019760201b60201c565b61018d57600160055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061012a6101fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610191565b5f90505b92915050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6102618261021b565b810181811067ffffffffffffffff821117156102805761027f61022b565b5b80604052505050565b5f610292610202565b905061029e8282610258565b919050565b5f67ffffffffffffffff8211156102bd576102bc61022b565b5b6102c68261021b565b9050602081019050919050565b8281835e5f83830152505050565b5f6102f36102ee846102a3565b610289565b90508281526020810184848401111561030f5761030e610217565b5b61031a8482856102d3565b509392505050565b5f82601f83011261033657610335610213565b5b81516103468482602086016102e1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103788261034f565b9050919050565b6103888161036e565b8114610392575f80fd5b50565b5f815190506103a38161037f565b92915050565b5f805f606084860312156103c0576103bf61020b565b5b5f84015167ffffffffffffffff8111156103dd576103dc61020f565b5b6103e986828701610322565b935050602084015167ffffffffffffffff81111561040a5761040961020f565b5b61041686828701610322565b925050604061042786828701610395565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061047f57607f821691505b6020821081036104925761049161043b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104f47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826104b9565b6104fe86836104b9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61054261053d61053884610516565b61051f565b610516565b9050919050565b5f819050919050565b61055b83610528565b61056f61056782610549565b8484546104c5565b825550505050565b5f90565b610583610577565b61058e818484610552565b505050565b5b818110156105b1576105a65f8261057b565b600181019050610594565b5050565b601f8211156105f6576105c781610498565b6105d0846104aa565b810160208510156105df578190505b6105f36105eb856104aa565b830182610593565b50505b505050565b5f82821c905092915050565b5f6106165f19846008026105fb565b1980831691505092915050565b5f61062e8383610607565b9150826002028217905092915050565b61064782610431565b67ffffffffffffffff8111156106605761065f61022b565b5b61066a8254610468565b6106758282856105b5565b5f60209050601f8311600181146106a6575f8415610694578287015190505b61069e8582610623565b865550610705565b601f1984166106b486610498565b5f5b828110156106db578489015182556001820191506020850194506020810190506106b6565b868310156106f857848901516106f4601f891682610607565b8355505b6001600288020188555050505b505050505050565b6118368061071a5f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c806342966c68116100b6578063983b2d561161007a578063983b2d5614610384578063a217fddf146103a0578063a9059cbb146103be578063d5391393146103ee578063d547741f1461040c578063dd62ed3e1461042857610140565b806342966c68146102ce57806370a08231146102ea57806379cc67901461031a57806391d148541461033657806395d89b411461036657610140565b8063248a9ca311610108578063248a9ca3146102105780632f2ff15d146102405780633092afd51461025c578063313ce5671461027857806336568abe1461029657806340c10f19146102b257610140565b806301ffc9a71461014457806306fdde0314610174578063095ea7b31461019257806318160ddd146101c257806323b872dd146101e0575b5f80fd5b61015e60048036038101906101599190611302565b610458565b60405161016b9190611347565b60405180910390f35b61017c6104d1565b60405161018991906113d0565b60405180910390f35b6101ac60048036038101906101a7919061147d565b610561565b6040516101b99190611347565b60405180910390f35b6101ca610583565b6040516101d791906114ca565b60405180910390f35b6101fa60048036038101906101f591906114e3565b61058c565b6040516102079190611347565b60405180910390f35b61022a60048036038101906102259190611566565b6105ba565b60405161023791906115a0565b60405180910390f35b61025a600480360381019061025591906115b9565b6105d7565b005b610276600480360381019061027191906115f7565b6105f9565b005b610280610633565b60405161028d919061163d565b60405180910390f35b6102b060048036038101906102ab91906115b9565b61063b565b005b6102cc60048036038101906102c7919061147d565b6106b6565b005b6102e860048036038101906102e39190611656565b6106ef565b005b61030460048036038101906102ff91906115f7565b610703565b60405161031191906114ca565b60405180910390f35b610334600480360381019061032f919061147d565b610748565b005b610350600480360381019061034b91906115b9565b610768565b60405161035d9190611347565b60405180910390f35b61036e6107cc565b60405161037b91906113d0565b60405180910390f35b61039e600480360381019061039991906115f7565b61085c565b005b6103a8610896565b6040516103b591906115a0565b60405180910390f35b6103d860048036038101906103d3919061147d565b61089c565b6040516103e59190611347565b60405180910390f35b6103f66108be565b60405161040391906115a0565b60405180910390f35b610426600480360381019061042191906115b9565b6108e2565b005b610442600480360381019061043d9190611681565b610904565b60405161044f91906114ca565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ca57506104c982610986565b5b9050919050565b6060600380546104e0906116ec565b80601f016020809104026020016040519081016040528092919081815260200182805461050c906116ec565b80156105575780601f1061052e57610100808354040283529160200191610557565b820191905f5260205f20905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b5f8061056b6109ef565b90506105788185856109f6565b600191505092915050565b5f600254905090565b5f806105966109ef565b90506105a3858285610a08565b6105ae858585610a9a565b60019150509392505050565b5f60055f8381526020019081526020015f20600101549050919050565b6105e0826105ba565b6105e981610b8a565b6105f38383610b9e565b50505050565b5f801b61060581610b8a565b61062f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836108e2565b5050565b5f6012905090565b6106436109ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b18282610c88565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106e081610b8a565b6106ea8383610d72565b505050565b6107006106fa6109ef565b82610df1565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61075a826107546109ef565b83610a08565b6107648282610df1565b5050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600480546107db906116ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610807906116ec565b80156108525780601f1061082957610100808354040283529160200191610852565b820191905f5260205f20905b81548152906001019060200180831161083557829003601f168201915b5050505050905090565b5f801b61086881610b8a565b6108927f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836105d7565b5050565b5f801b81565b5f806108a66109ef565b90506108b3818585610a9a565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6108eb826105ba565b6108f481610b8a565b6108fe8383610c88565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b610a038383836001610e70565b505050565b5f610a138484610904565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a945781811015610a85578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610a7c9392919061172b565b60405180910390fd5b610a9384848484035f610e70565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b0a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b019190611760565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b7a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b719190611760565b60405180910390fd5b610b8583838361103f565b505050565b610b9b81610b966109ef565b611258565b50565b5f610ba98383610768565b610c7e57600160055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610c1b6109ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610c82565b5f90505b92915050565b5f610c938383610768565b15610d68575f60055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610d056109ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050610d6c565b5f90505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dd99190611760565b60405180910390fd5b610ded5f838361103f565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e61575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e589190611760565b60405180910390fd5b610e6c825f8361103f565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ee0575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ed79190611760565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f50575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f479190611760565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611039578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103091906114ca565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361108f578060025f82825461108391906117a6565b9250508190555061115d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611118578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161110f9392919061172b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a4578060025f82825403925050819055506111ee565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161124b91906114ca565b60405180910390a3505050565b6112628282610768565b6112a55780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161129c9291906117d9565b60405180910390fd5b5050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112e1816112ad565b81146112eb575f80fd5b50565b5f813590506112fc816112d8565b92915050565b5f60208284031215611317576113166112a9565b5b5f611324848285016112ee565b91505092915050565b5f8115159050919050565b6113418161132d565b82525050565b5f60208201905061135a5f830184611338565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113a282611360565b6113ac818561136a565b93506113bc81856020860161137a565b6113c581611388565b840191505092915050565b5f6020820190508181035f8301526113e88184611398565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611419826113f0565b9050919050565b6114298161140f565b8114611433575f80fd5b50565b5f8135905061144481611420565b92915050565b5f819050919050565b61145c8161144a565b8114611466575f80fd5b50565b5f8135905061147781611453565b92915050565b5f8060408385031215611493576114926112a9565b5b5f6114a085828601611436565b92505060206114b185828601611469565b9150509250929050565b6114c48161144a565b82525050565b5f6020820190506114dd5f8301846114bb565b92915050565b5f805f606084860312156114fa576114f96112a9565b5b5f61150786828701611436565b935050602061151886828701611436565b925050604061152986828701611469565b9150509250925092565b5f819050919050565b61154581611533565b811461154f575f80fd5b50565b5f813590506115608161153c565b92915050565b5f6020828403121561157b5761157a6112a9565b5b5f61158884828501611552565b91505092915050565b61159a81611533565b82525050565b5f6020820190506115b35f830184611591565b92915050565b5f80604083850312156115cf576115ce6112a9565b5b5f6115dc85828601611552565b92505060206115ed85828601611436565b9150509250929050565b5f6020828403121561160c5761160b6112a9565b5b5f61161984828501611436565b91505092915050565b5f60ff82169050919050565b61163781611622565b82525050565b5f6020820190506116505f83018461162e565b92915050565b5f6020828403121561166b5761166a6112a9565b5b5f61167884828501611469565b91505092915050565b5f8060408385031215611697576116966112a9565b5b5f6116a485828601611436565b92505060206116b585828601611436565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061170357607f821691505b602082108103611716576117156116bf565b5b50919050565b6117258161140f565b82525050565b5f60608201905061173e5f83018661171c565b61174b60208301856114bb565b61175860408301846114bb565b949350505050565b5f6020820190506117735f83018461171c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6117b08261144a565b91506117bb8361144a565b92508282019050808211156117d3576117d2611779565b5b92915050565b5f6040820190506117ec5f83018561171c565b6117f96020830184611591565b939250505056fea264697066735822122006fd4fbb120f78065cfa26ddba8da49cb2f2b228d15f1d7edf30b4f0e7b6c32764736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000b852631f7899bc4f9794131b3c919a36bfa7bfb0000000000000000000000000000000000000000000000000000000000000007546573742052540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035452540000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610140575f3560e01c806342966c68116100b6578063983b2d561161007a578063983b2d5614610384578063a217fddf146103a0578063a9059cbb146103be578063d5391393146103ee578063d547741f1461040c578063dd62ed3e1461042857610140565b806342966c68146102ce57806370a08231146102ea57806379cc67901461031a57806391d148541461033657806395d89b411461036657610140565b8063248a9ca311610108578063248a9ca3146102105780632f2ff15d146102405780633092afd51461025c578063313ce5671461027857806336568abe1461029657806340c10f19146102b257610140565b806301ffc9a71461014457806306fdde0314610174578063095ea7b31461019257806318160ddd146101c257806323b872dd146101e0575b5f80fd5b61015e60048036038101906101599190611302565b610458565b60405161016b9190611347565b60405180910390f35b61017c6104d1565b60405161018991906113d0565b60405180910390f35b6101ac60048036038101906101a7919061147d565b610561565b6040516101b99190611347565b60405180910390f35b6101ca610583565b6040516101d791906114ca565b60405180910390f35b6101fa60048036038101906101f591906114e3565b61058c565b6040516102079190611347565b60405180910390f35b61022a60048036038101906102259190611566565b6105ba565b60405161023791906115a0565b60405180910390f35b61025a600480360381019061025591906115b9565b6105d7565b005b610276600480360381019061027191906115f7565b6105f9565b005b610280610633565b60405161028d919061163d565b60405180910390f35b6102b060048036038101906102ab91906115b9565b61063b565b005b6102cc60048036038101906102c7919061147d565b6106b6565b005b6102e860048036038101906102e39190611656565b6106ef565b005b61030460048036038101906102ff91906115f7565b610703565b60405161031191906114ca565b60405180910390f35b610334600480360381019061032f919061147d565b610748565b005b610350600480360381019061034b91906115b9565b610768565b60405161035d9190611347565b60405180910390f35b61036e6107cc565b60405161037b91906113d0565b60405180910390f35b61039e600480360381019061039991906115f7565b61085c565b005b6103a8610896565b6040516103b591906115a0565b60405180910390f35b6103d860048036038101906103d3919061147d565b61089c565b6040516103e59190611347565b60405180910390f35b6103f66108be565b60405161040391906115a0565b60405180910390f35b610426600480360381019061042191906115b9565b6108e2565b005b610442600480360381019061043d9190611681565b610904565b60405161044f91906114ca565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104ca57506104c982610986565b5b9050919050565b6060600380546104e0906116ec565b80601f016020809104026020016040519081016040528092919081815260200182805461050c906116ec565b80156105575780601f1061052e57610100808354040283529160200191610557565b820191905f5260205f20905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b5f8061056b6109ef565b90506105788185856109f6565b600191505092915050565b5f600254905090565b5f806105966109ef565b90506105a3858285610a08565b6105ae858585610a9a565b60019150509392505050565b5f60055f8381526020019081526020015f20600101549050919050565b6105e0826105ba565b6105e981610b8a565b6105f38383610b9e565b50505050565b5f801b61060581610b8a565b61062f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836108e2565b5050565b5f6012905090565b6106436109ef565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a7576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b18282610c88565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106e081610b8a565b6106ea8383610d72565b505050565b6107006106fa6109ef565b82610df1565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61075a826107546109ef565b83610a08565b6107648282610df1565b5050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6060600480546107db906116ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610807906116ec565b80156108525780601f1061082957610100808354040283529160200191610852565b820191905f5260205f20905b81548152906001019060200180831161083557829003601f168201915b5050505050905090565b5f801b61086881610b8a565b6108927f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836105d7565b5050565b5f801b81565b5f806108a66109ef565b90506108b3818585610a9a565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6108eb826105ba565b6108f481610b8a565b6108fe8383610c88565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b610a038383836001610e70565b505050565b5f610a138484610904565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a945781811015610a85578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610a7c9392919061172b565b60405180910390fd5b610a9384848484035f610e70565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b0a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b019190611760565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b7a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b719190611760565b60405180910390fd5b610b8583838361103f565b505050565b610b9b81610b966109ef565b611258565b50565b5f610ba98383610768565b610c7e57600160055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610c1b6109ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610c82565b5f90505b92915050565b5f610c938383610768565b15610d68575f60055f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610d056109ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050610d6c565b5f90505b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dd99190611760565b60405180910390fd5b610ded5f838361103f565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e61575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e589190611760565b60405180910390fd5b610e6c825f8361103f565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ee0575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ed79190611760565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f50575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f479190611760565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611039578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103091906114ca565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361108f578060025f82825461108391906117a6565b9250508190555061115d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611118578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161110f9392919061172b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111a4578060025f82825403925050819055506111ee565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161124b91906114ca565b60405180910390a3505050565b6112628282610768565b6112a55780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161129c9291906117d9565b60405180910390fd5b5050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112e1816112ad565b81146112eb575f80fd5b50565b5f813590506112fc816112d8565b92915050565b5f60208284031215611317576113166112a9565b5b5f611324848285016112ee565b91505092915050565b5f8115159050919050565b6113418161132d565b82525050565b5f60208201905061135a5f830184611338565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113a282611360565b6113ac818561136a565b93506113bc81856020860161137a565b6113c581611388565b840191505092915050565b5f6020820190508181035f8301526113e88184611398565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611419826113f0565b9050919050565b6114298161140f565b8114611433575f80fd5b50565b5f8135905061144481611420565b92915050565b5f819050919050565b61145c8161144a565b8114611466575f80fd5b50565b5f8135905061147781611453565b92915050565b5f8060408385031215611493576114926112a9565b5b5f6114a085828601611436565b92505060206114b185828601611469565b9150509250929050565b6114c48161144a565b82525050565b5f6020820190506114dd5f8301846114bb565b92915050565b5f805f606084860312156114fa576114f96112a9565b5b5f61150786828701611436565b935050602061151886828701611436565b925050604061152986828701611469565b9150509250925092565b5f819050919050565b61154581611533565b811461154f575f80fd5b50565b5f813590506115608161153c565b92915050565b5f6020828403121561157b5761157a6112a9565b5b5f61158884828501611552565b91505092915050565b61159a81611533565b82525050565b5f6020820190506115b35f830184611591565b92915050565b5f80604083850312156115cf576115ce6112a9565b5b5f6115dc85828601611552565b92505060206115ed85828601611436565b9150509250929050565b5f6020828403121561160c5761160b6112a9565b5b5f61161984828501611436565b91505092915050565b5f60ff82169050919050565b61163781611622565b82525050565b5f6020820190506116505f83018461162e565b92915050565b5f6020828403121561166b5761166a6112a9565b5b5f61167884828501611469565b91505092915050565b5f8060408385031215611697576116966112a9565b5b5f6116a485828601611436565b92505060206116b585828601611436565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061170357607f821691505b602082108103611716576117156116bf565b5b50919050565b6117258161140f565b82525050565b5f60608201905061173e5f83018661171c565b61174b60208301856114bb565b61175860408301846114bb565b949350505050565b5f6020820190506117735f83018461171c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6117b08261144a565b91506117bb8361144a565b92508282019050808211156117d3576117d2611779565b5b92915050565b5f6040820190506117ec5f83018561171c565b6117f96020830184611591565b939250505056fea264697066735822122006fd4fbb120f78065cfa26ddba8da49cb2f2b228d15f1d7edf30b4f0e7b6c32764736f6c634300081a0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000b852631f7899bc4f9794131b3c919a36bfa7bfb0000000000000000000000000000000000000000000000000000000000000007546573742052540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035452540000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Test RT
Arg [1] : symbol (string): TRT
Arg [2] : owner (address): 0x0B852631F7899bc4F9794131B3C919a36BFa7BFb

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000b852631f7899bc4f9794131b3c919a36bfa7bfb
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5465737420525400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5452540000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36154:707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31451:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13038:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15331:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14140:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16131:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32731:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33163:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36730:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13991:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34300:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36481:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23011:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14302:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23429:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31747:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13248:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36598:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31059:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14625:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36216:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33594:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14870:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31451:204;31536:4;31575:32;31560:47;;;:11;:47;;;;:87;;;;31611:36;31635:11;31611:23;:36::i;:::-;31560:87;31553:94;;31451:204;;;:::o;13038:91::-;13083:13;13116:5;13109:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13038:91;:::o;15331:190::-;15404:4;15421:13;15437:12;:10;:12::i;:::-;15421:28;;15460:31;15469:5;15476:7;15485:5;15460:8;:31::i;:::-;15509:4;15502:11;;;15331:190;;;;:::o;14140:99::-;14192:7;14219:12;;14212:19;;14140:99;:::o;16131:249::-;16218:4;16235:15;16253:12;:10;:12::i;:::-;16235:30;;16276:37;16292:4;16298:7;16307:5;16276:15;:37::i;:::-;16324:26;16334:4;16340:2;16344:5;16324:9;:26::i;:::-;16368:4;16361:11;;;16131:249;;;;;:::o;32731:122::-;32796:7;32823:6;:12;32830:4;32823:12;;;;;;;;;;;:22;;;32816:29;;32731:122;;;:::o;33163:138::-;33237:18;33250:4;33237:12;:18::i;:::-;31343:16;31354:4;31343:10;:16::i;:::-;33268:25:::1;33279:4;33285:7;33268:10;:25::i;:::-;;33163:138:::0;;;:::o;36730:128::-;31104:4;36787:18;;31343:16;31354:4;31343:10;:16::i;:::-;36818:32:::1;36254:24;36842:7;36818:10;:32::i;:::-;36730:128:::0;;:::o;13991:84::-;14040:5;14065:2;14058:9;;13991:84;:::o;34300:251::-;34416:12;:10;:12::i;:::-;34394:34;;:18;:34;;;34390:104;;34452:30;;;;;;;;;;;;;;34390:104;34506:37;34518:4;34524:18;34506:11;:37::i;:::-;;34300:251;;:::o;36481:109::-;36254:24;31343:16;31354:4;31343:10;:16::i;:::-;36565:17:::1;36571:2;36575:6;36565:5;:17::i;:::-;36481:109:::0;;;:::o;23011:89::-;23066:26;23072:12;:10;:12::i;:::-;23086:5;23066;:26::i;:::-;23011:89;:::o;14302:118::-;14367:7;14394:9;:18;14404:7;14394:18;;;;;;;;;;;;;;;;14387:25;;14302:118;;;:::o;23429:161::-;23505:45;23521:7;23530:12;:10;:12::i;:::-;23544:5;23505:15;:45::i;:::-;23561:21;23567:7;23576:5;23561;:21::i;:::-;23429:161;;:::o;31747:138::-;31824:4;31848:6;:12;31855:4;31848:12;;;;;;;;;;;:20;;:29;31869:7;31848:29;;;;;;;;;;;;;;;;;;;;;;;;;31841:36;;31747:138;;;;:::o;13248:95::-;13295:13;13328:7;13321:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13248:95;:::o;36598:124::-;31104:4;36652:18;;31343:16;31354:4;31343:10;:16::i;:::-;36683:31:::1;36254:24;36706:7;36683:9;:31::i;:::-;36598:124:::0;;:::o;31059:49::-;31104:4;31059:49;;;:::o;14625:182::-;14694:4;14711:13;14727:12;:10;:12::i;:::-;14711:28;;14750:27;14760:5;14767:2;14771:5;14750:9;:27::i;:::-;14795:4;14788:11;;;14625:182;;;;:::o;36216:62::-;36254:24;36216:62;:::o;33594:140::-;33669:18;33682:4;33669:12;:18::i;:::-;31343:16;31354:4;31343:10;:16::i;:::-;33700:26:::1;33712:4;33718:7;33700:11;:26::i;:::-;;33594:140:::0;;;:::o;14870:142::-;14950:7;14977:11;:18;14989:5;14977:18;;;;;;;;;;;;;;;:27;14996:7;14977:27;;;;;;;;;;;;;;;;14970:34;;14870:142;;;;:::o;28787:148::-;28863:4;28902:25;28887:40;;;:11;:40;;;;28880:47;;28787:148;;;:::o;4337:98::-;4390:7;4417:10;4410:17;;4337:98;:::o;20190:130::-;20275:37;20284:5;20291:7;20300:5;20307:4;20275:8;:37::i;:::-;20190:130;;;:::o;21922:487::-;22022:24;22049:25;22059:5;22066:7;22049:9;:25::i;:::-;22022:52;;22109:17;22089:16;:37;22085:317;;22166:5;22147:16;:24;22143:132;;;22226:7;22235:16;22253:5;22199:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;22143:132;22318:57;22327:5;22334:7;22362:5;22343:16;:24;22369:5;22318:8;:57::i;:::-;22085:317;22011:398;21922:487;;;:::o;16765:308::-;16865:1;16849:18;;:4;:18;;;16845:88;;16918:1;16891:30;;;;;;;;;;;:::i;:::-;;;;;;;;16845:88;16961:1;16947:16;;:2;:16;;;16943:88;;17016:1;16987:32;;;;;;;;;;;:::i;:::-;;;;;;;;16943:88;17041:24;17049:4;17055:2;17059:5;17041:7;:24::i;:::-;16765:308;;;:::o;32100:105::-;32167:30;32178:4;32184:12;:10;:12::i;:::-;32167:10;:30::i;:::-;32100:105;:::o;35177:324::-;35254:4;35276:22;35284:4;35290:7;35276;:22::i;:::-;35271:223;;35347:4;35315:6;:12;35322:4;35315:12;;;;;;;;;;;:20;;:29;35336:7;35315:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35398:12;:10;:12::i;:::-;35371:40;;35389:7;35371:40;;35383:4;35371:40;;;;;;;;;;35433:4;35426:11;;;;35271:223;35477:5;35470:12;;35177:324;;;;;:::o;35745:325::-;35823:4;35844:22;35852:4;35858:7;35844;:22::i;:::-;35840:223;;;35915:5;35883:6;:12;35890:4;35883:12;;;;;;;;;;;:20;;:29;35904:7;35883:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35967:12;:10;:12::i;:::-;35940:40;;35958:7;35940:40;;35952:4;35940:40;;;;;;;;;;36002:4;35995:11;;;;35840:223;36046:5;36039:12;;35745:325;;;;;:::o;18885:213::-;18975:1;18956:21;;:7;:21;;;18952:93;;19030:1;19001:32;;;;;;;;;;;:::i;:::-;;;;;;;;18952:93;19055:35;19071:1;19075:7;19084:5;19055:7;:35::i;:::-;18885:213;;:::o;19426:211::-;19516:1;19497:21;;:7;:21;;;19493:91;;19569:1;19542:30;;;;;;;;;;;:::i;:::-;;;;;;;;19493:91;19594:35;19602:7;19619:1;19623:5;19594:7;:35::i;:::-;19426:211;;:::o;21187:443::-;21317:1;21300:19;;:5;:19;;;21296:91;;21372:1;21343:32;;;;;;;;;;;:::i;:::-;;;;;;;;21296:91;21420:1;21401:21;;:7;:21;;;21397:92;;21474:1;21446:31;;;;;;;;;;;:::i;:::-;;;;;;;;21397:92;21529:5;21499:11;:18;21511:5;21499:18;;;;;;;;;;;;;;;:27;21518:7;21499:27;;;;;;;;;;;;;;;:35;;;;21549:9;21545:78;;;21596:7;21580:31;;21589:5;21580:31;;;21605:5;21580:31;;;;;;:::i;:::-;;;;;;;;21545:78;21187:443;;;;:::o;17397:1135::-;17503:1;17487:18;;:4;:18;;;17483:552;;17641:5;17625:12;;:21;;;;;;;:::i;:::-;;;;;;;;17483:552;;;17679:19;17701:9;:15;17711:4;17701:15;;;;;;;;;;;;;;;;17679:37;;17749:5;17735:11;:19;17731:117;;;17807:4;17813:11;17826:5;17782:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;17731:117;18003:5;17989:11;:19;17971:9;:15;17981:4;17971:15;;;;;;;;;;;;;;;:37;;;;17664:371;17483:552;18065:1;18051:16;;:2;:16;;;18047:435;;18233:5;18217:12;;:21;;;;;;;;;;;18047:435;;;18450:5;18433:9;:13;18443:2;18433:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;18047:435;18514:2;18499:25;;18508:4;18499:25;;;18518:5;18499:25;;;;;;:::i;:::-;;;;;;;;17397:1135;;;:::o;32341:201::-;32430:22;32438:4;32444:7;32430;:22::i;:::-;32425:110;;32509:7;32518:4;32476:47;;;;;;;;;;;;:::i;:::-;;;;;;;;32425:110;32341:201;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:126::-;2790:7;2830:42;2823:5;2819:54;2808:65;;2753:126;;;:::o;2885:96::-;2922:7;2951:24;2969:5;2951:24;:::i;:::-;2940:35;;2885:96;;;:::o;2987:122::-;3060:24;3078:5;3060:24;:::i;:::-;3053:5;3050:35;3040:63;;3099:1;3096;3089:12;3040:63;2987:122;:::o;3115:139::-;3161:5;3199:6;3186:20;3177:29;;3215:33;3242:5;3215:33;:::i;:::-;3115:139;;;;:::o;3260:77::-;3297:7;3326:5;3315:16;;3260:77;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:474::-;3684:6;3692;3741:2;3729:9;3720:7;3716:23;3712:32;3709:119;;;3747:79;;:::i;:::-;3709:119;3867:1;3892:53;3937:7;3928:6;3917:9;3913:22;3892:53;:::i;:::-;3882:63;;3838:117;3994:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;:::i;:::-;4010:63;;3965:118;3616:474;;;;;:::o;4096:118::-;4183:24;4201:5;4183:24;:::i;:::-;4178:3;4171:37;4096:118;;:::o;4220:222::-;4313:4;4351:2;4340:9;4336:18;4328:26;;4364:71;4432:1;4421:9;4417:17;4408:6;4364:71;:::i;:::-;4220:222;;;;:::o;4448:619::-;4525:6;4533;4541;4590:2;4578:9;4569:7;4565:23;4561:32;4558:119;;;4596:79;;:::i;:::-;4558:119;4716:1;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4687:117;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4971:2;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4942:118;4448:619;;;;;:::o;5073:77::-;5110:7;5139:5;5128:16;;5073:77;;;:::o;5156:122::-;5229:24;5247:5;5229:24;:::i;:::-;5222:5;5219:35;5209:63;;5268:1;5265;5258:12;5209:63;5156:122;:::o;5284:139::-;5330:5;5368:6;5355:20;5346:29;;5384:33;5411:5;5384:33;:::i;:::-;5284:139;;;;:::o;5429:329::-;5488:6;5537:2;5525:9;5516:7;5512:23;5508:32;5505:119;;;5543:79;;:::i;:::-;5505:119;5663:1;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;:::i;:::-;5678:63;;5634:117;5429:329;;;;:::o;5764:118::-;5851:24;5869:5;5851:24;:::i;:::-;5846:3;5839:37;5764:118;;:::o;5888:222::-;5981:4;6019:2;6008:9;6004:18;5996:26;;6032:71;6100:1;6089:9;6085:17;6076:6;6032:71;:::i;:::-;5888:222;;;;:::o;6116:474::-;6184:6;6192;6241:2;6229:9;6220:7;6216:23;6212:32;6209:119;;;6247:79;;:::i;:::-;6209:119;6367:1;6392:53;6437:7;6428:6;6417:9;6413:22;6392:53;:::i;:::-;6382:63;;6338:117;6494:2;6520:53;6565:7;6556:6;6545:9;6541:22;6520:53;:::i;:::-;6510:63;;6465:118;6116:474;;;;;:::o;6596:329::-;6655:6;6704:2;6692:9;6683:7;6679:23;6675:32;6672:119;;;6710:79;;:::i;:::-;6672:119;6830:1;6855:53;6900:7;6891:6;6880:9;6876:22;6855:53;:::i;:::-;6845:63;;6801:117;6596:329;;;;:::o;6931:86::-;6966:7;7006:4;6999:5;6995:16;6984:27;;6931:86;;;:::o;7023:112::-;7106:22;7122:5;7106:22;:::i;:::-;7101:3;7094:35;7023:112;;:::o;7141:214::-;7230:4;7268:2;7257:9;7253:18;7245:26;;7281:67;7345:1;7334:9;7330:17;7321:6;7281:67;:::i;:::-;7141:214;;;;:::o;7361:329::-;7420:6;7469:2;7457:9;7448:7;7444:23;7440:32;7437:119;;;7475:79;;:::i;:::-;7437:119;7595:1;7620:53;7665:7;7656:6;7645:9;7641:22;7620:53;:::i;:::-;7610:63;;7566:117;7361:329;;;;:::o;7696:474::-;7764:6;7772;7821:2;7809:9;7800:7;7796:23;7792:32;7789:119;;;7827:79;;:::i;:::-;7789:119;7947:1;7972:53;8017:7;8008:6;7997:9;7993:22;7972:53;:::i;:::-;7962:63;;7918:117;8074:2;8100:53;8145:7;8136:6;8125:9;8121:22;8100:53;:::i;:::-;8090:63;;8045:118;7696:474;;;;;:::o;8176:180::-;8224:77;8221:1;8214:88;8321:4;8318:1;8311:15;8345:4;8342:1;8335:15;8362:320;8406:6;8443:1;8437:4;8433:12;8423:22;;8490:1;8484:4;8480:12;8511:18;8501:81;;8567:4;8559:6;8555:17;8545:27;;8501:81;8629:2;8621:6;8618:14;8598:18;8595:38;8592:84;;8648:18;;:::i;:::-;8592:84;8413:269;8362:320;;;:::o;8688:118::-;8775:24;8793:5;8775:24;:::i;:::-;8770:3;8763:37;8688:118;;:::o;8812:442::-;8961:4;8999:2;8988:9;8984:18;8976:26;;9012:71;9080:1;9069:9;9065:17;9056:6;9012:71;:::i;:::-;9093:72;9161:2;9150:9;9146:18;9137:6;9093:72;:::i;:::-;9175;9243:2;9232:9;9228:18;9219:6;9175:72;:::i;:::-;8812:442;;;;;;:::o;9260:222::-;9353:4;9391:2;9380:9;9376:18;9368:26;;9404:71;9472:1;9461:9;9457:17;9448:6;9404:71;:::i;:::-;9260:222;;;;:::o;9488:180::-;9536:77;9533:1;9526:88;9633:4;9630:1;9623:15;9657:4;9654:1;9647:15;9674:191;9714:3;9733:20;9751:1;9733:20;:::i;:::-;9728:25;;9767:20;9785:1;9767:20;:::i;:::-;9762:25;;9810:1;9807;9803:9;9796:16;;9831:3;9828:1;9825:10;9822:36;;;9838:18;;:::i;:::-;9822:36;9674:191;;;;:::o;9871:332::-;9992:4;10030:2;10019:9;10015:18;10007:26;;10043:71;10111:1;10100:9;10096:17;10087:6;10043:71;:::i;:::-;10124:72;10192:2;10181:9;10177:18;10168:6;10124:72;:::i;:::-;9871:332;;;;;:::o

Swarm Source

ipfs://06fd4fbb120f78065cfa26ddba8da49cb2f2b228d15f1d7edf30b4f0e7b6c327
[ 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.