- Contract name:
- MiraToken
- Optimization enabled
- true
- Compiler version
- v0.8.16+commit.07a7930e
- Optimization runs
- 200
- Verified at
- 2023-02-08T03:56:15.149125Z
Constructor Arguments
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f90af4546e8c831a3b91200e6d41d70684b525f2000000000000000000000000000000000000000000000000000000000000000a4d69726120546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d49524100000000000000000000000000000000000000000000000000000000
Arg [0] (string) : Mira Token
Arg [1] (string) : MIRA
Arg [2] (address) : 0xf90af4546e8c831a3b91200e6d41d70684b525f2
contracts/token/MiraToken.sol
// SPDX-License-Identifier: MITpragma solidity 0.8.16;import "../interfaces/IERC20Mintable.sol";import "@openzeppelin/contracts/utils/Context.sol";import "@openzeppelin/contracts/access/AccessControlEnumerable.sol";import "@openzeppelin/contracts/token/ERC777/ERC777.sol";contract MiraToken is Context, AccessControlEnumerable, IERC20Mintable, ERC777 {bytes32 public constant BLOCK_ROLE = keccak256("BLOCK_ROLE");constructor(string memory name_,string memory symbol_,address admin) ERC777(name_, symbol_, new address[](0)) {// Grants `DEFAULT_ADMIN_ROLE` to the account that deploys the contract_setupRole(DEFAULT_ADMIN_ROLE, admin);}/*** @dev Creates `amount` new tokens for `to`.* Requirements:* - the caller must have the `DEFAULT_ADMIN_ROLE`.*/function mint(address to, uint256 amount) external override onlyRole(DEFAULT_ADMIN_ROLE) {_mint(to, amount, "", "");}/*** @dev Revokes `role` from the calling account.* Requirements:* - the caller must have the `DEFAULT_ADMIN_ROLE`.*/function renounceRole(bytes32 role,address account) public override(AccessControl, IAccessControl) onlyRole(DEFAULT_ADMIN_ROLE) {super.renounceRole(role, account);}
@openzeppelin/contracts/token/ERC777/ERC777.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC777/ERC777.sol)pragma solidity ^0.8.0;import "./IERC777.sol";import "./IERC777Recipient.sol";import "./IERC777Sender.sol";import "../ERC20/IERC20.sol";import "../../utils/Address.sol";import "../../utils/Context.sol";import "../../utils/introspection/IERC1820Registry.sol";/*** @dev Implementation of the {IERC777} 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}.** Support for ERC20 is included in this contract, as specified by the EIP: both* the ERC777 and ERC20 interfaces can be safely used when interacting with it.* Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token* movements.** Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there* are no special restrictions in the amount of tokens that created, moved, or* destroyed. This makes integration with ERC20 applications seamless.*/contract ERC777 is Context, IERC777, IERC20 {using Address for address;IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);mapping(address => uint256) private _balances;uint256 private _totalSupply;string private _name;string private _symbol;bytes32 private constant _TOKENS_SENDER_INTERFACE_HASH = keccak256("ERC777TokensSender");
@openzeppelin/contracts/token/ERC777/IERC777.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC777/IERC777.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC777Token standard as defined in the EIP.** This contract uses the* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let* token holders and recipients react to token movements by using setting implementers* for the associated interfaces in said registry. See {IERC1820Registry} and* {ERC1820Implementer}.*/interface IERC777 {/*** @dev Emitted when `amount` tokens are created by `operator` and assigned to `to`.** Note that some additional user `data` and `operatorData` can be logged in the event.*/event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);/*** @dev Emitted when `operator` destroys `amount` tokens from `account`.** Note that some additional user `data` and `operatorData` can be logged in the event.*/event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);/*** @dev Emitted when `operator` is made operator for `tokenHolder`.*/event AuthorizedOperator(address indexed operator, address indexed tokenHolder);/*** @dev Emitted when `operator` is revoked its operator status for `tokenHolder`.*/event RevokedOperator(address indexed operator, address indexed tokenHolder);/*** @dev Returns the name of the token.
@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Recipient.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC777TokensRecipient standard as defined in the EIP.** Accounts can be notified of {IERC777} tokens being sent to them by having a* contract implement this interface (contract holders can be their own* implementer) and registering it on the* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].** See {IERC1820Registry} and {ERC1820Implementer}.*/interface IERC777Recipient {/*** @dev Called by an {IERC777} token contract whenever tokens are being* moved or created into a registered account (`to`). The type of operation* is conveyed by `from` being the zero address or not.** This call occurs _after_ the token contract's state is updated, so* {IERC777-balanceOf}, etc., can be used to query the post-operation state.** This function may revert to prevent the operation from being executed.*/function tokensReceived(address operator,address from,address to,uint256 amount,bytes calldata userData,bytes calldata operatorData) external;}
@openzeppelin/contracts/token/ERC777/IERC777Sender.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Sender.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC777TokensSender standard as defined in the EIP.** {IERC777} Token holders can be notified of operations performed on their* tokens by having a contract implement this interface (contract holders can be* their own implementer) and registering it on the* https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry].** See {IERC1820Registry} and {ERC1820Implementer}.*/interface IERC777Sender {/*** @dev Called by an {IERC777} token contract whenever a registered holder's* (`from`) tokens are about to be moved or destroyed. The type of operation* is conveyed by `to` being the zero address or not.** This call occurs _before_ the token contract's state is updated, so* {IERC777-balanceOf}, etc., can be used to query the pre-operation state.** This function may revert to prevent the operation from being executed.*/function tokensToSend(address operator,address from,address to,uint256 amount,bytes calldata userData,bytes calldata operatorData) external;}
@openzeppelin/contracts/utils/Address.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====** [IMPORTANT]* ====* You shouldn't rely on `isContract` to protect against flash loan attacks!** Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract* constructor.* ====*/function isContract(address account) internal view returns (bool) {// This method relies on extcodesize/address.code.length, which returns 0// for contracts in construction, since the code is only stored at the end// of the constructor execution.return account.code.length > 0;
@openzeppelin/contracts/utils/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;}}
@openzeppelin/contracts/utils/Strings.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)pragma solidity ^0.8.0;import "./math/Math.sol";/*** @dev String operations.*/library Strings {bytes16 private constant _SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;string memory buffer = new string(length);uint256 ptr;/// @solidity memory-safe-assemblyassembly {ptr := add(buffer, add(32, length))}while (true) {ptr--;/// @solidity memory-safe-assemblyassembly {mstore8(ptr, byte(mod(value, 10), _SYMBOLS))}value /= 10;if (value == 0) break;}return buffer;}}/*** @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
@openzeppelin/contracts/utils/introspection/ERC165.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 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);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IERC165).interfaceId;}}
@openzeppelin/contracts/utils/introspection/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);}
@openzeppelin/contracts/utils/introspection/IERC1820Registry.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/introspection/IERC1820Registry.sol)pragma solidity ^0.8.0;/*** @dev Interface of the global ERC1820 Registry, as defined in the* https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register* implementers for interfaces in this registry, as well as query support.** Implementers may be shared by multiple accounts, and can also implement more* than a single interface for each account. Contracts can implement interfaces* for themselves, but externally-owned accounts (EOA) must delegate this to a* contract.** {IERC165} interfaces can also be queried via the registry.** For an in-depth explanation and source code analysis, see the EIP text.*/interface IERC1820Registry {event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);event ManagerChanged(address indexed account, address indexed newManager);/*** @dev Sets `newManager` as the manager for `account`. A manager of an* account is able to set interface implementers for it.** By default, each account is its own manager. Passing a value of `0x0` in* `newManager` will reset the manager to this initial state.** Emits a {ManagerChanged} event.** Requirements:** - the caller must be the current manager for `account`.*/function setManager(address account, address newManager) external;/*** @dev Returns the manager for `account`.
@openzeppelin/contracts/utils/math/Math.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)pragma solidity ^0.8.0;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Down, // Toward negative infinityUp, // Toward infinityZero // Toward zero}/*** @dev Returns the largest of two numbers.*/function max(uint256 a, uint256 b) internal pure returns (uint256) {return a > b ? a : b;}/*** @dev Returns the smallest of two numbers.*/function min(uint256 a, uint256 b) internal pure returns (uint256) {return a < b ? a : b;}/*** @dev Returns the average of two numbers. The result is rounded towards* zero.*/function average(uint256 a, uint256 b) internal pure returns (uint256) {// (a + b) / 2 can overflow.return (a & b) + (a ^ b) / 2;}/*** @dev Returns the ceiling of the division of two numbers.*
@openzeppelin/contracts/utils/structs/EnumerableSet.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.0;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```** As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)* and `uint256` (`UintSet`) are supported.** [WARNING]* ====* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure* unusable.* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.** In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an* array of EnumerableSet.* ====*/library EnumerableSet {
contracts/interfaces/IERC20Mintable.sol
// SPDX-License-Identifier: MITpragma solidity 0.8.16;interface IERC20Mintable {function mint(address to, uint256 amount) external;}
@openzeppelin/contracts/access/AccessControl.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";import "../utils/Context.sol";import "../utils/Strings.sol";import "../utils/introspection/ERC165.sol";/*** @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:** ```* 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}:** ```* 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
@openzeppelin/contracts/access/AccessControlEnumerable.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControlEnumerable.sol";import "./AccessControl.sol";import "../utils/structs/EnumerableSet.sol";/*** @dev Extension of {AccessControl} that allows enumerating the members of each role.*/abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {using EnumerableSet for EnumerableSet.AddressSet;mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);}/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {return _roleMembers[role].at(index);}/**
@openzeppelin/contracts/access/IAccessControl.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)pragma solidity ^0.8.0;/*** @dev External interface of AccessControl declared to support ERC165 detection.*/interface IAccessControl {/*** @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.** _Available since v3.1._*/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, an admin role* bearer except when using {AccessControl-_setupRole}.*/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);
@openzeppelin/contracts/access/IAccessControlEnumerable.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";/*** @dev External interface of AccessControlEnumerable declared to support ERC165 detection.*/interface IAccessControlEnumerable is IAccessControl {/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) external view returns (address);/*** @dev Returns the number of accounts that have `role`. Can be used* together with {getRoleMember} to enumerate all bearers of a role.*/function getRoleMemberCount(bytes32 role) external view returns (uint256);}
@openzeppelin/contracts/token/ERC20/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);
Compiler Settings
{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"address","name":"admin","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AuthorizedOperator","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"tokenHolder","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Burned","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"bytes","name":"data","internalType":"bytes","indexed":false},{"type":"bytes","name":"operatorData","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"Minted","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"bytes","name":"data","internalType":"bytes","indexed":false},{"type":"bytes","name":"operatorData","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"RevokedOperator","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"tokenHolder","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"previousAdminRole","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"newAdminRole","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Sent","inputs":[{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"bytes","name":"data","internalType":"bytes","indexed":false},{"type":"bytes","name":"operatorData","internalType":"bytes","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"BLOCK_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DEFAULT_ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorizeOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"tokenHolder","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address[]","name":"","internalType":"address[]"}],"name":"defaultOperators","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRoleAdmin","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getRoleMember","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRoleMemberCount","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"granularity","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOperatorFor","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"address","name":"tokenHolder","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"operatorBurn","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"},{"type":"bytes","name":"operatorData","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"operatorSend","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"},{"type":"bytes","name":"operatorData","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"send","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]}]
Contract Creation Code
0x60806040523480156200001157600080fd5b5060405162002756380380620027568339810160408190526200003491620004dd565b604080516000815260208101909152839083906004620000558482620005f8565b506005620000648382620005f8565b5080516200007a90600690602084019062000397565b5060005b8151811015620000ea57600160076000848481518110620000a357620000a3620006c4565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000e181620006da565b9150506200007e565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200016557600080fd5b505af11580156200017a573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b158015620001f857600080fd5b505af11580156200020d573d6000803e3d6000fd5b50505050505050620002296000801b826200023260201b60201c565b50505062000702565b6200023e828262000242565b5050565b6200025982826200028560201b62000aad1760201c565b60008281526001602090815260409091206200028091839062000b3162000325821b17901c565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200023e576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002e13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200033c836001600160a01b03841662000345565b90505b92915050565b60008181526001830160205260408120546200038e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200033f565b5060006200033f565b828054828255906000526020600020908101928215620003ef579160200282015b82811115620003ef57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003b8565b50620003fd92915062000401565b5090565b5b80821115620003fd576000815560010162000402565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200044057600080fd5b81516001600160401b03808211156200045d576200045d62000418565b604051601f8301601f19908116603f0116810190828211818310171562000488576200048862000418565b81604052838152602092508683858801011115620004a557600080fd5b600091505b83821015620004c95785820183015181830184015290820190620004aa565b600093810190920192909252949350505050565b600080600060608486031215620004f357600080fd5b83516001600160401b03808211156200050b57600080fd5b62000519878388016200042e565b945060208601519150808211156200053057600080fd5b506200053f868287016200042e565b604086015190935090506001600160a01b03811681146200055f57600080fd5b809150509250925092565b600181811c908216806200057f57607f821691505b602082108103620005a057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028057600081815260208120601f850160051c81016020861015620005cf5750805b601f850160051c820191505b81811015620005f057828155600101620005db565b505050505050565b81516001600160401b0381111562000614576200061462000418565b6200062c816200062584546200056a565b84620005a6565b602080601f8311600181146200066457600084156200064b5750858301515b600019600386901b1c1916600185901b178555620005f0565b600085815260208120601f198616915b82811015620006955788860151825594840194600190910190840162000674565b5085821015620006b45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201620006fb57634e487b7160e01b600052601160045260246000fd5b5060010190565b61204480620007126000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639010d07c11610104578063ca15c873116100a2578063fad8b32a11610071578063fad8b32a14610407578063fbb386e81461041a578063fc673c4f14610441578063fe9d93031461045457600080fd5b8063ca15c87314610395578063d547741f146103a8578063d95b6371146103bb578063dd62ed3e146103ce57600080fd5b806395d89b41116100de57806395d89b411461035f5780639bd9bbc614610367578063a217fddf1461037a578063a9059cbb1461038257600080fd5b80639010d07c1461030e57806391d1485414610339578063959b8c3f1461034c57600080fd5b80632f2ff15d1161017157806340c10f191161014b57806340c10f19146102b8578063556f0dc7146102cb57806362ad1b83146102d257806370a08231146102e557600080fd5b80632f2ff15d14610281578063313ce5671461029657806336568abe146102a557600080fd5b8063095ea7b3116101ad578063095ea7b31461022657806318160ddd1461023957806323b872dd1461024b578063248a9ca31461025e57600080fd5b806301ffc9a7146101d457806306e48538146101fc57806306fdde0314610211575b600080fd5b6101e76101e2366004611961565b610467565b60405190151581526020015b60405180910390f35b610204610492565b6040516101f3919061198b565b6102196104f4565b6040516101f39190611a28565b6101e7610234366004611a50565b61057d565b6003545b6040519081526020016101f3565b6101e7610259366004611a7c565b610595565b61023d61026c366004611abd565b60009081526020819052604090206001015490565b61029461028f366004611ad6565b6105db565b005b604051601281526020016101f3565b6102946102b3366004611ad6565b610605565b6102946102c6366004611a50565b61061a565b600161023d565b6102946102e0366004611ba9565b61064f565b61023d6102f3366004611c3c565b6001600160a01b031660009081526002602052604090205490565b61032161031c366004611c59565b610694565b6040516001600160a01b0390911681526020016101f3565b6101e7610347366004611ad6565b6106b3565b61029461035a366004611c3c565b6106dc565b6102196107f9565b610294610375366004611c7b565b610808565b61023d600081565b6101e7610390366004611a50565b610826565b61023d6103a3366004611abd565b61085e565b6102946103b6366004611ad6565b610875565b6101e76103c9366004611cd4565b61089a565b61023d6103dc366004611cd4565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b610294610415366004611c3c565b61093b565b61023d7fefe866497efea00aa7574b13e86f62ebb584dfdf8dd4654ccc38107eb91840b881565b61029461044f366004611d02565b610a56565b610294610462366004611d82565b610a8e565b60006001600160e01b03198216635a05180f60e01b148061048c575061048c82610b46565b92915050565b606060068054806020026020016040519081016040528092919081815260200182805480156104ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104cc575b5050505050905090565b60606004805461050390611dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461052f90611dc9565b80156104ea5780601f10610551576101008083540402835291602001916104ea565b820191906000526020600020905b81548152906001019060200180831161055f57509395945050505050565b60003361058b818585610b7b565b5060019392505050565b6000336105a3858285610ca2565b6105d085858560405180602001604052806000815250604051806020016040528060008152506000610d2e565b506001949350505050565b6000828152602081905260409020600101546105f681610db1565b6106008383610dbe565b505050565b600061061081610db1565b6106008383610de0565b600061062581610db1565b61060083836040518060200160405280600081525060405180602001604052806000815250610e5a565b610659338661089a565b61067e5760405162461bcd60e51b815260040161067590611e03565b60405180910390fd5b61068d85858585856001610d2e565b5050505050565b60008281526001602052604081206106ac9083610e68565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b03811633036107405760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610675565b6001600160a01b03811660009081526007602052604090205460ff1615610791573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff191690556107c0565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606005805461050390611dc9565b61060033848484604051806020016040528060008152506001610d2e565b600061085533848460405180602001604052806000815250604051806020016040528060008152506000610d2e565b50600192915050565b600081815260016020526040812061048c90610e74565b60008281526020819052604090206001015461089081610db1565b6106008383610e7e565b6000816001600160a01b0316836001600160a01b0316148061090557506001600160a01b03831660009081526007602052604090205460ff16801561090557506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff16155b806106ac5750506001600160a01b0390811660009081526008602090815260408083209490931682529290925290205460ff1690565b336001600160a01b0382160361099d5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610675565b6001600160a01b03811660009081526007602052604090205460ff16156109f1573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610a1d565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610a60338561089a565b610a7c5760405162461bcd60e51b815260040161067590611e03565b610a8884848484610ea0565b50505050565b610aa933838360405180602001604052806000815250610ea0565b5050565b610ab782826106b3565b610aa9576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610aed3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106ac836001600160a01b038416610ede565b60006001600160e01b03198216637965db0b60e01b148061048c57506301ffc9a760e01b6001600160e01b031983161461048c565b6001600160a01b038316610bdf5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610675565b6001600160a01b038216610c415760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610675565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600a60209081526040808320938616835292905220546000198114610a885781811015610d215760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610675565b610a888484848403610b7b565b610d587fefe866497efea00aa7574b13e86f62ebb584dfdf8dd4654ccc38107eb91840b8876106b3565b15610d9b5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c881a5cc8189b1bd8dad959606a1b6044820152606401610675565b610da9868686868686610f2d565b505050505050565b610dbb8133611029565b50565b610dc88282610aad565b60008281526001602052604090206106009082610b31565b6001600160a01b0381163314610e505760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610675565b610aa98282610e7e565b610a88848484846001611082565b60006106ac83836111ca565b600061048c825490565b610e8882826111f4565b60008281526001602052604090206106009082611259565b60405162461bcd60e51b8152602060048201526013602482015272189d5c9b881a5cc81b9bdd08185b1b1bddd959606a1b6044820152606401610675565b6000818152600183016020526040812054610f255750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561048c565b50600061048c565b6001600160a01b038616610f925760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610675565b6001600160a01b038516610ff45760405162461bcd60e51b8152602060048201526024808201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610675565b3361100381888888888861126e565b611011818888888888611395565b611020818888888888886114fb565b50505050505050565b61103382826106b3565b610aa957611040816116c0565b61104b8360206116d2565b60405160200161105c929190611e4f565b60408051601f198184030181529082905262461bcd60e51b825261067591600401611a28565b6001600160a01b0385166110d85760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610675565b600033905084600360008282546110ef9190611eda565b90915550506001600160a01b0386166000908152600260205260408120805487929061111c908490611eda565b90915550611132905081600088888888886114fb565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161117993929190611eed565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b60008260000182815481106111e1576111e1611f22565b9060005260206000200154905092915050565b6111fe82826106b3565b15610aa9576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106ac836001600160a01b03841661186e565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190611f38565b90506001600160a01b0381161561102057604051633ad5cbc160e11b81526001600160a01b038216906375ab97829061135a908a908a908a908a908a908a90600401611f55565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b0385166000908152600260205260409020548381101561140e5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610675565b6001600160a01b03808716600090815260026020526040808220878503905591871681529081208054869290611445908490611eda565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161149d93929190611eed565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516114ea91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190611f38565b90506001600160a01b0381161561161c576040516223de2960e01b81526001600160a01b038216906223de29906115e5908b908b908b908b908b908b90600401611f55565b600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506116b6565b81156116b6576001600160a01b0386163b156116b65760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610675565b5050505050505050565b606061048c6001600160a01b03831660145b606060006116e1836002611faf565b6116ec906002611eda565b67ffffffffffffffff81111561170457611704611b06565b6040519080825280601f01601f19166020018201604052801561172e576020820181803683370190505b509050600360fc1b8160008151811061174957611749611f22565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061177857611778611f22565b60200101906001600160f81b031916908160001a905350600061179c846002611faf565b6117a7906001611eda565b90505b600181111561181f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106117db576117db611f22565b1a60f81b8282815181106117f1576117f1611f22565b60200101906001600160f81b031916908160001a90535060049490941c9361181881611fce565b90506117aa565b5083156106ac5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610675565b60008181526001830160205260408120548015611957576000611892600183611fe5565b85549091506000906118a690600190611fe5565b905081811461190b5760008660000182815481106118c6576118c6611f22565b90600052602060002001549050808760000184815481106118e9576118e9611f22565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061191c5761191c611ff8565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061048c565b600091505061048c565b60006020828403121561197357600080fd5b81356001600160e01b0319811681146106ac57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156119cc5783516001600160a01b0316835292840192918401916001016119a7565b50909695505050505050565b60005b838110156119f35781810151838201526020016119db565b50506000910152565b60008151808452611a148160208601602086016119d8565b601f01601f19169290920160200192915050565b6020815260006106ac60208301846119fc565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215611a6357600080fd5b8235611a6e81611a3b565b946020939093013593505050565b600080600060608486031215611a9157600080fd5b8335611a9c81611a3b565b92506020840135611aac81611a3b565b929592945050506040919091013590565b600060208284031215611acf57600080fd5b5035919050565b60008060408385031215611ae957600080fd5b823591506020830135611afb81611a3b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611b2d57600080fd5b813567ffffffffffffffff80821115611b4857611b48611b06565b604051601f8301601f19908116603f01168101908282118183101715611b7057611b70611b06565b81604052838152866020858801011115611b8957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611bc157600080fd5b8535611bcc81611a3b565b94506020860135611bdc81611a3b565b935060408601359250606086013567ffffffffffffffff80821115611c0057600080fd5b611c0c89838a01611b1c565b93506080880135915080821115611c2257600080fd5b50611c2f88828901611b1c565b9150509295509295909350565b600060208284031215611c4e57600080fd5b81356106ac81611a3b565b60008060408385031215611c6c57600080fd5b50508035926020909101359150565b600080600060608486031215611c9057600080fd5b8335611c9b81611a3b565b925060208401359150604084013567ffffffffffffffff811115611cbe57600080fd5b611cca86828701611b1c565b9150509250925092565b60008060408385031215611ce757600080fd5b8235611cf281611a3b565b91506020830135611afb81611a3b565b60008060008060808587031215611d1857600080fd5b8435611d2381611a3b565b935060208501359250604085013567ffffffffffffffff80821115611d4757600080fd5b611d5388838901611b1c565b93506060870135915080821115611d6957600080fd5b50611d7687828801611b1c565b91505092959194509250565b60008060408385031215611d9557600080fd5b82359150602083013567ffffffffffffffff811115611db357600080fd5b611dbf85828601611b1c565b9150509250929050565b600181811c90821680611ddd57607f821691505b602082108103611dfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e878160178501602088016119d8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611eb88160288401602088016119d8565b01602801949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561048c5761048c611ec4565b838152606060208201526000611f0660608301856119fc565b8281036040840152611f1881856119fc565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f4a57600080fd5b81516106ac81611a3b565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090611f90908301856119fc565b82810360a0840152611fa281856119fc565b9998505050505050505050565b6000816000190483118215151615611fc957611fc9611ec4565b500290565b600081611fdd57611fdd611ec4565b506000190190565b8181038181111561048c5761048c611ec4565b634e487b7160e01b600052603160045260246000fdfea26469706673582212206fefcd10e525b5d035207594de2fd63f09c2264edc8ea3fafe49d0eee968808264736f6c63430008100033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f90af4546e8c831a3b91200e6d41d70684b525f2000000000000000000000000000000000000000000000000000000000000000a4d69726120546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d49524100000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639010d07c11610104578063ca15c873116100a2578063fad8b32a11610071578063fad8b32a14610407578063fbb386e81461041a578063fc673c4f14610441578063fe9d93031461045457600080fd5b8063ca15c87314610395578063d547741f146103a8578063d95b6371146103bb578063dd62ed3e146103ce57600080fd5b806395d89b41116100de57806395d89b411461035f5780639bd9bbc614610367578063a217fddf1461037a578063a9059cbb1461038257600080fd5b80639010d07c1461030e57806391d1485414610339578063959b8c3f1461034c57600080fd5b80632f2ff15d1161017157806340c10f191161014b57806340c10f19146102b8578063556f0dc7146102cb57806362ad1b83146102d257806370a08231146102e557600080fd5b80632f2ff15d14610281578063313ce5671461029657806336568abe146102a557600080fd5b8063095ea7b3116101ad578063095ea7b31461022657806318160ddd1461023957806323b872dd1461024b578063248a9ca31461025e57600080fd5b806301ffc9a7146101d457806306e48538146101fc57806306fdde0314610211575b600080fd5b6101e76101e2366004611961565b610467565b60405190151581526020015b60405180910390f35b610204610492565b6040516101f3919061198b565b6102196104f4565b6040516101f39190611a28565b6101e7610234366004611a50565b61057d565b6003545b6040519081526020016101f3565b6101e7610259366004611a7c565b610595565b61023d61026c366004611abd565b60009081526020819052604090206001015490565b61029461028f366004611ad6565b6105db565b005b604051601281526020016101f3565b6102946102b3366004611ad6565b610605565b6102946102c6366004611a50565b61061a565b600161023d565b6102946102e0366004611ba9565b61064f565b61023d6102f3366004611c3c565b6001600160a01b031660009081526002602052604090205490565b61032161031c366004611c59565b610694565b6040516001600160a01b0390911681526020016101f3565b6101e7610347366004611ad6565b6106b3565b61029461035a366004611c3c565b6106dc565b6102196107f9565b610294610375366004611c7b565b610808565b61023d600081565b6101e7610390366004611a50565b610826565b61023d6103a3366004611abd565b61085e565b6102946103b6366004611ad6565b610875565b6101e76103c9366004611cd4565b61089a565b61023d6103dc366004611cd4565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b610294610415366004611c3c565b61093b565b61023d7fefe866497efea00aa7574b13e86f62ebb584dfdf8dd4654ccc38107eb91840b881565b61029461044f366004611d02565b610a56565b610294610462366004611d82565b610a8e565b60006001600160e01b03198216635a05180f60e01b148061048c575061048c82610b46565b92915050565b606060068054806020026020016040519081016040528092919081815260200182805480156104ea57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116104cc575b5050505050905090565b60606004805461050390611dc9565b80601f016020809104026020016040519081016040528092919081815260200182805461052f90611dc9565b80156104ea5780601f10610551576101008083540402835291602001916104ea565b820191906000526020600020905b81548152906001019060200180831161055f57509395945050505050565b60003361058b818585610b7b565b5060019392505050565b6000336105a3858285610ca2565b6105d085858560405180602001604052806000815250604051806020016040528060008152506000610d2e565b506001949350505050565b6000828152602081905260409020600101546105f681610db1565b6106008383610dbe565b505050565b600061061081610db1565b6106008383610de0565b600061062581610db1565b61060083836040518060200160405280600081525060405180602001604052806000815250610e5a565b610659338661089a565b61067e5760405162461bcd60e51b815260040161067590611e03565b60405180910390fd5b61068d85858585856001610d2e565b5050505050565b60008281526001602052604081206106ac9083610e68565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b03811633036107405760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610675565b6001600160a01b03811660009081526007602052604090205460ff1615610791573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff191690556107c0565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606005805461050390611dc9565b61060033848484604051806020016040528060008152506001610d2e565b600061085533848460405180602001604052806000815250604051806020016040528060008152506000610d2e565b50600192915050565b600081815260016020526040812061048c90610e74565b60008281526020819052604090206001015461089081610db1565b6106008383610e7e565b6000816001600160a01b0316836001600160a01b0316148061090557506001600160a01b03831660009081526007602052604090205460ff16801561090557506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff16155b806106ac5750506001600160a01b0390811660009081526008602090815260408083209490931682529290925290205460ff1690565b336001600160a01b0382160361099d5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610675565b6001600160a01b03811660009081526007602052604090205460ff16156109f1573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610a1d565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610a60338561089a565b610a7c5760405162461bcd60e51b815260040161067590611e03565b610a8884848484610ea0565b50505050565b610aa933838360405180602001604052806000815250610ea0565b5050565b610ab782826106b3565b610aa9576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610aed3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006106ac836001600160a01b038416610ede565b60006001600160e01b03198216637965db0b60e01b148061048c57506301ffc9a760e01b6001600160e01b031983161461048c565b6001600160a01b038316610bdf5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610675565b6001600160a01b038216610c415760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610675565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600a60209081526040808320938616835292905220546000198114610a885781811015610d215760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500006044820152606401610675565b610a888484848403610b7b565b610d587fefe866497efea00aa7574b13e86f62ebb584dfdf8dd4654ccc38107eb91840b8876106b3565b15610d9b5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c881a5cc8189b1bd8dad959606a1b6044820152606401610675565b610da9868686868686610f2d565b505050505050565b610dbb8133611029565b50565b610dc88282610aad565b60008281526001602052604090206106009082610b31565b6001600160a01b0381163314610e505760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610675565b610aa98282610e7e565b610a88848484846001611082565b60006106ac83836111ca565b600061048c825490565b610e8882826111f4565b60008281526001602052604090206106009082611259565b60405162461bcd60e51b8152602060048201526013602482015272189d5c9b881a5cc81b9bdd08185b1b1bddd959606a1b6044820152606401610675565b6000818152600183016020526040812054610f255750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561048c565b50600061048c565b6001600160a01b038616610f925760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610675565b6001600160a01b038516610ff45760405162461bcd60e51b8152602060048201526024808201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610675565b3361100381888888888861126e565b611011818888888888611395565b611020818888888888886114fb565b50505050505050565b61103382826106b3565b610aa957611040816116c0565b61104b8360206116d2565b60405160200161105c929190611e4f565b60408051601f198184030181529082905262461bcd60e51b825261067591600401611a28565b6001600160a01b0385166110d85760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610675565b600033905084600360008282546110ef9190611eda565b90915550506001600160a01b0386166000908152600260205260408120805487929061111c908490611eda565b90915550611132905081600088888888886114fb565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161117993929190611eed565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b60008260000182815481106111e1576111e1611f22565b9060005260206000200154905092915050565b6111fe82826106b3565b15610aa9576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006106ac836001600160a01b03841661186e565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190611f38565b90506001600160a01b0381161561102057604051633ad5cbc160e11b81526001600160a01b038216906375ab97829061135a908a908a908a908a908a908a90600401611f55565b600060405180830381600087803b15801561137457600080fd5b505af1158015611388573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b0385166000908152600260205260409020548381101561140e5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b6064820152608401610675565b6001600160a01b03808716600090815260026020526040808220878503905591871681529081208054869290611445908490611eda565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161149d93929190611eed565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516114ea91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190611f38565b90506001600160a01b0381161561161c576040516223de2960e01b81526001600160a01b038216906223de29906115e5908b908b908b908b908b908b90600401611f55565b600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506116b6565b81156116b6576001600160a01b0386163b156116b65760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610675565b5050505050505050565b606061048c6001600160a01b03831660145b606060006116e1836002611faf565b6116ec906002611eda565b67ffffffffffffffff81111561170457611704611b06565b6040519080825280601f01601f19166020018201604052801561172e576020820181803683370190505b509050600360fc1b8160008151811061174957611749611f22565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061177857611778611f22565b60200101906001600160f81b031916908160001a905350600061179c846002611faf565b6117a7906001611eda565b90505b600181111561181f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106117db576117db611f22565b1a60f81b8282815181106117f1576117f1611f22565b60200101906001600160f81b031916908160001a90535060049490941c9361181881611fce565b90506117aa565b5083156106ac5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610675565b60008181526001830160205260408120548015611957576000611892600183611fe5565b85549091506000906118a690600190611fe5565b905081811461190b5760008660000182815481106118c6576118c6611f22565b90600052602060002001549050808760000184815481106118e9576118e9611f22565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061191c5761191c611ff8565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061048c565b600091505061048c565b60006020828403121561197357600080fd5b81356001600160e01b0319811681146106ac57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156119cc5783516001600160a01b0316835292840192918401916001016119a7565b50909695505050505050565b60005b838110156119f35781810151838201526020016119db565b50506000910152565b60008151808452611a148160208601602086016119d8565b601f01601f19169290920160200192915050565b6020815260006106ac60208301846119fc565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215611a6357600080fd5b8235611a6e81611a3b565b946020939093013593505050565b600080600060608486031215611a9157600080fd5b8335611a9c81611a3b565b92506020840135611aac81611a3b565b929592945050506040919091013590565b600060208284031215611acf57600080fd5b5035919050565b60008060408385031215611ae957600080fd5b823591506020830135611afb81611a3b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611b2d57600080fd5b813567ffffffffffffffff80821115611b4857611b48611b06565b604051601f8301601f19908116603f01168101908282118183101715611b7057611b70611b06565b81604052838152866020858801011115611b8957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a08688031215611bc157600080fd5b8535611bcc81611a3b565b94506020860135611bdc81611a3b565b935060408601359250606086013567ffffffffffffffff80821115611c0057600080fd5b611c0c89838a01611b1c565b93506080880135915080821115611c2257600080fd5b50611c2f88828901611b1c565b9150509295509295909350565b600060208284031215611c4e57600080fd5b81356106ac81611a3b565b60008060408385031215611c6c57600080fd5b50508035926020909101359150565b600080600060608486031215611c9057600080fd5b8335611c9b81611a3b565b925060208401359150604084013567ffffffffffffffff811115611cbe57600080fd5b611cca86828701611b1c565b9150509250925092565b60008060408385031215611ce757600080fd5b8235611cf281611a3b565b91506020830135611afb81611a3b565b60008060008060808587031215611d1857600080fd5b8435611d2381611a3b565b935060208501359250604085013567ffffffffffffffff80821115611d4757600080fd5b611d5388838901611b1c565b93506060870135915080821115611d6957600080fd5b50611d7687828801611b1c565b91505092959194509250565b60008060408385031215611d9557600080fd5b82359150602083013567ffffffffffffffff811115611db357600080fd5b611dbf85828601611b1c565b9150509250929050565b600181811c90821680611ddd57607f821691505b602082108103611dfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611e878160178501602088016119d8565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611eb88160288401602088016119d8565b01602801949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561048c5761048c611ec4565b838152606060208201526000611f0660608301856119fc565b8281036040840152611f1881856119fc565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611f4a57600080fd5b81516106ac81611a3b565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090611f90908301856119fc565b82810360a0840152611fa281856119fc565b9998505050505050505050565b6000816000190483118215151615611fc957611fc9611ec4565b500290565b600081611fdd57611fdd611ec4565b506000190190565b8181038181111561048c5761048c611ec4565b634e487b7160e01b600052603160045260246000fdfea26469706673582212206fefcd10e525b5d035207594de2fd63f09c2264edc8ea3fafe49d0eee968808264736f6c63430008100033