ERC-20
Wallet App
Overview
Max Total Supply
2,948,243.85899 PLEX
Holders
458 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Balance
28.57 PLEXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TokenSwap
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-02 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @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; } // File: @openzeppelin/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: contracts/TokenSwap.sol pragma solidity ^0.8.15; contract TokenSwap is AccessControl, ERC20 { // Commission Price mapping(string => uint256) public commissionPrice; address private recipientCommission; mapping(string => bool) public blockchainExisting; /// ROLES bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 private constant SETTING_CONTRACT = keccak256("SETTING_CONTRACT"); constructor( string memory name, string memory symbol, address _minter, address _settingContract, address _recipientCommission ) ERC20(name, symbol) { _setupRole(MINTER_ROLE, _minter); _setupRole(SETTING_CONTRACT, _settingContract); recipientCommission = _recipientCommission; } /// EVENTS event SwapToken( address indexed sender, address indexed recipient, string externalRecipient, string blockchain, uint256 amount ); /// CONSTANS function decimals() public view virtual override returns (uint8) { return 6; } /// PUBLIC FUNCTION /// @notice Transfer of the token to other blockchains /// @param externalRecipient - The address of the token recipient in another blockchain. /// @param toBlockchain - The blockchain into which we transfer funds /// @param amount - Number of tokens. function swap( string memory externalRecipient, string memory toBlockchain, uint256 amount ) public payable virtual { require(msg.value >= commissionPrice[toBlockchain], "TokenSwap: low gas price."); payable(recipientCommission).transfer(msg.value); _swap(msg.sender, address(this), externalRecipient, toBlockchain, amount); } /// ROLE FUNCTION /// @notice Available only for MINTER_ROLE. Mint token. /// @param recipient - Token Recipient /// @param amount - Number of tokens. function mint(address recipient, uint256 amount) external onlyRole(MINTER_ROLE) { _mint(recipient, amount); } function setSwapBlockchain(string memory toBlockchain, bool status) public virtual onlyRole(SETTING_CONTRACT) { require(blockchainExisting[toBlockchain] != status, "Already in this status"); blockchainExisting[toBlockchain] = status; } function setCommissionPrice(string memory toBlockchain, uint256 value) public virtual onlyRole(SETTING_CONTRACT) { commissionPrice[toBlockchain] = value; } /// PRIVATE FUNCTION function _swap( address sender, address recipient, string memory externalRecipient, string memory toBlockchain, uint256 amount ) internal virtual { require(blockchainExisting[toBlockchain], "TokenSwap: Swap is prohibited."); require(sender != address(0), "TokenSwap: swap sender the zero address"); require(recipient != address(0), "TokenSwap: swap recipient the zero address"); _beforeTokenSwap(sender, recipient, externalRecipient, amount); _burn(sender, amount); emit SwapToken(sender, recipient, externalRecipient, toBlockchain, amount); } function _beforeTokenSwap( address sender, address recipient, string memory externalRecipient, uint256 amount ) internal virtual {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_settingContract","type":"address"},{"internalType":"address","name":"_recipientCommission","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"string","name":"externalRecipient","type":"string"},{"indexed":false,"internalType":"string","name":"blockchain","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"string","name":"","type":"string"}],"name":"blockchainExisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"commissionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"toBlockchain","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setCommissionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"toBlockchain","type":"string"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setSwapBlockchain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"externalRecipient","type":"string"},{"internalType":"string","name":"toBlockchain","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"payable","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
60806040523480156200001157600080fd5b506040516200388c3803806200388c833981810160405281019062000037919062000480565b848481600490816200004a919062000791565b5080600590816200005c919062000791565b505050620000917f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6846200010f60201b60201c565b620000c37f745a148146ff438f4bd23be7666fb20053d2a9aff63a8f6f3f2a0d133b2d4ed0836200010f60201b60201c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000878565b6200012182826200012560201b60201c565b5050565b6200013782826200021660201b60201c565b6200021257600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001b76200028060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002f182620002a6565b810181811067ffffffffffffffff82111715620003135762000312620002b7565b5b80604052505050565b60006200032862000288565b9050620003368282620002e6565b919050565b600067ffffffffffffffff821115620003595762000358620002b7565b5b6200036482620002a6565b9050602081019050919050565b60005b838110156200039157808201518184015260208101905062000374565b60008484015250505050565b6000620003b4620003ae846200033b565b6200031c565b905082815260208101848484011115620003d357620003d2620002a1565b5b620003e084828562000371565b509392505050565b600082601f8301126200040057620003ff6200029c565b5b8151620004128482602086016200039d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000448826200041b565b9050919050565b6200045a816200043b565b81146200046657600080fd5b50565b6000815190506200047a816200044f565b92915050565b600080600080600060a086880312156200049f576200049e62000292565b5b600086015167ffffffffffffffff811115620004c057620004bf62000297565b5b620004ce88828901620003e8565b955050602086015167ffffffffffffffff811115620004f257620004f162000297565b5b6200050088828901620003e8565b9450506040620005138882890162000469565b9350506060620005268882890162000469565b9250506080620005398882890162000469565b9150509295509295909350565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059957607f821691505b602082108103620005af57620005ae62000551565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005da565b620006258683620005da565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006726200066c62000666846200063d565b62000647565b6200063d565b9050919050565b6000819050919050565b6200068e8362000651565b620006a66200069d8262000679565b848454620005e7565b825550505050565b600090565b620006bd620006ae565b620006ca81848462000683565b505050565b5b81811015620006f257620006e6600082620006b3565b600181019050620006d0565b5050565b601f82111562000741576200070b81620005b5565b6200071684620005ca565b8101602085101562000726578190505b6200073e6200073585620005ca565b830182620006cf565b50505b505050565b600082821c905092915050565b6000620007666000198460080262000746565b1980831691505092915050565b600062000781838362000753565b9150826002028217905092915050565b6200079c8262000546565b67ffffffffffffffff811115620007b857620007b7620002b7565b5b620007c4825462000580565b620007d1828285620006f6565b600060209050601f831160018114620008095760008415620007f4578287015190505b62000800858262000773565b86555062000870565b601f1984166200081986620005b5565b60005b8281101562000843578489015182556001820191506020850194506020810190506200081c565b868310156200086357848901516200085f601f89168262000753565b8355505b6001600288020188555050505b505050505050565b61300480620008886000396000f3fe60806040526004361061014b5760003560e01c806340c10f19116100b6578063a451f6021161006f578063a451f602146104dc578063a457c2d7146104f8578063a9059cbb14610535578063b66c3d3a14610572578063d547741f146105af578063dd62ed3e146105d85761014b565b806340c10f19146103ba57806370a08231146103e357806391d148541461042057806395d89b411461045d578063a1ab346514610488578063a217fddf146104b15761014b565b8063248a9ca311610108578063248a9ca3146102865780632b87fb2c146102c35780632f2ff15d14610300578063313ce5671461032957806336568abe14610354578063395093511461037d5761014b565b806301ffc9a71461015057806306fdde031461018d578063095ea7b3146101b857806318160ddd146101f55780631f2848381461022057806323b872dd14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190611d29565b610615565b6040516101849190611d71565b60405180910390f35b34801561019957600080fd5b506101a261068f565b6040516101af9190611e1c565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da9190611ed2565b610721565b6040516101ec9190611d71565b60405180910390f35b34801561020157600080fd5b5061020a610744565b6040516102179190611f21565b60405180910390f35b34801561022c57600080fd5b506102476004803603810190610242919061209d565b61074e565b005b34801561025557600080fd5b50610270600480360381019061026b91906120f9565b610824565b60405161027d9190611d71565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612182565b610853565b6040516102ba91906121be565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906121d9565b610872565b6040516102f79190611f21565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612222565b6108a0565b005b34801561033557600080fd5b5061033e6108c1565b60405161034b919061227e565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612222565b6108ca565b005b34801561038957600080fd5b506103a4600480360381019061039f9190611ed2565b61094d565b6040516103b19190611d71565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611ed2565b610984565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190612299565b6109bd565b6040516104179190611f21565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190612222565b610a06565b6040516104549190611d71565b60405180910390f35b34801561046957600080fd5b50610472610a70565b60405161047f9190611e1c565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906122c6565b610b02565b005b3480156104bd57600080fd5b506104c6610b54565b6040516104d391906121be565b60405180910390f35b6104f660048036038101906104f19190612322565b610b5b565b005b34801561050457600080fd5b5061051f600480360381019061051a9190611ed2565b610c37565b60405161052c9190611d71565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190611ed2565b610cae565b6040516105699190611d71565b60405180910390f35b34801561057e57600080fd5b50610599600480360381019061059491906121d9565b610cd1565b6040516105a69190611d71565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190612222565b610d07565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906123ad565b610d28565b60405161060c9190611f21565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610688575061068782610daf565b5b9050919050565b60606004805461069e9061241c565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca9061241c565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b5050505050905090565b60008061072c610e19565b9050610739818585610e21565b600191505092915050565b6000600354905090565b7f745a148146ff438f4bd23be7666fb20053d2a9aff63a8f6f3f2a0d133b2d4ed061077881610fea565b81151560088460405161078b9190612489565b908152602001604051809103902060009054906101000a900460ff161515036107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e0906124ec565b60405180910390fd5b816008846040516107fa9190612489565b908152602001604051809103902060006101000a81548160ff021916908315150217905550505050565b60008061082f610e19565b905061083c858285610ffe565b61084785858561108a565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6006818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b6108a982610853565b6108b281610fea565b6108bc838361130c565b505050565b60006006905090565b6108d2610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109369061257e565b60405180910390fd5b61094982826113ec565b5050565b600080610958610e19565b905061097981858561096a8589610d28565b61097491906125cd565b610e21565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109ae81610fea565b6109b883836114cd565b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060058054610a7f9061241c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab9061241c565b8015610af85780601f10610acd57610100808354040283529160200191610af8565b820191906000526020600020905b815481529060010190602001808311610adb57829003601f168201915b5050505050905090565b7f745a148146ff438f4bd23be7666fb20053d2a9aff63a8f6f3f2a0d133b2d4ed0610b2c81610fea565b81600684604051610b3d9190612489565b908152602001604051809103902081905550505050565b6000801b81565b600682604051610b6b9190612489565b908152602001604051809103902054341015610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb39061264d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610c24573d6000803e3d6000fd5b50610c32333085858561162d565b505050565b600080610c42610e19565b90506000610c508286610d28565b905083811015610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c906126df565b60405180910390fd5b610ca28286868403610e21565b60019250505092915050565b600080610cb9610e19565b9050610cc681858561108a565b600191505092915050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b610d1082610853565b610d1981610fea565b610d2383836113ec565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790612771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690612803565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fdd9190611f21565b60405180910390a3505050565b610ffb81610ff6610e19565b6117fc565b50565b600061100a8484610d28565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110845781811015611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061286f565b60405180910390fd5b6110838484848403610e21565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612901565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90612993565b60405180910390fd5b611173838383611899565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612a25565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128f91906125cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112f39190611f21565b60405180910390a361130684848461189e565b50505050565b6113168282610a06565b6113e857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061138d610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113f68282610a06565b156114c957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061146e610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390612a91565b60405180910390fd5b61154860008383611899565b806003600082825461155a91906125cd565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115b091906125cd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116159190611f21565b60405180910390a36116296000838361189e565b5050565b60088260405161163d9190612489565b908152602001604051809103902060009054906101000a900460ff16611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90612c21565b60405180910390fd5b611782858585846118a3565b61178c85826118a9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faf78c60fc04f23f5845d35fd395bbf2d2260aada0160b4ba0a7f9625a5b530778585856040516117ed93929190612c41565b60405180910390a35050505050565b6118068282610a06565b6118955761182b8173ffffffffffffffffffffffffffffffffffffffff166014611a81565b6118398360001c6020611a81565b60405160200161184a929190612d1e565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9190611e1c565b60405180910390fd5b5050565b505050565b505050565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90612dca565b60405180910390fd5b61192482600083611899565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290612e5c565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160036000828254611a039190612e7c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a689190611f21565b60405180910390a3611a7c8360008461189e565b505050565b606060006002836002611a949190612eb0565b611a9e91906125cd565b67ffffffffffffffff811115611ab757611ab6611f46565b5b6040519080825280601f01601f191660200182016040528015611ae95781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b2157611b20612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b8557611b84612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611bc59190612eb0565b611bcf91906125cd565b90505b6001811115611c6f577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c1157611c10612f0a565b5b1a60f81b828281518110611c2857611c27612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611c6890612f39565b9050611bd2565b5060008414611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90612fae565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d0681611cd1565b8114611d1157600080fd5b50565b600081359050611d2381611cfd565b92915050565b600060208284031215611d3f57611d3e611cc7565b5b6000611d4d84828501611d14565b91505092915050565b60008115159050919050565b611d6b81611d56565b82525050565b6000602082019050611d866000830184611d62565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc6578082015181840152602081019050611dab565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dee82611d8c565b611df88185611d97565b9350611e08818560208601611da8565b611e1181611dd2565b840191505092915050565b60006020820190508181036000830152611e368184611de3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6982611e3e565b9050919050565b611e7981611e5e565b8114611e8457600080fd5b50565b600081359050611e9681611e70565b92915050565b6000819050919050565b611eaf81611e9c565b8114611eba57600080fd5b50565b600081359050611ecc81611ea6565b92915050565b60008060408385031215611ee957611ee8611cc7565b5b6000611ef785828601611e87565b9250506020611f0885828601611ebd565b9150509250929050565b611f1b81611e9c565b82525050565b6000602082019050611f366000830184611f12565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f7e82611dd2565b810181811067ffffffffffffffff82111715611f9d57611f9c611f46565b5b80604052505050565b6000611fb0611cbd565b9050611fbc8282611f75565b919050565b600067ffffffffffffffff821115611fdc57611fdb611f46565b5b611fe582611dd2565b9050602081019050919050565b82818337600083830152505050565b600061201461200f84611fc1565b611fa6565b9050828152602081018484840111156120305761202f611f41565b5b61203b848285611ff2565b509392505050565b600082601f83011261205857612057611f3c565b5b8135612068848260208601612001565b91505092915050565b61207a81611d56565b811461208557600080fd5b50565b60008135905061209781612071565b92915050565b600080604083850312156120b4576120b3611cc7565b5b600083013567ffffffffffffffff8111156120d2576120d1611ccc565b5b6120de85828601612043565b92505060206120ef85828601612088565b9150509250929050565b60008060006060848603121561211257612111611cc7565b5b600061212086828701611e87565b935050602061213186828701611e87565b925050604061214286828701611ebd565b9150509250925092565b6000819050919050565b61215f8161214c565b811461216a57600080fd5b50565b60008135905061217c81612156565b92915050565b60006020828403121561219857612197611cc7565b5b60006121a68482850161216d565b91505092915050565b6121b88161214c565b82525050565b60006020820190506121d360008301846121af565b92915050565b6000602082840312156121ef576121ee611cc7565b5b600082013567ffffffffffffffff81111561220d5761220c611ccc565b5b61221984828501612043565b91505092915050565b6000806040838503121561223957612238611cc7565b5b60006122478582860161216d565b925050602061225885828601611e87565b9150509250929050565b600060ff82169050919050565b61227881612262565b82525050565b6000602082019050612293600083018461226f565b92915050565b6000602082840312156122af576122ae611cc7565b5b60006122bd84828501611e87565b91505092915050565b600080604083850312156122dd576122dc611cc7565b5b600083013567ffffffffffffffff8111156122fb576122fa611ccc565b5b61230785828601612043565b925050602061231885828601611ebd565b9150509250929050565b60008060006060848603121561233b5761233a611cc7565b5b600084013567ffffffffffffffff81111561235957612358611ccc565b5b61236586828701612043565b935050602084013567ffffffffffffffff81111561238657612385611ccc565b5b61239286828701612043565b92505060406123a386828701611ebd565b9150509250925092565b600080604083850312156123c4576123c3611cc7565b5b60006123d285828601611e87565b92505060206123e385828601611e87565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061243457607f821691505b602082108103612447576124466123ed565b5b50919050565b600081905092915050565b600061246382611d8c565b61246d818561244d565b935061247d818560208601611da8565b80840191505092915050565b60006124958284612458565b915081905092915050565b7f416c726561647920696e20746869732073746174757300000000000000000000600082015250565b60006124d6601683611d97565b91506124e1826124a0565b602082019050919050565b60006020820190508181036000830152612505816124c9565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612568602f83611d97565b91506125738261250c565b604082019050919050565b600060208201905081810360008301526125978161255b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125d882611e9c565b91506125e383611e9c565b92508282019050808211156125fb576125fa61259e565b5b92915050565b7f546f6b656e537761703a206c6f77206761732070726963652e00000000000000600082015250565b6000612637601983611d97565b915061264282612601565b602082019050919050565b600060208201905081810360008301526126668161262a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006126c9602583611d97565b91506126d48261266d565b604082019050919050565b600060208201905081810360008301526126f8816126bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061275b602483611d97565b9150612766826126ff565b604082019050919050565b6000602082019050818103600083015261278a8161274e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006127ed602283611d97565b91506127f882612791565b604082019050919050565b6000602082019050818103600083015261281c816127e0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612859601d83611d97565b915061286482612823565b602082019050919050565b600060208201905081810360008301526128888161284c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006128eb602583611d97565b91506128f68261288f565b604082019050919050565b6000602082019050818103600083015261291a816128de565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061297d602383611d97565b915061298882612921565b604082019050919050565b600060208201905081810360008301526129ac81612970565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a0f602683611d97565b9150612a1a826129b3565b604082019050919050565b60006020820190508181036000830152612a3e81612a02565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612a7b601f83611d97565b9150612a8682612a45565b602082019050919050565b60006020820190508181036000830152612aaa81612a6e565b9050919050565b7f546f6b656e537761703a20537761702069732070726f686962697465642e0000600082015250565b6000612ae7601e83611d97565b9150612af282612ab1565b602082019050919050565b60006020820190508181036000830152612b1681612ada565b9050919050565b7f546f6b656e537761703a20737761702073656e64657220746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000612b79602783611d97565b9150612b8482612b1d565b604082019050919050565b60006020820190508181036000830152612ba881612b6c565b9050919050565b7f546f6b656e537761703a207377617020726563697069656e7420746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612c0b602a83611d97565b9150612c1682612baf565b604082019050919050565b60006020820190508181036000830152612c3a81612bfe565b9050919050565b60006060820190508181036000830152612c5b8186611de3565b90508181036020830152612c6f8185611de3565b9050612c7e6040830184611f12565b949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612cbc60178361244d565b9150612cc782612c86565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612d0860118361244d565b9150612d1382612cd2565b601182019050919050565b6000612d2982612caf565b9150612d358285612458565b9150612d4082612cfb565b9150612d4c8284612458565b91508190509392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612db4602183611d97565b9150612dbf82612d58565b604082019050919050565b60006020820190508181036000830152612de381612da7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e46602283611d97565b9150612e5182612dea565b604082019050919050565b60006020820190508181036000830152612e7581612e39565b9050919050565b6000612e8782611e9c565b9150612e9283611e9c565b9250828203905081811115612eaa57612ea961259e565b5b92915050565b6000612ebb82611e9c565b9150612ec683611e9c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eff57612efe61259e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f4482611e9c565b915060008203612f5757612f5661259e565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612f98602083611d97565b9150612fa382612f62565b602082019050919050565b60006020820190508181036000830152612fc781612f8b565b905091905056fea264697066735822122075667123108d406169815bb950c1473f942570f781c5ffa1e5657f4ca7315f7764736f6c6343000810003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b90000000000000000000000000000000000000000000000000000000000000004504c4558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504c455800000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014b5760003560e01c806340c10f19116100b6578063a451f6021161006f578063a451f602146104dc578063a457c2d7146104f8578063a9059cbb14610535578063b66c3d3a14610572578063d547741f146105af578063dd62ed3e146105d85761014b565b806340c10f19146103ba57806370a08231146103e357806391d148541461042057806395d89b411461045d578063a1ab346514610488578063a217fddf146104b15761014b565b8063248a9ca311610108578063248a9ca3146102865780632b87fb2c146102c35780632f2ff15d14610300578063313ce5671461032957806336568abe14610354578063395093511461037d5761014b565b806301ffc9a71461015057806306fdde031461018d578063095ea7b3146101b857806318160ddd146101f55780631f2848381461022057806323b872dd14610249575b600080fd5b34801561015c57600080fd5b5061017760048036038101906101729190611d29565b610615565b6040516101849190611d71565b60405180910390f35b34801561019957600080fd5b506101a261068f565b6040516101af9190611e1c565b60405180910390f35b3480156101c457600080fd5b506101df60048036038101906101da9190611ed2565b610721565b6040516101ec9190611d71565b60405180910390f35b34801561020157600080fd5b5061020a610744565b6040516102179190611f21565b60405180910390f35b34801561022c57600080fd5b506102476004803603810190610242919061209d565b61074e565b005b34801561025557600080fd5b50610270600480360381019061026b91906120f9565b610824565b60405161027d9190611d71565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190612182565b610853565b6040516102ba91906121be565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906121d9565b610872565b6040516102f79190611f21565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612222565b6108a0565b005b34801561033557600080fd5b5061033e6108c1565b60405161034b919061227e565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612222565b6108ca565b005b34801561038957600080fd5b506103a4600480360381019061039f9190611ed2565b61094d565b6040516103b19190611d71565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190611ed2565b610984565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190612299565b6109bd565b6040516104179190611f21565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190612222565b610a06565b6040516104549190611d71565b60405180910390f35b34801561046957600080fd5b50610472610a70565b60405161047f9190611e1c565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906122c6565b610b02565b005b3480156104bd57600080fd5b506104c6610b54565b6040516104d391906121be565b60405180910390f35b6104f660048036038101906104f19190612322565b610b5b565b005b34801561050457600080fd5b5061051f600480360381019061051a9190611ed2565b610c37565b60405161052c9190611d71565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190611ed2565b610cae565b6040516105699190611d71565b60405180910390f35b34801561057e57600080fd5b50610599600480360381019061059491906121d9565b610cd1565b6040516105a69190611d71565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190612222565b610d07565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906123ad565b610d28565b60405161060c9190611f21565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610688575061068782610daf565b5b9050919050565b60606004805461069e9061241c565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca9061241c565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b5050505050905090565b60008061072c610e19565b9050610739818585610e21565b600191505092915050565b6000600354905090565b7f745a148146ff438f4bd23be7666fb20053d2a9aff63a8f6f3f2a0d133b2d4ed061077881610fea565b81151560088460405161078b9190612489565b908152602001604051809103902060009054906101000a900460ff161515036107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e0906124ec565b60405180910390fd5b816008846040516107fa9190612489565b908152602001604051809103902060006101000a81548160ff021916908315150217905550505050565b60008061082f610e19565b905061083c858285610ffe565b61084785858561108a565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b6006818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b6108a982610853565b6108b281610fea565b6108bc838361130c565b505050565b60006006905090565b6108d2610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109369061257e565b60405180910390fd5b61094982826113ec565b5050565b600080610958610e19565b905061097981858561096a8589610d28565b61097491906125cd565b610e21565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109ae81610fea565b6109b883836114cd565b505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060058054610a7f9061241c565b80601f0160208091040260200160405190810160405280929190818152602001828054610aab9061241c565b8015610af85780601f10610acd57610100808354040283529160200191610af8565b820191906000526020600020905b815481529060010190602001808311610adb57829003601f168201915b5050505050905090565b7f745a148146ff438f4bd23be7666fb20053d2a9aff63a8f6f3f2a0d133b2d4ed0610b2c81610fea565b81600684604051610b3d9190612489565b908152602001604051809103902081905550505050565b6000801b81565b600682604051610b6b9190612489565b908152602001604051809103902054341015610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb39061264d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610c24573d6000803e3d6000fd5b50610c32333085858561162d565b505050565b600080610c42610e19565b90506000610c508286610d28565b905083811015610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c906126df565b60405180910390fd5b610ca28286868403610e21565b60019250505092915050565b600080610cb9610e19565b9050610cc681858561108a565b600191505092915050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900460ff1681565b610d1082610853565b610d1981610fea565b610d2383836113ec565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790612771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690612803565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fdd9190611f21565b60405180910390a3505050565b610ffb81610ff6610e19565b6117fc565b50565b600061100a8484610d28565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110845781811015611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061286f565b60405180910390fd5b6110838484848403610e21565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f090612901565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90612993565b60405180910390fd5b611173838383611899565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612a25565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128f91906125cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112f39190611f21565b60405180910390a361130684848461189e565b50505050565b6113168282610a06565b6113e857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061138d610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6113f68282610a06565b156114c957600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061146e610e19565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390612a91565b60405180910390fd5b61154860008383611899565b806003600082825461155a91906125cd565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115b091906125cd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116159190611f21565b60405180910390a36116296000838361189e565b5050565b60088260405161163d9190612489565b908152602001604051809103902060009054906101000a900460ff16611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612b8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90612c21565b60405180910390fd5b611782858585846118a3565b61178c85826118a9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faf78c60fc04f23f5845d35fd395bbf2d2260aada0160b4ba0a7f9625a5b530778585856040516117ed93929190612c41565b60405180910390a35050505050565b6118068282610a06565b6118955761182b8173ffffffffffffffffffffffffffffffffffffffff166014611a81565b6118398360001c6020611a81565b60405160200161184a929190612d1e565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9190611e1c565b60405180910390fd5b5050565b505050565b505050565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90612dca565b60405180910390fd5b61192482600083611899565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290612e5c565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160036000828254611a039190612e7c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a689190611f21565b60405180910390a3611a7c8360008461189e565b505050565b606060006002836002611a949190612eb0565b611a9e91906125cd565b67ffffffffffffffff811115611ab757611ab6611f46565b5b6040519080825280601f01601f191660200182016040528015611ae95781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611b2157611b20612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b8557611b84612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611bc59190612eb0565b611bcf91906125cd565b90505b6001811115611c6f577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c1157611c10612f0a565b5b1a60f81b828281518110611c2857611c27612f0a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611c6890612f39565b9050611bd2565b5060008414611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90612fae565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d0681611cd1565b8114611d1157600080fd5b50565b600081359050611d2381611cfd565b92915050565b600060208284031215611d3f57611d3e611cc7565b5b6000611d4d84828501611d14565b91505092915050565b60008115159050919050565b611d6b81611d56565b82525050565b6000602082019050611d866000830184611d62565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc6578082015181840152602081019050611dab565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dee82611d8c565b611df88185611d97565b9350611e08818560208601611da8565b611e1181611dd2565b840191505092915050565b60006020820190508181036000830152611e368184611de3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e6982611e3e565b9050919050565b611e7981611e5e565b8114611e8457600080fd5b50565b600081359050611e9681611e70565b92915050565b6000819050919050565b611eaf81611e9c565b8114611eba57600080fd5b50565b600081359050611ecc81611ea6565b92915050565b60008060408385031215611ee957611ee8611cc7565b5b6000611ef785828601611e87565b9250506020611f0885828601611ebd565b9150509250929050565b611f1b81611e9c565b82525050565b6000602082019050611f366000830184611f12565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611f7e82611dd2565b810181811067ffffffffffffffff82111715611f9d57611f9c611f46565b5b80604052505050565b6000611fb0611cbd565b9050611fbc8282611f75565b919050565b600067ffffffffffffffff821115611fdc57611fdb611f46565b5b611fe582611dd2565b9050602081019050919050565b82818337600083830152505050565b600061201461200f84611fc1565b611fa6565b9050828152602081018484840111156120305761202f611f41565b5b61203b848285611ff2565b509392505050565b600082601f83011261205857612057611f3c565b5b8135612068848260208601612001565b91505092915050565b61207a81611d56565b811461208557600080fd5b50565b60008135905061209781612071565b92915050565b600080604083850312156120b4576120b3611cc7565b5b600083013567ffffffffffffffff8111156120d2576120d1611ccc565b5b6120de85828601612043565b92505060206120ef85828601612088565b9150509250929050565b60008060006060848603121561211257612111611cc7565b5b600061212086828701611e87565b935050602061213186828701611e87565b925050604061214286828701611ebd565b9150509250925092565b6000819050919050565b61215f8161214c565b811461216a57600080fd5b50565b60008135905061217c81612156565b92915050565b60006020828403121561219857612197611cc7565b5b60006121a68482850161216d565b91505092915050565b6121b88161214c565b82525050565b60006020820190506121d360008301846121af565b92915050565b6000602082840312156121ef576121ee611cc7565b5b600082013567ffffffffffffffff81111561220d5761220c611ccc565b5b61221984828501612043565b91505092915050565b6000806040838503121561223957612238611cc7565b5b60006122478582860161216d565b925050602061225885828601611e87565b9150509250929050565b600060ff82169050919050565b61227881612262565b82525050565b6000602082019050612293600083018461226f565b92915050565b6000602082840312156122af576122ae611cc7565b5b60006122bd84828501611e87565b91505092915050565b600080604083850312156122dd576122dc611cc7565b5b600083013567ffffffffffffffff8111156122fb576122fa611ccc565b5b61230785828601612043565b925050602061231885828601611ebd565b9150509250929050565b60008060006060848603121561233b5761233a611cc7565b5b600084013567ffffffffffffffff81111561235957612358611ccc565b5b61236586828701612043565b935050602084013567ffffffffffffffff81111561238657612385611ccc565b5b61239286828701612043565b92505060406123a386828701611ebd565b9150509250925092565b600080604083850312156123c4576123c3611cc7565b5b60006123d285828601611e87565b92505060206123e385828601611e87565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061243457607f821691505b602082108103612447576124466123ed565b5b50919050565b600081905092915050565b600061246382611d8c565b61246d818561244d565b935061247d818560208601611da8565b80840191505092915050565b60006124958284612458565b915081905092915050565b7f416c726561647920696e20746869732073746174757300000000000000000000600082015250565b60006124d6601683611d97565b91506124e1826124a0565b602082019050919050565b60006020820190508181036000830152612505816124c9565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612568602f83611d97565b91506125738261250c565b604082019050919050565b600060208201905081810360008301526125978161255b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125d882611e9c565b91506125e383611e9c565b92508282019050808211156125fb576125fa61259e565b5b92915050565b7f546f6b656e537761703a206c6f77206761732070726963652e00000000000000600082015250565b6000612637601983611d97565b915061264282612601565b602082019050919050565b600060208201905081810360008301526126668161262a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006126c9602583611d97565b91506126d48261266d565b604082019050919050565b600060208201905081810360008301526126f8816126bc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061275b602483611d97565b9150612766826126ff565b604082019050919050565b6000602082019050818103600083015261278a8161274e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006127ed602283611d97565b91506127f882612791565b604082019050919050565b6000602082019050818103600083015261281c816127e0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612859601d83611d97565b915061286482612823565b602082019050919050565b600060208201905081810360008301526128888161284c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006128eb602583611d97565b91506128f68261288f565b604082019050919050565b6000602082019050818103600083015261291a816128de565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061297d602383611d97565b915061298882612921565b604082019050919050565b600060208201905081810360008301526129ac81612970565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a0f602683611d97565b9150612a1a826129b3565b604082019050919050565b60006020820190508181036000830152612a3e81612a02565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612a7b601f83611d97565b9150612a8682612a45565b602082019050919050565b60006020820190508181036000830152612aaa81612a6e565b9050919050565b7f546f6b656e537761703a20537761702069732070726f686962697465642e0000600082015250565b6000612ae7601e83611d97565b9150612af282612ab1565b602082019050919050565b60006020820190508181036000830152612b1681612ada565b9050919050565b7f546f6b656e537761703a20737761702073656e64657220746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000612b79602783611d97565b9150612b8482612b1d565b604082019050919050565b60006020820190508181036000830152612ba881612b6c565b9050919050565b7f546f6b656e537761703a207377617020726563697069656e7420746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612c0b602a83611d97565b9150612c1682612baf565b604082019050919050565b60006020820190508181036000830152612c3a81612bfe565b9050919050565b60006060820190508181036000830152612c5b8186611de3565b90508181036020830152612c6f8185611de3565b9050612c7e6040830184611f12565b949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612cbc60178361244d565b9150612cc782612c86565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612d0860118361244d565b9150612d1382612cd2565b601182019050919050565b6000612d2982612caf565b9150612d358285612458565b9150612d4082612cfb565b9150612d4c8284612458565b91508190509392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612db4602183611d97565b9150612dbf82612d58565b604082019050919050565b60006020820190508181036000830152612de381612da7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e46602283611d97565b9150612e5182612dea565b604082019050919050565b60006020820190508181036000830152612e7581612e39565b9050919050565b6000612e8782611e9c565b9150612e9283611e9c565b9250828203905081811115612eaa57612ea961259e565b5b92915050565b6000612ebb82611e9c565b9150612ec683611e9c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612eff57612efe61259e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f4482611e9c565b915060008203612f5757612f5661259e565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612f98602083611d97565b9150612fa382612f62565b602082019050919050565b60006020820190508181036000830152612fc781612f8b565b905091905056fea264697066735822122075667123108d406169815bb950c1473f942570f781c5ffa1e5657f4ca7315f7764736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b90000000000000000000000000000000000000000000000000000000000000004504c4558000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504c455800000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): PLEX
Arg [1] : symbol (string): PLEX
Arg [2] : _minter (address): 0xaF6bc28721eC8F1b13e9df6919EC644E207D90B9
Arg [3] : _settingContract (address): 0xaF6bc28721eC8F1b13e9df6919EC644E207D90B9
Arg [4] : _recipientCommission (address): 0xaF6bc28721eC8F1b13e9df6919EC644E207D90B9
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9
Arg [3] : 000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9
Arg [4] : 000000000000000000000000af6bc28721ec8f1b13e9df6919ec644e207d90b9
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 504c455800000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 504c455800000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
33291:3167:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27537:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11133:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13484:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12253:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35240:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14265:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29373:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33362:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29814:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34203:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30958:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14969:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35117:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12424:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27833:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11352:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35494:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26938:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34584:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15710:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12757:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33458:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30254:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13013:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27537:204;27622:4;27661:32;27646:47;;;:11;:47;;;;:87;;;;27697:36;27721:11;27697:23;:36::i;:::-;27646:87;27639:94;;27537:204;;;:::o;11133:100::-;11187:13;11220:5;11213:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11133:100;:::o;13484:201::-;13567:4;13584:13;13600:12;:10;:12::i;:::-;13584:28;;13623:32;13632:5;13639:7;13648:6;13623:8;:32::i;:::-;13673:4;13666:11;;;13484:201;;;;:::o;12253:108::-;12314:7;12341:12;;12334:19;;12253:108;:::o;35240:248::-;33639:29;27429:16;27440:4;27429:10;:16::i;:::-;35401:6:::1;35365:42;;:18;35384:12;35365:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:42;;::::0;35357:77:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35476:6;35441:18;35460:12;35441:32;;;;;;:::i;:::-;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;35240:248:::0;;;:::o;14265:295::-;14396:4;14413:15;14431:12;:10;:12::i;:::-;14413:30;;14454:38;14470:4;14476:7;14485:6;14454:15;:38::i;:::-;14503:27;14513:4;14519:2;14523:6;14503:9;:27::i;:::-;14548:4;14541:11;;;14265:295;;;;;:::o;29373:131::-;29447:7;29474:6;:12;29481:4;29474:12;;;;;;;;;;;:22;;;29467:29;;29373:131;;;:::o;33362:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29814:147::-;29897:18;29910:4;29897:12;:18::i;:::-;27429:16;27440:4;27429:10;:16::i;:::-;29928:25:::1;29939:4;29945:7;29928:10;:25::i;:::-;29814:147:::0;;;:::o;34203:86::-;34261:5;34282:1;34275:8;;34203:86;:::o;30958:218::-;31065:12;:10;:12::i;:::-;31054:23;;:7;:23;;;31046:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31142:26;31154:4;31160:7;31142:11;:26::i;:::-;30958:218;;:::o;14969:238::-;15057:4;15074:13;15090:12;:10;:12::i;:::-;15074:28;;15113:64;15122:5;15129:7;15166:10;15138:25;15148:5;15155:7;15138:9;:25::i;:::-;:38;;;;:::i;:::-;15113:8;:64::i;:::-;15195:4;15188:11;;;14969:238;;;;:::o;35117:117::-;33566:24;27429:16;27440:4;27429:10;:16::i;:::-;35204:24:::1;35210:9;35221:6;35204:5;:24::i;:::-;35117:117:::0;;;:::o;12424:127::-;12498:7;12525:9;:18;12535:7;12525:18;;;;;;;;;;;;;;;;12518:25;;12424:127;;;:::o;27833:147::-;27919:4;27943:6;:12;27950:4;27943:12;;;;;;;;;;;:20;;:29;27964:7;27943:29;;;;;;;;;;;;;;;;;;;;;;;;;27936:36;;27833:147;;;;:::o;11352:104::-;11408:13;11441:7;11434:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11352:104;:::o;35494:163::-;33639:29;27429:16;27440:4;27429:10;:16::i;:::-;35646:5:::1;35614:15;35630:12;35614:29;;;;;;:::i;:::-;;;;;;;;;;;;;:37;;;;35494:163:::0;;;:::o;26938:49::-;26983:4;26938:49;;;:::o;34584:362::-;34746:15;34762:12;34746:29;;;;;;:::i;:::-;;;;;;;;;;;;;;34733:9;:42;;34725:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;34820:19;;;;;;;;;;;34812:37;;:48;34850:9;34812:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34867:73;34873:10;34893:4;34900:17;34919:12;34933:6;34867:5;:73::i;:::-;34584:362;;;:::o;15710:436::-;15803:4;15820:13;15836:12;:10;:12::i;:::-;15820:28;;15859:24;15886:25;15896:5;15903:7;15886:9;:25::i;:::-;15859:52;;15950:15;15930:16;:35;;15922:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16043:60;16052:5;16059:7;16087:15;16068:16;:34;16043:8;:60::i;:::-;16134:4;16127:11;;;;15710:436;;;;:::o;12757:193::-;12836:4;12853:13;12869:12;:10;:12::i;:::-;12853:28;;12892;12902:5;12909:2;12913:6;12892:9;:28::i;:::-;12938:4;12931:11;;;12757:193;;;;:::o;33458:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30254:149::-;30338:18;30351:4;30338:12;:18::i;:::-;27429:16;27440:4;27429:10;:16::i;:::-;30369:26:::1;30381:4;30387:7;30369:11;:26::i;:::-;30254:149:::0;;;:::o;13013:151::-;13102:7;13129:11;:18;13141:5;13129:18;;;;;;;;;;;;;;;:27;13148:7;13129:27;;;;;;;;;;;;;;;;13122:34;;13013:151;;;;:::o;5433:157::-;5518:4;5557:25;5542:40;;;:11;:40;;;;5535:47;;5433:157;;;:::o;8773:98::-;8826:7;8853:10;8846:17;;8773:98;:::o;19335:380::-;19488:1;19471:19;;:5;:19;;;19463:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19569:1;19550:21;;:7;:21;;;19542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19653:6;19623:11;:18;19635:5;19623:18;;;;;;;;;;;;;;;:27;19642:7;19623:27;;;;;;;;;;;;;;;:36;;;;19691:7;19675:32;;19684:5;19675:32;;;19700:6;19675:32;;;;;;:::i;:::-;;;;;;;;19335:380;;;:::o;28284:105::-;28351:30;28362:4;28368:12;:10;:12::i;:::-;28351:10;:30::i;:::-;28284:105;:::o;20006:453::-;20141:24;20168:25;20178:5;20185:7;20168:9;:25::i;:::-;20141:52;;20228:17;20208:16;:37;20204:248;;20290:6;20270:16;:26;;20262:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20374:51;20383:5;20390:7;20418:6;20399:16;:25;20374:8;:51::i;:::-;20204:248;20130:329;20006:453;;;:::o;16616:671::-;16763:1;16747:18;;:4;:18;;;16739:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16840:1;16826:16;;:2;:16;;;16818:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16895:38;16916:4;16922:2;16926:6;16895:20;:38::i;:::-;16946:19;16968:9;:15;16978:4;16968:15;;;;;;;;;;;;;;;;16946:37;;17017:6;17002:11;:21;;16994:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17134:6;17120:11;:20;17102:9;:15;17112:4;17102:15;;;;;;;;;;;;;;;:38;;;;17179:6;17162:9;:13;17172:2;17162:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;17218:2;17203:26;;17212:4;17203:26;;;17222:6;17203:26;;;;;;:::i;:::-;;;;;;;;17242:37;17262:4;17268:2;17272:6;17242:19;:37::i;:::-;16728:559;16616:671;;;:::o;32555:238::-;32639:22;32647:4;32653:7;32639;:22::i;:::-;32634:152;;32710:4;32678:6;:12;32685:4;32678:12;;;;;;;;;;;:20;;:29;32699:7;32678:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32761:12;:10;:12::i;:::-;32734:40;;32752:7;32734:40;;32746:4;32734:40;;;;;;;;;;32634:152;32555:238;;:::o;32973:239::-;33057:22;33065:4;33071:7;33057;:22::i;:::-;33053:152;;;33128:5;33096:6;:12;33103:4;33096:12;;;;;;;;;;;:20;;:29;33117:7;33096:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;33180:12;:10;:12::i;:::-;33153:40;;33171:7;33153:40;;33165:4;33153:40;;;;;;;;;;33053:152;32973:239;;:::o;17574:399::-;17677:1;17658:21;;:7;:21;;;17650:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;17728:49;17757:1;17761:7;17770:6;17728:20;:49::i;:::-;17806:6;17790:12;;:22;;;;;;;:::i;:::-;;;;;;;;17845:6;17823:9;:18;17833:7;17823:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;17888:7;17867:37;;17884:1;17867:37;;;17897:6;17867:37;;;;;;:::i;:::-;;;;;;;;17917:48;17945:1;17949:7;17958:6;17917:19;:48::i;:::-;17574:399;;:::o;35689:606::-;35878:18;35897:12;35878:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35870:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35978:1;35960:20;;:6;:20;;;35952:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;36060:1;36039:23;;:9;:23;;;36031:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36118:62;36135:6;36143:9;36154:17;36173:6;36118:16;:62::i;:::-;36187:21;36193:6;36201;36187:5;:21::i;:::-;36238:9;36220:69;;36230:6;36220:69;;;36249:17;36268:12;36282:6;36220:69;;;;;;;;:::i;:::-;;;;;;;;35689:606;;;;;:::o;28679:505::-;28768:22;28776:4;28782:7;28768;:22::i;:::-;28763:414;;28956:41;28984:7;28956:41;;28994:2;28956:19;:41::i;:::-;29070:38;29098:4;29090:13;;29105:2;29070:19;:38::i;:::-;28861:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28807:358;;;;;;;;;;;:::i;:::-;;;;;;;;28763:414;28679:505;;:::o;21059:125::-;;;;:::o;21788:124::-;;;;:::o;36301:154::-;;;;;:::o;18306:591::-;18409:1;18390:21;;:7;:21;;;18382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18462:49;18483:7;18500:1;18504:6;18462:20;:49::i;:::-;18524:22;18549:9;:18;18559:7;18549:18;;;;;;;;;;;;;;;;18524:43;;18604:6;18586:14;:24;;18578:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18723:6;18706:14;:23;18685:9;:18;18695:7;18685:18;;;;;;;;;;;;;;;:44;;;;18767:6;18751:12;;:22;;;;;;;:::i;:::-;;;;;;;;18817:1;18791:37;;18800:7;18791:37;;;18821:6;18791:37;;;;;;:::i;:::-;;;;;;;;18841:48;18861:7;18878:1;18882:6;18841:19;:48::i;:::-;18371:526;18306:591;;:::o;7328:451::-;7403:13;7429:19;7474:1;7465:6;7461:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7451:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7429:47;;7487:15;:6;7494:1;7487:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;7513;:6;7520:1;7513:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;7544:9;7569:1;7560:6;7556:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7544:26;;7539:135;7576:1;7572;:5;7539:135;;;7611:12;7632:3;7624:5;:11;7611:25;;;;;;;:::i;:::-;;;;;7599:6;7606:1;7599:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;7661:1;7651:11;;;;;7579:3;;;;:::i;:::-;;;7539:135;;;;7701:1;7692:5;:10;7684:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;7764:6;7750:21;;;7328:451;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:126::-;2897:7;2937:42;2930:5;2926:54;2915:65;;2860:126;;;:::o;2992:96::-;3029:7;3058:24;3076:5;3058:24;:::i;:::-;3047:35;;2992:96;;;:::o;3094:122::-;3167:24;3185:5;3167:24;:::i;:::-;3160:5;3157:35;3147:63;;3206:1;3203;3196:12;3147:63;3094:122;:::o;3222:139::-;3268:5;3306:6;3293:20;3284:29;;3322:33;3349:5;3322:33;:::i;:::-;3222:139;;;;:::o;3367:77::-;3404:7;3433:5;3422:16;;3367:77;;;:::o;3450:122::-;3523:24;3541:5;3523:24;:::i;:::-;3516:5;3513:35;3503:63;;3562:1;3559;3552:12;3503:63;3450:122;:::o;3578:139::-;3624:5;3662:6;3649:20;3640:29;;3678:33;3705:5;3678:33;:::i;:::-;3578:139;;;;:::o;3723:474::-;3791:6;3799;3848:2;3836:9;3827:7;3823:23;3819:32;3816:119;;;3854:79;;:::i;:::-;3816:119;3974:1;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3945:117;4101:2;4127:53;4172:7;4163:6;4152:9;4148:22;4127:53;:::i;:::-;4117:63;;4072:118;3723:474;;;;;:::o;4203:118::-;4290:24;4308:5;4290:24;:::i;:::-;4285:3;4278:37;4203:118;;:::o;4327:222::-;4420:4;4458:2;4447:9;4443:18;4435:26;;4471:71;4539:1;4528:9;4524:17;4515:6;4471:71;:::i;:::-;4327:222;;;;:::o;4555:117::-;4664:1;4661;4654:12;4678:117;4787:1;4784;4777:12;4801:180;4849:77;4846:1;4839:88;4946:4;4943:1;4936:15;4970:4;4967:1;4960:15;4987:281;5070:27;5092:4;5070:27;:::i;:::-;5062:6;5058:40;5200:6;5188:10;5185:22;5164:18;5152:10;5149:34;5146:62;5143:88;;;5211:18;;:::i;:::-;5143:88;5251:10;5247:2;5240:22;5030:238;4987:281;;:::o;5274:129::-;5308:6;5335:20;;:::i;:::-;5325:30;;5364:33;5392:4;5384:6;5364:33;:::i;:::-;5274:129;;;:::o;5409:308::-;5471:4;5561:18;5553:6;5550:30;5547:56;;;5583:18;;:::i;:::-;5547:56;5621:29;5643:6;5621:29;:::i;:::-;5613:37;;5705:4;5699;5695:15;5687:23;;5409:308;;;:::o;5723:146::-;5820:6;5815:3;5810;5797:30;5861:1;5852:6;5847:3;5843:16;5836:27;5723:146;;;:::o;5875:425::-;5953:5;5978:66;5994:49;6036:6;5994:49;:::i;:::-;5978:66;:::i;:::-;5969:75;;6067:6;6060:5;6053:21;6105:4;6098:5;6094:16;6143:3;6134:6;6129:3;6125:16;6122:25;6119:112;;;6150:79;;:::i;:::-;6119:112;6240:54;6287:6;6282:3;6277;6240:54;:::i;:::-;5959:341;5875:425;;;;;:::o;6320:340::-;6376:5;6425:3;6418:4;6410:6;6406:17;6402:27;6392:122;;6433:79;;:::i;:::-;6392:122;6550:6;6537:20;6575:79;6650:3;6642:6;6635:4;6627:6;6623:17;6575:79;:::i;:::-;6566:88;;6382:278;6320:340;;;;:::o;6666:116::-;6736:21;6751:5;6736:21;:::i;:::-;6729:5;6726:32;6716:60;;6772:1;6769;6762:12;6716:60;6666:116;:::o;6788:133::-;6831:5;6869:6;6856:20;6847:29;;6885:30;6909:5;6885:30;:::i;:::-;6788:133;;;;:::o;6927:648::-;7002:6;7010;7059:2;7047:9;7038:7;7034:23;7030:32;7027:119;;;7065:79;;:::i;:::-;7027:119;7213:1;7202:9;7198:17;7185:31;7243:18;7235:6;7232:30;7229:117;;;7265:79;;:::i;:::-;7229:117;7370:63;7425:7;7416:6;7405:9;7401:22;7370:63;:::i;:::-;7360:73;;7156:287;7482:2;7508:50;7550:7;7541:6;7530:9;7526:22;7508:50;:::i;:::-;7498:60;;7453:115;6927:648;;;;;:::o;7581:619::-;7658:6;7666;7674;7723:2;7711:9;7702:7;7698:23;7694:32;7691:119;;;7729:79;;:::i;:::-;7691:119;7849:1;7874:53;7919:7;7910:6;7899:9;7895:22;7874:53;:::i;:::-;7864:63;;7820:117;7976:2;8002:53;8047:7;8038:6;8027:9;8023:22;8002:53;:::i;:::-;7992:63;;7947:118;8104:2;8130:53;8175:7;8166:6;8155:9;8151:22;8130:53;:::i;:::-;8120:63;;8075:118;7581:619;;;;;:::o;8206:77::-;8243:7;8272:5;8261:16;;8206:77;;;:::o;8289:122::-;8362:24;8380:5;8362:24;:::i;:::-;8355:5;8352:35;8342:63;;8401:1;8398;8391:12;8342:63;8289:122;:::o;8417:139::-;8463:5;8501:6;8488:20;8479:29;;8517:33;8544:5;8517:33;:::i;:::-;8417:139;;;;:::o;8562:329::-;8621:6;8670:2;8658:9;8649:7;8645:23;8641:32;8638:119;;;8676:79;;:::i;:::-;8638:119;8796:1;8821:53;8866:7;8857:6;8846:9;8842:22;8821:53;:::i;:::-;8811:63;;8767:117;8562:329;;;;:::o;8897:118::-;8984:24;9002:5;8984:24;:::i;:::-;8979:3;8972:37;8897:118;;:::o;9021:222::-;9114:4;9152:2;9141:9;9137:18;9129:26;;9165:71;9233:1;9222:9;9218:17;9209:6;9165:71;:::i;:::-;9021:222;;;;:::o;9249:509::-;9318:6;9367:2;9355:9;9346:7;9342:23;9338:32;9335:119;;;9373:79;;:::i;:::-;9335:119;9521:1;9510:9;9506:17;9493:31;9551:18;9543:6;9540:30;9537:117;;;9573:79;;:::i;:::-;9537:117;9678:63;9733:7;9724:6;9713:9;9709:22;9678:63;:::i;:::-;9668:73;;9464:287;9249:509;;;;:::o;9764:474::-;9832:6;9840;9889:2;9877:9;9868:7;9864:23;9860:32;9857:119;;;9895:79;;:::i;:::-;9857:119;10015:1;10040:53;10085:7;10076:6;10065:9;10061:22;10040:53;:::i;:::-;10030:63;;9986:117;10142:2;10168:53;10213:7;10204:6;10193:9;10189:22;10168:53;:::i;:::-;10158:63;;10113:118;9764:474;;;;;:::o;10244:86::-;10279:7;10319:4;10312:5;10308:16;10297:27;;10244:86;;;:::o;10336:112::-;10419:22;10435:5;10419:22;:::i;:::-;10414:3;10407:35;10336:112;;:::o;10454:214::-;10543:4;10581:2;10570:9;10566:18;10558:26;;10594:67;10658:1;10647:9;10643:17;10634:6;10594:67;:::i;:::-;10454:214;;;;:::o;10674:329::-;10733:6;10782:2;10770:9;10761:7;10757:23;10753:32;10750:119;;;10788:79;;:::i;:::-;10750:119;10908:1;10933:53;10978:7;10969:6;10958:9;10954:22;10933:53;:::i;:::-;10923:63;;10879:117;10674:329;;;;:::o;11009:654::-;11087:6;11095;11144:2;11132:9;11123:7;11119:23;11115:32;11112:119;;;11150:79;;:::i;:::-;11112:119;11298:1;11287:9;11283:17;11270:31;11328:18;11320:6;11317:30;11314:117;;;11350:79;;:::i;:::-;11314:117;11455:63;11510:7;11501:6;11490:9;11486:22;11455:63;:::i;:::-;11445:73;;11241:287;11567:2;11593:53;11638:7;11629:6;11618:9;11614:22;11593:53;:::i;:::-;11583:63;;11538:118;11009:654;;;;;:::o;11669:979::-;11766:6;11774;11782;11831:2;11819:9;11810:7;11806:23;11802:32;11799:119;;;11837:79;;:::i;:::-;11799:119;11985:1;11974:9;11970:17;11957:31;12015:18;12007:6;12004:30;12001:117;;;12037:79;;:::i;:::-;12001:117;12142:63;12197:7;12188:6;12177:9;12173:22;12142:63;:::i;:::-;12132:73;;11928:287;12282:2;12271:9;12267:18;12254:32;12313:18;12305:6;12302:30;12299:117;;;12335:79;;:::i;:::-;12299:117;12440:63;12495:7;12486:6;12475:9;12471:22;12440:63;:::i;:::-;12430:73;;12225:288;12552:2;12578:53;12623:7;12614:6;12603:9;12599:22;12578:53;:::i;:::-;12568:63;;12523:118;11669:979;;;;;:::o;12654:474::-;12722:6;12730;12779:2;12767:9;12758:7;12754:23;12750:32;12747:119;;;12785:79;;:::i;:::-;12747:119;12905:1;12930:53;12975:7;12966:6;12955:9;12951:22;12930:53;:::i;:::-;12920:63;;12876:117;13032:2;13058:53;13103:7;13094:6;13083:9;13079:22;13058:53;:::i;:::-;13048:63;;13003:118;12654:474;;;;;:::o;13134:180::-;13182:77;13179:1;13172:88;13279:4;13276:1;13269:15;13303:4;13300:1;13293:15;13320:320;13364:6;13401:1;13395:4;13391:12;13381:22;;13448:1;13442:4;13438:12;13469:18;13459:81;;13525:4;13517:6;13513:17;13503:27;;13459:81;13587:2;13579:6;13576:14;13556:18;13553:38;13550:84;;13606:18;;:::i;:::-;13550:84;13371:269;13320:320;;;:::o;13646:148::-;13748:11;13785:3;13770:18;;13646:148;;;;:::o;13800:390::-;13906:3;13934:39;13967:5;13934:39;:::i;:::-;13989:89;14071:6;14066:3;13989:89;:::i;:::-;13982:96;;14087:65;14145:6;14140:3;14133:4;14126:5;14122:16;14087:65;:::i;:::-;14177:6;14172:3;14168:16;14161:23;;13910:280;13800:390;;;;:::o;14196:275::-;14328:3;14350:95;14441:3;14432:6;14350:95;:::i;:::-;14343:102;;14462:3;14455:10;;14196:275;;;;:::o;14477:172::-;14617:24;14613:1;14605:6;14601:14;14594:48;14477:172;:::o;14655:366::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:419::-;15193:4;15231:2;15220:9;15216:18;15208:26;;15280:9;15274:4;15270:20;15266:1;15255:9;15251:17;15244:47;15308:131;15434:4;15308:131;:::i;:::-;15300:139;;15027:419;;;:::o;15452:234::-;15592:34;15588:1;15580:6;15576:14;15569:58;15661:17;15656:2;15648:6;15644:15;15637:42;15452:234;:::o;15692:366::-;15834:3;15855:67;15919:2;15914:3;15855:67;:::i;:::-;15848:74;;15931:93;16020:3;15931:93;:::i;:::-;16049:2;16044:3;16040:12;16033:19;;15692:366;;;:::o;16064:419::-;16230:4;16268:2;16257:9;16253:18;16245:26;;16317:9;16311:4;16307:20;16303:1;16292:9;16288:17;16281:47;16345:131;16471:4;16345:131;:::i;:::-;16337:139;;16064:419;;;:::o;16489:180::-;16537:77;16534:1;16527:88;16634:4;16631:1;16624:15;16658:4;16655:1;16648:15;16675:191;16715:3;16734:20;16752:1;16734:20;:::i;:::-;16729:25;;16768:20;16786:1;16768:20;:::i;:::-;16763:25;;16811:1;16808;16804:9;16797:16;;16832:3;16829:1;16826:10;16823:36;;;16839:18;;:::i;:::-;16823:36;16675:191;;;;:::o;16872:175::-;17012:27;17008:1;17000:6;16996:14;16989:51;16872:175;:::o;17053:366::-;17195:3;17216:67;17280:2;17275:3;17216:67;:::i;:::-;17209:74;;17292:93;17381:3;17292:93;:::i;:::-;17410:2;17405:3;17401:12;17394:19;;17053:366;;;:::o;17425:419::-;17591:4;17629:2;17618:9;17614:18;17606:26;;17678:9;17672:4;17668:20;17664:1;17653:9;17649:17;17642:47;17706:131;17832:4;17706:131;:::i;:::-;17698:139;;17425:419;;;:::o;17850:224::-;17990:34;17986:1;17978:6;17974:14;17967:58;18059:7;18054:2;18046:6;18042:15;18035:32;17850:224;:::o;18080:366::-;18222:3;18243:67;18307:2;18302:3;18243:67;:::i;:::-;18236:74;;18319:93;18408:3;18319:93;:::i;:::-;18437:2;18432:3;18428:12;18421:19;;18080:366;;;:::o;18452:419::-;18618:4;18656:2;18645:9;18641:18;18633:26;;18705:9;18699:4;18695:20;18691:1;18680:9;18676:17;18669:47;18733:131;18859:4;18733:131;:::i;:::-;18725:139;;18452:419;;;:::o;18877:223::-;19017:34;19013:1;19005:6;19001:14;18994:58;19086:6;19081:2;19073:6;19069:15;19062:31;18877:223;:::o;19106:366::-;19248:3;19269:67;19333:2;19328:3;19269:67;:::i;:::-;19262:74;;19345:93;19434:3;19345:93;:::i;:::-;19463:2;19458:3;19454:12;19447:19;;19106:366;;;:::o;19478:419::-;19644:4;19682:2;19671:9;19667:18;19659:26;;19731:9;19725:4;19721:20;19717:1;19706:9;19702:17;19695:47;19759:131;19885:4;19759:131;:::i;:::-;19751:139;;19478:419;;;:::o;19903:221::-;20043:34;20039:1;20031:6;20027:14;20020:58;20112:4;20107:2;20099:6;20095:15;20088:29;19903:221;:::o;20130:366::-;20272:3;20293:67;20357:2;20352:3;20293:67;:::i;:::-;20286:74;;20369:93;20458:3;20369:93;:::i;:::-;20487:2;20482:3;20478:12;20471:19;;20130:366;;;:::o;20502:419::-;20668:4;20706:2;20695:9;20691:18;20683:26;;20755:9;20749:4;20745:20;20741:1;20730:9;20726:17;20719:47;20783:131;20909:4;20783:131;:::i;:::-;20775:139;;20502:419;;;:::o;20927:179::-;21067:31;21063:1;21055:6;21051:14;21044:55;20927:179;:::o;21112:366::-;21254:3;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21351:93;21440:3;21351:93;:::i;:::-;21469:2;21464:3;21460:12;21453:19;;21112:366;;;:::o;21484:419::-;21650:4;21688:2;21677:9;21673:18;21665:26;;21737:9;21731:4;21727:20;21723:1;21712:9;21708:17;21701:47;21765:131;21891:4;21765:131;:::i;:::-;21757:139;;21484:419;;;:::o;21909:224::-;22049:34;22045:1;22037:6;22033:14;22026:58;22118:7;22113:2;22105:6;22101:15;22094:32;21909:224;:::o;22139:366::-;22281:3;22302:67;22366:2;22361:3;22302:67;:::i;:::-;22295:74;;22378:93;22467:3;22378:93;:::i;:::-;22496:2;22491:3;22487:12;22480:19;;22139:366;;;:::o;22511:419::-;22677:4;22715:2;22704:9;22700:18;22692:26;;22764:9;22758:4;22754:20;22750:1;22739:9;22735:17;22728:47;22792:131;22918:4;22792:131;:::i;:::-;22784:139;;22511:419;;;:::o;22936:222::-;23076:34;23072:1;23064:6;23060:14;23053:58;23145:5;23140:2;23132:6;23128:15;23121:30;22936:222;:::o;23164:366::-;23306:3;23327:67;23391:2;23386:3;23327:67;:::i;:::-;23320:74;;23403:93;23492:3;23403:93;:::i;:::-;23521:2;23516:3;23512:12;23505:19;;23164:366;;;:::o;23536:419::-;23702:4;23740:2;23729:9;23725:18;23717:26;;23789:9;23783:4;23779:20;23775:1;23764:9;23760:17;23753:47;23817:131;23943:4;23817:131;:::i;:::-;23809:139;;23536:419;;;:::o;23961:225::-;24101:34;24097:1;24089:6;24085:14;24078:58;24170:8;24165:2;24157:6;24153:15;24146:33;23961:225;:::o;24192:366::-;24334:3;24355:67;24419:2;24414:3;24355:67;:::i;:::-;24348:74;;24431:93;24520:3;24431:93;:::i;:::-;24549:2;24544:3;24540:12;24533:19;;24192:366;;;:::o;24564:419::-;24730:4;24768:2;24757:9;24753:18;24745:26;;24817:9;24811:4;24807:20;24803:1;24792:9;24788:17;24781:47;24845:131;24971:4;24845:131;:::i;:::-;24837:139;;24564:419;;;:::o;24989:181::-;25129:33;25125:1;25117:6;25113:14;25106:57;24989:181;:::o;25176:366::-;25318:3;25339:67;25403:2;25398:3;25339:67;:::i;:::-;25332:74;;25415:93;25504:3;25415:93;:::i;:::-;25533:2;25528:3;25524:12;25517:19;;25176:366;;;:::o;25548:419::-;25714:4;25752:2;25741:9;25737:18;25729:26;;25801:9;25795:4;25791:20;25787:1;25776:9;25772:17;25765:47;25829:131;25955:4;25829:131;:::i;:::-;25821:139;;25548:419;;;:::o;25973:180::-;26113:32;26109:1;26101:6;26097:14;26090:56;25973:180;:::o;26159:366::-;26301:3;26322:67;26386:2;26381:3;26322:67;:::i;:::-;26315:74;;26398:93;26487:3;26398:93;:::i;:::-;26516:2;26511:3;26507:12;26500:19;;26159:366;;;:::o;26531:419::-;26697:4;26735:2;26724:9;26720:18;26712:26;;26784:9;26778:4;26774:20;26770:1;26759:9;26755:17;26748:47;26812:131;26938:4;26812:131;:::i;:::-;26804:139;;26531:419;;;:::o;26956:226::-;27096:34;27092:1;27084:6;27080:14;27073:58;27165:9;27160:2;27152:6;27148:15;27141:34;26956:226;:::o;27188:366::-;27330:3;27351:67;27415:2;27410:3;27351:67;:::i;:::-;27344:74;;27427:93;27516:3;27427:93;:::i;:::-;27545:2;27540:3;27536:12;27529:19;;27188:366;;;:::o;27560:419::-;27726:4;27764:2;27753:9;27749:18;27741:26;;27813:9;27807:4;27803:20;27799:1;27788:9;27784:17;27777:47;27841:131;27967:4;27841:131;:::i;:::-;27833:139;;27560:419;;;:::o;27985:229::-;28125:34;28121:1;28113:6;28109:14;28102:58;28194:12;28189:2;28181:6;28177:15;28170:37;27985:229;:::o;28220:366::-;28362:3;28383:67;28447:2;28442:3;28383:67;:::i;:::-;28376:74;;28459:93;28548:3;28459:93;:::i;:::-;28577:2;28572:3;28568:12;28561:19;;28220:366;;;:::o;28592:419::-;28758:4;28796:2;28785:9;28781:18;28773:26;;28845:9;28839:4;28835:20;28831:1;28820:9;28816:17;28809:47;28873:131;28999:4;28873:131;:::i;:::-;28865:139;;28592:419;;;:::o;29017:624::-;29206:4;29244:2;29233:9;29229:18;29221:26;;29293:9;29287:4;29283:20;29279:1;29268:9;29264:17;29257:47;29321:78;29394:4;29385:6;29321:78;:::i;:::-;29313:86;;29446:9;29440:4;29436:20;29431:2;29420:9;29416:18;29409:48;29474:78;29547:4;29538:6;29474:78;:::i;:::-;29466:86;;29562:72;29630:2;29619:9;29615:18;29606:6;29562:72;:::i;:::-;29017:624;;;;;;:::o;29647:173::-;29787:25;29783:1;29775:6;29771:14;29764:49;29647:173;:::o;29826:402::-;29986:3;30007:85;30089:2;30084:3;30007:85;:::i;:::-;30000:92;;30101:93;30190:3;30101:93;:::i;:::-;30219:2;30214:3;30210:12;30203:19;;29826:402;;;:::o;30234:167::-;30374:19;30370:1;30362:6;30358:14;30351:43;30234:167;:::o;30407:402::-;30567:3;30588:85;30670:2;30665:3;30588:85;:::i;:::-;30581:92;;30682:93;30771:3;30682:93;:::i;:::-;30800:2;30795:3;30791:12;30784:19;;30407:402;;;:::o;30815:967::-;31197:3;31219:148;31363:3;31219:148;:::i;:::-;31212:155;;31384:95;31475:3;31466:6;31384:95;:::i;:::-;31377:102;;31496:148;31640:3;31496:148;:::i;:::-;31489:155;;31661:95;31752:3;31743:6;31661:95;:::i;:::-;31654:102;;31773:3;31766:10;;30815:967;;;;;:::o;31788:220::-;31928:34;31924:1;31916:6;31912:14;31905:58;31997:3;31992:2;31984:6;31980:15;31973:28;31788:220;:::o;32014:366::-;32156:3;32177:67;32241:2;32236:3;32177:67;:::i;:::-;32170:74;;32253:93;32342:3;32253:93;:::i;:::-;32371:2;32366:3;32362:12;32355:19;;32014:366;;;:::o;32386:419::-;32552:4;32590:2;32579:9;32575:18;32567:26;;32639:9;32633:4;32629:20;32625:1;32614:9;32610:17;32603:47;32667:131;32793:4;32667:131;:::i;:::-;32659:139;;32386:419;;;:::o;32811:221::-;32951:34;32947:1;32939:6;32935:14;32928:58;33020:4;33015:2;33007:6;33003:15;32996:29;32811:221;:::o;33038:366::-;33180:3;33201:67;33265:2;33260:3;33201:67;:::i;:::-;33194:74;;33277:93;33366:3;33277:93;:::i;:::-;33395:2;33390:3;33386:12;33379:19;;33038:366;;;:::o;33410:419::-;33576:4;33614:2;33603:9;33599:18;33591:26;;33663:9;33657:4;33653:20;33649:1;33638:9;33634:17;33627:47;33691:131;33817:4;33691:131;:::i;:::-;33683:139;;33410:419;;;:::o;33835:194::-;33875:4;33895:20;33913:1;33895:20;:::i;:::-;33890:25;;33929:20;33947:1;33929:20;:::i;:::-;33924:25;;33973:1;33970;33966:9;33958:17;;33997:1;33991:4;33988:11;33985:37;;;34002:18;;:::i;:::-;33985:37;33835:194;;;;:::o;34035:348::-;34075:7;34098:20;34116:1;34098:20;:::i;:::-;34093:25;;34132:20;34150:1;34132:20;:::i;:::-;34127:25;;34320:1;34252:66;34248:74;34245:1;34242:81;34237:1;34230:9;34223:17;34219:105;34216:131;;;34327:18;;:::i;:::-;34216:131;34375:1;34372;34368:9;34357:20;;34035:348;;;;:::o;34389:180::-;34437:77;34434:1;34427:88;34534:4;34531:1;34524:15;34558:4;34555:1;34548:15;34575:171;34614:3;34637:24;34655:5;34637:24;:::i;:::-;34628:33;;34683:4;34676:5;34673:15;34670:41;;34691:18;;:::i;:::-;34670:41;34738:1;34731:5;34727:13;34720:20;;34575:171;;;:::o;34752:182::-;34892:34;34888:1;34880:6;34876:14;34869:58;34752:182;:::o;34940:366::-;35082:3;35103:67;35167:2;35162:3;35103:67;:::i;:::-;35096:74;;35179:93;35268:3;35179:93;:::i;:::-;35297:2;35292:3;35288:12;35281:19;;34940:366;;;:::o;35312:419::-;35478:4;35516:2;35505:9;35501:18;35493:26;;35565:9;35559:4;35555:20;35551:1;35540:9;35536:17;35529:47;35593:131;35719:4;35593:131;:::i;:::-;35585:139;;35312:419;;;:::o
Swarm Source
ipfs://75667123108d406169815bb950c1473f942570f781c5ffa1e5657f4ca7315f77
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.