Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,300 IN500
Holders
2
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Indexx500
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-25 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // 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/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/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/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: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @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/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/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: contracts/in500/ETH_Indexx500.sol pragma solidity ^0.8.4; /** * @title Indexx500 token * @notice Asset backed BEP20 Token with pausable, mintable and burn features * @notice Pegged to S&P 500 Index Price */ contract Indexx500 is ERC20, ERC20Burnable, Pausable, AccessControl { using SafeMath for uint256; bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); address public feeAdmin; bool public feeActive = true; /** * @dev Constructor assigning Token name, symbol and minter, pauser and admin role to msg.sender */ constructor() ERC20("Indexx500", "IN500") { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(PAUSER_ROLE, msg.sender); _grantRole(MINTER_ROLE, msg.sender); feeAdmin = msg.sender; } /** * @dev Function to change Fee admin address * @param _newFeeAdmin The address of new fee admin */ function changeFeeAdmin(address _newFeeAdmin) external onlyRole(MINTER_ROLE){ feeAdmin = _newFeeAdmin; } /** * @dev Function to change Fee active status * @param status new status for fee charging */ function changeFeeStatus(bool status) external onlyRole(MINTER_ROLE){ feeActive = status; } /** * @dev Function to pause token transfer */ function pause() public onlyRole(PAUSER_ROLE) { _pause(); } /** * @dev Function to mint tokens */ function unpause() public onlyRole(PAUSER_ROLE) { _unpause(); } /** * @dev Function to mint tokens * @param to The address that will receive the minted tokens. * @param amount The amount of tokens to mint. */ function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); } /** * @dev Function to halt token transafers in case of extreme events and emergencies * @param to The address that will send the tokens. * @param from The address that will receive the tokens. * @param amount The amount of tokens to mint. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override whenNotPaused { super._beforeTokenTransfer(from, to, amount); } function transfer(address to, uint256 amount) public override returns (bool) { address owner = _msgSender(); if ( feeActive == true && amount > 20000 * 10**18) { uint256 fee; if (amount > 40000 * 10**18) { if (amount > 80000 * 10**18) { fee = amount.mul(15).div(1000); } else { fee = amount.div(100); } } else { fee = amount.mul(5).div(1000); } _transfer(owner, feeAdmin, fee); amount = amount.sub(fee); } _transfer(owner, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); if (feeActive == true && amount > 20000 * 10**18) { uint256 fee; if (amount > 40000 * 10**18) { if (amount > 80000 * 10**18) { fee = amount.mul(15).div(1000); } else { fee = amount.div(100); } } else { fee = amount.mul(5).div(1000); } _transfer(from, feeAdmin, fee); amount = amount.sub(fee); } _transfer(from, to, amount); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeAdmin","type":"address"}],"name":"changeFeeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600760146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600981526020017f496e6465787835303000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f494e3530300000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b19291906200030d565b508060049080519060200190620000ca9291906200030d565b5050506000600560006101000a81548160ff021916908315150217905550620000fd6000801b33620001a860201b60201c565b6200012f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620001a860201b60201c565b620001617f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001a860201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000422565b620001ba82826200029a60201b60201c565b620002965760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200023b6200030560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b8280546200031b90620003bd565b90600052602060002090601f0160209004810192826200033f57600085556200038b565b82601f106200035a57805160ff19168380011785556200038b565b828001600101855582156200038b579182015b828111156200038a5782518255916020019190600101906200036d565b5b5090506200039a91906200039e565b5090565b5b80821115620003b95760008160009055506001016200039f565b5090565b60006002820490506001821680620003d657607f821691505b60208210811415620003ed57620003ec620003f3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612dda80620004326000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063d547741f11610071578063d547741f14610557578063dd62ed3e14610573578063e39e165a146105a3578063e63ab1e9146105c1576101da565b8063a457c2d7146104bd578063a9059cbb146104ed578063af1171ca1461051d578063d539139314610539576101da565b806391d14854116100de57806391d148541461043557806395d89b41146104655780639e7bd52514610483578063a217fddf1461049f576101da565b806370a08231146103df57806379cc67901461040f5780638456cb591461042b576101da565b806330a402c01161017c5780633f4ba83a1161014b5780633f4ba83a1461037f57806340c10f191461038957806342966c68146103a55780635c975abb146103c1576101da565b806330a402c0146102f7578063313ce5671461031557806336568abe14610333578063395093511461034f576101da565b806318160ddd116101b857806318160ddd1461025d57806323b872dd1461027b578063248a9ca3146102ab5780632f2ff15d146102db576101da565b806301ffc9a7146101df57806306fdde031461020f578063095ea7b31461022d575b600080fd5b6101f960048036038101906101f49190612012565b6105df565b60405161020691906123a6565b60405180910390f35b610217610659565b60405161022491906123dc565b60405180910390f35b61024760048036038101906102429190611f38565b6106eb565b60405161025491906123a6565b60405180910390f35b61026561070e565b60405161027291906125be565b60405180910390f35b61029560048036038101906102909190611ee5565b610718565b6040516102a291906123a6565b60405180910390f35b6102c560048036038101906102c09190611fa5565b610858565b6040516102d291906123c1565b60405180910390f35b6102f560048036038101906102f09190611fd2565b610878565b005b6102ff610899565b60405161030c919061238b565b60405180910390f35b61031d6108bf565b60405161032a91906125d9565b60405180910390f35b61034d60048036038101906103489190611fd2565b6108c8565b005b61036960048036038101906103649190611f38565b61094b565b60405161037691906123a6565b60405180910390f35b610387610982565b005b6103a3600480360381019061039e9190611f38565b6109b7565b005b6103bf60048036038101906103ba919061203f565b6109f0565b005b6103c9610a04565b6040516103d691906123a6565b60405180910390f35b6103f960048036038101906103f49190611e78565b610a1b565b60405161040691906125be565b60405180910390f35b61042960048036038101906104249190611f38565b610a63565b005b610433610a83565b005b61044f600480360381019061044a9190611fd2565b610ab8565b60405161045c91906123a6565b60405180910390f35b61046d610b23565b60405161047a91906123dc565b60405180910390f35b61049d60048036038101906104989190611f78565b610bb5565b005b6104a7610bfd565b6040516104b491906123c1565b60405180910390f35b6104d760048036038101906104d29190611f38565b610c04565b6040516104e491906123a6565b60405180910390f35b61050760048036038101906105029190611f38565b610c7b565b60405161051491906123a6565b60405180910390f35b61053760048036038101906105329190611e78565b610daf565b005b610541610e1e565b60405161054e91906123c1565b60405180910390f35b610571600480360381019061056c9190611fd2565b610e42565b005b61058d60048036038101906105889190611ea5565b610e63565b60405161059a91906125be565b60405180910390f35b6105ab610eea565b6040516105b891906123a6565b60405180910390f35b6105c9610efd565b6040516105d691906123c1565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610652575061065182610f21565b5b9050919050565b60606003805461066890612818565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612818565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b6000806106f6610f8b565b9050610703818585610f93565b600191505092915050565b6000600254905090565b600080610723610f8b565b905061073085828561115e565b60011515600760149054906101000a900460ff16151514801561075c575069043c33c193756480000083115b15610841576000690878678326eac90000008411156107d2576910f0cf064dd5920000008411156107b6576107af6103e86107a1600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b90506107cd565b6107ca60648561120090919063ffffffff16565b90505b6107fd565b6107fa6103e86107ec6005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b61082a86600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b61083d818561149790919063ffffffff16565b9350505b61084c858585611216565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61088182610858565b61088a816114ad565b61089483836114c1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6108d0610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349061257e565b60405180910390fd5b61094782826115a2565b5050565b600080610956610f8b565b90506109778185856109688589610e63565b610972919061261b565b610f93565b600191505092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109ac816114ad565b6109b4611684565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e1816114ad565b6109eb83836116e7565b505050565b610a016109fb610f8b565b82611847565b50565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7582610a6f610f8b565b8361115e565b610a7f8282611847565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610aad816114ad565b610ab5611a1e565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b3290612818565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90612818565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bdf816114ad565b81600760146101000a81548160ff0219169083151502179055505050565b6000801b81565b600080610c0f610f8b565b90506000610c1d8286610e63565b905083811015610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061255e565b60405180910390fd5b610c6f8286868403610f93565b60019250505092915050565b600080610c86610f8b565b905060011515600760149054906101000a900460ff161515148015610cb4575069043c33c193756480000083115b15610d99576000690878678326eac9000000841115610d2a576910f0cf064dd592000000841115610d0e57610d076103e8610cf9600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b9050610d25565b610d2260648561120090919063ffffffff16565b90505b610d55565b610d526103e8610d446005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b610d8282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b610d95818561149790919063ffffffff16565b9350505b610da4818585611216565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dd9816114ad565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e4b82610858565b610e54816114ad565b610e5e83836115a2565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760149054906101000a900460ff1681565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061253e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a9061247e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161115191906125be565b60405180910390a3505050565b600061116a8484610e63565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111e457818110156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061249e565b60405180910390fd5b6111e38484848403610f93565b5b50505050565b600081836111f891906126a2565b905092915050565b6000818361120e9190612671565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d9061251e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed9061241e565b60405180910390fd5b611301838383611a81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906124be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a919061261b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161147e91906125be565b60405180910390a3611491848484611a99565b50505050565b600081836114a591906126fc565b905092915050565b6114be816114b9610f8b565b611a9e565b50565b6114cb8282610ab8565b61159e5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611543610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6115ac8282610ab8565b156116805760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611625610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61168c611b3b565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116d0610f8b565b6040516116dd919061238b565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061259e565b60405180910390fd5b61176360008383611a81565b8060026000828254611775919061261b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ca919061261b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161182f91906125be565b60405180910390a361184360008383611a99565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906124fe565b60405180910390fd5b6118c382600083611a81565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119409061245e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119a091906126fc565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0591906125be565b60405180910390a3611a1983600084611a99565b505050565b611a26611b84565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6a610f8b565b604051611a77919061238b565b60405180910390a1565b611a89611b84565b611a94838383611bce565b505050565b505050565b611aa88282610ab8565b611b3757611acd8173ffffffffffffffffffffffffffffffffffffffff166014611bd3565b611adb8360001c6020611bd3565b604051602001611aec929190612351565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e91906123dc565b60405180910390fd5b5050565b611b43610a04565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061243e565b60405180910390fd5b565b611b8c610a04565b15611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906124de565b60405180910390fd5b565b505050565b606060006002836002611be691906126a2565b611bf0919061261b565b67ffffffffffffffff811115611c0957611c08612906565b5b6040519080825280601f01601f191660200182016040528015611c3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c7357611c726128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd757611cd66128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611d1791906126a2565b611d21919061261b565b90505b6001811115611dc1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d6357611d626128d7565b5b1a60f81b828281518110611d7a57611d796128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611dba906127ee565b9050611d24565b5060008414611e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfc906123fe565b60405180910390fd5b8091505092915050565b600081359050611e1e81612d31565b92915050565b600081359050611e3381612d48565b92915050565b600081359050611e4881612d5f565b92915050565b600081359050611e5d81612d76565b92915050565b600081359050611e7281612d8d565b92915050565b600060208284031215611e8e57611e8d612935565b5b6000611e9c84828501611e0f565b91505092915050565b60008060408385031215611ebc57611ebb612935565b5b6000611eca85828601611e0f565b9250506020611edb85828601611e0f565b9150509250929050565b600080600060608486031215611efe57611efd612935565b5b6000611f0c86828701611e0f565b9350506020611f1d86828701611e0f565b9250506040611f2e86828701611e63565b9150509250925092565b60008060408385031215611f4f57611f4e612935565b5b6000611f5d85828601611e0f565b9250506020611f6e85828601611e63565b9150509250929050565b600060208284031215611f8e57611f8d612935565b5b6000611f9c84828501611e24565b91505092915050565b600060208284031215611fbb57611fba612935565b5b6000611fc984828501611e39565b91505092915050565b60008060408385031215611fe957611fe8612935565b5b6000611ff785828601611e39565b925050602061200885828601611e0f565b9150509250929050565b60006020828403121561202857612027612935565b5b600061203684828501611e4e565b91505092915050565b60006020828403121561205557612054612935565b5b600061206384828501611e63565b91505092915050565b61207581612730565b82525050565b61208481612742565b82525050565b6120938161274e565b82525050565b60006120a4826125f4565b6120ae81856125ff565b93506120be8185602086016127bb565b6120c78161293a565b840191505092915050565b60006120dd826125f4565b6120e78185612610565b93506120f78185602086016127bb565b80840191505092915050565b60006121106020836125ff565b915061211b8261294b565b602082019050919050565b60006121336023836125ff565b915061213e82612974565b604082019050919050565b60006121566014836125ff565b9150612161826129c3565b602082019050919050565b60006121796022836125ff565b9150612184826129ec565b604082019050919050565b600061219c6022836125ff565b91506121a782612a3b565b604082019050919050565b60006121bf601d836125ff565b91506121ca82612a8a565b602082019050919050565b60006121e26026836125ff565b91506121ed82612ab3565b604082019050919050565b60006122056010836125ff565b915061221082612b02565b602082019050919050565b60006122286021836125ff565b915061223382612b2b565b604082019050919050565b600061224b6025836125ff565b915061225682612b7a565b604082019050919050565b600061226e6024836125ff565b915061227982612bc9565b604082019050919050565b6000612291601783612610565b915061229c82612c18565b601782019050919050565b60006122b46025836125ff565b91506122bf82612c41565b604082019050919050565b60006122d7601183612610565b91506122e282612c90565b601182019050919050565b60006122fa602f836125ff565b915061230582612cb9565b604082019050919050565b600061231d601f836125ff565b915061232882612d08565b602082019050919050565b61233c816127a4565b82525050565b61234b816127ae565b82525050565b600061235c82612284565b915061236882856120d2565b9150612373826122ca565b915061237f82846120d2565b91508190509392505050565b60006020820190506123a0600083018461206c565b92915050565b60006020820190506123bb600083018461207b565b92915050565b60006020820190506123d6600083018461208a565b92915050565b600060208201905081810360008301526123f68184612099565b905092915050565b6000602082019050818103600083015261241781612103565b9050919050565b6000602082019050818103600083015261243781612126565b9050919050565b6000602082019050818103600083015261245781612149565b9050919050565b600060208201905081810360008301526124778161216c565b9050919050565b600060208201905081810360008301526124978161218f565b9050919050565b600060208201905081810360008301526124b7816121b2565b9050919050565b600060208201905081810360008301526124d7816121d5565b9050919050565b600060208201905081810360008301526124f7816121f8565b9050919050565b600060208201905081810360008301526125178161221b565b9050919050565b600060208201905081810360008301526125378161223e565b9050919050565b6000602082019050818103600083015261255781612261565b9050919050565b60006020820190508181036000830152612577816122a7565b9050919050565b60006020820190508181036000830152612597816122ed565b9050919050565b600060208201905081810360008301526125b781612310565b9050919050565b60006020820190506125d36000830184612333565b92915050565b60006020820190506125ee6000830184612342565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612626826127a4565b9150612631836127a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126665761266561284a565b5b828201905092915050565b600061267c826127a4565b9150612687836127a4565b92508261269757612696612879565b5b828204905092915050565b60006126ad826127a4565b91506126b8836127a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126f1576126f061284a565b5b828202905092915050565b6000612707826127a4565b9150612712836127a4565b9250828210156127255761272461284a565b5b828203905092915050565b600061273b82612784565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156127d95780820151818401526020810190506127be565b838111156127e8576000848401525b50505050565b60006127f9826127a4565b9150600082141561280d5761280c61284a565b5b600182039050919050565b6000600282049050600182168061283057607f821691505b60208210811415612844576128436128a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d3a81612730565b8114612d4557600080fd5b50565b612d5181612742565b8114612d5c57600080fd5b50565b612d688161274e565b8114612d7357600080fd5b50565b612d7f81612758565b8114612d8a57600080fd5b50565b612d96816127a4565b8114612da157600080fd5b5056fea2646970667358221220d4a98b1763f8f9be39834eac94b76e8b474ce1bc1335136ddad17d50071ba0d564736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063a457c2d7116100a2578063d547741f11610071578063d547741f14610557578063dd62ed3e14610573578063e39e165a146105a3578063e63ab1e9146105c1576101da565b8063a457c2d7146104bd578063a9059cbb146104ed578063af1171ca1461051d578063d539139314610539576101da565b806391d14854116100de57806391d148541461043557806395d89b41146104655780639e7bd52514610483578063a217fddf1461049f576101da565b806370a08231146103df57806379cc67901461040f5780638456cb591461042b576101da565b806330a402c01161017c5780633f4ba83a1161014b5780633f4ba83a1461037f57806340c10f191461038957806342966c68146103a55780635c975abb146103c1576101da565b806330a402c0146102f7578063313ce5671461031557806336568abe14610333578063395093511461034f576101da565b806318160ddd116101b857806318160ddd1461025d57806323b872dd1461027b578063248a9ca3146102ab5780632f2ff15d146102db576101da565b806301ffc9a7146101df57806306fdde031461020f578063095ea7b31461022d575b600080fd5b6101f960048036038101906101f49190612012565b6105df565b60405161020691906123a6565b60405180910390f35b610217610659565b60405161022491906123dc565b60405180910390f35b61024760048036038101906102429190611f38565b6106eb565b60405161025491906123a6565b60405180910390f35b61026561070e565b60405161027291906125be565b60405180910390f35b61029560048036038101906102909190611ee5565b610718565b6040516102a291906123a6565b60405180910390f35b6102c560048036038101906102c09190611fa5565b610858565b6040516102d291906123c1565b60405180910390f35b6102f560048036038101906102f09190611fd2565b610878565b005b6102ff610899565b60405161030c919061238b565b60405180910390f35b61031d6108bf565b60405161032a91906125d9565b60405180910390f35b61034d60048036038101906103489190611fd2565b6108c8565b005b61036960048036038101906103649190611f38565b61094b565b60405161037691906123a6565b60405180910390f35b610387610982565b005b6103a3600480360381019061039e9190611f38565b6109b7565b005b6103bf60048036038101906103ba919061203f565b6109f0565b005b6103c9610a04565b6040516103d691906123a6565b60405180910390f35b6103f960048036038101906103f49190611e78565b610a1b565b60405161040691906125be565b60405180910390f35b61042960048036038101906104249190611f38565b610a63565b005b610433610a83565b005b61044f600480360381019061044a9190611fd2565b610ab8565b60405161045c91906123a6565b60405180910390f35b61046d610b23565b60405161047a91906123dc565b60405180910390f35b61049d60048036038101906104989190611f78565b610bb5565b005b6104a7610bfd565b6040516104b491906123c1565b60405180910390f35b6104d760048036038101906104d29190611f38565b610c04565b6040516104e491906123a6565b60405180910390f35b61050760048036038101906105029190611f38565b610c7b565b60405161051491906123a6565b60405180910390f35b61053760048036038101906105329190611e78565b610daf565b005b610541610e1e565b60405161054e91906123c1565b60405180910390f35b610571600480360381019061056c9190611fd2565b610e42565b005b61058d60048036038101906105889190611ea5565b610e63565b60405161059a91906125be565b60405180910390f35b6105ab610eea565b6040516105b891906123a6565b60405180910390f35b6105c9610efd565b6040516105d691906123c1565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610652575061065182610f21565b5b9050919050565b60606003805461066890612818565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612818565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b5050505050905090565b6000806106f6610f8b565b9050610703818585610f93565b600191505092915050565b6000600254905090565b600080610723610f8b565b905061073085828561115e565b60011515600760149054906101000a900460ff16151514801561075c575069043c33c193756480000083115b15610841576000690878678326eac90000008411156107d2576910f0cf064dd5920000008411156107b6576107af6103e86107a1600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b90506107cd565b6107ca60648561120090919063ffffffff16565b90505b6107fd565b6107fa6103e86107ec6005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b61082a86600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b61083d818561149790919063ffffffff16565b9350505b61084c858585611216565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b61088182610858565b61088a816114ad565b61089483836114c1565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b6108d0610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109349061257e565b60405180910390fd5b61094782826115a2565b5050565b600080610956610f8b565b90506109778185856109688589610e63565b610972919061261b565b610f93565b600191505092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109ac816114ad565b6109b4611684565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109e1816114ad565b6109eb83836116e7565b505050565b610a016109fb610f8b565b82611847565b50565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7582610a6f610f8b565b8361115e565b610a7f8282611847565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610aad816114ad565b610ab5611a1e565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610b3290612818565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5e90612818565b8015610bab5780601f10610b8057610100808354040283529160200191610bab565b820191906000526020600020905b815481529060010190602001808311610b8e57829003601f168201915b5050505050905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bdf816114ad565b81600760146101000a81548160ff0219169083151502179055505050565b6000801b81565b600080610c0f610f8b565b90506000610c1d8286610e63565b905083811015610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061255e565b60405180910390fd5b610c6f8286868403610f93565b60019250505092915050565b600080610c86610f8b565b905060011515600760149054906101000a900460ff161515148015610cb4575069043c33c193756480000083115b15610d99576000690878678326eac9000000841115610d2a576910f0cf064dd592000000841115610d0e57610d076103e8610cf9600f876111ea90919063ffffffff16565b61120090919063ffffffff16565b9050610d25565b610d2260648561120090919063ffffffff16565b90505b610d55565b610d526103e8610d446005876111ea90919063ffffffff16565b61120090919063ffffffff16565b90505b610d8282600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611216565b610d95818561149790919063ffffffff16565b9350505b610da4818585611216565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dd9816114ad565b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e4b82610858565b610e54816114ad565b610e5e83836115a2565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760149054906101000a900460ff1681565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061253e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a9061247e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161115191906125be565b60405180910390a3505050565b600061116a8484610e63565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111e457818110156111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061249e565b60405180910390fd5b6111e38484848403610f93565b5b50505050565b600081836111f891906126a2565b905092915050565b6000818361120e9190612671565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d9061251e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed9061241e565b60405180910390fd5b611301838383611a81565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e906124be565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a919061261b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161147e91906125be565b60405180910390a3611491848484611a99565b50505050565b600081836114a591906126fc565b905092915050565b6114be816114b9610f8b565b611a9e565b50565b6114cb8282610ab8565b61159e5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611543610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6115ac8282610ab8565b156116805760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611625610f8b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61168c611b3b565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116d0610f8b565b6040516116dd919061238b565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061259e565b60405180910390fd5b61176360008383611a81565b8060026000828254611775919061261b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ca919061261b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161182f91906125be565b60405180910390a361184360008383611a99565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906124fe565b60405180910390fd5b6118c382600083611a81565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119409061245e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119a091906126fc565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a0591906125be565b60405180910390a3611a1983600084611a99565b505050565b611a26611b84565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a6a610f8b565b604051611a77919061238b565b60405180910390a1565b611a89611b84565b611a94838383611bce565b505050565b505050565b611aa88282610ab8565b611b3757611acd8173ffffffffffffffffffffffffffffffffffffffff166014611bd3565b611adb8360001c6020611bd3565b604051602001611aec929190612351565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e91906123dc565b60405180910390fd5b5050565b611b43610a04565b611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061243e565b60405180910390fd5b565b611b8c610a04565b15611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906124de565b60405180910390fd5b565b505050565b606060006002836002611be691906126a2565b611bf0919061261b565b67ffffffffffffffff811115611c0957611c08612906565b5b6040519080825280601f01601f191660200182016040528015611c3b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c7357611c726128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611cd757611cd66128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611d1791906126a2565b611d21919061261b565b90505b6001811115611dc1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d6357611d626128d7565b5b1a60f81b828281518110611d7a57611d796128d7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611dba906127ee565b9050611d24565b5060008414611e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfc906123fe565b60405180910390fd5b8091505092915050565b600081359050611e1e81612d31565b92915050565b600081359050611e3381612d48565b92915050565b600081359050611e4881612d5f565b92915050565b600081359050611e5d81612d76565b92915050565b600081359050611e7281612d8d565b92915050565b600060208284031215611e8e57611e8d612935565b5b6000611e9c84828501611e0f565b91505092915050565b60008060408385031215611ebc57611ebb612935565b5b6000611eca85828601611e0f565b9250506020611edb85828601611e0f565b9150509250929050565b600080600060608486031215611efe57611efd612935565b5b6000611f0c86828701611e0f565b9350506020611f1d86828701611e0f565b9250506040611f2e86828701611e63565b9150509250925092565b60008060408385031215611f4f57611f4e612935565b5b6000611f5d85828601611e0f565b9250506020611f6e85828601611e63565b9150509250929050565b600060208284031215611f8e57611f8d612935565b5b6000611f9c84828501611e24565b91505092915050565b600060208284031215611fbb57611fba612935565b5b6000611fc984828501611e39565b91505092915050565b60008060408385031215611fe957611fe8612935565b5b6000611ff785828601611e39565b925050602061200885828601611e0f565b9150509250929050565b60006020828403121561202857612027612935565b5b600061203684828501611e4e565b91505092915050565b60006020828403121561205557612054612935565b5b600061206384828501611e63565b91505092915050565b61207581612730565b82525050565b61208481612742565b82525050565b6120938161274e565b82525050565b60006120a4826125f4565b6120ae81856125ff565b93506120be8185602086016127bb565b6120c78161293a565b840191505092915050565b60006120dd826125f4565b6120e78185612610565b93506120f78185602086016127bb565b80840191505092915050565b60006121106020836125ff565b915061211b8261294b565b602082019050919050565b60006121336023836125ff565b915061213e82612974565b604082019050919050565b60006121566014836125ff565b9150612161826129c3565b602082019050919050565b60006121796022836125ff565b9150612184826129ec565b604082019050919050565b600061219c6022836125ff565b91506121a782612a3b565b604082019050919050565b60006121bf601d836125ff565b91506121ca82612a8a565b602082019050919050565b60006121e26026836125ff565b91506121ed82612ab3565b604082019050919050565b60006122056010836125ff565b915061221082612b02565b602082019050919050565b60006122286021836125ff565b915061223382612b2b565b604082019050919050565b600061224b6025836125ff565b915061225682612b7a565b604082019050919050565b600061226e6024836125ff565b915061227982612bc9565b604082019050919050565b6000612291601783612610565b915061229c82612c18565b601782019050919050565b60006122b46025836125ff565b91506122bf82612c41565b604082019050919050565b60006122d7601183612610565b91506122e282612c90565b601182019050919050565b60006122fa602f836125ff565b915061230582612cb9565b604082019050919050565b600061231d601f836125ff565b915061232882612d08565b602082019050919050565b61233c816127a4565b82525050565b61234b816127ae565b82525050565b600061235c82612284565b915061236882856120d2565b9150612373826122ca565b915061237f82846120d2565b91508190509392505050565b60006020820190506123a0600083018461206c565b92915050565b60006020820190506123bb600083018461207b565b92915050565b60006020820190506123d6600083018461208a565b92915050565b600060208201905081810360008301526123f68184612099565b905092915050565b6000602082019050818103600083015261241781612103565b9050919050565b6000602082019050818103600083015261243781612126565b9050919050565b6000602082019050818103600083015261245781612149565b9050919050565b600060208201905081810360008301526124778161216c565b9050919050565b600060208201905081810360008301526124978161218f565b9050919050565b600060208201905081810360008301526124b7816121b2565b9050919050565b600060208201905081810360008301526124d7816121d5565b9050919050565b600060208201905081810360008301526124f7816121f8565b9050919050565b600060208201905081810360008301526125178161221b565b9050919050565b600060208201905081810360008301526125378161223e565b9050919050565b6000602082019050818103600083015261255781612261565b9050919050565b60006020820190508181036000830152612577816122a7565b9050919050565b60006020820190508181036000830152612597816122ed565b9050919050565b600060208201905081810360008301526125b781612310565b9050919050565b60006020820190506125d36000830184612333565b92915050565b60006020820190506125ee6000830184612342565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612626826127a4565b9150612631836127a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126665761266561284a565b5b828201905092915050565b600061267c826127a4565b9150612687836127a4565b92508261269757612696612879565b5b828204905092915050565b60006126ad826127a4565b91506126b8836127a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126f1576126f061284a565b5b828202905092915050565b6000612707826127a4565b9150612712836127a4565b9250828210156127255761272461284a565b5b828203905092915050565b600061273b82612784565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156127d95780820151818401526020810190506127be565b838111156127e8576000848401525b50505050565b60006127f9826127a4565b9150600082141561280d5761280c61284a565b5b600182039050919050565b6000600282049050600182168061283057607f821691505b60208210811415612844576128436128a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612d3a81612730565b8114612d4557600080fd5b50565b612d5181612742565b8114612d5c57600080fd5b50565b612d688161274e565b8114612d7357600080fd5b50565b612d7f81612758565b8114612d8a57600080fd5b50565b612d96816127a4565b8114612da157600080fd5b5056fea2646970667358221220d4a98b1763f8f9be39834eac94b76e8b474ce1bc1335136ddad17d50071ba0d564736f6c63430008070033
Deployed Bytecode Sourcemap
44318:3740:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18028:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32125:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34476:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33245:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47263:792;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19864:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20305:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44566:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33087:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21449:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35961:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45670:77;;;:::i;:::-;;45929:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43494:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25383:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33416:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43904:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45534:73;;;:::i;:::-;;18324:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32344:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45357:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17429:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36702:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46531:724;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45113:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44497:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20745:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34005:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44596:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44428:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:204;18113:4;18152:32;18137:47;;;:11;:47;;;;:87;;;;18188:36;18212:11;18188:23;:36::i;:::-;18137:87;18130:94;;18028:204;;;:::o;32125:100::-;32179:13;32212:5;32205:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32125:100;:::o;34476:201::-;34559:4;34576:13;34592:12;:10;:12::i;:::-;34576:28;;34615:32;34624:5;34631:7;34640:6;34615:8;:32::i;:::-;34665:4;34658:11;;;34476:201;;;;:::o;33245:108::-;33306:7;33333:12;;33326:19;;33245:108;:::o;47263:792::-;47386:4;47403:15;47421:12;:10;:12::i;:::-;47403:30;;47444:38;47460:4;47466:7;47475:6;47444:15;:38::i;:::-;47512:4;47499:17;;:9;;;;;;;;;;;:17;;;:44;;;;;47529:14;47520:6;:23;47499:44;47495:491;;;47560:11;47599:14;47590:6;:23;47586:305;;;47647:14;47638:6;:23;47634:172;;;47692:24;47711:4;47692:14;47703:2;47692:6;:10;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;47686:30;;47634:172;;;47771:15;47782:3;47771:6;:10;;:15;;;;:::i;:::-;47765:21;;47634:172;47586:305;;;47852:23;47870:4;47852:13;47863:1;47852:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;47846:29;;47586:305;47905:30;47915:4;47921:8;;;;;;;;;;;47931:3;47905:9;:30::i;:::-;47959:15;47970:3;47959:6;:10;;:15;;;;:::i;:::-;47950:24;;47545:441;47495:491;47996:27;48006:4;48012:2;48016:6;47996:9;:27::i;:::-;48043:4;48036:11;;;47263:792;;;;;:::o;19864:131::-;19938:7;19965:6;:12;19972:4;19965:12;;;;;;;;;;;:22;;;19958:29;;19864:131;;;:::o;20305:147::-;20388:18;20401:4;20388:12;:18::i;:::-;17920:16;17931:4;17920:10;:16::i;:::-;20419:25:::1;20430:4;20436:7;20419:10;:25::i;:::-;20305:147:::0;;;:::o;44566:23::-;;;;;;;;;;;;;:::o;33087:93::-;33145:5;33170:2;33163:9;;33087:93;:::o;21449:218::-;21556:12;:10;:12::i;:::-;21545:23;;:7;:23;;;21537:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21633:26;21645:4;21651:7;21633:11;:26::i;:::-;21449:218;;:::o;35961:238::-;36049:4;36066:13;36082:12;:10;:12::i;:::-;36066:28;;36105:64;36114:5;36121:7;36158:10;36130:25;36140:5;36147:7;36130:9;:25::i;:::-;:38;;;;:::i;:::-;36105:8;:64::i;:::-;36187:4;36180:11;;;35961:238;;;;:::o;45670:77::-;44466:24;17920:16;17931:4;17920:10;:16::i;:::-;45729:10:::1;:8;:10::i;:::-;45670:77:::0;:::o;45929:107::-;44535:24;17920:16;17931:4;17920:10;:16::i;:::-;46011:17:::1;46017:2;46021:6;46011:5;:17::i;:::-;45929:107:::0;;;:::o;43494:91::-;43550:27;43556:12;:10;:12::i;:::-;43570:6;43550:5;:27::i;:::-;43494:91;:::o;25383:86::-;25430:4;25454:7;;;;;;;;;;;25447:14;;25383:86;:::o;33416:127::-;33490:7;33517:9;:18;33527:7;33517:18;;;;;;;;;;;;;;;;33510:25;;33416:127;;;:::o;43904:164::-;43981:46;43997:7;44006:12;:10;:12::i;:::-;44020:6;43981:15;:46::i;:::-;44038:22;44044:7;44053:6;44038:5;:22::i;:::-;43904:164;;:::o;45534:73::-;44466:24;17920:16;17931:4;17920:10;:16::i;:::-;45591:8:::1;:6;:8::i;:::-;45534:73:::0;:::o;18324:147::-;18410:4;18434:6;:12;18441:4;18434:12;;;;;;;;;;;:20;;:29;18455:7;18434:29;;;;;;;;;;;;;;;;;;;;;;;;;18427:36;;18324:147;;;;:::o;32344:104::-;32400:13;32433:7;32426:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32344:104;:::o;45357:105::-;44535:24;17920:16;17931:4;17920:10;:16::i;:::-;45448:6:::1;45436:9;;:18;;;;;;;;;;;;;;;;;;45357:105:::0;;:::o;17429:49::-;17474:4;17429:49;;;:::o;36702:436::-;36795:4;36812:13;36828:12;:10;:12::i;:::-;36812:28;;36851:24;36878:25;36888:5;36895:7;36878:9;:25::i;:::-;36851:52;;36942:15;36922:16;:35;;36914:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37035:60;37044:5;37051:7;37079:15;37060:16;:34;37035:8;:60::i;:::-;37126:4;37119:11;;;;36702:436;;;;:::o;46531:724::-;46629:4;46651:13;46667:12;:10;:12::i;:::-;46651:28;;46710:4;46697:17;;:9;;;;;;;;;;;:17;;;:44;;;;;46727:14;46718:6;:23;46697:44;46692:493;;;46758:11;46797:14;46788:6;:23;46784:305;;;46845:14;46836:6;:23;46832:172;;;46890:24;46909:4;46890:14;46901:2;46890:6;:10;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;46884:30;;46832:172;;;46969:15;46980:3;46969:6;:10;;:15;;;;:::i;:::-;46963:21;;46832:172;46784:305;;;47050:23;47068:4;47050:13;47061:1;47050:6;:10;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;47044:29;;46784:305;47103:31;47113:5;47120:8;;;;;;;;;;;47130:3;47103:9;:31::i;:::-;47158:15;47169:3;47158:6;:10;;:15;;;;:::i;:::-;47149:24;;46743:442;46692:493;47197:28;47207:5;47214:2;47218:6;47197:9;:28::i;:::-;47243:4;47236:11;;;46531:724;;;;:::o;45113:118::-;44535:24;17920:16;17931:4;17920:10;:16::i;:::-;45211:12:::1;45200:8;;:23;;;;;;;;;;;;;;;;;;45113:118:::0;;:::o;44497:62::-;44535:24;44497:62;:::o;20745:149::-;20829:18;20842:4;20829:12;:18::i;:::-;17920:16;17931:4;17920:10;:16::i;:::-;20860:26:::1;20872:4;20878:7;20860:11;:26::i;:::-;20745:149:::0;;;:::o;34005:151::-;34094:7;34121:11;:18;34133:5;34121:18;;;;;;;;;;;;;;;:27;34140:7;34121:27;;;;;;;;;;;;;;;;34114:34;;34005:151;;;;:::o;44596:28::-;;;;;;;;;;;;;:::o;44428:62::-;44466:24;44428:62;:::o;8856:157::-;8941:4;8980:25;8965:40;;;:11;:40;;;;8958:47;;8856:157;;;:::o;15237:98::-;15290:7;15317:10;15310:17;;15237:98;:::o;40327:380::-;40480:1;40463:19;;:5;:19;;;;40455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40561:1;40542:21;;:7;:21;;;;40534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40645:6;40615:11;:18;40627:5;40615:18;;;;;;;;;;;;;;;:27;40634:7;40615:27;;;;;;;;;;;;;;;:36;;;;40683:7;40667:32;;40676:5;40667:32;;;40692:6;40667:32;;;;;;:::i;:::-;;;;;;;;40327:380;;;:::o;40998:453::-;41133:24;41160:25;41170:5;41177:7;41160:9;:25::i;:::-;41133:52;;41220:17;41200:16;:37;41196:248;;41282:6;41262:16;:26;;41254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41366:51;41375:5;41382:7;41410:6;41391:16;:25;41366:8;:51::i;:::-;41196:248;41122:329;40998:453;;;:::o;3647:98::-;3705:7;3736:1;3732;:5;;;;:::i;:::-;3725:12;;3647:98;;;;:::o;4046:::-;4104:7;4135:1;4131;:5;;;;:::i;:::-;4124:12;;4046:98;;;;:::o;37608:671::-;37755:1;37739:18;;:4;:18;;;;37731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37832:1;37818:16;;:2;:16;;;;37810:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:38;37908:4;37914:2;37918:6;37887:20;:38::i;:::-;37938:19;37960:9;:15;37970:4;37960:15;;;;;;;;;;;;;;;;37938:37;;38009:6;37994:11;:21;;37986:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38126:6;38112:11;:20;38094:9;:15;38104:4;38094:15;;;;;;;;;;;;;;;:38;;;;38171:6;38154:9;:13;38164:2;38154:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;38210:2;38195:26;;38204:4;38195:26;;;38214:6;38195:26;;;;;;:::i;:::-;;;;;;;;38234:37;38254:4;38260:2;38264:6;38234:19;:37::i;:::-;37720:559;37608:671;;;:::o;3290:98::-;3348:7;3379:1;3375;:5;;;;:::i;:::-;3368:12;;3290:98;;;;:::o;18775:105::-;18842:30;18853:4;18859:12;:10;:12::i;:::-;18842:10;:30::i;:::-;18775:105;:::o;23046:238::-;23130:22;23138:4;23144:7;23130;:22::i;:::-;23125:152;;23201:4;23169:6;:12;23176:4;23169:12;;;;;;;;;;;:20;;:29;23190:7;23169:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23252:12;:10;:12::i;:::-;23225:40;;23243:7;23225:40;;23237:4;23225:40;;;;;;;;;;23125:152;23046:238;;:::o;23464:239::-;23548:22;23556:4;23562:7;23548;:22::i;:::-;23544:152;;;23619:5;23587:6;:12;23594:4;23587:12;;;;;;;;;;;:20;;:29;23608:7;23587:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23671:12;:10;:12::i;:::-;23644:40;;23662:7;23644:40;;23656:4;23644:40;;;;;;;;;;23544:152;23464:239;;:::o;26238:120::-;25247:16;:14;:16::i;:::-;26307:5:::1;26297:7;;:15;;;;;;;;;;;;;;;;;;26328:22;26337:12;:10;:12::i;:::-;26328:22;;;;;;:::i;:::-;;;;;;;;26238:120::o:0;38566:399::-;38669:1;38650:21;;:7;:21;;;;38642:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38720:49;38749:1;38753:7;38762:6;38720:20;:49::i;:::-;38798:6;38782:12;;:22;;;;;;;:::i;:::-;;;;;;;;38837:6;38815:9;:18;38825:7;38815:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;38880:7;38859:37;;38876:1;38859:37;;;38889:6;38859:37;;;;;;:::i;:::-;;;;;;;;38909:48;38937:1;38941:7;38950:6;38909:19;:48::i;:::-;38566:399;;:::o;39298:591::-;39401:1;39382:21;;:7;:21;;;;39374:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39454:49;39475:7;39492:1;39496:6;39454:20;:49::i;:::-;39516:22;39541:9;:18;39551:7;39541:18;;;;;;;;;;;;;;;;39516:43;;39596:6;39578:14;:24;;39570:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39715:6;39698:14;:23;39677:9;:18;39687:7;39677:18;;;;;;;;;;;;;;;:44;;;;39759:6;39743:12;;:22;;;;;;;:::i;:::-;;;;;;;;39809:1;39783:37;;39792:7;39783:37;;;39813:6;39783:37;;;;;;:::i;:::-;;;;;;;;39833:48;39853:7;39870:1;39874:6;39833:19;:48::i;:::-;39363:526;39298:591;;:::o;25979:118::-;24988:19;:17;:19::i;:::-;26049:4:::1;26039:7;;:14;;;;;;;;;;;;;;;;;;26069:20;26076:12;:10;:12::i;:::-;26069:20;;;;;;:::i;:::-;;;;;;;;25979:118::o:0;46322:201::-;24988:19;:17;:19::i;:::-;46471:44:::1;46498:4;46504:2;46508:6;46471:26;:44::i;:::-;46322:201:::0;;;:::o;42780:124::-;;;;:::o;19170:505::-;19259:22;19267:4;19273:7;19259;:22::i;:::-;19254:414;;19447:41;19475:7;19447:41;;19485:2;19447:19;:41::i;:::-;19561:38;19589:4;19581:13;;19596:2;19561:19;:38::i;:::-;19352:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19298:358;;;;;;;;;;;:::i;:::-;;;;;;;;19254:414;19170:505;;:::o;25727:108::-;25794:8;:6;:8::i;:::-;25786:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25727:108::o;25542:::-;25613:8;:6;:8::i;:::-;25612:9;25604:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25542:108::o;42051:125::-;;;;:::o;10751:451::-;10826:13;10852:19;10897:1;10888:6;10884:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;10874:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10852:47;;10910:15;:6;10917:1;10910:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;10936;:6;10943:1;10936:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;10967:9;10992:1;10983:6;10979:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;10967:26;;10962:135;10999:1;10995;:5;10962:135;;;11034:12;11055:3;11047:5;:11;11034:25;;;;;;;:::i;:::-;;;;;11022:6;11029:1;11022:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;11084:1;11074:11;;;;;11002:3;;;;:::i;:::-;;;10962:135;;;;11124:1;11115:5;:10;11107:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11187:6;11173:21;;;10751:451;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:137::-;481:5;519:6;506:20;497:29;;535:32;561:5;535:32;:::i;:::-;436:137;;;;:::o;579:139::-;625:5;663:6;650:20;641:29;;679:33;706:5;679:33;:::i;:::-;579:139;;;;:::o;724:329::-;783:6;832:2;820:9;811:7;807:23;803:32;800:119;;;838:79;;:::i;:::-;800:119;958:1;983:53;1028:7;1019:6;1008:9;1004:22;983:53;:::i;:::-;973:63;;929:117;724:329;;;;:::o;1059:474::-;1127:6;1135;1184:2;1172:9;1163:7;1159:23;1155:32;1152:119;;;1190:79;;:::i;:::-;1152:119;1310:1;1335:53;1380:7;1371:6;1360:9;1356:22;1335:53;:::i;:::-;1325:63;;1281:117;1437:2;1463:53;1508:7;1499:6;1488:9;1484:22;1463:53;:::i;:::-;1453:63;;1408:118;1059:474;;;;;:::o;1539:619::-;1616:6;1624;1632;1681:2;1669:9;1660:7;1656:23;1652:32;1649:119;;;1687:79;;:::i;:::-;1649:119;1807:1;1832:53;1877:7;1868:6;1857:9;1853:22;1832:53;:::i;:::-;1822:63;;1778:117;1934:2;1960:53;2005:7;1996:6;1985:9;1981:22;1960:53;:::i;:::-;1950:63;;1905:118;2062:2;2088:53;2133:7;2124:6;2113:9;2109:22;2088:53;:::i;:::-;2078:63;;2033:118;1539:619;;;;;:::o;2164:474::-;2232:6;2240;2289:2;2277:9;2268:7;2264:23;2260:32;2257:119;;;2295:79;;:::i;:::-;2257:119;2415:1;2440:53;2485:7;2476:6;2465:9;2461:22;2440:53;:::i;:::-;2430:63;;2386:117;2542:2;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2513:118;2164:474;;;;;:::o;2644:323::-;2700:6;2749:2;2737:9;2728:7;2724:23;2720:32;2717:119;;;2755:79;;:::i;:::-;2717:119;2875:1;2900:50;2942:7;2933:6;2922:9;2918:22;2900:50;:::i;:::-;2890:60;;2846:114;2644:323;;;;:::o;2973:329::-;3032:6;3081:2;3069:9;3060:7;3056:23;3052:32;3049:119;;;3087:79;;:::i;:::-;3049:119;3207:1;3232:53;3277:7;3268:6;3257:9;3253:22;3232:53;:::i;:::-;3222:63;;3178:117;2973:329;;;;:::o;3308:474::-;3376:6;3384;3433:2;3421:9;3412:7;3408:23;3404:32;3401:119;;;3439:79;;:::i;:::-;3401:119;3559:1;3584:53;3629:7;3620:6;3609:9;3605:22;3584:53;:::i;:::-;3574:63;;3530:117;3686:2;3712:53;3757:7;3748:6;3737:9;3733:22;3712:53;:::i;:::-;3702:63;;3657:118;3308:474;;;;;:::o;3788:327::-;3846:6;3895:2;3883:9;3874:7;3870:23;3866:32;3863:119;;;3901:79;;:::i;:::-;3863:119;4021:1;4046:52;4090:7;4081:6;4070:9;4066:22;4046:52;:::i;:::-;4036:62;;3992:116;3788:327;;;;:::o;4121:329::-;4180:6;4229:2;4217:9;4208:7;4204:23;4200:32;4197:119;;;4235:79;;:::i;:::-;4197:119;4355:1;4380:53;4425:7;4416:6;4405:9;4401:22;4380:53;:::i;:::-;4370:63;;4326:117;4121:329;;;;:::o;4456:118::-;4543:24;4561:5;4543:24;:::i;:::-;4538:3;4531:37;4456:118;;:::o;4580:109::-;4661:21;4676:5;4661:21;:::i;:::-;4656:3;4649:34;4580:109;;:::o;4695:118::-;4782:24;4800:5;4782:24;:::i;:::-;4777:3;4770:37;4695:118;;:::o;4819:364::-;4907:3;4935:39;4968:5;4935:39;:::i;:::-;4990:71;5054:6;5049:3;4990:71;:::i;:::-;4983:78;;5070:52;5115:6;5110:3;5103:4;5096:5;5092:16;5070:52;:::i;:::-;5147:29;5169:6;5147:29;:::i;:::-;5142:3;5138:39;5131:46;;4911:272;4819:364;;;;:::o;5189:377::-;5295:3;5323:39;5356:5;5323:39;:::i;:::-;5378:89;5460:6;5455:3;5378:89;:::i;:::-;5371:96;;5476:52;5521:6;5516:3;5509:4;5502:5;5498:16;5476:52;:::i;:::-;5553:6;5548:3;5544:16;5537:23;;5299:267;5189:377;;;;:::o;5572:366::-;5714:3;5735:67;5799:2;5794:3;5735:67;:::i;:::-;5728:74;;5811:93;5900:3;5811:93;:::i;:::-;5929:2;5924:3;5920:12;5913:19;;5572:366;;;:::o;5944:::-;6086:3;6107:67;6171:2;6166:3;6107:67;:::i;:::-;6100:74;;6183:93;6272:3;6183:93;:::i;:::-;6301:2;6296:3;6292:12;6285:19;;5944:366;;;:::o;6316:::-;6458:3;6479:67;6543:2;6538:3;6479:67;:::i;:::-;6472:74;;6555:93;6644:3;6555:93;:::i;:::-;6673:2;6668:3;6664:12;6657:19;;6316:366;;;:::o;6688:::-;6830:3;6851:67;6915:2;6910:3;6851:67;:::i;:::-;6844:74;;6927:93;7016:3;6927:93;:::i;:::-;7045:2;7040:3;7036:12;7029:19;;6688:366;;;:::o;7060:::-;7202:3;7223:67;7287:2;7282:3;7223:67;:::i;:::-;7216:74;;7299:93;7388:3;7299:93;:::i;:::-;7417:2;7412:3;7408:12;7401:19;;7060:366;;;:::o;7432:::-;7574:3;7595:67;7659:2;7654:3;7595:67;:::i;:::-;7588:74;;7671:93;7760:3;7671:93;:::i;:::-;7789:2;7784:3;7780:12;7773:19;;7432:366;;;:::o;7804:::-;7946:3;7967:67;8031:2;8026:3;7967:67;:::i;:::-;7960:74;;8043:93;8132:3;8043:93;:::i;:::-;8161:2;8156:3;8152:12;8145:19;;7804:366;;;:::o;8176:::-;8318:3;8339:67;8403:2;8398:3;8339:67;:::i;:::-;8332:74;;8415:93;8504:3;8415:93;:::i;:::-;8533:2;8528:3;8524:12;8517:19;;8176:366;;;:::o;8548:::-;8690:3;8711:67;8775:2;8770:3;8711:67;:::i;:::-;8704:74;;8787:93;8876:3;8787:93;:::i;:::-;8905:2;8900:3;8896:12;8889:19;;8548:366;;;:::o;8920:::-;9062:3;9083:67;9147:2;9142:3;9083:67;:::i;:::-;9076:74;;9159:93;9248:3;9159:93;:::i;:::-;9277:2;9272:3;9268:12;9261:19;;8920:366;;;:::o;9292:::-;9434:3;9455:67;9519:2;9514:3;9455:67;:::i;:::-;9448:74;;9531:93;9620:3;9531:93;:::i;:::-;9649:2;9644:3;9640:12;9633:19;;9292:366;;;:::o;9664:402::-;9824:3;9845:85;9927:2;9922:3;9845:85;:::i;:::-;9838:92;;9939:93;10028:3;9939:93;:::i;:::-;10057:2;10052:3;10048:12;10041:19;;9664:402;;;:::o;10072:366::-;10214:3;10235:67;10299:2;10294:3;10235:67;:::i;:::-;10228:74;;10311:93;10400:3;10311:93;:::i;:::-;10429:2;10424:3;10420:12;10413:19;;10072:366;;;:::o;10444:402::-;10604:3;10625:85;10707:2;10702:3;10625:85;:::i;:::-;10618:92;;10719:93;10808:3;10719:93;:::i;:::-;10837:2;10832:3;10828:12;10821:19;;10444:402;;;:::o;10852:366::-;10994:3;11015:67;11079:2;11074:3;11015:67;:::i;:::-;11008:74;;11091:93;11180:3;11091:93;:::i;:::-;11209:2;11204:3;11200:12;11193:19;;10852:366;;;:::o;11224:::-;11366:3;11387:67;11451:2;11446:3;11387:67;:::i;:::-;11380:74;;11463:93;11552:3;11463:93;:::i;:::-;11581:2;11576:3;11572:12;11565:19;;11224:366;;;:::o;11596:118::-;11683:24;11701:5;11683:24;:::i;:::-;11678:3;11671:37;11596:118;;:::o;11720:112::-;11803:22;11819:5;11803:22;:::i;:::-;11798:3;11791:35;11720:112;;:::o;11838:967::-;12220:3;12242:148;12386:3;12242:148;:::i;:::-;12235:155;;12407:95;12498:3;12489:6;12407:95;:::i;:::-;12400:102;;12519:148;12663:3;12519:148;:::i;:::-;12512:155;;12684:95;12775:3;12766:6;12684:95;:::i;:::-;12677:102;;12796:3;12789:10;;11838:967;;;;;:::o;12811:222::-;12904:4;12942:2;12931:9;12927:18;12919:26;;12955:71;13023:1;13012:9;13008:17;12999:6;12955:71;:::i;:::-;12811:222;;;;:::o;13039:210::-;13126:4;13164:2;13153:9;13149:18;13141:26;;13177:65;13239:1;13228:9;13224:17;13215:6;13177:65;:::i;:::-;13039:210;;;;:::o;13255:222::-;13348:4;13386:2;13375:9;13371:18;13363:26;;13399:71;13467:1;13456:9;13452:17;13443:6;13399:71;:::i;:::-;13255:222;;;;:::o;13483:313::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:78;13784:4;13775:6;13711:78;:::i;:::-;13703:86;;13483:313;;;;:::o;13802:419::-;13968:4;14006:2;13995:9;13991:18;13983:26;;14055:9;14049:4;14045:20;14041:1;14030:9;14026:17;14019:47;14083:131;14209:4;14083:131;:::i;:::-;14075:139;;13802:419;;;:::o;14227:::-;14393:4;14431:2;14420:9;14416:18;14408:26;;14480:9;14474:4;14470:20;14466:1;14455:9;14451:17;14444:47;14508:131;14634:4;14508:131;:::i;:::-;14500:139;;14227:419;;;:::o;14652:::-;14818:4;14856:2;14845:9;14841:18;14833:26;;14905:9;14899:4;14895:20;14891:1;14880:9;14876:17;14869:47;14933:131;15059:4;14933:131;:::i;:::-;14925:139;;14652:419;;;:::o;15077:::-;15243:4;15281:2;15270:9;15266:18;15258:26;;15330:9;15324:4;15320:20;15316:1;15305:9;15301:17;15294:47;15358:131;15484:4;15358:131;:::i;:::-;15350:139;;15077:419;;;:::o;15502:::-;15668:4;15706:2;15695:9;15691:18;15683:26;;15755:9;15749:4;15745:20;15741:1;15730:9;15726:17;15719:47;15783:131;15909:4;15783:131;:::i;:::-;15775:139;;15502:419;;;:::o;15927:::-;16093:4;16131:2;16120:9;16116:18;16108:26;;16180:9;16174:4;16170:20;16166:1;16155:9;16151:17;16144:47;16208:131;16334:4;16208:131;:::i;:::-;16200:139;;15927:419;;;:::o;16352:::-;16518:4;16556:2;16545:9;16541:18;16533:26;;16605:9;16599:4;16595:20;16591:1;16580:9;16576:17;16569:47;16633:131;16759:4;16633:131;:::i;:::-;16625:139;;16352:419;;;:::o;16777:::-;16943:4;16981:2;16970:9;16966:18;16958:26;;17030:9;17024:4;17020:20;17016:1;17005:9;17001:17;16994:47;17058:131;17184:4;17058:131;:::i;:::-;17050:139;;16777:419;;;:::o;17202:::-;17368:4;17406:2;17395:9;17391:18;17383:26;;17455:9;17449:4;17445:20;17441:1;17430:9;17426:17;17419:47;17483:131;17609:4;17483:131;:::i;:::-;17475:139;;17202:419;;;:::o;17627:::-;17793:4;17831:2;17820:9;17816:18;17808:26;;17880:9;17874:4;17870:20;17866:1;17855:9;17851:17;17844:47;17908:131;18034:4;17908:131;:::i;:::-;17900:139;;17627:419;;;:::o;18052:::-;18218:4;18256:2;18245:9;18241:18;18233:26;;18305:9;18299:4;18295:20;18291:1;18280:9;18276:17;18269:47;18333:131;18459:4;18333:131;:::i;:::-;18325:139;;18052:419;;;:::o;18477:::-;18643:4;18681:2;18670:9;18666:18;18658:26;;18730:9;18724:4;18720:20;18716:1;18705:9;18701:17;18694:47;18758:131;18884:4;18758:131;:::i;:::-;18750:139;;18477:419;;;:::o;18902:::-;19068:4;19106:2;19095:9;19091:18;19083:26;;19155:9;19149:4;19145:20;19141:1;19130:9;19126:17;19119:47;19183:131;19309:4;19183:131;:::i;:::-;19175:139;;18902:419;;;:::o;19327:::-;19493:4;19531:2;19520:9;19516:18;19508:26;;19580:9;19574:4;19570:20;19566:1;19555:9;19551:17;19544:47;19608:131;19734:4;19608:131;:::i;:::-;19600:139;;19327:419;;;:::o;19752:222::-;19845:4;19883:2;19872:9;19868:18;19860:26;;19896:71;19964:1;19953:9;19949:17;19940:6;19896:71;:::i;:::-;19752:222;;;;:::o;19980:214::-;20069:4;20107:2;20096:9;20092:18;20084:26;;20120:67;20184:1;20173:9;20169:17;20160:6;20120:67;:::i;:::-;19980:214;;;;:::o;20281:99::-;20333:6;20367:5;20361:12;20351:22;;20281:99;;;:::o;20386:169::-;20470:11;20504:6;20499:3;20492:19;20544:4;20539:3;20535:14;20520:29;;20386:169;;;;:::o;20561:148::-;20663:11;20700:3;20685:18;;20561:148;;;;:::o;20715:305::-;20755:3;20774:20;20792:1;20774:20;:::i;:::-;20769:25;;20808:20;20826:1;20808:20;:::i;:::-;20803:25;;20962:1;20894:66;20890:74;20887:1;20884:81;20881:107;;;20968:18;;:::i;:::-;20881:107;21012:1;21009;21005:9;20998:16;;20715:305;;;;:::o;21026:185::-;21066:1;21083:20;21101:1;21083:20;:::i;:::-;21078:25;;21117:20;21135:1;21117:20;:::i;:::-;21112:25;;21156:1;21146:35;;21161:18;;:::i;:::-;21146:35;21203:1;21200;21196:9;21191:14;;21026:185;;;;:::o;21217:348::-;21257:7;21280:20;21298:1;21280:20;:::i;:::-;21275:25;;21314:20;21332:1;21314:20;:::i;:::-;21309:25;;21502:1;21434:66;21430:74;21427:1;21424:81;21419:1;21412:9;21405:17;21401:105;21398:131;;;21509:18;;:::i;:::-;21398:131;21557:1;21554;21550:9;21539:20;;21217:348;;;;:::o;21571:191::-;21611:4;21631:20;21649:1;21631:20;:::i;:::-;21626:25;;21665:20;21683:1;21665:20;:::i;:::-;21660:25;;21704:1;21701;21698:8;21695:34;;;21709:18;;:::i;:::-;21695:34;21754:1;21751;21747:9;21739:17;;21571:191;;;;:::o;21768:96::-;21805:7;21834:24;21852:5;21834:24;:::i;:::-;21823:35;;21768:96;;;:::o;21870:90::-;21904:7;21947:5;21940:13;21933:21;21922:32;;21870:90;;;:::o;21966:77::-;22003:7;22032:5;22021:16;;21966:77;;;:::o;22049:149::-;22085:7;22125:66;22118:5;22114:78;22103:89;;22049:149;;;:::o;22204:126::-;22241:7;22281:42;22274:5;22270:54;22259:65;;22204:126;;;:::o;22336:77::-;22373:7;22402:5;22391:16;;22336:77;;;:::o;22419:86::-;22454:7;22494:4;22487:5;22483:16;22472:27;;22419:86;;;:::o;22511:307::-;22579:1;22589:113;22603:6;22600:1;22597:13;22589:113;;;22688:1;22683:3;22679:11;22673:18;22669:1;22664:3;22660:11;22653:39;22625:2;22622:1;22618:10;22613:15;;22589:113;;;22720:6;22717:1;22714:13;22711:101;;;22800:1;22791:6;22786:3;22782:16;22775:27;22711:101;22560:258;22511:307;;;:::o;22824:171::-;22863:3;22886:24;22904:5;22886:24;:::i;:::-;22877:33;;22932:4;22925:5;22922:15;22919:41;;;22940:18;;:::i;:::-;22919:41;22987:1;22980:5;22976:13;22969:20;;22824:171;;;:::o;23001:320::-;23045:6;23082:1;23076:4;23072:12;23062:22;;23129:1;23123:4;23119:12;23150:18;23140:81;;23206:4;23198:6;23194:17;23184:27;;23140:81;23268:2;23260:6;23257:14;23237:18;23234:38;23231:84;;;23287:18;;:::i;:::-;23231:84;23052:269;23001:320;;;:::o;23327:180::-;23375:77;23372:1;23365:88;23472:4;23469:1;23462:15;23496:4;23493:1;23486:15;23513:180;23561:77;23558:1;23551:88;23658:4;23655:1;23648:15;23682:4;23679:1;23672:15;23699:180;23747:77;23744:1;23737:88;23844:4;23841:1;23834:15;23868:4;23865:1;23858:15;23885:180;23933:77;23930:1;23923:88;24030:4;24027:1;24020:15;24054:4;24051:1;24044:15;24071:180;24119:77;24116:1;24109:88;24216:4;24213:1;24206:15;24240:4;24237:1;24230:15;24380:117;24489:1;24486;24479:12;24503:102;24544:6;24595:2;24591:7;24586:2;24579:5;24575:14;24571:28;24561:38;;24503:102;;;:::o;24611:182::-;24751:34;24747:1;24739:6;24735:14;24728:58;24611:182;:::o;24799:222::-;24939:34;24935:1;24927:6;24923:14;24916:58;25008:5;25003:2;24995:6;24991:15;24984:30;24799:222;:::o;25027:170::-;25167:22;25163:1;25155:6;25151:14;25144:46;25027:170;:::o;25203:221::-;25343:34;25339:1;25331:6;25327:14;25320:58;25412:4;25407:2;25399:6;25395:15;25388:29;25203:221;:::o;25430:::-;25570:34;25566:1;25558:6;25554:14;25547:58;25639:4;25634:2;25626:6;25622:15;25615:29;25430:221;:::o;25657:179::-;25797:31;25793:1;25785:6;25781:14;25774:55;25657:179;:::o;25842:225::-;25982:34;25978:1;25970:6;25966:14;25959:58;26051:8;26046:2;26038:6;26034:15;26027:33;25842:225;:::o;26073:166::-;26213:18;26209:1;26201:6;26197:14;26190:42;26073:166;:::o;26245:220::-;26385:34;26381:1;26373:6;26369:14;26362:58;26454:3;26449:2;26441:6;26437:15;26430:28;26245:220;:::o;26471:224::-;26611:34;26607:1;26599:6;26595:14;26588:58;26680:7;26675:2;26667:6;26663:15;26656:32;26471:224;:::o;26701:223::-;26841:34;26837:1;26829:6;26825:14;26818:58;26910:6;26905:2;26897:6;26893:15;26886:31;26701:223;:::o;26930:173::-;27070:25;27066:1;27058:6;27054:14;27047:49;26930:173;:::o;27109:224::-;27249:34;27245:1;27237:6;27233:14;27226:58;27318:7;27313:2;27305:6;27301:15;27294:32;27109:224;:::o;27339:167::-;27479:19;27475:1;27467:6;27463:14;27456:43;27339:167;:::o;27512:234::-;27652:34;27648:1;27640:6;27636:14;27629:58;27721:17;27716:2;27708:6;27704:15;27697:42;27512:234;:::o;27752:181::-;27892:33;27888:1;27880:6;27876:14;27869:57;27752:181;:::o;27939:122::-;28012:24;28030:5;28012:24;:::i;:::-;28005:5;28002:35;27992:63;;28051:1;28048;28041:12;27992:63;27939:122;:::o;28067:116::-;28137:21;28152:5;28137:21;:::i;:::-;28130:5;28127:32;28117:60;;28173:1;28170;28163:12;28117:60;28067:116;:::o;28189:122::-;28262:24;28280:5;28262:24;:::i;:::-;28255:5;28252:35;28242:63;;28301:1;28298;28291:12;28242:63;28189:122;:::o;28317:120::-;28389:23;28406:5;28389:23;:::i;:::-;28382:5;28379:34;28369:62;;28427:1;28424;28417:12;28369:62;28317:120;:::o;28443:122::-;28516:24;28534:5;28516:24;:::i;:::-;28509:5;28506:35;28496:63;;28555:1;28552;28545:12;28496:63;28443:122;:::o
Swarm Source
ipfs://d4a98b1763f8f9be39834eac94b76e8b474ce1bc1335136ddad17d50071ba0d5
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.