Overview
WEMIX Balance
WEMIX Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 28,584 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 79173299 | 2 hrs ago | IN | 0 WEMIX | 0.0064811 | ||||
Approve | 79172531 | 2 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Transfer | 79166957 | 4 hrs ago | IN | 0 WEMIX | 0.0047711 | ||||
Approve | 79166370 | 4 hrs ago | IN | 0 WEMIX | 0.0046963 | ||||
Transfer | 79165559 | 4 hrs ago | IN | 0 WEMIX | 0.0064811 | ||||
Approve | 79163092 | 5 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Approve | 79162877 | 5 hrs ago | IN | 0 WEMIX | 0.0047239 | ||||
Approve | 79156440 | 7 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Approve | 79150599 | 8 hrs ago | IN | 0 WEMIX | 0.0046963 | ||||
Approve | 79139594 | 11 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Transfer | 79139375 | 11 hrs ago | IN | 0 WEMIX | 0.0069623 | ||||
Transfer | 79139342 | 11 hrs ago | IN | 0 WEMIX | 0.0052523 | ||||
Transfer | 79139211 | 11 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Transfer | 79139130 | 11 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Transfer | 79139104 | 11 hrs ago | IN | 0 WEMIX | 0.0064811 | ||||
Transfer | 79139002 | 11 hrs ago | IN | 0 WEMIX | 0.0069623 | ||||
Approve | 79136563 | 12 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Transfer | 79136180 | 12 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Approve | 79135940 | 12 hrs ago | IN | 0 WEMIX | 0.0047251 | ||||
Transfer | 79135840 | 12 hrs ago | IN | 0 WEMIX | 0.0069623 | ||||
Transfer | 79135134 | 12 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Transfer | 79134047 | 13 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Transfer | 79133476 | 13 hrs ago | IN | 0 WEMIX | 0.0069623 | ||||
Transfer | 79133364 | 13 hrs ago | IN | 0 WEMIX | 0.0052511 | ||||
Transfer | 79133260 | 13 hrs ago | IN | 0 WEMIX | 0.0052511 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
58420129 | 240 days ago | Contract Creation | 0 WEMIX |
Loading...
Loading
Contract Name:
PlayToken
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at wemixscan.com on 2024-09-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.10; 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); /** * @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 `account`. */ function renounceRole(bytes32 role, address account) external; } interface IBlackOrWhiteList { /** * @dev Get list of managers. * @return managers address type of array. */ function getManagers() external view returns (address[] memory); /** * @dev Get total number of managers. * @return count total count of managers. */ function getManagersCount() external view returns (uint); /** * @dev Give manager role of BlackOrWhitelist to `addr`. * Manager can add/delete user from blacklist or whitelist * * Emits {ManagerAdded} event. * * Requirements * - caller must have owner role. */ function addManager(address addr) external; /** * @dev Deprive manager role of BlackOrWhitelist from `addr`. * * Emits {ManagerRemoved} event. * * Requirements * - caller must have owner role. */ function removeManager(address addr) external; /** * @dev Get list of entire blacklist. * * Entire Blacklist is a type of blacklst that should be banned from whole service. * * @return entireBlacklist address type of array. */ function getEntireBlacklist() external view returns(address[] memory); /** * @dev Register entireBlacklist. * @param addresses array of address to register as entireBlacklist. * * Emits {BlacklistAddedToEntire} event. * * Requirements * - caller must have manager role. */ function addToEntireBlacklist(address[] memory addresses) external; /** * @dev Remove from entireBlacklist. * @param addresses array of address to remove from entireBlacklist. * * Emits {BlacklistRemovedFromEntire} event. * * Requirements * - caller must have manager role. */ function removeFromEntireBlacklist(address[] memory addresses) external; /** * @dev Get list of contract blacklist. * * Contract Blacklist is a type of blacklst that should be banned from `contractAddr`. * * @return contractBlacklist address type of array. */ function getContractBlacklist(address contractAddr) external view returns(address[] memory); /** * @dev Register contratBlacklist. * @param contractAddr contract Address that you want blacklist to be blocked from. * @param addresses array of address to register as contractBlacklist. * * Emits {BlacklistAddedToContract} event. * * Requirements * - caller must have manager role. */ function addToContractBlacklist(address contractAddr, address[] memory addresses) external; /** * @dev Remove from contratBlacklist. * @param contractAddr contract Address that you have set blacklist. * @param addresses array of address to remove from contractBlacklist. * * Emits {BlacklistRemovedFromContract} event. * * Requirements * - caller must have manager role. */ function removeFromContractBlacklist(address contractAddr, address[] memory addresses) external; /** * @dev Get list of whitelist of `contractAddr`. * * Whitelist is a list of addresses that are allowed to do certian action at certain contract. * * @return whitelist address type of array. */ function getWhitelist(address contractAddr) external view returns(address[] memory); /** * @dev Register whitelist. * @param contractAddr contract Address that you want to set whitelist. * @param addresses array of address to register as whitelist. * * Emits {WhitelistAdded} event. * * Requirements * - caller must have manager role. */ function addToWhitelist(address contractAddr, address[] memory addresses) external; /** * @dev Remove from whitelist. * @param contractAddr contract Address that you have set whitelist. * @param addresses array of address to remove from whitelist. * * Emits {WhitelistRemoved} event. * * Requirements * - caller must have manager role. */ function removeFromWhitelist( address contractAddr, address[] memory addresses) external; /** * @dev Check `addr` is registered as blacklist or not. * @param contractAddr contract Address to check contractBlacklist. * @param addr address to check if it's on blacklist. * * To check only if the `addr` is entireBlacklist, * put zero addresss to `contractAddr`. */ function isBlacklist(address contractAddr, address addr) external view returns(bool); /** * @dev Check `addr` is registered as whitelist of `contractAddr` or not. * @param contractAddr contract Address to check whitelist. * @param addr address to check if it's on whitelist. */ function isWhitelist(address contractAddr, address addr) external view returns(bool); event ManagerAdded(address addr); event ManagerRemoved(address addr); event BlacklistAddedToEntire(address[] addedBlacklist, uint addedLength); event BlacklistRemovedFromEntire(address[] removedBlacklist, uint removedLength); event BlacklistAddedToContract(address indexed contractAddr, address[] addedBlacklist, uint addedLength); event BlacklistRemovedFromContract(address indexed contractAddr, address[] removedBlacklist, uint removedLength); event WhitelistAdded(address indexed contractAddr, address[] addedWhitelist, uint addedLength); event WhitelistRemoved(address indexed contractAddr, address[] removedWhitelist, uint removedLength); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IExecuteManager { //===== VIEW FUNCTIONS =====// function isExecutable(bytes4 selector) external view returns (bool); //===== EVENTS =====// event ExecutabilityChanged(bytes4 indexed selector, bool executablity); event ExecutabilityBelongContractChanged(address indexed ca, bytes4 indexed selector, bool executablity); } interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } library InitializationLibrary { using Address for address; /** * RoleManager */ function hasRole(address roleManager, bytes32 role, address account) internal view returns (bool) { require(roleManager.isContract(), "InitializationLib: invalid roleManager"); return IAccessControl(roleManager).hasRole(role, account); } /** * ExecuteManager */ function isExecutable(address executeManager, bytes4 selector) internal view returns (bool) { require(executeManager.isContract(), "InitializationLib: invalid roleManager"); return IExecuteManager(executeManager).isExecutable(selector); } /** * BlackOrWhitelist */ function isBlacklist(address blackList, address contractAddress, address account) internal view returns (bool) { require(blackList.isContract(), "InitializationLib: invalid roleManager"); return IBlackOrWhiteList(blackList).isBlacklist(contractAddress, account); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } abstract contract InitializationBase { using Address for address; using InitializationLibrary for address; //===== VARIABLES =====// address public roleManager; address public blackList; //===== EVENTS =====// event RoleManagerChanged(address roleManager); event BlackListChanged(address blackList); //===== ERRORS =====// error InvalidAddress(bytes32 name, address input); error BlackList(address sender); //===== MODIFIERS =====// modifier isNotBlackList(address account) virtual { if(_isBlackList(account)) revert BlackList(account); _; } //===== CONSTRUCTOR =====// constructor(address _roleManager, address _blackList) { if(!_roleManager.isContract()) revert InvalidAddress("roleManager", _roleManager); if(!_blackList.isContract()) revert InvalidAddress("blackList", _blackList); roleManager = _roleManager; blackList = _blackList; } //===== FUNCTIONS =====// function _verifyAccountHasRole(bytes32 role, address account) internal virtual view returns (bool) { return roleManager.hasRole(role, account); } //===== INTERNAL FUNCTIONS =====// function _isBlackList(address account) internal virtual view returns (bool) { return blackList.isBlacklist(address(this), account); } function _changeRoleManager(address newManager) internal virtual { if(!newManager.isContract()) revert InvalidAddress("roleManager", newManager); roleManager = newManager; emit RoleManagerChanged(newManager); } function _changeBlackList(address newBlackList) internal virtual { if(!newBlackList.isContract()) revert InvalidAddress("blackList", newBlackList); blackList = newBlackList; emit BlackListChanged(newBlackList); } } interface IGameTokenBase { //===== STRUCTS =====// struct MintPolicy { uint feePercent; address receipient; } //===== EVENTS =====// event MintPolicyChanged(MintPolicy newPolicy, uint timeStamp); } interface IGameToken is IGameTokenBase, IERC20 { //===== FUNCTIONS =====// function mint(address account, uint amount) external returns (bool); function burn(uint amount) external returns (bool); function transferOwnership(address newOwner) external; function increaseAllowance(address spender, uint256 addedValue) external returns (bool); //===== VIEW FUNCTIONS =====// function symbol() external view returns (string memory); } abstract contract TokenInitialization is InitializationBase { using Address for address; //===== VARIABLES =====// bytes32 immutable public setterRole; address public navigator; // address of navigator //===== MODIFIERS =====// modifier onlySetter() { require(_verifyAccountHasRole(setterRole, msg.sender), "TI: sender is not setter"); _; } modifier isNotBlackList(address account) override { require(!_isBlackList(account), "TI: account is blackList"); _; } //===== EVENTS =====// event NavigatorChanged(address newNavigator); //===== CONSTRUCTOR =====// constructor( address navigator_, address roleManager_, address blackList_, bytes32 setterRole_ ) InitializationBase(roleManager_, blackList_) { require(navigator_.isContract(), "TI: invalid navigator"); navigator = navigator_; setterRole = setterRole_; } //===== FUNCTIONS =====// function changeNavigator(address newNavigator) external virtual onlySetter { _changeNavigator(newNavigator); } function changeRoleManager(address newManager) external virtual onlySetter { super._changeRoleManager(newManager); } function changeBlackList(address newBlackList) external virtual onlySetter { super._changeBlackList(newBlackList); } //===== INTERNAL FUNCTIONS =====// function _changeNavigator(address newNavigator) internal virtual { address _navigator = newNavigator; require(_navigator.isContract(), "TI: invalid navigator"); navigator = _navigator; emit NavigatorChanged(_navigator); } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract PlayToken is ERC20, TokenInitialization, IGameTokenBase { using Address for address; //===== CONSTRUCTOR =====// constructor( string memory name_, string memory symbol_, address navigator_, address roleManager_, address blackList_ ) ERC20(name_, symbol_) TokenInitialization(navigator_, roleManager_, blackList_, "PlayTokenSetter") {} //===== FUNCTIONS ======// /** * @dev mint game token to treasury * @param amount mint amount */ function mint(address account, uint amount) external returns (bool) { require(_verifyAccountHasRole( bytes32(abi.encodePacked(symbol(), "Minter")), _msgSender()) , "PlayToken: msg sender can't mint" ); super._mint(account, amount); return true; } /** * @dev burn game token from msg sender * @param amount burn amount */ function burn(uint amount) external returns (bool) { super._burn(_msgSender(), amount); return true; } //===== INTERNAL FUNCTIONS =====// function _transfer( address from, address to, uint256 amount ) internal virtual override isNotBlackList(from) isNotBlackList(to) { super._transfer(from, to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"navigator_","type":"address"},{"internalType":"address","name":"roleManager_","type":"address"},{"internalType":"address","name":"blackList_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"BlackList","type":"error"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"address","name":"input","type":"address"}],"name":"InvalidAddress","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":false,"internalType":"address","name":"blackList","type":"address"}],"name":"BlackListChanged","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"feePercent","type":"uint256"},{"internalType":"address","name":"receipient","type":"address"}],"indexed":false,"internalType":"struct IGameTokenBase.MintPolicy","name":"newPolicy","type":"tuple"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"MintPolicyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newNavigator","type":"address"}],"name":"NavigatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"roleManager","type":"address"}],"name":"RoleManagerChanged","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blackList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBlackList","type":"address"}],"name":"changeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNavigator","type":"address"}],"name":"changeNavigator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"changeRoleManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"navigator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roleManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setterRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002ec138038062002ec1833981810160405281019062000037919062000592565b8282827f506c6179546f6b656e536574746572000000000000000000000000000000000082828a8a816003908051906020019062000077929190620002e0565b50806004908051906020019062000090929190620002e0565b505050620000bf8273ffffffffffffffffffffffffffffffffffffffff16620002bd60201b620009f31760201c565b6200010357816040517fbd94b436000000000000000000000000000000000000000000000000000000008152600401620000fa91906200068f565b60405180910390fd5b6200012f8173ffffffffffffffffffffffffffffffffffffffff16620002bd60201b620009f31760201c565b6200017357806040517fbd94b4360000000000000000000000000000000000000000000000000000000081526004016200016a9190620006e0565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620002238473ffffffffffffffffffffffffffffffffffffffff16620002bd60201b620009f31760201c565b62000265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025c906200076c565b60405180910390fd5b83600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060808181525050505050505050505050620007f3565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054620002ee90620007bd565b90600052602060002090601f0160209004810192826200031257600085556200035e565b82601f106200032d57805160ff19168380011785556200035e565b828001600101855582156200035e579182015b828111156200035d57825182559160200191906001019062000340565b5b5090506200036d919062000371565b5090565b5b808211156200038c57600081600090555060010162000372565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003f982620003ae565b810181811067ffffffffffffffff821117156200041b576200041a620003bf565b5b80604052505050565b60006200043062000390565b90506200043e8282620003ee565b919050565b600067ffffffffffffffff821115620004615762000460620003bf565b5b6200046c82620003ae565b9050602081019050919050565b60005b83811015620004995780820151818401526020810190506200047c565b83811115620004a9576000848401525b50505050565b6000620004c6620004c08462000443565b62000424565b905082815260208101848484011115620004e557620004e4620003a9565b5b620004f284828562000479565b509392505050565b600082601f830112620005125762000511620003a4565b5b815162000524848260208601620004af565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200055a826200052d565b9050919050565b6200056c816200054d565b81146200057857600080fd5b50565b6000815190506200058c8162000561565b92915050565b600080600080600060a08688031215620005b157620005b06200039a565b5b600086015167ffffffffffffffff811115620005d257620005d16200039f565b5b620005e088828901620004fa565b955050602086015167ffffffffffffffff8111156200060457620006036200039f565b5b6200061288828901620004fa565b945050604062000625888289016200057b565b935050606062000638888289016200057b565b92505060806200064b888289016200057b565b9150509295509295909350565b7f726f6c654d616e61676572000000000000000000000000000000000000000000815250565b62000689816200054d565b82525050565b6000604082019050620006a56000830162000658565b620006b460208301846200067e565b92915050565b7f626c61636b4c6973740000000000000000000000000000000000000000000000815250565b6000604082019050620006f660008301620006ba565b6200070560208301846200067e565b92915050565b600082825260208201905092915050565b7f54493a20696e76616c6964206e6176696761746f720000000000000000000000600082015250565b6000620007546015836200070b565b915062000761826200071c565b602082019050919050565b60006020820190508181036000830152620007878162000745565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007d657607f821691505b60208210811415620007ed57620007ec6200078e565b5b50919050565b60805161269d6200082460003960008181610504015281816105f2015281816108af0152610983015261269d6000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80634215d573116100ad578063a9059cbb11610071578063a9059cbb1461036c578063c92fb9471461039c578063cdab73b5146103ba578063dd62ed3e146103d8578063f363217e146104085761012b565b80634215d573146102a057806342966c68146102be57806370a08231146102ee57806395d89b411461031e578063a457c2d71461033c5761012b565b806323b872dd116100f457806323b872dd146101d6578063313ce5671461020657806339509351146102245780633fa2c5751461025457806340c10f19146102705761012b565b8062435da51461013057806306fdde031461014e578063095ea7b31461016c57806315211d631461019c57806318160ddd146101b8575b600080fd5b610138610424565b604051610145919061180f565b60405180910390f35b61015661044a565b60405161016391906118c3565b60405180910390f35b6101866004803603810190610181919061194c565b6104dc565b60405161019391906119a7565b60405180910390f35b6101b660048036038101906101b191906119c2565b6104ff565b005b6101c0610574565b6040516101cd91906119fe565b60405180910390f35b6101f060048036038101906101eb9190611a19565b61057e565b6040516101fd91906119a7565b60405180910390f35b61020e6105ad565b60405161021b9190611a88565b60405180910390f35b61023e6004803603810190610239919061194c565b6105b6565b60405161024b91906119a7565b60405180910390f35b61026e600480360381019061026991906119c2565b6105ed565b005b61028a6004803603810190610285919061194c565b610662565b60405161029791906119a7565b60405180910390f35b6102a86106f7565b6040516102b5919061180f565b60405180910390f35b6102d860048036038101906102d39190611aa3565b61071d565b6040516102e591906119a7565b60405180910390f35b610308600480360381019061030391906119c2565b610739565b60405161031591906119fe565b60405180910390f35b610326610781565b60405161033391906118c3565b60405180910390f35b6103566004803603810190610351919061194c565b610813565b60405161036391906119a7565b60405180910390f35b6103866004803603810190610381919061194c565b61088a565b60405161039391906119a7565b60405180910390f35b6103a46108ad565b6040516103b19190611ae9565b60405180910390f35b6103c26108d1565b6040516103cf919061180f565b60405180910390f35b6103f260048036038101906103ed9190611b04565b6108f7565b6040516103ff91906119fe565b60405180910390f35b610422600480360381019061041d91906119c2565b61097e565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461045990611b73565b80601f016020809104026020016040519081016040528092919081815260200182805461048590611b73565b80156104d25780601f106104a7576101008083540402835291602001916104d2565b820191906000526020600020905b8154815290600101906020018083116104b557829003601f168201915b5050505050905090565b6000806104e7610a16565b90506104f4818585610a1e565b600191505092915050565b6105297f000000000000000000000000000000000000000000000000000000000000000033610be9565b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90611bf1565b60405180910390fd5b61057181610c40565b50565b6000600254905090565b600080610589610a16565b9050610596858285610d1f565b6105a1858585610dab565b60019150509392505050565b60006012905090565b6000806105c1610a16565b90506105e28185856105d385896108f7565b6105dd9190611c40565b610a1e565b600191505092915050565b6106177f000000000000000000000000000000000000000000000000000000000000000033610be9565b610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90611bf1565b60405180910390fd5b61065f81610e51565b50565b60006106a461066f610781565b60405160200161067f9190611d1e565b60405160208183030381529060405261069790611d7d565b61069f610a16565b610be9565b6106e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106da90611e30565b60405180910390fd5b6106ed8383610f2c565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061073061072a610a16565b83611083565b60019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461079090611b73565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90611b73565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050905090565b60008061081e610a16565b9050600061082c82866108f7565b905083811015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611ec2565b60405180910390fd5b61087e8286868403610a1e565b60019250505092915050565b600080610895610a16565b90506108a2818585610dab565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6109a87f000000000000000000000000000000000000000000000000000000000000000033610be9565b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de90611bf1565b60405180910390fd5b6109f081611251565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590611f54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590611fe6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bdc91906119fe565b60405180910390a3505050565b6000610c388383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661132c9092919063ffffffff16565b905092915050565b6000819050610c648173ffffffffffffffffffffffffffffffffffffffff166109f3565b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90612052565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f02a39e9533105de4d1b435f8c88df78499a7d43d8531efbacc79b0b0eb68d04081604051610d13919061180f565b60405180910390a15050565b6000610d2b84846108f7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610da55781811015610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906120be565b60405180910390fd5b610da48484848403610a1e565b5b50505050565b82610db581611411565b15610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061212a565b60405180910390fd5b82610dff81611411565b15610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e369061212a565b60405180910390fd5b610e4a858585611467565b5050505050565b610e708173ffffffffffffffffffffffffffffffffffffffff166109f3565b610eb157806040517fbd94b436000000000000000000000000000000000000000000000000000000008152600401610ea89190612170565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75a17ea4667bcf0458bae3f130ddc1958d212a8239cf7f78181e8dadb2f036d681604051610f21919061180f565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906121e3565b60405180910390fd5b610fa8600083836116df565b8060026000828254610fba9190611c40565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161106b91906119fe565b60405180910390a361107f600083836116e4565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612275565b60405180910390fd5b6110ff826000836116df565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90612307565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161123891906119fe565b60405180910390a361124c836000846116e4565b505050565b6112708173ffffffffffffffffffffffffffffffffffffffff166109f3565b6112b157806040517fbd94b4360000000000000000000000000000000000000000000000000000000081526004016112a8919061234d565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc1af5622742cba495bc672727cd888bf9126ea99146d650f7f8319575155879081604051611321919061180f565b60405180910390a150565b600061134d8473ffffffffffffffffffffffffffffffffffffffff166109f3565b61138c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611383906123e6565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166391d1485484846040518363ffffffff1660e01b81526004016113c7929190612406565b602060405180830381865afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611408919061245b565b90509392505050565b60006114603083600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116e99092919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906124fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061258c565b60405180910390fd5b6115528383836116df565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf9061261e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116c691906119fe565b60405180910390a36116d98484846116e4565b50505050565b505050565b505050565b600061170a8473ffffffffffffffffffffffffffffffffffffffff166109f3565b611749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611740906123e6565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166373cf013c84846040518363ffffffff1660e01b815260040161178492919061263e565b602060405180830381865afa1580156117a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c5919061245b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117f9826117ce565b9050919050565b611809816117ee565b82525050565b60006020820190506118246000830184611800565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611864578082015181840152602081019050611849565b83811115611873576000848401525b50505050565b6000601f19601f8301169050919050565b60006118958261182a565b61189f8185611835565b93506118af818560208601611846565b6118b881611879565b840191505092915050565b600060208201905081810360008301526118dd818461188a565b905092915050565b600080fd5b6118f3816117ee565b81146118fe57600080fd5b50565b600081359050611910816118ea565b92915050565b6000819050919050565b61192981611916565b811461193457600080fd5b50565b60008135905061194681611920565b92915050565b60008060408385031215611963576119626118e5565b5b600061197185828601611901565b925050602061198285828601611937565b9150509250929050565b60008115159050919050565b6119a18161198c565b82525050565b60006020820190506119bc6000830184611998565b92915050565b6000602082840312156119d8576119d76118e5565b5b60006119e684828501611901565b91505092915050565b6119f881611916565b82525050565b6000602082019050611a1360008301846119ef565b92915050565b600080600060608486031215611a3257611a316118e5565b5b6000611a4086828701611901565b9350506020611a5186828701611901565b9250506040611a6286828701611937565b9150509250925092565b600060ff82169050919050565b611a8281611a6c565b82525050565b6000602082019050611a9d6000830184611a79565b92915050565b600060208284031215611ab957611ab86118e5565b5b6000611ac784828501611937565b91505092915050565b6000819050919050565b611ae381611ad0565b82525050565b6000602082019050611afe6000830184611ada565b92915050565b60008060408385031215611b1b57611b1a6118e5565b5b6000611b2985828601611901565b9250506020611b3a85828601611901565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b8b57607f821691505b60208210811415611b9f57611b9e611b44565b5b50919050565b7f54493a2073656e646572206973206e6f74207365747465720000000000000000600082015250565b6000611bdb601883611835565b9150611be682611ba5565b602082019050919050565b60006020820190508181036000830152611c0a81611bce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c4b82611916565b9150611c5683611916565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c8b57611c8a611c11565b5b828201905092915050565b600081905092915050565b6000611cac8261182a565b611cb68185611c96565b9350611cc6818560208601611846565b80840191505092915050565b7f4d696e7465720000000000000000000000000000000000000000000000000000600082015250565b6000611d08600683611c96565b9150611d1382611cd2565b600682019050919050565b6000611d2a8284611ca1565b9150611d3582611cfb565b915081905092915050565b600081519050919050565b6000819050602082019050919050565b6000611d678251611ad0565b80915050919050565b600082821b905092915050565b6000611d8882611d40565b82611d9284611d4b565b9050611d9d81611d5b565b92506020821015611ddd57611dd87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802611d70565b831692505b5050919050565b7f506c6179546f6b656e3a206d73672073656e6465722063616e2774206d696e74600082015250565b6000611e1a602083611835565b9150611e2582611de4565b602082019050919050565b60006020820190508181036000830152611e4981611e0d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611eac602583611835565b9150611eb782611e50565b604082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611f3e602483611835565b9150611f4982611ee2565b604082019050919050565b60006020820190508181036000830152611f6d81611f31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fd0602283611835565b9150611fdb82611f74565b604082019050919050565b60006020820190508181036000830152611fff81611fc3565b9050919050565b7f54493a20696e76616c6964206e6176696761746f720000000000000000000000600082015250565b600061203c601583611835565b915061204782612006565b602082019050919050565b6000602082019050818103600083015261206b8161202f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006120a8601d83611835565b91506120b382612072565b602082019050919050565b600060208201905081810360008301526120d78161209b565b9050919050565b7f54493a206163636f756e7420697320626c61636b4c6973740000000000000000600082015250565b6000612114601883611835565b915061211f826120de565b602082019050919050565b6000602082019050818103600083015261214381612107565b9050919050565b7f626c61636b4c6973740000000000000000000000000000000000000000000000815250565b60006040820190506121846000830161214a565b6121916020830184611800565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006121cd601f83611835565b91506121d882612197565b602082019050919050565b600060208201905081810360008301526121fc816121c0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061225f602183611835565b915061226a82612203565b604082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006122f1602283611835565b91506122fc82612295565b604082019050919050565b60006020820190508181036000830152612320816122e4565b9050919050565b7f726f6c654d616e61676572000000000000000000000000000000000000000000815250565b600060408201905061236160008301612327565b61236e6020830184611800565b92915050565b7f496e697469616c697a6174696f6e4c69623a20696e76616c696420726f6c654d60008201527f616e616765720000000000000000000000000000000000000000000000000000602082015250565b60006123d0602683611835565b91506123db82612374565b604082019050919050565b600060208201905081810360008301526123ff816123c3565b9050919050565b600060408201905061241b6000830185611ada565b6124286020830184611800565b9392505050565b6124388161198c565b811461244357600080fd5b50565b6000815190506124558161242f565b92915050565b600060208284031215612471576124706118e5565b5b600061247f84828501612446565b91505092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006124e4602583611835565b91506124ef82612488565b604082019050919050565b60006020820190508181036000830152612513816124d7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612576602383611835565b91506125818261251a565b604082019050919050565b600060208201905081810360008301526125a581612569565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612608602683611835565b9150612613826125ac565b604082019050919050565b60006020820190508181036000830152612637816125fb565b9050919050565b60006040820190506126536000830185611800565b6126606020830184611800565b939250505056fea2646970667358221220a57595e341ba79f03e1d28975cc36aa2e9e61c1c6fd07a8142e4fe222e77f46064736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000007b4503a5e403fedb6819b39f229565028c57e388000000000000000000000000604100d89f9eac0f0118dff40296232abe0283ca000000000000000000000000e0fe10bc73f779ef5be5b9461f37d0978dcf6048000000000000000000000000000000000000000000000000000000000000000a504c415920546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504c415900000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c80634215d573116100ad578063a9059cbb11610071578063a9059cbb1461036c578063c92fb9471461039c578063cdab73b5146103ba578063dd62ed3e146103d8578063f363217e146104085761012b565b80634215d573146102a057806342966c68146102be57806370a08231146102ee57806395d89b411461031e578063a457c2d71461033c5761012b565b806323b872dd116100f457806323b872dd146101d6578063313ce5671461020657806339509351146102245780633fa2c5751461025457806340c10f19146102705761012b565b8062435da51461013057806306fdde031461014e578063095ea7b31461016c57806315211d631461019c57806318160ddd146101b8575b600080fd5b610138610424565b604051610145919061180f565b60405180910390f35b61015661044a565b60405161016391906118c3565b60405180910390f35b6101866004803603810190610181919061194c565b6104dc565b60405161019391906119a7565b60405180910390f35b6101b660048036038101906101b191906119c2565b6104ff565b005b6101c0610574565b6040516101cd91906119fe565b60405180910390f35b6101f060048036038101906101eb9190611a19565b61057e565b6040516101fd91906119a7565b60405180910390f35b61020e6105ad565b60405161021b9190611a88565b60405180910390f35b61023e6004803603810190610239919061194c565b6105b6565b60405161024b91906119a7565b60405180910390f35b61026e600480360381019061026991906119c2565b6105ed565b005b61028a6004803603810190610285919061194c565b610662565b60405161029791906119a7565b60405180910390f35b6102a86106f7565b6040516102b5919061180f565b60405180910390f35b6102d860048036038101906102d39190611aa3565b61071d565b6040516102e591906119a7565b60405180910390f35b610308600480360381019061030391906119c2565b610739565b60405161031591906119fe565b60405180910390f35b610326610781565b60405161033391906118c3565b60405180910390f35b6103566004803603810190610351919061194c565b610813565b60405161036391906119a7565b60405180910390f35b6103866004803603810190610381919061194c565b61088a565b60405161039391906119a7565b60405180910390f35b6103a46108ad565b6040516103b19190611ae9565b60405180910390f35b6103c26108d1565b6040516103cf919061180f565b60405180910390f35b6103f260048036038101906103ed9190611b04565b6108f7565b6040516103ff91906119fe565b60405180910390f35b610422600480360381019061041d91906119c2565b61097e565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461045990611b73565b80601f016020809104026020016040519081016040528092919081815260200182805461048590611b73565b80156104d25780601f106104a7576101008083540402835291602001916104d2565b820191906000526020600020905b8154815290600101906020018083116104b557829003601f168201915b5050505050905090565b6000806104e7610a16565b90506104f4818585610a1e565b600191505092915050565b6105297f506c6179546f6b656e536574746572000000000000000000000000000000000033610be9565b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90611bf1565b60405180910390fd5b61057181610c40565b50565b6000600254905090565b600080610589610a16565b9050610596858285610d1f565b6105a1858585610dab565b60019150509392505050565b60006012905090565b6000806105c1610a16565b90506105e28185856105d385896108f7565b6105dd9190611c40565b610a1e565b600191505092915050565b6106177f506c6179546f6b656e536574746572000000000000000000000000000000000033610be9565b610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90611bf1565b60405180910390fd5b61065f81610e51565b50565b60006106a461066f610781565b60405160200161067f9190611d1e565b60405160208183030381529060405261069790611d7d565b61069f610a16565b610be9565b6106e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106da90611e30565b60405180910390fd5b6106ed8383610f2c565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061073061072a610a16565b83611083565b60019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461079090611b73565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc90611b73565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050905090565b60008061081e610a16565b9050600061082c82866108f7565b905083811015610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086890611ec2565b60405180910390fd5b61087e8286868403610a1e565b60019250505092915050565b600080610895610a16565b90506108a2818585610dab565b600191505092915050565b7f506c6179546f6b656e536574746572000000000000000000000000000000000081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6109a87f506c6179546f6b656e536574746572000000000000000000000000000000000033610be9565b6109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de90611bf1565b60405180910390fd5b6109f081611251565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590611f54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590611fe6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bdc91906119fe565b60405180910390a3505050565b6000610c388383600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661132c9092919063ffffffff16565b905092915050565b6000819050610c648173ffffffffffffffffffffffffffffffffffffffff166109f3565b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90612052565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f02a39e9533105de4d1b435f8c88df78499a7d43d8531efbacc79b0b0eb68d04081604051610d13919061180f565b60405180910390a15050565b6000610d2b84846108f7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610da55781811015610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e906120be565b60405180910390fd5b610da48484848403610a1e565b5b50505050565b82610db581611411565b15610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec9061212a565b60405180910390fd5b82610dff81611411565b15610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e369061212a565b60405180910390fd5b610e4a858585611467565b5050505050565b610e708173ffffffffffffffffffffffffffffffffffffffff166109f3565b610eb157806040517fbd94b436000000000000000000000000000000000000000000000000000000008152600401610ea89190612170565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f75a17ea4667bcf0458bae3f130ddc1958d212a8239cf7f78181e8dadb2f036d681604051610f21919061180f565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906121e3565b60405180910390fd5b610fa8600083836116df565b8060026000828254610fba9190611c40565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161106b91906119fe565b60405180910390a361107f600083836116e4565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90612275565b60405180910390fd5b6110ff826000836116df565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90612307565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161123891906119fe565b60405180910390a361124c836000846116e4565b505050565b6112708173ffffffffffffffffffffffffffffffffffffffff166109f3565b6112b157806040517fbd94b4360000000000000000000000000000000000000000000000000000000081526004016112a8919061234d565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fc1af5622742cba495bc672727cd888bf9126ea99146d650f7f8319575155879081604051611321919061180f565b60405180910390a150565b600061134d8473ffffffffffffffffffffffffffffffffffffffff166109f3565b61138c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611383906123e6565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166391d1485484846040518363ffffffff1660e01b81526004016113c7929190612406565b602060405180830381865afa1580156113e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611408919061245b565b90509392505050565b60006114603083600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116e99092919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906124fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061258c565b60405180910390fd5b6115528383836116df565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf9061261e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116c691906119fe565b60405180910390a36116d98484846116e4565b50505050565b505050565b505050565b600061170a8473ffffffffffffffffffffffffffffffffffffffff166109f3565b611749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611740906123e6565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166373cf013c84846040518363ffffffff1660e01b815260040161178492919061263e565b602060405180830381865afa1580156117a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c5919061245b565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117f9826117ce565b9050919050565b611809816117ee565b82525050565b60006020820190506118246000830184611800565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611864578082015181840152602081019050611849565b83811115611873576000848401525b50505050565b6000601f19601f8301169050919050565b60006118958261182a565b61189f8185611835565b93506118af818560208601611846565b6118b881611879565b840191505092915050565b600060208201905081810360008301526118dd818461188a565b905092915050565b600080fd5b6118f3816117ee565b81146118fe57600080fd5b50565b600081359050611910816118ea565b92915050565b6000819050919050565b61192981611916565b811461193457600080fd5b50565b60008135905061194681611920565b92915050565b60008060408385031215611963576119626118e5565b5b600061197185828601611901565b925050602061198285828601611937565b9150509250929050565b60008115159050919050565b6119a18161198c565b82525050565b60006020820190506119bc6000830184611998565b92915050565b6000602082840312156119d8576119d76118e5565b5b60006119e684828501611901565b91505092915050565b6119f881611916565b82525050565b6000602082019050611a1360008301846119ef565b92915050565b600080600060608486031215611a3257611a316118e5565b5b6000611a4086828701611901565b9350506020611a5186828701611901565b9250506040611a6286828701611937565b9150509250925092565b600060ff82169050919050565b611a8281611a6c565b82525050565b6000602082019050611a9d6000830184611a79565b92915050565b600060208284031215611ab957611ab86118e5565b5b6000611ac784828501611937565b91505092915050565b6000819050919050565b611ae381611ad0565b82525050565b6000602082019050611afe6000830184611ada565b92915050565b60008060408385031215611b1b57611b1a6118e5565b5b6000611b2985828601611901565b9250506020611b3a85828601611901565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b8b57607f821691505b60208210811415611b9f57611b9e611b44565b5b50919050565b7f54493a2073656e646572206973206e6f74207365747465720000000000000000600082015250565b6000611bdb601883611835565b9150611be682611ba5565b602082019050919050565b60006020820190508181036000830152611c0a81611bce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c4b82611916565b9150611c5683611916565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c8b57611c8a611c11565b5b828201905092915050565b600081905092915050565b6000611cac8261182a565b611cb68185611c96565b9350611cc6818560208601611846565b80840191505092915050565b7f4d696e7465720000000000000000000000000000000000000000000000000000600082015250565b6000611d08600683611c96565b9150611d1382611cd2565b600682019050919050565b6000611d2a8284611ca1565b9150611d3582611cfb565b915081905092915050565b600081519050919050565b6000819050602082019050919050565b6000611d678251611ad0565b80915050919050565b600082821b905092915050565b6000611d8882611d40565b82611d9284611d4b565b9050611d9d81611d5b565b92506020821015611ddd57611dd87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802611d70565b831692505b5050919050565b7f506c6179546f6b656e3a206d73672073656e6465722063616e2774206d696e74600082015250565b6000611e1a602083611835565b9150611e2582611de4565b602082019050919050565b60006020820190508181036000830152611e4981611e0d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611eac602583611835565b9150611eb782611e50565b604082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611f3e602483611835565b9150611f4982611ee2565b604082019050919050565b60006020820190508181036000830152611f6d81611f31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fd0602283611835565b9150611fdb82611f74565b604082019050919050565b60006020820190508181036000830152611fff81611fc3565b9050919050565b7f54493a20696e76616c6964206e6176696761746f720000000000000000000000600082015250565b600061203c601583611835565b915061204782612006565b602082019050919050565b6000602082019050818103600083015261206b8161202f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006120a8601d83611835565b91506120b382612072565b602082019050919050565b600060208201905081810360008301526120d78161209b565b9050919050565b7f54493a206163636f756e7420697320626c61636b4c6973740000000000000000600082015250565b6000612114601883611835565b915061211f826120de565b602082019050919050565b6000602082019050818103600083015261214381612107565b9050919050565b7f626c61636b4c6973740000000000000000000000000000000000000000000000815250565b60006040820190506121846000830161214a565b6121916020830184611800565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006121cd601f83611835565b91506121d882612197565b602082019050919050565b600060208201905081810360008301526121fc816121c0565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061225f602183611835565b915061226a82612203565b604082019050919050565b6000602082019050818103600083015261228e81612252565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006122f1602283611835565b91506122fc82612295565b604082019050919050565b60006020820190508181036000830152612320816122e4565b9050919050565b7f726f6c654d616e61676572000000000000000000000000000000000000000000815250565b600060408201905061236160008301612327565b61236e6020830184611800565b92915050565b7f496e697469616c697a6174696f6e4c69623a20696e76616c696420726f6c654d60008201527f616e616765720000000000000000000000000000000000000000000000000000602082015250565b60006123d0602683611835565b91506123db82612374565b604082019050919050565b600060208201905081810360008301526123ff816123c3565b9050919050565b600060408201905061241b6000830185611ada565b6124286020830184611800565b9392505050565b6124388161198c565b811461244357600080fd5b50565b6000815190506124558161242f565b92915050565b600060208284031215612471576124706118e5565b5b600061247f84828501612446565b91505092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006124e4602583611835565b91506124ef82612488565b604082019050919050565b60006020820190508181036000830152612513816124d7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612576602383611835565b91506125818261251a565b604082019050919050565b600060208201905081810360008301526125a581612569565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612608602683611835565b9150612613826125ac565b604082019050919050565b60006020820190508181036000830152612637816125fb565b9050919050565b60006040820190506126536000830185611800565b6126606020830184611800565b939250505056fea2646970667358221220a57595e341ba79f03e1d28975cc36aa2e9e61c1c6fd07a8142e4fe222e77f46064736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000007b4503a5e403fedb6819b39f229565028c57e388000000000000000000000000604100d89f9eac0f0118dff40296232abe0283ca000000000000000000000000e0fe10bc73f779ef5be5b9461f37d0978dcf6048000000000000000000000000000000000000000000000000000000000000000a504c415920546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504c415900000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): PLAY Token
Arg [1] : symbol_ (string): PLAY
Arg [2] : navigator_ (address): 0x7b4503a5E403FEDb6819B39F229565028C57e388
Arg [3] : roleManager_ (address): 0x604100d89F9eaC0F0118dff40296232aBe0283ca
Arg [4] : blackList_ (address): 0xE0Fe10bC73f779eF5BE5b9461F37D0978dCF6048
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000007b4503a5e403fedb6819b39f229565028c57e388
Arg [3] : 000000000000000000000000604100d89f9eac0f0118dff40296232abe0283ca
Arg [4] : 000000000000000000000000e0fe10bc73f779ef5be5b9461f37d0978dcf6048
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 504c415920546f6b656e00000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 504c415900000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38906:1453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22659:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27716:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30067:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26215:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28836:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30848:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28678:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31552:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26485:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39479:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25301:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39916:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29007:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27935:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32293:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29340:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25257:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22692:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29596:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26347:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22659:26;;;;;;;;;;;;;:::o;27716:100::-;27770:13;27803:5;27796:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27716:100;:::o;30067:201::-;30150:4;30167:13;30183:12;:10;:12::i;:::-;30167:28;;30206:32;30215:5;30222:7;30231:6;30206:8;:32::i;:::-;30256:4;30249:11;;;30067:201;;;;:::o;26215:124::-;25468:45;25490:10;25502;25468:21;:45::i;:::-;25460:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26301:30:::1;26318:12;26301:16;:30::i;:::-;26215:124:::0;:::o;28836:108::-;28897:7;28924:12;;28917:19;;28836:108;:::o;30848:295::-;30979:4;30996:15;31014:12;:10;:12::i;:::-;30996:30;;31037:38;31053:4;31059:7;31068:6;31037:15;:38::i;:::-;31086:27;31096:4;31102:2;31106:6;31086:9;:27::i;:::-;31131:4;31124:11;;;30848:295;;;;;:::o;28678:93::-;28736:5;28761:2;28754:9;;28678:93;:::o;31552:238::-;31640:4;31657:13;31673:12;:10;:12::i;:::-;31657:28;;31696:64;31705:5;31712:7;31749:10;31721:25;31731:5;31738:7;31721:9;:25::i;:::-;:38;;;;:::i;:::-;31696:8;:64::i;:::-;31778:4;31771:11;;;31552:238;;;;:::o;26485:130::-;25468:45;25490:10;25502;25468:21;:45::i;:::-;25460:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26571:36:::1;26594:12;26571:22;:36::i;:::-;26485:130:::0;:::o;39479:330::-;39541:4;39566:109;39627:8;:6;:8::i;:::-;39610:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;39602:45;;;:::i;:::-;39662:12;:10;:12::i;:::-;39566:21;:109::i;:::-;39558:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:28;39761:7;39770:6;39749:11;:28::i;:::-;39797:4;39790:11;;39479:330;;;;:::o;25301:24::-;;;;;;;;;;;;;:::o;39916:125::-;39961:4;39978:33;39990:12;:10;:12::i;:::-;40004:6;39978:11;:33::i;:::-;40029:4;40022:11;;39916:125;;;:::o;29007:127::-;29081:7;29108:9;:18;29118:7;29108:18;;;;;;;;;;;;;;;;29101:25;;29007:127;;;:::o;27935:104::-;27991:13;28024:7;28017:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27935:104;:::o;32293:436::-;32386:4;32403:13;32419:12;:10;:12::i;:::-;32403:28;;32442:24;32469:25;32479:5;32486:7;32469:9;:25::i;:::-;32442:52;;32533:15;32513:16;:35;;32505:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32626:60;32635:5;32642:7;32670:15;32651:16;:34;32626:8;:60::i;:::-;32717:4;32710:11;;;;32293:436;;;;:::o;29340:193::-;29419:4;29436:13;29452:12;:10;:12::i;:::-;29436:28;;29475;29485:5;29492:2;29496:6;29475:9;:28::i;:::-;29521:4;29514:11;;;29340:193;;;;:::o;25257:35::-;;;:::o;22692:24::-;;;;;;;;;;;;;:::o;29596:151::-;29685:7;29712:11;:18;29724:5;29712:18;;;;;;;;;;;;;;;:27;29731:7;29712:27;;;;;;;;;;;;;;;;29705:34;;29596:151;;;;:::o;26347:130::-;25468:45;25490:10;25502;25468:21;:45::i;:::-;25460:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;26433:36:::1;26458:10;26433:24;:36::i;:::-;26347:130:::0;:::o;9598:326::-;9658:4;9915:1;9893:7;:19;;;:23;9886:30;;9598:326;;;:::o;21862:98::-;21915:7;21942:10;21935:17;;21862:98;:::o;36320:380::-;36473:1;36456:19;;:5;:19;;;;36448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:1;36535:21;;:7;:21;;;;36527:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36638:6;36608:11;:18;36620:5;36608:18;;;;;;;;;;;;;;;:27;36627:7;36608:27;;;;;;;;;;;;;;;:36;;;;36676:7;36660:32;;36669:5;36660:32;;;36685:6;36660:32;;;;;;:::i;:::-;;;;;;;;36320:380;;;:::o;23536:159::-;23629:4;23653:34;23673:4;23679:7;23653:11;;;;;;;;;;;:19;;;;:34;;;;;:::i;:::-;23646:41;;23536:159;;;;:::o;26663:266::-;26739:18;26760:12;26739:33;;26791:23;:10;:21;;;:23::i;:::-;26783:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26865:10;26853:9;;:22;;;;;;;;;;;;;;;;;;26893:28;26910:10;26893:28;;;;;;:::i;:::-;;;;;;;;26728:201;26663:266;:::o;36991:453::-;37126:24;37153:25;37163:5;37170:7;37153:9;:25::i;:::-;37126:52;;37213:17;37193:16;:37;37189:248;;37275:6;37255:16;:26;;37247:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37359:51;37368:5;37375:7;37403:6;37384:16;:25;37359:8;:51::i;:::-;37189:248;37115:329;36991:453;;;:::o;40090:266::-;40265:4;25640:21;25653:7;25640:12;:21::i;:::-;25639:22;25631:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40295:2:::1;25640:21;25653:7;25640:12;:21::i;:::-;25639:22;25631:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40315:33:::2;40331:4;40337:2;40341:6;40315:15;:33::i;:::-;25701:1:::1;40090:266:::0;;;;:::o;24150:246::-;24230:25;:12;:23;;;:25::i;:::-;24226:79;;24292:12;24264:41;;;;;;;;;;;:::i;:::-;;;;;;;;24226:79;24330:12;24318:9;;:24;;;;;;;;;;;;;;;;;;24358:30;24375:12;24358:30;;;;;;:::i;:::-;;;;;;;;24150:246;:::o;34326:548::-;34429:1;34410:21;;:7;:21;;;;34402:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34480:49;34509:1;34513:7;34522:6;34480:20;:49::i;:::-;34558:6;34542:12;;:22;;;;;;;:::i;:::-;;;;;;;;34735:6;34713:9;:18;34723:7;34713:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;34789:7;34768:37;;34785:1;34768:37;;;34798:6;34768:37;;;;;;:::i;:::-;;;;;;;;34818:48;34846:1;34850:7;34859:6;34818:19;:48::i;:::-;34326:548;;:::o;35207:675::-;35310:1;35291:21;;:7;:21;;;;35283:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35363:49;35384:7;35401:1;35405:6;35363:20;:49::i;:::-;35425:22;35450:9;:18;35460:7;35450:18;;;;;;;;;;;;;;;;35425:43;;35505:6;35487:14;:24;;35479:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35624:6;35607:14;:23;35586:9;:18;35596:7;35586:18;;;;;;;;;;;;;;;:44;;;;35741:6;35725:12;;:22;;;;;;;;;;;35802:1;35776:37;;35785:7;35776:37;;;35806:6;35776:37;;;;;;:::i;:::-;;;;;;;;35826:48;35846:7;35863:1;35867:6;35826:19;:48::i;:::-;35272:610;35207:675;;:::o;23898:244::-;23978:23;:10;:21;;;:23::i;:::-;23974:77;;24040:10;24010:41;;;;;;;;;;;:::i;:::-;;;;;;;;23974:77;24078:10;24064:11;;:24;;;;;;;;;;;;;;;;;;24104:30;24123:10;24104:30;;;;;;:::i;:::-;;;;;;;;23898:244;:::o;20910:260::-;21002:4;21027:24;:11;:22;;;:24::i;:::-;21019:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21127:11;21112:35;;;21148:4;21154:7;21112:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21105:57;;20910:260;;;;;:::o;23743:147::-;23813:4;23837:45;23867:4;23874:7;23837:9;;;;;;;;;;;:21;;;;:45;;;;;:::i;:::-;23830:52;;23743:147;;;:::o;33199:840::-;33346:1;33330:18;;:4;:18;;;;33322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:1;33409:16;;:2;:16;;;;33401:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33478:38;33499:4;33505:2;33509:6;33478:20;:38::i;:::-;33529:19;33551:9;:15;33561:4;33551:15;;;;;;;;;;;;;;;;33529:37;;33600:6;33585:11;:21;;33577:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33717:6;33703:11;:20;33685:9;:15;33695:4;33685:15;;;;;;;;;;;;;;;:38;;;;33920:6;33903:9;:13;33913:2;33903:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;33970:2;33955:26;;33964:4;33955:26;;;33974:6;33955:26;;;;;;:::i;:::-;;;;;;;;33994:37;34014:4;34020:2;34024:6;33994:19;:37::i;:::-;33311:728;33199:840;;;:::o;38044:125::-;;;;:::o;38773:124::-;;;;:::o;21534:287::-;21639:4;21664:22;:9;:20;;;:22::i;:::-;21656:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21765:9;21747:40;;;21788:15;21805:7;21747:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21740:73;;21534:287;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:77::-;5960:7;5989:5;5978:16;;5923:77;;;:::o;6006:118::-;6093:24;6111:5;6093:24;:::i;:::-;6088:3;6081:37;6006:118;;:::o;6130:222::-;6223:4;6261:2;6250:9;6246:18;6238:26;;6274:71;6342:1;6331:9;6327:17;6318:6;6274:71;:::i;:::-;6130:222;;;;:::o;6358:474::-;6426:6;6434;6483:2;6471:9;6462:7;6458:23;6454:32;6451:119;;;6489:79;;:::i;:::-;6451:119;6609:1;6634:53;6679:7;6670:6;6659:9;6655:22;6634:53;:::i;:::-;6624:63;;6580:117;6736:2;6762:53;6807:7;6798:6;6787:9;6783:22;6762:53;:::i;:::-;6752:63;;6707:118;6358:474;;;;;:::o;6838:180::-;6886:77;6883:1;6876:88;6983:4;6980:1;6973:15;7007:4;7004:1;6997:15;7024:320;7068:6;7105:1;7099:4;7095:12;7085:22;;7152:1;7146:4;7142:12;7173:18;7163:81;;7229:4;7221:6;7217:17;7207:27;;7163:81;7291:2;7283:6;7280:14;7260:18;7257:38;7254:84;;;7310:18;;:::i;:::-;7254:84;7075:269;7024:320;;;:::o;7350:174::-;7490:26;7486:1;7478:6;7474:14;7467:50;7350:174;:::o;7530:366::-;7672:3;7693:67;7757:2;7752:3;7693:67;:::i;:::-;7686:74;;7769:93;7858:3;7769:93;:::i;:::-;7887:2;7882:3;7878:12;7871:19;;7530:366;;;:::o;7902:419::-;8068:4;8106:2;8095:9;8091:18;8083:26;;8155:9;8149:4;8145:20;8141:1;8130:9;8126:17;8119:47;8183:131;8309:4;8183:131;:::i;:::-;8175:139;;7902:419;;;:::o;8327:180::-;8375:77;8372:1;8365:88;8472:4;8469:1;8462:15;8496:4;8493:1;8486:15;8513:305;8553:3;8572:20;8590:1;8572:20;:::i;:::-;8567:25;;8606:20;8624:1;8606:20;:::i;:::-;8601:25;;8760:1;8692:66;8688:74;8685:1;8682:81;8679:107;;;8766:18;;:::i;:::-;8679:107;8810:1;8807;8803:9;8796:16;;8513:305;;;;:::o;8824:148::-;8926:11;8963:3;8948:18;;8824:148;;;;:::o;8978:377::-;9084:3;9112:39;9145:5;9112:39;:::i;:::-;9167:89;9249:6;9244:3;9167:89;:::i;:::-;9160:96;;9265:52;9310:6;9305:3;9298:4;9291:5;9287:16;9265:52;:::i;:::-;9342:6;9337:3;9333:16;9326:23;;9088:267;8978:377;;;;:::o;9361:156::-;9501:8;9497:1;9489:6;9485:14;9478:32;9361:156;:::o;9523:400::-;9683:3;9704:84;9786:1;9781:3;9704:84;:::i;:::-;9697:91;;9797:93;9886:3;9797:93;:::i;:::-;9915:1;9910:3;9906:11;9899:18;;9523:400;;;:::o;9929:541::-;10162:3;10184:95;10275:3;10266:6;10184:95;:::i;:::-;10177:102;;10296:148;10440:3;10296:148;:::i;:::-;10289:155;;10461:3;10454:10;;9929:541;;;;:::o;10476:98::-;10527:6;10561:5;10555:12;10545:22;;10476:98;;;:::o;10580:116::-;10631:4;10654:3;10646:11;;10684:4;10679:3;10675:14;10667:22;;10580:116;;;:::o;10702:154::-;10745:11;10781:29;10805:3;10799:10;10781:29;:::i;:::-;10844:5;10820:29;;10757:99;10702:154;;;:::o;10862:107::-;10906:8;10956:5;10950:4;10946:16;10925:37;;10862:107;;;;:::o;10975:594::-;11059:5;11090:38;11122:5;11090:38;:::i;:::-;11153:5;11180:40;11214:5;11180:40;:::i;:::-;11168:52;;11239:35;11265:8;11239:35;:::i;:::-;11230:44;;11298:2;11290:6;11287:14;11284:278;;;11369:169;11454:66;11424:6;11420:2;11416:15;11413:1;11409:23;11369:169;:::i;:::-;11346:5;11325:227;11316:236;;11284:278;11065:504;;10975:594;;;:::o;11575:182::-;11715:34;11711:1;11703:6;11699:14;11692:58;11575:182;:::o;11763:366::-;11905:3;11926:67;11990:2;11985:3;11926:67;:::i;:::-;11919:74;;12002:93;12091:3;12002:93;:::i;:::-;12120:2;12115:3;12111:12;12104:19;;11763:366;;;:::o;12135:419::-;12301:4;12339:2;12328:9;12324:18;12316:26;;12388:9;12382:4;12378:20;12374:1;12363:9;12359:17;12352:47;12416:131;12542:4;12416:131;:::i;:::-;12408:139;;12135:419;;;:::o;12560:224::-;12700:34;12696:1;12688:6;12684:14;12677:58;12769:7;12764:2;12756:6;12752:15;12745:32;12560:224;:::o;12790:366::-;12932:3;12953:67;13017:2;13012:3;12953:67;:::i;:::-;12946:74;;13029:93;13118:3;13029:93;:::i;:::-;13147:2;13142:3;13138:12;13131:19;;12790:366;;;:::o;13162:419::-;13328:4;13366:2;13355:9;13351:18;13343:26;;13415:9;13409:4;13405:20;13401:1;13390:9;13386:17;13379:47;13443:131;13569:4;13443:131;:::i;:::-;13435:139;;13162:419;;;:::o;13587:223::-;13727:34;13723:1;13715:6;13711:14;13704:58;13796:6;13791:2;13783:6;13779:15;13772:31;13587:223;:::o;13816:366::-;13958:3;13979:67;14043:2;14038:3;13979:67;:::i;:::-;13972:74;;14055:93;14144:3;14055:93;:::i;:::-;14173:2;14168:3;14164:12;14157:19;;13816:366;;;:::o;14188:419::-;14354:4;14392:2;14381:9;14377:18;14369:26;;14441:9;14435:4;14431:20;14427:1;14416:9;14412:17;14405:47;14469:131;14595:4;14469:131;:::i;:::-;14461:139;;14188:419;;;:::o;14613:221::-;14753:34;14749:1;14741:6;14737:14;14730:58;14822:4;14817:2;14809:6;14805:15;14798:29;14613:221;:::o;14840:366::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:419::-;15378:4;15416:2;15405:9;15401:18;15393:26;;15465:9;15459:4;15455:20;15451:1;15440:9;15436:17;15429:47;15493:131;15619:4;15493:131;:::i;:::-;15485:139;;15212:419;;;:::o;15637:171::-;15777:23;15773:1;15765:6;15761:14;15754:47;15637:171;:::o;15814:366::-;15956:3;15977:67;16041:2;16036:3;15977:67;:::i;:::-;15970:74;;16053:93;16142:3;16053:93;:::i;:::-;16171:2;16166:3;16162:12;16155:19;;15814:366;;;:::o;16186:419::-;16352:4;16390:2;16379:9;16375:18;16367:26;;16439:9;16433:4;16429:20;16425:1;16414:9;16410:17;16403:47;16467:131;16593:4;16467:131;:::i;:::-;16459:139;;16186:419;;;:::o;16611:179::-;16751:31;16747:1;16739:6;16735:14;16728:55;16611:179;:::o;16796:366::-;16938:3;16959:67;17023:2;17018:3;16959:67;:::i;:::-;16952:74;;17035:93;17124:3;17035:93;:::i;:::-;17153:2;17148:3;17144:12;17137:19;;16796:366;;;:::o;17168:419::-;17334:4;17372:2;17361:9;17357:18;17349:26;;17421:9;17415:4;17411:20;17407:1;17396:9;17392:17;17385:47;17449:131;17575:4;17449:131;:::i;:::-;17441:139;;17168:419;;;:::o;17593:174::-;17733:26;17729:1;17721:6;17717:14;17710:50;17593:174;:::o;17773:366::-;17915:3;17936:67;18000:2;17995:3;17936:67;:::i;:::-;17929:74;;18012:93;18101:3;18012:93;:::i;:::-;18130:2;18125:3;18121:12;18114:19;;17773:366;;;:::o;18145:419::-;18311:4;18349:2;18338:9;18334:18;18326:26;;18398:9;18392:4;18388:20;18384:1;18373:9;18369:17;18362:47;18426:131;18552:4;18426:131;:::i;:::-;18418:139;;18145:419;;;:::o;18570:169::-;18721:11;18716:3;18709:24;18570:169;:::o;18745:458::-;18929:4;18967:2;18956:9;18952:18;18944:26;;18980:134;19111:1;19100:9;19096:17;18980:134;:::i;:::-;19124:72;19192:2;19181:9;19177:18;19168:6;19124:72;:::i;:::-;18745:458;;;;:::o;19209:181::-;19349:33;19345:1;19337:6;19333:14;19326:57;19209:181;:::o;19396:366::-;19538:3;19559:67;19623:2;19618:3;19559:67;:::i;:::-;19552:74;;19635:93;19724:3;19635:93;:::i;:::-;19753:2;19748:3;19744:12;19737:19;;19396:366;;;:::o;19768:419::-;19934:4;19972:2;19961:9;19957:18;19949:26;;20021:9;20015:4;20011:20;20007:1;19996:9;19992:17;19985:47;20049:131;20175:4;20049:131;:::i;:::-;20041:139;;19768:419;;;:::o;20193:220::-;20333:34;20329:1;20321:6;20317:14;20310:58;20402:3;20397:2;20389:6;20385:15;20378:28;20193:220;:::o;20419:366::-;20561:3;20582:67;20646:2;20641:3;20582:67;:::i;:::-;20575:74;;20658:93;20747:3;20658:93;:::i;:::-;20776:2;20771:3;20767:12;20760:19;;20419:366;;;:::o;20791:419::-;20957:4;20995:2;20984:9;20980:18;20972:26;;21044:9;21038:4;21034:20;21030:1;21019:9;21015:17;21008:47;21072:131;21198:4;21072:131;:::i;:::-;21064:139;;20791:419;;;:::o;21216:221::-;21356:34;21352:1;21344:6;21340:14;21333:58;21425:4;21420:2;21412:6;21408:15;21401:29;21216:221;:::o;21443:366::-;21585:3;21606:67;21670:2;21665:3;21606:67;:::i;:::-;21599:74;;21682:93;21771:3;21682:93;:::i;:::-;21800:2;21795:3;21791:12;21784:19;;21443:366;;;:::o;21815:419::-;21981:4;22019:2;22008:9;22004:18;21996:26;;22068:9;22062:4;22058:20;22054:1;22043:9;22039:17;22032:47;22096:131;22222:4;22096:131;:::i;:::-;22088:139;;21815:419;;;:::o;22240:171::-;22391:13;22386:3;22379:26;22240:171;:::o;22417:458::-;22601:4;22639:2;22628:9;22624:18;22616:26;;22652:134;22783:1;22772:9;22768:17;22652:134;:::i;:::-;22796:72;22864:2;22853:9;22849:18;22840:6;22796:72;:::i;:::-;22417:458;;;;:::o;22881:225::-;23021:34;23017:1;23009:6;23005:14;22998:58;23090:8;23085:2;23077:6;23073:15;23066:33;22881:225;:::o;23112:366::-;23254:3;23275:67;23339:2;23334:3;23275:67;:::i;:::-;23268:74;;23351:93;23440:3;23351:93;:::i;:::-;23469:2;23464:3;23460:12;23453:19;;23112:366;;;:::o;23484:419::-;23650:4;23688:2;23677:9;23673:18;23665:26;;23737:9;23731:4;23727:20;23723:1;23712:9;23708:17;23701:47;23765:131;23891:4;23765:131;:::i;:::-;23757:139;;23484:419;;;:::o;23909:332::-;24030:4;24068:2;24057:9;24053:18;24045:26;;24081:71;24149:1;24138:9;24134:17;24125:6;24081:71;:::i;:::-;24162:72;24230:2;24219:9;24215:18;24206:6;24162:72;:::i;:::-;23909:332;;;;;:::o;24247:116::-;24317:21;24332:5;24317:21;:::i;:::-;24310:5;24307:32;24297:60;;24353:1;24350;24343:12;24297:60;24247:116;:::o;24369:137::-;24423:5;24454:6;24448:13;24439:22;;24470:30;24494:5;24470:30;:::i;:::-;24369:137;;;;:::o;24512:345::-;24579:6;24628:2;24616:9;24607:7;24603:23;24599:32;24596:119;;;24634:79;;:::i;:::-;24596:119;24754:1;24779:61;24832:7;24823:6;24812:9;24808:22;24779:61;:::i;:::-;24769:71;;24725:125;24512:345;;;;:::o;24863:224::-;25003:34;24999:1;24991:6;24987:14;24980:58;25072:7;25067:2;25059:6;25055:15;25048:32;24863:224;:::o;25093:366::-;25235:3;25256:67;25320:2;25315:3;25256:67;:::i;:::-;25249:74;;25332:93;25421:3;25332:93;:::i;:::-;25450:2;25445:3;25441:12;25434:19;;25093:366;;;:::o;25465:419::-;25631:4;25669:2;25658:9;25654:18;25646:26;;25718:9;25712:4;25708:20;25704:1;25693:9;25689:17;25682:47;25746:131;25872:4;25746:131;:::i;:::-;25738:139;;25465:419;;;:::o;25890:222::-;26030:34;26026:1;26018:6;26014:14;26007:58;26099:5;26094:2;26086:6;26082:15;26075:30;25890:222;:::o;26118:366::-;26260:3;26281:67;26345:2;26340:3;26281:67;:::i;:::-;26274:74;;26357:93;26446:3;26357:93;:::i;:::-;26475:2;26470:3;26466:12;26459:19;;26118:366;;;:::o;26490:419::-;26656:4;26694:2;26683:9;26679:18;26671:26;;26743:9;26737:4;26733:20;26729:1;26718:9;26714:17;26707:47;26771:131;26897:4;26771:131;:::i;:::-;26763:139;;26490:419;;;:::o;26915:225::-;27055:34;27051:1;27043:6;27039:14;27032:58;27124:8;27119:2;27111:6;27107:15;27100:33;26915:225;:::o;27146:366::-;27288:3;27309:67;27373:2;27368:3;27309:67;:::i;:::-;27302:74;;27385:93;27474:3;27385:93;:::i;:::-;27503:2;27498:3;27494:12;27487:19;;27146:366;;;:::o;27518:419::-;27684:4;27722:2;27711:9;27707:18;27699:26;;27771:9;27765:4;27761:20;27757:1;27746:9;27742:17;27735:47;27799:131;27925:4;27799:131;:::i;:::-;27791:139;;27518:419;;;:::o;27943:332::-;28064:4;28102:2;28091:9;28087:18;28079:26;;28115:71;28183:1;28172:9;28168:17;28159:6;28115:71;:::i;:::-;28196:72;28264:2;28253:9;28249:18;28240:6;28196:72;:::i;:::-;27943:332;;;;;:::o
Swarm Source
ipfs://a57595e341ba79f03e1d28975cc36aa2e9e61c1c6fd07a8142e4fe222e77f460
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.