ERC-721
NFT
Overview
Max Total Supply
7,777 RRIC
Holders
418
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 RRICLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RinkRatIceClub
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-21 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // 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/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // 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/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (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 Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.6.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. */ 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. */ 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`. */ 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. * * [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. */ 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. */ 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/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` 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 tokenId ) 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. * - `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 tokenId ) internal virtual {} } // File: contracts/RRIC.sol pragma solidity ^0.8.4; /// @custom:security-contact [email protected] contract RinkRatIceClub is ERC721, Pausable, AccessControl { using Counters for Counters.Counter; bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant WHITELIST_ROLE = keccak256("WHITELIST_ROLE"); bytes32 public constant GIVEAWAY_ROLE = keccak256("GIVEAWAY_ROLE"); bytes32 public constant WITHDRAW_ROLE = keccak256("WITHDRAW_ROLE"); mapping(address => uint256) private _whitelistMintCount; uint public whitelistSaleTimestamp = 1655818200; uint public publicSaleTimestamp = 1655991000; uint public mintPrice = 0.12 ether; uint public maxItems = 7777; uint public maxItemsPerWhitelistWallet = 1000; uint public maxItemsPerPublicMint = 200; bool public mintPaused = false; string public baseTokenURI = ""; Counters.Counter private _tokenIdCounter; event Mint(address indexed owner, uint indexed tokenId); constructor() ERC721("Rink Rat Ice Club", "RRIC") { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(PAUSER_ROLE, msg.sender); _grantRole(GIVEAWAY_ROLE, msg.sender); _grantRole(WITHDRAW_ROLE, msg.sender); } receive() external payable {} function pause() public onlyRole(PAUSER_ROLE) { _pause(); } function unpause() public onlyRole(PAUSER_ROLE) { _unpause(); } function publicMintTo(address to) external payable { _publicMint(to); } function publicMint() external payable { _publicMint(msg.sender); } function _publicMint(address to) internal { require(!mintPaused, "publicMint: Paused"); require(block.timestamp >= publicSaleTimestamp, "publicMint: Not open yet"); uint remainder = msg.value % mintPrice; uint amount = msg.value / mintPrice; require(remainder == 0, "publicMint: Send a divisible amount of eth"); require(amount <= maxItemsPerPublicMint, "publicMint: Surpasses maxItemsPerPublicMint"); _mintWithoutValidation(to, amount); } function givewayMint(address to, uint amount) external onlyRole(GIVEAWAY_ROLE) { _mintWithoutValidation(to, amount); } function isWhitelisted(address account) public view returns (bool) { return hasRole(WHITELIST_ROLE, account); } function totalSupply() public view returns (uint) { return _tokenIdCounter.current(); } function whitelistMintTo(address to) external payable onlyRole(WHITELIST_ROLE) { _whitelistMint(to); } function whitelistMint() external payable onlyRole(WHITELIST_ROLE) { _whitelistMint(msg.sender); } function _whitelistMint(address to) internal { require(!mintPaused, "whitelistMint: Paused"); require(block.timestamp >= whitelistSaleTimestamp, "whitelistMint: Not open yet"); uint remainder = msg.value % mintPrice; uint amount = msg.value / mintPrice; require(remainder == 0, "whitelistMint: Send a divisible amount of eth"); require(amount + _whitelistMintCount[to] <= maxItemsPerWhitelistWallet, "whitelistMint: Max whitelist mints from this address reached"); _whitelistMintCount[to] += amount; _mintWithoutValidation(to, amount); } function _mintWithoutValidation(address to, uint amount) internal whenNotPaused { require(_tokenIdCounter.current() + amount <= maxItems, "mintWithoutValidation: Sold out"); for (uint i = 0; i < amount; i++) { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _mint(to, tokenId); emit Mint(to, tokenId); } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal whenNotPaused override(ERC721) { super._beforeTokenTransfer(from, to, tokenId); } // The following functions are overrides required by Solidity. function supportsInterface(bytes4 interfaceId) public view override(ERC721, AccessControl) returns (bool) { return super.supportsInterface(interfaceId); } // Admin functions function setMaxItemsPerPublicMint(uint _maxItemsPerPublicMint) external onlyRole(DEFAULT_ADMIN_ROLE) { maxItemsPerPublicMint = _maxItemsPerPublicMint; } function setMaxItemsPerWhitelistWallet(uint _maxItemsPerWhitelistWallet) external onlyRole(DEFAULT_ADMIN_ROLE) { maxItemsPerWhitelistWallet = _maxItemsPerWhitelistWallet; } function setMintPrice(uint _mintPrice) external onlyRole(DEFAULT_ADMIN_ROLE) { mintPrice = _mintPrice; } function toggleMintPaused() external onlyRole(DEFAULT_ADMIN_ROLE) { mintPaused = !mintPaused; } function setWhitelistSaleTimestamp(uint _whitelistSaleTimestamp) external onlyRole(DEFAULT_ADMIN_ROLE) { whitelistSaleTimestamp = _whitelistSaleTimestamp; } function setPublicSaleTimestamp(uint _publicSaleTimestamp) external onlyRole(DEFAULT_ADMIN_ROLE) { publicSaleTimestamp = _publicSaleTimestamp; } function bulkAssignWhitelistRoles(address[] memory accounts) external onlyRole(DEFAULT_ADMIN_ROLE) { for (uint i = 0; i < accounts.length; i++) { grantRole(WHITELIST_ROLE, accounts[i]); } } function setBaseTokenURI(string memory _baseTokenURI) external onlyRole(DEFAULT_ADMIN_ROLE) { baseTokenURI = _baseTokenURI; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function withdraw(address to) external onlyRole(WITHDRAW_ROLE) { sendEth(to, address(this).balance); } function sendEth(address to, uint amount) internal { (bool success,) = to.call{value: amount}(""); require(success, "Failed to send ether"); } }
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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":true,"internalType":"uint256","name":"tokenId","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":"GIVEAWAY_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":[],"name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAW_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"bulkAssignWhitelistRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"givewayMint","outputs":[],"stateMutability":"nonpayable","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerWhitelistWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"publicMintTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerPublicMint","type":"uint256"}],"name":"setMaxItemsPerPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerWhitelistWallet","type":"uint256"}],"name":"setMaxItemsPerWhitelistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleTimestamp","type":"uint256"}],"name":"setPublicSaleTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistSaleTimestamp","type":"uint256"}],"name":"setWhitelistSaleTimestamp","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":"toggleMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"whitelistMintTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistSaleTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526362b1c7d86009556362b46ad8600a556701aa535d3d0c0000600b55611e61600c556103e8600d5560c8600e556000600f60006101000a81548160ff02191690831515021790555060405180602001604052806000815250601090816200006c9190620005b8565b503480156200007a57600080fd5b506040518060400160405280601181526020017f52696e6b205261742049636520436c75620000000000000000000000000000008152506040518060400160405280600481526020017f52524943000000000000000000000000000000000000000000000000000000008152508160009081620000f89190620005b8565b5080600190816200010a9190620005b8565b5050506000600660006101000a81548160ff0219169083151502179055506200013d6000801b33620001d960201b60201c565b6200016f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620001d960201b60201c565b620001a17f3f17b04901401c5c4cea5f2257556ad05de1da2e2de6282fa9c925cabe359a5c33620001d960201b60201c565b620001d37f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec33620001d960201b60201c565b6200069f565b620001eb8282620002cb60201b60201c565b620002c75760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200026c6200033660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003c057607f821691505b602082108103620003d657620003d562000378565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000401565b6200044c868362000401565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000499620004936200048d8462000464565b6200046e565b62000464565b9050919050565b6000819050919050565b620004b58362000478565b620004cd620004c482620004a0565b8484546200040e565b825550505050565b600090565b620004e4620004d5565b620004f1818484620004aa565b505050565b5b8181101562000519576200050d600082620004da565b600181019050620004f7565b5050565b601f82111562000568576200053281620003dc565b6200053d84620003f1565b810160208510156200054d578190505b620005656200055c85620003f1565b830182620004f6565b50505b505050565b600082821c905092915050565b60006200058d600019846008026200056d565b1980831691505092915050565b6000620005a883836200057a565b9150826002028217905092915050565b620005c3826200033e565b67ffffffffffffffff811115620005df57620005de62000349565b5b620005eb8254620003a7565b620005f88282856200051d565b600060209050601f8311600181146200063057600084156200061b578287015190505b6200062785826200059a565b86555062000697565b601f1984166200064086620003dc565b60005b828110156200066a5784890151825560018201915060208501945060208101905062000643565b868310156200068a578489015162000686601f8916826200057a565b8355505b6001600288020188555050505b505050505050565b614eb780620006af6000396000f3fe6080604052600436106102cd5760003560e01c806370a0823111610175578063a18d05e6116100dc578063d547cfb711610095578063e6d7e1341161006f578063e6d7e13414610a69578063e985e9c514610a94578063f139145014610ad1578063f4a0a52814610afa576102d4565b8063d547cfb7146109e8578063e02023a114610a13578063e63ab1e914610a3e576102d4565b8063a18d05e6146108dc578063a217fddf14610905578063a22cb46514610930578063b88d4fde14610959578063c87b56dd14610982578063d547741f146109bf576102d4565b8063804f43cd1161012e578063804f43cd1461081b5780638456cb59146108255780638ef535b91461083c57806391d148541461085857806395d89b41146108955780639d48e631146108c0576102d4565b806370a082311461070b578063736d77ce146107485780637a997ab7146107735780637d8d61df1461079e5780637e4831d3146107c75780637faf9405146107f2576102d4565b8063393fbdd91161023457806351cff8d9116101ed5780636242e3de116101c75780636242e3de1461064f5780636352211e146106785780636528571f146106b55780636817c76c146106e0576102d4565b806351cff8d9146105d057806352e96828146105f95780635c975abb14610624576102d4565b8063393fbdd9146104d45780633af32abf146104ff5780633c010a3e1461053c5780633f4ba83a1461056757806342842e0e1461057e578063511a9605146105a7576102d4565b806323b872dd1161028657806323b872dd146103e9578063248a9ca31461041257806326092b831461044f5780632f2ff15d1461045957806330176e131461048257806336568abe146104ab576102d4565b806301ffc9a7146102d957806306fdde0314610316578063081812fc14610341578063095ea7b31461037e57806311b43025146103a757806318160ddd146103be576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb91906130b5565b610b23565b60405161030d91906130fd565b60405180910390f35b34801561032257600080fd5b5061032b610b35565b60405161033891906131b1565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613209565b610bc7565b6040516103759190613277565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a091906132be565b610c4c565b005b3480156103b357600080fd5b506103bc610d63565b005b3480156103ca57600080fd5b506103d3610d9d565b6040516103e0919061330d565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613328565b610dae565b005b34801561041e57600080fd5b50610439600480360381019061043491906133b1565b610e0e565b60405161044691906133ed565b60405180910390f35b610457610e2e565b005b34801561046557600080fd5b50610480600480360381019061047b9190613408565b610e39565b005b34801561048e57600080fd5b506104a960048036038101906104a4919061357d565b610e5a565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613408565b610e7b565b005b3480156104e057600080fd5b506104e9610efe565b6040516104f6919061330d565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906135c6565b610f04565b60405161053391906130fd565b60405180910390f35b34801561054857600080fd5b50610551610f37565b60405161055e919061330d565b60405180910390f35b34801561057357600080fd5b5061057c610f3d565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613328565b610f72565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613209565b610f92565b005b3480156105dc57600080fd5b506105f760048036038101906105f291906135c6565b610faa565b005b34801561060557600080fd5b5061060e610fe2565b60405161061b919061330d565b60405180910390f35b34801561063057600080fd5b50610639610fe8565b60405161064691906130fd565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190613209565b610fff565b005b34801561068457600080fd5b5061069f600480360381019061069a9190613209565b611017565b6040516106ac9190613277565b60405180910390f35b3480156106c157600080fd5b506106ca6110c8565b6040516106d791906133ed565b60405180910390f35b3480156106ec57600080fd5b506106f56110ec565b604051610702919061330d565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906135c6565b6110f2565b60405161073f919061330d565b60405180910390f35b34801561075457600080fd5b5061075d6111a9565b60405161076a919061330d565b60405180910390f35b34801561077f57600080fd5b506107886111af565b60405161079591906133ed565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c091906136bb565b6111d3565b005b3480156107d357600080fd5b506107dc611248565b6040516107e991906130fd565b60405180910390f35b3480156107fe57600080fd5b50610819600480360381019061081491906132be565b61125b565b005b610823611294565b005b34801561083157600080fd5b5061083a6112ca565b005b610856600480360381019061085191906135c6565b6112ff565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613408565b61130b565b60405161088c91906130fd565b60405180910390f35b3480156108a157600080fd5b506108aa611376565b6040516108b791906131b1565b60405180910390f35b6108da60048036038101906108d591906135c6565b611408565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613209565b61143f565b005b34801561091157600080fd5b5061091a611457565b60405161092791906133ed565b60405180910390f35b34801561093c57600080fd5b5061095760048036038101906109529190613730565b61145e565b005b34801561096557600080fd5b50610980600480360381019061097b9190613811565b611474565b005b34801561098e57600080fd5b506109a960048036038101906109a49190613209565b6114d6565b6040516109b691906131b1565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613408565b61157d565b005b3480156109f457600080fd5b506109fd61159e565b604051610a0a91906131b1565b60405180910390f35b348015610a1f57600080fd5b50610a2861162c565b604051610a3591906133ed565b60405180910390f35b348015610a4a57600080fd5b50610a53611650565b604051610a6091906133ed565b60405180910390f35b348015610a7557600080fd5b50610a7e611674565b604051610a8b919061330d565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613894565b61167a565b604051610ac891906130fd565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190613209565b61170e565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613209565b611726565b005b6000610b2e8261173e565b9050919050565b606060008054610b4490613903565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613903565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd2826117b8565b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906139a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5782611017565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613a38565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce6611824565b73ffffffffffffffffffffffffffffffffffffffff161480610d155750610d1481610d0f611824565b61167a565b5b610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613aca565b60405180910390fd5b610d5e838361182c565b505050565b6000801b610d70816118e5565b600f60009054906101000a900460ff1615600f60006101000a81548160ff02191690831515021790555050565b6000610da960116118f9565b905090565b610dbf610db9611824565b82611907565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613b5c565b60405180910390fd5b610e098383836119e5565b505050565b600060076000838152602001908152602001600020600101549050919050565b610e3733611c4b565b565b610e4282610e0e565b610e4b816118e5565b610e558383611d9b565b505050565b6000801b610e67816118e5565b8160109081610e769190613d28565b505050565b610e83611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e6c565b60405180910390fd5b610efa8282611e7c565b5050565b600e5481565b6000610f307fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be67608361130b565b9050919050565b600c5481565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f67816118e5565b610f6f611f5e565b50565b610f8d83838360405180602001604052806000815250611474565b505050565b6000801b610f9f816118e5565b81600a819055505050565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec610fd4816118e5565b610fde8247612000565b5050565b60095481565b6000600660009054906101000a900460ff16905090565b6000801b61100c816118e5565b81600d819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613efe565b60405180910390fd5b80915050919050565b7f3f17b04901401c5c4cea5f2257556ad05de1da2e2de6282fa9c925cabe359a5c81565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613f90565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676081565b6000801b6111e0816118e5565b60005b8251811015611243576112307fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676084838151811061122357611222613fb0565b5b6020026020010151610e39565b808061123b9061400e565b9150506111e3565b505050565b600f60009054906101000a900460ff1681565b7f3f17b04901401c5c4cea5f2257556ad05de1da2e2de6282fa9c925cabe359a5c611285816118e5565b61128f83836120b1565b505050565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be67606112be816118e5565b6112c7336121dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112f4816118e5565b6112fc6123cc565b50565b61130881611c4b565b50565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606001805461138590613903565b80601f01602080910402602001604051908101604052809291908181526020018280546113b190613903565b80156113fe5780601f106113d3576101008083540402835291602001916113fe565b820191906000526020600020905b8154815290600101906020018083116113e157829003601f168201915b5050505050905090565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760611432816118e5565b61143b826121dc565b5050565b6000801b61144c816118e5565b816009819055505050565b6000801b81565b611470611469611824565b838361246f565b5050565b61148561147f611824565b83611907565b6114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613b5c565b60405180910390fd5b6114d0848484846125db565b50505050565b60606114e1826117b8565b611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906140c8565b60405180910390fd5b600061152a612637565b9050600081511161154a5760405180602001604052806000815250611575565b80611554846126c9565b604051602001611565929190614124565b6040516020818303038152906040525b915050919050565b61158682610e0e565b61158f816118e5565b6115998383611e7c565b505050565b601080546115ab90613903565b80601f01602080910402602001604051908101604052809291908181526020018280546115d790613903565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050505081565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec81565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b61171b816118e5565b81600e819055505050565b6000801b611733816118e5565b81600b819055505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117b157506117b082612829565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661189f83611017565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6118f6816118f1611824565b61290b565b50565b600081600001549050919050565b6000611912826117b8565b611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906141ba565b60405180910390fd5b600061195c83611017565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061199e575061199d818561167a565b5b806119dc57508373ffffffffffffffffffffffffffffffffffffffff166119c484610bc7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a0582611017565b73ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a529061424c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac1906142de565b60405180910390fd5b611ad58383836129a8565b611ae060008261182c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3091906142fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b879190614332565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c46838383612a00565b505050565b600f60009054906101000a900460ff1615611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906143d4565b60405180910390fd5b600a54421015611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614440565b60405180910390fd5b6000600b5434611cf0919061448f565b90506000600b5434611d0291906144c0565b905060008214611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90614563565b60405180910390fd5b600e54811115611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d83906145f5565b60405180910390fd5b611d9683826120b1565b505050565b611da5828261130b565b611e785760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e1d611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611e86828261130b565b15611f5a5760006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611eff611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611f66610fe8565b611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614661565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611fe9611824565b604051611ff69190613277565b60405180910390a1565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612026906146b2565b60006040518083038185875af1925050503d8060008114612063576040519150601f19603f3d011682016040523d82523d6000602084013e612068565b606091505b50509050806120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614713565b60405180910390fd5b505050565b6120b9610fe8565b156120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f09061477f565b60405180910390fd5b600c548161210760116118f9565b6121119190614332565b1115612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906147eb565b60405180910390fd5b60005b818110156121d757600061216960116118f9565b90506121756011612a05565b61217f8482612a1b565b808473ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a35080806121cf9061400e565b915050612155565b505050565b600f60009054906101000a900460ff161561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390614857565b60405180910390fd5b600954421015612271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612268906148c3565b60405180910390fd5b6000600b5434612281919061448f565b90506000600b543461229391906144c0565b9050600082146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614955565b60405180910390fd5b600d54600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826123269190614332565b1115612367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235e906149e7565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b69190614332565b925050819055506123c783826120b1565b505050565b6123d4610fe8565b15612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061477f565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612458611824565b6040516124659190613277565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614a53565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125ce91906130fd565b60405180910390a3505050565b6125e68484846119e5565b6125f284848484612bf4565b612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890614ae5565b60405180910390fd5b50505050565b60606010805461264690613903565b80601f016020809104026020016040519081016040528092919081815260200182805461267290613903565b80156126bf5780601f10612694576101008083540402835291602001916126bf565b820191906000526020600020905b8154815290600101906020018083116126a257829003601f168201915b5050505050905090565b606060008203612710576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612824565b600082905060005b6000821461274257808061272b9061400e565b915050600a8261273b91906144c0565b9150612718565b60008167ffffffffffffffff81111561275e5761275d613452565b5b6040519080825280601f01601f1916602001820160405280156127905781602001600182028036833780820191505090505b5090505b6000851461281d576001826127a991906142fe565b9150600a856127b8919061448f565b60306127c49190614332565b60f81b8183815181106127da576127d9613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281691906144c0565b9450612794565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128f457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612904575061290382612d7b565b5b9050919050565b612915828261130b565b6129a45761293a8173ffffffffffffffffffffffffffffffffffffffff166014612de5565b6129488360001c6020612de5565b604051602001612959929190614b9d565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b91906131b1565b60405180910390fd5b5050565b6129b0610fe8565b156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e79061477f565b60405180910390fd5b6129fb838383613021565b505050565b505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190614c23565b60405180910390fd5b612a93816117b8565b15612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90614c8f565b60405180910390fd5b612adf600083836129a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2f9190614332565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf060008383612a00565b5050565b6000612c158473ffffffffffffffffffffffffffffffffffffffff16613026565b15612d6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3e611824565b8786866040518563ffffffff1660e01b8152600401612c609493929190614d04565b6020604051808303816000875af1925050508015612c9c57506040513d601f19601f82011682018060405250810190612c999190614d65565b60015b612d1e573d8060008114612ccc576040519150601f19603f3d011682016040523d82523d6000602084013e612cd1565b606091505b506000815103612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614ae5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d73565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002612df89190614d92565b612e029190614332565b67ffffffffffffffff811115612e1b57612e1a613452565b5b6040519080825280601f01601f191660200182016040528015612e4d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612e8557612e84613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ee957612ee8613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612f299190614d92565b612f339190614332565b90505b6001811115612fd3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612f7557612f74613fb0565b5b1a60f81b828281518110612f8c57612f8b613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612fcc90614dec565b9050612f36565b5060008414613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e90614e61565b60405180910390fd5b8091505092915050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130928161305d565b811461309d57600080fd5b50565b6000813590506130af81613089565b92915050565b6000602082840312156130cb576130ca613053565b5b60006130d9848285016130a0565b91505092915050565b60008115159050919050565b6130f7816130e2565b82525050565b600060208201905061311260008301846130ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613152578082015181840152602081019050613137565b83811115613161576000848401525b50505050565b6000601f19601f8301169050919050565b600061318382613118565b61318d8185613123565b935061319d818560208601613134565b6131a681613167565b840191505092915050565b600060208201905081810360008301526131cb8184613178565b905092915050565b6000819050919050565b6131e6816131d3565b81146131f157600080fd5b50565b600081359050613203816131dd565b92915050565b60006020828403121561321f5761321e613053565b5b600061322d848285016131f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061326182613236565b9050919050565b61327181613256565b82525050565b600060208201905061328c6000830184613268565b92915050565b61329b81613256565b81146132a657600080fd5b50565b6000813590506132b881613292565b92915050565b600080604083850312156132d5576132d4613053565b5b60006132e3858286016132a9565b92505060206132f4858286016131f4565b9150509250929050565b613307816131d3565b82525050565b600060208201905061332260008301846132fe565b92915050565b60008060006060848603121561334157613340613053565b5b600061334f868287016132a9565b9350506020613360868287016132a9565b9250506040613371868287016131f4565b9150509250925092565b6000819050919050565b61338e8161337b565b811461339957600080fd5b50565b6000813590506133ab81613385565b92915050565b6000602082840312156133c7576133c6613053565b5b60006133d58482850161339c565b91505092915050565b6133e78161337b565b82525050565b600060208201905061340260008301846133de565b92915050565b6000806040838503121561341f5761341e613053565b5b600061342d8582860161339c565b925050602061343e858286016132a9565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348a82613167565b810181811067ffffffffffffffff821117156134a9576134a8613452565b5b80604052505050565b60006134bc613049565b90506134c88282613481565b919050565b600067ffffffffffffffff8211156134e8576134e7613452565b5b6134f182613167565b9050602081019050919050565b82818337600083830152505050565b600061352061351b846134cd565b6134b2565b90508281526020810184848401111561353c5761353b61344d565b5b6135478482856134fe565b509392505050565b600082601f83011261356457613563613448565b5b813561357484826020860161350d565b91505092915050565b60006020828403121561359357613592613053565b5b600082013567ffffffffffffffff8111156135b1576135b0613058565b5b6135bd8482850161354f565b91505092915050565b6000602082840312156135dc576135db613053565b5b60006135ea848285016132a9565b91505092915050565b600067ffffffffffffffff82111561360e5761360d613452565b5b602082029050602081019050919050565b600080fd5b6000613637613632846135f3565b6134b2565b9050808382526020820190506020840283018581111561365a5761365961361f565b5b835b81811015613683578061366f88826132a9565b84526020840193505060208101905061365c565b5050509392505050565b600082601f8301126136a2576136a1613448565b5b81356136b2848260208601613624565b91505092915050565b6000602082840312156136d1576136d0613053565b5b600082013567ffffffffffffffff8111156136ef576136ee613058565b5b6136fb8482850161368d565b91505092915050565b61370d816130e2565b811461371857600080fd5b50565b60008135905061372a81613704565b92915050565b6000806040838503121561374757613746613053565b5b6000613755858286016132a9565b92505060206137668582860161371b565b9150509250929050565b600067ffffffffffffffff82111561378b5761378a613452565b5b61379482613167565b9050602081019050919050565b60006137b46137af84613770565b6134b2565b9050828152602081018484840111156137d0576137cf61344d565b5b6137db8482856134fe565b509392505050565b600082601f8301126137f8576137f7613448565b5b81356138088482602086016137a1565b91505092915050565b6000806000806080858703121561382b5761382a613053565b5b6000613839878288016132a9565b945050602061384a878288016132a9565b935050604061385b878288016131f4565b925050606085013567ffffffffffffffff81111561387c5761387b613058565b5b613888878288016137e3565b91505092959194509250565b600080604083850312156138ab576138aa613053565b5b60006138b9858286016132a9565b92505060206138ca858286016132a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391b57607f821691505b60208210810361392e5761392d6138d4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613990602c83613123565b915061399b82613934565b604082019050919050565b600060208201905081810360008301526139bf81613983565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a22602183613123565b9150613a2d826139c6565b604082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613ab4603883613123565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b46603183613123565b9150613b5182613aea565b604082019050919050565b60006020820190508181036000830152613b7581613b39565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613bde7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ba1565b613be88683613ba1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c25613c20613c1b846131d3565b613c00565b6131d3565b9050919050565b6000819050919050565b613c3f83613c0a565b613c53613c4b82613c2c565b848454613bae565b825550505050565b600090565b613c68613c5b565b613c73818484613c36565b505050565b5b81811015613c9757613c8c600082613c60565b600181019050613c79565b5050565b601f821115613cdc57613cad81613b7c565b613cb684613b91565b81016020851015613cc5578190505b613cd9613cd185613b91565b830182613c78565b50505b505050565b600082821c905092915050565b6000613cff60001984600802613ce1565b1980831691505092915050565b6000613d188383613cee565b9150826002028217905092915050565b613d3182613118565b67ffffffffffffffff811115613d4a57613d49613452565b5b613d548254613903565b613d5f828285613c9b565b600060209050601f831160018114613d925760008415613d80578287015190505b613d8a8582613d0c565b865550613df2565b601f198416613da086613b7c565b60005b82811015613dc857848901518255600182019150602085019450602081019050613da3565b86831015613de55784890151613de1601f891682613cee565b8355505b6001600288020188555050505b505050505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613e56602f83613123565b9150613e6182613dfa565b604082019050919050565b60006020820190508181036000830152613e8581613e49565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ee8602983613123565b9150613ef382613e8c565b604082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f7a602a83613123565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614019826131d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361404b5761404a613fdf565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006140b2602f83613123565b91506140bd82614056565b604082019050919050565b600060208201905081810360008301526140e1816140a5565b9050919050565b600081905092915050565b60006140fe82613118565b61410881856140e8565b9350614118818560208601613134565b80840191505092915050565b600061413082856140f3565b915061413c82846140f3565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006141a4602c83613123565b91506141af82614148565b604082019050919050565b600060208201905081810360008301526141d381614197565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614236602583613123565b9150614241826141da565b604082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142c8602483613123565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b6000614309826131d3565b9150614314836131d3565b92508282101561432757614326613fdf565b5b828203905092915050565b600061433d826131d3565b9150614348836131d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561437d5761437c613fdf565b5b828201905092915050565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b60006143be601283613123565b91506143c982614388565b602082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b600061442a601883613123565b9150614435826143f4565b602082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061449a826131d3565b91506144a5836131d3565b9250826144b5576144b4614460565b5b828206905092915050565b60006144cb826131d3565b91506144d6836131d3565b9250826144e6576144e5614460565b5b828204905092915050565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b600061454d602a83613123565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f7075626c69634d696e743a20537572706173736573206d61784974656d73506560008201527f725075626c69634d696e74000000000000000000000000000000000000000000602082015250565b60006145df602b83613123565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061464b601483613123565b915061465682614615565b602082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b600081905092915050565b50565b600061469c600083614681565b91506146a78261468c565b600082019050919050565b60006146bd8261468f565b9150819050919050565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b60006146fd601483613123565b9150614708826146c7565b602082019050919050565b6000602082019050818103600083015261472c816146f0565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614769601083613123565b915061477482614733565b602082019050919050565b600060208201905081810360008301526147988161475c565b9050919050565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b60006147d5601f83613123565b91506147e08261479f565b602082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f77686974656c6973744d696e743a205061757365640000000000000000000000600082015250565b6000614841601583613123565b915061484c8261480b565b602082019050919050565b6000602082019050818103600083015261487081614834565b9050919050565b7f77686974656c6973744d696e743a204e6f74206f70656e207965740000000000600082015250565b60006148ad601b83613123565b91506148b882614877565b602082019050919050565b600060208201905081810360008301526148dc816148a0565b9050919050565b7f77686974656c6973744d696e743a2053656e64206120646976697369626c652060008201527f616d6f756e74206f662065746800000000000000000000000000000000000000602082015250565b600061493f602d83613123565b915061494a826148e3565b604082019050919050565b6000602082019050818103600083015261496e81614932565b9050919050565b7f77686974656c6973744d696e743a204d61782077686974656c697374206d696e60008201527f74732066726f6d20746869732061646472657373207265616368656400000000602082015250565b60006149d1603c83613123565b91506149dc82614975565b604082019050919050565b60006020820190508181036000830152614a00816149c4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a3d601983613123565b9150614a4882614a07565b602082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614acf603283613123565b9150614ada82614a73565b604082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614b3b6017836140e8565b9150614b4682614b05565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614b876011836140e8565b9150614b9282614b51565b601182019050919050565b6000614ba882614b2e565b9150614bb482856140f3565b9150614bbf82614b7a565b9150614bcb82846140f3565b91508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c0d602083613123565b9150614c1882614bd7565b602082019050919050565b60006020820190508181036000830152614c3c81614c00565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614c79601c83613123565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614cd682614caf565b614ce08185614cba565b9350614cf0818560208601613134565b614cf981613167565b840191505092915050565b6000608082019050614d196000830187613268565b614d266020830186613268565b614d3360408301856132fe565b8181036060830152614d458184614ccb565b905095945050505050565b600081519050614d5f81613089565b92915050565b600060208284031215614d7b57614d7a613053565b5b6000614d8984828501614d50565b91505092915050565b6000614d9d826131d3565b9150614da8836131d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de157614de0613fdf565b5b828202905092915050565b6000614df7826131d3565b915060008203614e0a57614e09613fdf565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614e4b602083613123565b9150614e5682614e15565b602082019050919050565b60006020820190508181036000830152614e7a81614e3e565b905091905056fea26469706673582212209e75d11e6dff25941b11bc5c796551b4d9f429998511cde25bb9b2a593a4657964736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c806370a0823111610175578063a18d05e6116100dc578063d547cfb711610095578063e6d7e1341161006f578063e6d7e13414610a69578063e985e9c514610a94578063f139145014610ad1578063f4a0a52814610afa576102d4565b8063d547cfb7146109e8578063e02023a114610a13578063e63ab1e914610a3e576102d4565b8063a18d05e6146108dc578063a217fddf14610905578063a22cb46514610930578063b88d4fde14610959578063c87b56dd14610982578063d547741f146109bf576102d4565b8063804f43cd1161012e578063804f43cd1461081b5780638456cb59146108255780638ef535b91461083c57806391d148541461085857806395d89b41146108955780639d48e631146108c0576102d4565b806370a082311461070b578063736d77ce146107485780637a997ab7146107735780637d8d61df1461079e5780637e4831d3146107c75780637faf9405146107f2576102d4565b8063393fbdd91161023457806351cff8d9116101ed5780636242e3de116101c75780636242e3de1461064f5780636352211e146106785780636528571f146106b55780636817c76c146106e0576102d4565b806351cff8d9146105d057806352e96828146105f95780635c975abb14610624576102d4565b8063393fbdd9146104d45780633af32abf146104ff5780633c010a3e1461053c5780633f4ba83a1461056757806342842e0e1461057e578063511a9605146105a7576102d4565b806323b872dd1161028657806323b872dd146103e9578063248a9ca31461041257806326092b831461044f5780632f2ff15d1461045957806330176e131461048257806336568abe146104ab576102d4565b806301ffc9a7146102d957806306fdde0314610316578063081812fc14610341578063095ea7b31461037e57806311b43025146103a757806318160ddd146103be576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb91906130b5565b610b23565b60405161030d91906130fd565b60405180910390f35b34801561032257600080fd5b5061032b610b35565b60405161033891906131b1565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613209565b610bc7565b6040516103759190613277565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a091906132be565b610c4c565b005b3480156103b357600080fd5b506103bc610d63565b005b3480156103ca57600080fd5b506103d3610d9d565b6040516103e0919061330d565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613328565b610dae565b005b34801561041e57600080fd5b50610439600480360381019061043491906133b1565b610e0e565b60405161044691906133ed565b60405180910390f35b610457610e2e565b005b34801561046557600080fd5b50610480600480360381019061047b9190613408565b610e39565b005b34801561048e57600080fd5b506104a960048036038101906104a4919061357d565b610e5a565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613408565b610e7b565b005b3480156104e057600080fd5b506104e9610efe565b6040516104f6919061330d565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906135c6565b610f04565b60405161053391906130fd565b60405180910390f35b34801561054857600080fd5b50610551610f37565b60405161055e919061330d565b60405180910390f35b34801561057357600080fd5b5061057c610f3d565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613328565b610f72565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613209565b610f92565b005b3480156105dc57600080fd5b506105f760048036038101906105f291906135c6565b610faa565b005b34801561060557600080fd5b5061060e610fe2565b60405161061b919061330d565b60405180910390f35b34801561063057600080fd5b50610639610fe8565b60405161064691906130fd565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190613209565b610fff565b005b34801561068457600080fd5b5061069f600480360381019061069a9190613209565b611017565b6040516106ac9190613277565b60405180910390f35b3480156106c157600080fd5b506106ca6110c8565b6040516106d791906133ed565b60405180910390f35b3480156106ec57600080fd5b506106f56110ec565b604051610702919061330d565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906135c6565b6110f2565b60405161073f919061330d565b60405180910390f35b34801561075457600080fd5b5061075d6111a9565b60405161076a919061330d565b60405180910390f35b34801561077f57600080fd5b506107886111af565b60405161079591906133ed565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c091906136bb565b6111d3565b005b3480156107d357600080fd5b506107dc611248565b6040516107e991906130fd565b60405180910390f35b3480156107fe57600080fd5b50610819600480360381019061081491906132be565b61125b565b005b610823611294565b005b34801561083157600080fd5b5061083a6112ca565b005b610856600480360381019061085191906135c6565b6112ff565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613408565b61130b565b60405161088c91906130fd565b60405180910390f35b3480156108a157600080fd5b506108aa611376565b6040516108b791906131b1565b60405180910390f35b6108da60048036038101906108d591906135c6565b611408565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613209565b61143f565b005b34801561091157600080fd5b5061091a611457565b60405161092791906133ed565b60405180910390f35b34801561093c57600080fd5b5061095760048036038101906109529190613730565b61145e565b005b34801561096557600080fd5b50610980600480360381019061097b9190613811565b611474565b005b34801561098e57600080fd5b506109a960048036038101906109a49190613209565b6114d6565b6040516109b691906131b1565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613408565b61157d565b005b3480156109f457600080fd5b506109fd61159e565b604051610a0a91906131b1565b60405180910390f35b348015610a1f57600080fd5b50610a2861162c565b604051610a3591906133ed565b60405180910390f35b348015610a4a57600080fd5b50610a53611650565b604051610a6091906133ed565b60405180910390f35b348015610a7557600080fd5b50610a7e611674565b604051610a8b919061330d565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613894565b61167a565b604051610ac891906130fd565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190613209565b61170e565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613209565b611726565b005b6000610b2e8261173e565b9050919050565b606060008054610b4490613903565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613903565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd2826117b8565b610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906139a6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5782611017565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613a38565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce6611824565b73ffffffffffffffffffffffffffffffffffffffff161480610d155750610d1481610d0f611824565b61167a565b5b610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613aca565b60405180910390fd5b610d5e838361182c565b505050565b6000801b610d70816118e5565b600f60009054906101000a900460ff1615600f60006101000a81548160ff02191690831515021790555050565b6000610da960116118f9565b905090565b610dbf610db9611824565b82611907565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613b5c565b60405180910390fd5b610e098383836119e5565b505050565b600060076000838152602001908152602001600020600101549050919050565b610e3733611c4b565b565b610e4282610e0e565b610e4b816118e5565b610e558383611d9b565b505050565b6000801b610e67816118e5565b8160109081610e769190613d28565b505050565b610e83611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e6c565b60405180910390fd5b610efa8282611e7c565b5050565b600e5481565b6000610f307fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be67608361130b565b9050919050565b600c5481565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610f67816118e5565b610f6f611f5e565b50565b610f8d83838360405180602001604052806000815250611474565b505050565b6000801b610f9f816118e5565b81600a819055505050565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec610fd4816118e5565b610fde8247612000565b5050565b60095481565b6000600660009054906101000a900460ff16905090565b6000801b61100c816118e5565b81600d819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613efe565b60405180910390fd5b80915050919050565b7f3f17b04901401c5c4cea5f2257556ad05de1da2e2de6282fa9c925cabe359a5c81565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990613f90565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676081565b6000801b6111e0816118e5565b60005b8251811015611243576112307fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676084838151811061122357611222613fb0565b5b6020026020010151610e39565b808061123b9061400e565b9150506111e3565b505050565b600f60009054906101000a900460ff1681565b7f3f17b04901401c5c4cea5f2257556ad05de1da2e2de6282fa9c925cabe359a5c611285816118e5565b61128f83836120b1565b505050565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be67606112be816118e5565b6112c7336121dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112f4816118e5565b6112fc6123cc565b50565b61130881611c4b565b50565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606001805461138590613903565b80601f01602080910402602001604051908101604052809291908181526020018280546113b190613903565b80156113fe5780601f106113d3576101008083540402835291602001916113fe565b820191906000526020600020905b8154815290600101906020018083116113e157829003601f168201915b5050505050905090565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760611432816118e5565b61143b826121dc565b5050565b6000801b61144c816118e5565b816009819055505050565b6000801b81565b611470611469611824565b838361246f565b5050565b61148561147f611824565b83611907565b6114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90613b5c565b60405180910390fd5b6114d0848484846125db565b50505050565b60606114e1826117b8565b611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906140c8565b60405180910390fd5b600061152a612637565b9050600081511161154a5760405180602001604052806000815250611575565b80611554846126c9565b604051602001611565929190614124565b6040516020818303038152906040525b915050919050565b61158682610e0e565b61158f816118e5565b6115998383611e7c565b505050565b601080546115ab90613903565b80601f01602080910402602001604051908101604052809291908181526020018280546115d790613903565b80156116245780601f106115f957610100808354040283529160200191611624565b820191906000526020600020905b81548152906001019060200180831161160757829003601f168201915b505050505081565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec81565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b61171b816118e5565b81600e819055505050565b6000801b611733816118e5565b81600b819055505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117b157506117b082612829565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661189f83611017565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6118f6816118f1611824565b61290b565b50565b600081600001549050919050565b6000611912826117b8565b611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906141ba565b60405180910390fd5b600061195c83611017565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061199e575061199d818561167a565b5b806119dc57508373ffffffffffffffffffffffffffffffffffffffff166119c484610bc7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a0582611017565b73ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a529061424c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac1906142de565b60405180910390fd5b611ad58383836129a8565b611ae060008261182c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3091906142fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b879190614332565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c46838383612a00565b505050565b600f60009054906101000a900460ff1615611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906143d4565b60405180910390fd5b600a54421015611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614440565b60405180910390fd5b6000600b5434611cf0919061448f565b90506000600b5434611d0291906144c0565b905060008214611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90614563565b60405180910390fd5b600e54811115611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d83906145f5565b60405180910390fd5b611d9683826120b1565b505050565b611da5828261130b565b611e785760016007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e1d611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611e86828261130b565b15611f5a5760006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611eff611824565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611f66610fe8565b611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c90614661565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611fe9611824565b604051611ff69190613277565b60405180910390a1565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612026906146b2565b60006040518083038185875af1925050503d8060008114612063576040519150601f19603f3d011682016040523d82523d6000602084013e612068565b606091505b50509050806120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614713565b60405180910390fd5b505050565b6120b9610fe8565b156120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f09061477f565b60405180910390fd5b600c548161210760116118f9565b6121119190614332565b1115612152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612149906147eb565b60405180910390fd5b60005b818110156121d757600061216960116118f9565b90506121756011612a05565b61217f8482612a1b565b808473ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a35080806121cf9061400e565b915050612155565b505050565b600f60009054906101000a900460ff161561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390614857565b60405180910390fd5b600954421015612271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612268906148c3565b60405180910390fd5b6000600b5434612281919061448f565b90506000600b543461229391906144c0565b9050600082146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614955565b60405180910390fd5b600d54600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826123269190614332565b1115612367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235e906149e7565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b69190614332565b925050819055506123c783826120b1565b505050565b6123d4610fe8565b15612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061477f565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612458611824565b6040516124659190613277565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d490614a53565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125ce91906130fd565b60405180910390a3505050565b6125e68484846119e5565b6125f284848484612bf4565b612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890614ae5565b60405180910390fd5b50505050565b60606010805461264690613903565b80601f016020809104026020016040519081016040528092919081815260200182805461267290613903565b80156126bf5780601f10612694576101008083540402835291602001916126bf565b820191906000526020600020905b8154815290600101906020018083116126a257829003601f168201915b5050505050905090565b606060008203612710576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612824565b600082905060005b6000821461274257808061272b9061400e565b915050600a8261273b91906144c0565b9150612718565b60008167ffffffffffffffff81111561275e5761275d613452565b5b6040519080825280601f01601f1916602001820160405280156127905781602001600182028036833780820191505090505b5090505b6000851461281d576001826127a991906142fe565b9150600a856127b8919061448f565b60306127c49190614332565b60f81b8183815181106127da576127d9613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281691906144c0565b9450612794565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806128f457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612904575061290382612d7b565b5b9050919050565b612915828261130b565b6129a45761293a8173ffffffffffffffffffffffffffffffffffffffff166014612de5565b6129488360001c6020612de5565b604051602001612959929190614b9d565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b91906131b1565b60405180910390fd5b5050565b6129b0610fe8565b156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e79061477f565b60405180910390fd5b6129fb838383613021565b505050565b505050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190614c23565b60405180910390fd5b612a93816117b8565b15612ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aca90614c8f565b60405180910390fd5b612adf600083836129a8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2f9190614332565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf060008383612a00565b5050565b6000612c158473ffffffffffffffffffffffffffffffffffffffff16613026565b15612d6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c3e611824565b8786866040518563ffffffff1660e01b8152600401612c609493929190614d04565b6020604051808303816000875af1925050508015612c9c57506040513d601f19601f82011682018060405250810190612c999190614d65565b60015b612d1e573d8060008114612ccc576040519150601f19603f3d011682016040523d82523d6000602084013e612cd1565b606091505b506000815103612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614ae5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d73565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002612df89190614d92565b612e029190614332565b67ffffffffffffffff811115612e1b57612e1a613452565b5b6040519080825280601f01601f191660200182016040528015612e4d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612e8557612e84613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612ee957612ee8613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612f299190614d92565b612f339190614332565b90505b6001811115612fd3577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612f7557612f74613fb0565b5b1a60f81b828281518110612f8c57612f8b613fb0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612fcc90614dec565b9050612f36565b5060008414613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e90614e61565b60405180910390fd5b8091505092915050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130928161305d565b811461309d57600080fd5b50565b6000813590506130af81613089565b92915050565b6000602082840312156130cb576130ca613053565b5b60006130d9848285016130a0565b91505092915050565b60008115159050919050565b6130f7816130e2565b82525050565b600060208201905061311260008301846130ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613152578082015181840152602081019050613137565b83811115613161576000848401525b50505050565b6000601f19601f8301169050919050565b600061318382613118565b61318d8185613123565b935061319d818560208601613134565b6131a681613167565b840191505092915050565b600060208201905081810360008301526131cb8184613178565b905092915050565b6000819050919050565b6131e6816131d3565b81146131f157600080fd5b50565b600081359050613203816131dd565b92915050565b60006020828403121561321f5761321e613053565b5b600061322d848285016131f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061326182613236565b9050919050565b61327181613256565b82525050565b600060208201905061328c6000830184613268565b92915050565b61329b81613256565b81146132a657600080fd5b50565b6000813590506132b881613292565b92915050565b600080604083850312156132d5576132d4613053565b5b60006132e3858286016132a9565b92505060206132f4858286016131f4565b9150509250929050565b613307816131d3565b82525050565b600060208201905061332260008301846132fe565b92915050565b60008060006060848603121561334157613340613053565b5b600061334f868287016132a9565b9350506020613360868287016132a9565b9250506040613371868287016131f4565b9150509250925092565b6000819050919050565b61338e8161337b565b811461339957600080fd5b50565b6000813590506133ab81613385565b92915050565b6000602082840312156133c7576133c6613053565b5b60006133d58482850161339c565b91505092915050565b6133e78161337b565b82525050565b600060208201905061340260008301846133de565b92915050565b6000806040838503121561341f5761341e613053565b5b600061342d8582860161339c565b925050602061343e858286016132a9565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348a82613167565b810181811067ffffffffffffffff821117156134a9576134a8613452565b5b80604052505050565b60006134bc613049565b90506134c88282613481565b919050565b600067ffffffffffffffff8211156134e8576134e7613452565b5b6134f182613167565b9050602081019050919050565b82818337600083830152505050565b600061352061351b846134cd565b6134b2565b90508281526020810184848401111561353c5761353b61344d565b5b6135478482856134fe565b509392505050565b600082601f83011261356457613563613448565b5b813561357484826020860161350d565b91505092915050565b60006020828403121561359357613592613053565b5b600082013567ffffffffffffffff8111156135b1576135b0613058565b5b6135bd8482850161354f565b91505092915050565b6000602082840312156135dc576135db613053565b5b60006135ea848285016132a9565b91505092915050565b600067ffffffffffffffff82111561360e5761360d613452565b5b602082029050602081019050919050565b600080fd5b6000613637613632846135f3565b6134b2565b9050808382526020820190506020840283018581111561365a5761365961361f565b5b835b81811015613683578061366f88826132a9565b84526020840193505060208101905061365c565b5050509392505050565b600082601f8301126136a2576136a1613448565b5b81356136b2848260208601613624565b91505092915050565b6000602082840312156136d1576136d0613053565b5b600082013567ffffffffffffffff8111156136ef576136ee613058565b5b6136fb8482850161368d565b91505092915050565b61370d816130e2565b811461371857600080fd5b50565b60008135905061372a81613704565b92915050565b6000806040838503121561374757613746613053565b5b6000613755858286016132a9565b92505060206137668582860161371b565b9150509250929050565b600067ffffffffffffffff82111561378b5761378a613452565b5b61379482613167565b9050602081019050919050565b60006137b46137af84613770565b6134b2565b9050828152602081018484840111156137d0576137cf61344d565b5b6137db8482856134fe565b509392505050565b600082601f8301126137f8576137f7613448565b5b81356138088482602086016137a1565b91505092915050565b6000806000806080858703121561382b5761382a613053565b5b6000613839878288016132a9565b945050602061384a878288016132a9565b935050604061385b878288016131f4565b925050606085013567ffffffffffffffff81111561387c5761387b613058565b5b613888878288016137e3565b91505092959194509250565b600080604083850312156138ab576138aa613053565b5b60006138b9858286016132a9565b92505060206138ca858286016132a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061391b57607f821691505b60208210810361392e5761392d6138d4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613990602c83613123565b915061399b82613934565b604082019050919050565b600060208201905081810360008301526139bf81613983565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a22602183613123565b9150613a2d826139c6565b604082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613ab4603883613123565b9150613abf82613a58565b604082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b46603183613123565b9150613b5182613aea565b604082019050919050565b60006020820190508181036000830152613b7581613b39565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613bde7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ba1565b613be88683613ba1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613c25613c20613c1b846131d3565b613c00565b6131d3565b9050919050565b6000819050919050565b613c3f83613c0a565b613c53613c4b82613c2c565b848454613bae565b825550505050565b600090565b613c68613c5b565b613c73818484613c36565b505050565b5b81811015613c9757613c8c600082613c60565b600181019050613c79565b5050565b601f821115613cdc57613cad81613b7c565b613cb684613b91565b81016020851015613cc5578190505b613cd9613cd185613b91565b830182613c78565b50505b505050565b600082821c905092915050565b6000613cff60001984600802613ce1565b1980831691505092915050565b6000613d188383613cee565b9150826002028217905092915050565b613d3182613118565b67ffffffffffffffff811115613d4a57613d49613452565b5b613d548254613903565b613d5f828285613c9b565b600060209050601f831160018114613d925760008415613d80578287015190505b613d8a8582613d0c565b865550613df2565b601f198416613da086613b7c565b60005b82811015613dc857848901518255600182019150602085019450602081019050613da3565b86831015613de55784890151613de1601f891682613cee565b8355505b6001600288020188555050505b505050505050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613e56602f83613123565b9150613e6182613dfa565b604082019050919050565b60006020820190508181036000830152613e8581613e49565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613ee8602983613123565b9150613ef382613e8c565b604082019050919050565b60006020820190508181036000830152613f1781613edb565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f7a602a83613123565b9150613f8582613f1e565b604082019050919050565b60006020820190508181036000830152613fa981613f6d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614019826131d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361404b5761404a613fdf565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006140b2602f83613123565b91506140bd82614056565b604082019050919050565b600060208201905081810360008301526140e1816140a5565b9050919050565b600081905092915050565b60006140fe82613118565b61410881856140e8565b9350614118818560208601613134565b80840191505092915050565b600061413082856140f3565b915061413c82846140f3565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006141a4602c83613123565b91506141af82614148565b604082019050919050565b600060208201905081810360008301526141d381614197565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614236602583613123565b9150614241826141da565b604082019050919050565b6000602082019050818103600083015261426581614229565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142c8602483613123565b91506142d38261426c565b604082019050919050565b600060208201905081810360008301526142f7816142bb565b9050919050565b6000614309826131d3565b9150614314836131d3565b92508282101561432757614326613fdf565b5b828203905092915050565b600061433d826131d3565b9150614348836131d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561437d5761437c613fdf565b5b828201905092915050565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b60006143be601283613123565b91506143c982614388565b602082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b600061442a601883613123565b9150614435826143f4565b602082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061449a826131d3565b91506144a5836131d3565b9250826144b5576144b4614460565b5b828206905092915050565b60006144cb826131d3565b91506144d6836131d3565b9250826144e6576144e5614460565b5b828204905092915050565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b600061454d602a83613123565b9150614558826144f1565b604082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f7075626c69634d696e743a20537572706173736573206d61784974656d73506560008201527f725075626c69634d696e74000000000000000000000000000000000000000000602082015250565b60006145df602b83613123565b91506145ea82614583565b604082019050919050565b6000602082019050818103600083015261460e816145d2565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061464b601483613123565b915061465682614615565b602082019050919050565b6000602082019050818103600083015261467a8161463e565b9050919050565b600081905092915050565b50565b600061469c600083614681565b91506146a78261468c565b600082019050919050565b60006146bd8261468f565b9150819050919050565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b60006146fd601483613123565b9150614708826146c7565b602082019050919050565b6000602082019050818103600083015261472c816146f0565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614769601083613123565b915061477482614733565b602082019050919050565b600060208201905081810360008301526147988161475c565b9050919050565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b60006147d5601f83613123565b91506147e08261479f565b602082019050919050565b60006020820190508181036000830152614804816147c8565b9050919050565b7f77686974656c6973744d696e743a205061757365640000000000000000000000600082015250565b6000614841601583613123565b915061484c8261480b565b602082019050919050565b6000602082019050818103600083015261487081614834565b9050919050565b7f77686974656c6973744d696e743a204e6f74206f70656e207965740000000000600082015250565b60006148ad601b83613123565b91506148b882614877565b602082019050919050565b600060208201905081810360008301526148dc816148a0565b9050919050565b7f77686974656c6973744d696e743a2053656e64206120646976697369626c652060008201527f616d6f756e74206f662065746800000000000000000000000000000000000000602082015250565b600061493f602d83613123565b915061494a826148e3565b604082019050919050565b6000602082019050818103600083015261496e81614932565b9050919050565b7f77686974656c6973744d696e743a204d61782077686974656c697374206d696e60008201527f74732066726f6d20746869732061646472657373207265616368656400000000602082015250565b60006149d1603c83613123565b91506149dc82614975565b604082019050919050565b60006020820190508181036000830152614a00816149c4565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a3d601983613123565b9150614a4882614a07565b602082019050919050565b60006020820190508181036000830152614a6c81614a30565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614acf603283613123565b9150614ada82614a73565b604082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614b3b6017836140e8565b9150614b4682614b05565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614b876011836140e8565b9150614b9282614b51565b601182019050919050565b6000614ba882614b2e565b9150614bb482856140f3565b9150614bbf82614b7a565b9150614bcb82846140f3565b91508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c0d602083613123565b9150614c1882614bd7565b602082019050919050565b60006020820190508181036000830152614c3c81614c00565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614c79601c83613123565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614cd682614caf565b614ce08185614cba565b9350614cf0818560208601613134565b614cf981613167565b840191505092915050565b6000608082019050614d196000830187613268565b614d266020830186613268565b614d3360408301856132fe565b8181036060830152614d458184614ccb565b905095945050505050565b600081519050614d5f81613089565b92915050565b600060208284031215614d7b57614d7a613053565b5b6000614d8984828501614d50565b91505092915050565b6000614d9d826131d3565b9150614da8836131d3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de157614de0613fdf565b5b828202905092915050565b6000614df7826131d3565b915060008203614e0a57614e09613fdf565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614e4b602083613123565b9150614e5682614e15565b602082019050919050565b60006020820190508181036000830152614e7a81614e3e565b905091905056fea26469706673582212209e75d11e6dff25941b11bc5c796551b4d9f429998511cde25bb9b2a593a4657964736f6c634300080f0033
Deployed Bytecode Sourcemap
49650:6038:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53697:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37357:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38917:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38440:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54434:109;;;;;;;;;;;;;:::i;:::-;;52012:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39667:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25757:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51135:81;;;:::i;:::-;;26150:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55128:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27198:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50344:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51879:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50258:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50957:77;;;;;;;;;;;;;:::i;:::-;;40077:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54729:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55396:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50112:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8655:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54114:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37051:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49904:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50217:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36781:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50292:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49829:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54895:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50390:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51739:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52245:112;;;:::i;:::-;;50876:73;;;;;;;;;;;;;:::i;:::-;;51042:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24217:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37526:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52121:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54551:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23322:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39210:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40333:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37701:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26542:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50427:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49977:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49760:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50166:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39436:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53940:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54308:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53697:209;53833:4;53862:36;53886:11;53862:23;:36::i;:::-;53855:43;;53697:209;;;:::o;37357:100::-;37411:13;37444:5;37437:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37357:100;:::o;38917:221::-;38993:7;39021:16;39029:7;39021;:16::i;:::-;39013:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39106:15;:24;39122:7;39106:24;;;;;;;;;;;;;;;;;;;;;39099:31;;38917:221;;;:::o;38440:411::-;38521:13;38537:23;38552:7;38537:14;:23::i;:::-;38521:39;;38585:5;38579:11;;:2;:11;;;38571:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38679:5;38663:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;38688:37;38705:5;38712:12;:10;:12::i;:::-;38688:16;:37::i;:::-;38663:62;38641:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;38822:21;38831:2;38835:7;38822:8;:21::i;:::-;38510:341;38440:411;;:::o;54434:109::-;23367:4;54480:18;;23813:16;23824:4;23813:10;:16::i;:::-;54525:10:::1;;;;;;;;;;;54524:11;54511:10;;:24;;;;;;;;;;;;;;;;;;54434:109:::0;:::o;52012:101::-;52056:4;52080:25;:15;:23;:25::i;:::-;52073:32;;52012:101;:::o;39667:339::-;39862:41;39881:12;:10;:12::i;:::-;39895:7;39862:18;:41::i;:::-;39854:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39970:28;39980:4;39986:2;39990:7;39970:9;:28::i;:::-;39667:339;;;:::o;25757:131::-;25831:7;25858:6;:12;25865:4;25858:12;;;;;;;;;;;:22;;;25851:29;;25757:131;;;:::o;51135:81::-;51185:23;51197:10;51185:11;:23::i;:::-;51135:81::o;26150:147::-;26233:18;26246:4;26233:12;:18::i;:::-;23813:16;23824:4;23813:10;:16::i;:::-;26264:25:::1;26275:4;26281:7;26264:10;:25::i;:::-;26150:147:::0;;;:::o;55128:139::-;23367:4;55200:18;;23813:16;23824:4;23813:10;:16::i;:::-;55246:13:::1;55231:12;:28;;;;;;:::i;:::-;;55128:139:::0;;:::o;27198:218::-;27305:12;:10;:12::i;:::-;27294:23;;:7;:23;;;27286:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27382:26;27394:4;27400:7;27382:11;:26::i;:::-;27198:218;;:::o;50344:39::-;;;;:::o;51879:125::-;51940:4;51964:32;49870:27;51988:7;51964;:32::i;:::-;51957:39;;51879:125;;;:::o;50258:27::-;;;;:::o;50957:77::-;49798:24;23813:16;23824:4;23813:10;:16::i;:::-;51016:10:::1;:8;:10::i;:::-;50957:77:::0;:::o;40077:185::-;40215:39;40232:4;40238:2;40242:7;40215:39;;;;;;;;;;;;:16;:39::i;:::-;40077:185;;;:::o;54729:158::-;23367:4;54806:18;;23813:16;23824:4;23813:10;:16::i;:::-;54859:20:::1;54837:19;:42;;;;54729:158:::0;;:::o;55396:116::-;50017:26;23813:16;23824:4;23813:10;:16::i;:::-;55470:34:::1;55478:2;55482:21;55470:7;:34::i;:::-;55396:116:::0;;:::o;50112:47::-;;;;:::o;8655:86::-;8702:4;8726:7;;;;;;;;;;;8719:14;;8655:86;:::o;54114:186::-;23367:4;54205:18;;23813:16;23824:4;23813:10;:16::i;:::-;54265:27:::1;54236:26;:56;;;;54114:186:::0;;:::o;37051:239::-;37123:7;37143:13;37159:7;:16;37167:7;37159:16;;;;;;;;;;;;;;;;;;;;;37143:32;;37211:1;37194:19;;:5;:19;;;37186:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37277:5;37270:12;;;37051:239;;;:::o;49904:66::-;49944:26;49904:66;:::o;50217:34::-;;;;:::o;36781:208::-;36853:7;36898:1;36881:19;;:5;:19;;;36873:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;36965:9;:16;36975:5;36965:16;;;;;;;;;;;;;;;;36958:23;;36781:208;;;:::o;50292:45::-;;;;:::o;49829:68::-;49870:27;49829:68;:::o;54895:225::-;23367:4;54974:18;;23813:16;23824:4;23813:10;:16::i;:::-;55010:6:::1;55005:108;55026:8;:15;55022:1;:19;55005:108;;;55063:38;49870:27;55089:8;55098:1;55089:11;;;;;;;;:::i;:::-;;;;;;;;55063:9;:38::i;:::-;55043:3;;;;;:::i;:::-;;;;55005:108;;;;54895:225:::0;;:::o;50390:30::-;;;;;;;;;;;;;:::o;51739:132::-;49944:26;23813:16;23824:4;23813:10;:16::i;:::-;51829:34:::1;51852:2;51856:6;51829:22;:34::i;:::-;51739:132:::0;;;:::o;52245:112::-;49870:27;23813:16;23824:4;23813:10;:16::i;:::-;52323:26:::1;52338:10;52323:14;:26::i;:::-;52245:112:::0;:::o;50876:73::-;49798:24;23813:16;23824:4;23813:10;:16::i;:::-;50933:8:::1;:6;:8::i;:::-;50876:73:::0;:::o;51042:85::-;51104:15;51116:2;51104:11;:15::i;:::-;51042:85;:::o;24217:147::-;24303:4;24327:6;:12;24334:4;24327:12;;;;;;;;;;;:20;;:29;24348:7;24327:29;;;;;;;;;;;;;;;;;;;;;;;;;24320:36;;24217:147;;;;:::o;37526:104::-;37582:13;37615:7;37608:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37526:104;:::o;52121:116::-;49870:27;23813:16;23824:4;23813:10;:16::i;:::-;52211:18:::1;52226:2;52211:14;:18::i;:::-;52121:116:::0;;:::o;54551:170::-;23367:4;54634:18;;23813:16;23824:4;23813:10;:16::i;:::-;54690:23:::1;54665:22;:48;;;;54551:170:::0;;:::o;23322:49::-;23367:4;23322:49;;;:::o;39210:155::-;39305:52;39324:12;:10;:12::i;:::-;39338:8;39348;39305:18;:52::i;:::-;39210:155;;:::o;40333:328::-;40508:41;40527:12;:10;:12::i;:::-;40541:7;40508:18;:41::i;:::-;40500:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;40614:39;40628:4;40634:2;40638:7;40647:5;40614:13;:39::i;:::-;40333:328;;;;:::o;37701:334::-;37774:13;37808:16;37816:7;37808;:16::i;:::-;37800:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37889:21;37913:10;:8;:10::i;:::-;37889:34;;37965:1;37947:7;37941:21;:25;:86;;;;;;;;;;;;;;;;;37993:7;38002:18;:7;:16;:18::i;:::-;37976:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37941:86;37934:93;;;37701:334;;;:::o;26542:149::-;26626:18;26639:4;26626:12;:18::i;:::-;23813:16;23824:4;23813:10;:16::i;:::-;26657:26:::1;26669:4;26675:7;26657:11;:26::i;:::-;26542:149:::0;;;:::o;50427:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49977:66::-;50017:26;49977:66;:::o;49760:62::-;49798:24;49760:62;:::o;50166:44::-;;;;:::o;39436:164::-;39533:4;39557:18;:25;39576:5;39557:25;;;;;;;;;;;;;;;:35;39583:8;39557:35;;;;;;;;;;;;;;;;;;;;;;;;;39550:42;;39436:164;;;;:::o;53940:166::-;23367:4;54021:18;;23813:16;23824:4;23813:10;:16::i;:::-;54076:22:::1;54052:21;:46;;;;53940:166:::0;;:::o;54308:118::-;23367:4;54365:18;;23813:16;23824:4;23813:10;:16::i;:::-;54408:10:::1;54396:9;:22;;;;54308:118:::0;;:::o;23921:204::-;24006:4;24045:32;24030:47;;;:11;:47;;;;:87;;;;24081:36;24105:11;24081:23;:36::i;:::-;24030:87;24023:94;;23921:204;;;:::o;42171:127::-;42236:4;42288:1;42260:30;;:7;:16;42268:7;42260:16;;;;;;;;;;;;;;;;;;;;;:30;;;;42253:37;;42171:127;;;:::o;7309:98::-;7362:7;7389:10;7382:17;;7309:98;:::o;46317:174::-;46419:2;46392:15;:24;46408:7;46392:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46475:7;46471:2;46437:46;;46446:23;46461:7;46446:14;:23::i;:::-;46437:46;;;;;;;;;;;;46317:174;;:::o;24668:105::-;24735:30;24746:4;24752:12;:10;:12::i;:::-;24735:10;:30::i;:::-;24668:105;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;42465:348::-;42558:4;42583:16;42591:7;42583;:16::i;:::-;42575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42659:13;42675:23;42690:7;42675:14;:23::i;:::-;42659:39;;42728:5;42717:16;;:7;:16;;;:52;;;;42737:32;42754:5;42761:7;42737:16;:32::i;:::-;42717:52;:87;;;;42797:7;42773:31;;:20;42785:7;42773:11;:20::i;:::-;:31;;;42717:87;42709:96;;;42465:348;;;;:::o;45574:625::-;45733:4;45706:31;;:23;45721:7;45706:14;:23::i;:::-;:31;;;45698:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;45812:1;45798:16;;:2;:16;;;45790:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45868:39;45889:4;45895:2;45899:7;45868:20;:39::i;:::-;45972:29;45989:1;45993:7;45972:8;:29::i;:::-;46033:1;46014:9;:15;46024:4;46014:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;46062:1;46045:9;:13;46055:2;46045:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;46093:2;46074:7;:16;46082:7;46074:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;46132:7;46128:2;46113:27;;46122:4;46113:27;;;;;;;;;;;;46153:38;46173:4;46179:2;46183:7;46153:19;:38::i;:::-;45574:625;;;:::o;51224:507::-;51286:10;;;;;;;;;;;51285:11;51277:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;51357:19;;51338:15;:38;;51330:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51416:14;51445:9;;51433;:21;;;;:::i;:::-;51416:38;;51465:11;51491:9;;51479;:21;;;;:::i;:::-;51465:35;;51532:1;51519:9;:14;51511:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51609:21;;51599:6;:31;;51591:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;51689:34;51712:2;51716:6;51689:22;:34::i;:::-;51266:465;;51224:507;:::o;28699:238::-;28783:22;28791:4;28797:7;28783;:22::i;:::-;28778:152;;28854:4;28822:6;:12;28829:4;28822:12;;;;;;;;;;;:20;;:29;28843:7;28822:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28905:12;:10;:12::i;:::-;28878:40;;28896:7;28878:40;;28890:4;28878:40;;;;;;;;;;28778:152;28699:238;;:::o;29069:239::-;29153:22;29161:4;29167:7;29153;:22::i;:::-;29149:152;;;29224:5;29192:6;:12;29199:4;29192:12;;;;;;;;;;;:20;;:29;29213:7;29192:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29276:12;:10;:12::i;:::-;29249:40;;29267:7;29249:40;;29261:4;29249:40;;;;;;;;;;29149:152;29069:239;;:::o;9714:120::-;9258:8;:6;:8::i;:::-;9250:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9783:5:::1;9773:7;;:15;;;;;;;;;;;;;;;;;;9804:22;9813:12;:10;:12::i;:::-;9804:22;;;;;;:::i;:::-;;;;;;;;9714:120::o:0;55520:165::-;55583:12;55600:2;:7;;55615:6;55600:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55582:44;;;55645:7;55637:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;55571:114;55520:165;;:::o;52987:415::-;8981:8;:6;:8::i;:::-;8980:9;8972:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53124:8:::1;;53114:6;53086:25;:15;:23;:25::i;:::-;:34;;;;:::i;:::-;:46;;53078:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;53184:6;53179:216;53200:6;53196:1;:10;53179:216;;;53228:15;53246:25;:15;:23;:25::i;:::-;53228:43;;53286:27;:15;:25;:27::i;:::-;53328:18;53334:2;53338:7;53328:5;:18::i;:::-;53375:7;53371:2;53366:17;;;;;;;;;;;;53213:182;53208:3;;;;;:::i;:::-;;;;53179:216;;;;52987:415:::0;;:::o;52365:614::-;52430:10;;;;;;;;;;;52429:11;52421:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52504:22;;52485:15;:41;;52477:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;52569:14;52598:9;;52586;:21;;;;:::i;:::-;52569:38;;52618:11;52644:9;;52632;:21;;;;:::i;:::-;52618:35;;52685:1;52672:9;:14;52664:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52791:26;;52764:19;:23;52784:2;52764:23;;;;;;;;;;;;;;;;52755:6;:32;;;;:::i;:::-;:62;;52747:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;52920:6;52893:19;:23;52913:2;52893:23;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;52937:34;52960:2;52964:6;52937:22;:34::i;:::-;52410:569;;52365:614;:::o;9455:118::-;8981:8;:6;:8::i;:::-;8980:9;8972:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9525:4:::1;9515:7;;:14;;;;;;;;;;;;;;;;;;9545:20;9552:12;:10;:12::i;:::-;9545:20;;;;;;:::i;:::-;;;;;;;;9455:118::o:0;46633:315::-;46788:8;46779:17;;:5;:17;;;46771:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46875:8;46837:18;:25;46856:5;46837:25;;;;;;;;;;;;;;;:35;46863:8;46837:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;46921:8;46899:41;;46914:5;46899:41;;;46931:8;46899:41;;;;;;:::i;:::-;;;;;;;;46633:315;;;:::o;41543:::-;41700:28;41710:4;41716:2;41720:7;41700:9;:28::i;:::-;41747:48;41770:4;41776:2;41780:7;41789:5;41747:22;:48::i;:::-;41739:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;41543:315;;;;:::o;55275:113::-;55335:13;55368:12;55361:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55275:113;:::o;4871:723::-;4927:13;5157:1;5148:5;:10;5144:53;;5175:10;;;;;;;;;;;;;;;;;;;;;5144:53;5207:12;5222:5;5207:20;;5238:14;5263:78;5278:1;5270:4;:9;5263:78;;5296:8;;;;;:::i;:::-;;;;5327:2;5319:10;;;;;:::i;:::-;;;5263:78;;;5351:19;5383:6;5373:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5351:39;;5401:154;5417:1;5408:5;:10;5401:154;;5445:1;5435:11;;;;;:::i;:::-;;;5512:2;5504:5;:10;;;;:::i;:::-;5491:2;:24;;;;:::i;:::-;5478:39;;5461:6;5468;5461:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5541:2;5532:11;;;;;:::i;:::-;;;5401:154;;;5579:6;5565:21;;;;;4871:723;;;;:::o;36412:305::-;36514:4;36566:25;36551:40;;;:11;:40;;;;:105;;;;36623:33;36608:48;;;:11;:48;;;;36551:105;:158;;;;36673:36;36697:11;36673:23;:36::i;:::-;36551:158;36531:178;;36412:305;;;:::o;25063:505::-;25152:22;25160:4;25166:7;25152;:22::i;:::-;25147:414;;25340:41;25368:7;25340:41;;25378:2;25340:19;:41::i;:::-;25454:38;25482:4;25474:13;;25489:2;25454:19;:38::i;:::-;25245:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25191:358;;;;;;;;;;;:::i;:::-;;;;;;;;25147:414;25063:505;;:::o;53410:209::-;8981:8;:6;:8::i;:::-;8980:9;8972:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53566:45:::1;53593:4;53599:2;53603:7;53566:26;:45::i;:::-;53410:209:::0;;;:::o;49395:125::-;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;44149:439::-;44243:1;44229:16;;:2;:16;;;44221:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44302:16;44310:7;44302;:16::i;:::-;44301:17;44293:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44364:45;44393:1;44397:2;44401:7;44364:20;:45::i;:::-;44439:1;44422:9;:13;44432:2;44422:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44470:2;44451:7;:16;44459:7;44451:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44515:7;44511:2;44490:33;;44507:1;44490:33;;;;;;;;;;;;44536:44;44564:1;44568:2;44572:7;44536:19;:44::i;:::-;44149:439;;:::o;47513:799::-;47668:4;47689:15;:2;:13;;;:15::i;:::-;47685:620;;;47741:2;47725:36;;;47762:12;:10;:12::i;:::-;47776:4;47782:7;47791:5;47725:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47721:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47984:1;47967:6;:13;:18;47963:272;;48010:60;;;;;;;;;;:::i;:::-;;;;;;;;47963:272;48185:6;48179:13;48170:6;48166:2;48162:15;48155:38;47721:529;47858:41;;;47848:51;;;:6;:51;;;;47841:58;;;;;47685:620;48289:4;48282:11;;47513:799;;;;;;;:::o;21180:157::-;21265:4;21304:25;21289:40;;;:11;:40;;;;21282:47;;21180:157;;;:::o;6172:451::-;6247:13;6273:19;6318:1;6309:6;6305:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;6295:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6273:47;;6331:15;:6;6338:1;6331:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;6357;:6;6364:1;6357:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;6388:9;6413:1;6404:6;6400:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;6388:26;;6383:135;6420:1;6416;:5;6383:135;;;6455:12;6476:3;6468:5;:11;6455:25;;;;;;;:::i;:::-;;;;;6443:6;6450:1;6443:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;6505:1;6495:11;;;;;6423:3;;;;:::i;:::-;;;6383:135;;;;6545:1;6536:5;:10;6528:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;6608:6;6594:21;;;6172:451;;;;:::o;48884:126::-;;;;:::o;11074:326::-;11134:4;11391:1;11369:7;:19;;;:23;11362:30;;11074:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:77::-;5952:7;5981:5;5970:16;;5915:77;;;:::o;5998:122::-;6071:24;6089:5;6071:24;:::i;:::-;6064:5;6061:35;6051:63;;6110:1;6107;6100:12;6051:63;5998:122;:::o;6126:139::-;6172:5;6210:6;6197:20;6188:29;;6226:33;6253:5;6226:33;:::i;:::-;6126:139;;;;:::o;6271:329::-;6330:6;6379:2;6367:9;6358:7;6354:23;6350:32;6347:119;;;6385:79;;:::i;:::-;6347:119;6505:1;6530:53;6575:7;6566:6;6555:9;6551:22;6530:53;:::i;:::-;6520:63;;6476:117;6271:329;;;;:::o;6606:118::-;6693:24;6711:5;6693:24;:::i;:::-;6688:3;6681:37;6606:118;;:::o;6730:222::-;6823:4;6861:2;6850:9;6846:18;6838:26;;6874:71;6942:1;6931:9;6927:17;6918:6;6874:71;:::i;:::-;6730:222;;;;:::o;6958:474::-;7026:6;7034;7083:2;7071:9;7062:7;7058:23;7054:32;7051:119;;;7089:79;;:::i;:::-;7051:119;7209:1;7234:53;7279:7;7270:6;7259:9;7255:22;7234:53;:::i;:::-;7224:63;;7180:117;7336:2;7362:53;7407:7;7398:6;7387:9;7383:22;7362:53;:::i;:::-;7352:63;;7307:118;6958:474;;;;;:::o;7438:117::-;7547:1;7544;7537:12;7561:117;7670:1;7667;7660:12;7684:180;7732:77;7729:1;7722:88;7829:4;7826:1;7819:15;7853:4;7850:1;7843:15;7870:281;7953:27;7975:4;7953:27;:::i;:::-;7945:6;7941:40;8083:6;8071:10;8068:22;8047:18;8035:10;8032:34;8029:62;8026:88;;;8094:18;;:::i;:::-;8026:88;8134:10;8130:2;8123:22;7913:238;7870:281;;:::o;8157:129::-;8191:6;8218:20;;:::i;:::-;8208:30;;8247:33;8275:4;8267:6;8247:33;:::i;:::-;8157:129;;;:::o;8292:308::-;8354:4;8444:18;8436:6;8433:30;8430:56;;;8466:18;;:::i;:::-;8430:56;8504:29;8526:6;8504:29;:::i;:::-;8496:37;;8588:4;8582;8578:15;8570:23;;8292:308;;;:::o;8606:154::-;8690:6;8685:3;8680;8667:30;8752:1;8743:6;8738:3;8734:16;8727:27;8606:154;;;:::o;8766:412::-;8844:5;8869:66;8885:49;8927:6;8885:49;:::i;:::-;8869:66;:::i;:::-;8860:75;;8958:6;8951:5;8944:21;8996:4;8989:5;8985:16;9034:3;9025:6;9020:3;9016:16;9013:25;9010:112;;;9041:79;;:::i;:::-;9010:112;9131:41;9165:6;9160:3;9155;9131:41;:::i;:::-;8850:328;8766:412;;;;;:::o;9198:340::-;9254:5;9303:3;9296:4;9288:6;9284:17;9280:27;9270:122;;9311:79;;:::i;:::-;9270:122;9428:6;9415:20;9453:79;9528:3;9520:6;9513:4;9505:6;9501:17;9453:79;:::i;:::-;9444:88;;9260:278;9198:340;;;;:::o;9544:509::-;9613:6;9662:2;9650:9;9641:7;9637:23;9633:32;9630:119;;;9668:79;;:::i;:::-;9630:119;9816:1;9805:9;9801:17;9788:31;9846:18;9838:6;9835:30;9832:117;;;9868:79;;:::i;:::-;9832:117;9973:63;10028:7;10019:6;10008:9;10004:22;9973:63;:::i;:::-;9963:73;;9759:287;9544:509;;;;:::o;10059:329::-;10118:6;10167:2;10155:9;10146:7;10142:23;10138:32;10135:119;;;10173:79;;:::i;:::-;10135:119;10293:1;10318:53;10363:7;10354:6;10343:9;10339:22;10318:53;:::i;:::-;10308:63;;10264:117;10059:329;;;;:::o;10394:311::-;10471:4;10561:18;10553:6;10550:30;10547:56;;;10583:18;;:::i;:::-;10547:56;10633:4;10625:6;10621:17;10613:25;;10693:4;10687;10683:15;10675:23;;10394:311;;;:::o;10711:117::-;10820:1;10817;10810:12;10851:710;10947:5;10972:81;10988:64;11045:6;10988:64;:::i;:::-;10972:81;:::i;:::-;10963:90;;11073:5;11102:6;11095:5;11088:21;11136:4;11129:5;11125:16;11118:23;;11189:4;11181:6;11177:17;11169:6;11165:30;11218:3;11210:6;11207:15;11204:122;;;11237:79;;:::i;:::-;11204:122;11352:6;11335:220;11369:6;11364:3;11361:15;11335:220;;;11444:3;11473:37;11506:3;11494:10;11473:37;:::i;:::-;11468:3;11461:50;11540:4;11535:3;11531:14;11524:21;;11411:144;11395:4;11390:3;11386:14;11379:21;;11335:220;;;11339:21;10953:608;;10851:710;;;;;:::o;11584:370::-;11655:5;11704:3;11697:4;11689:6;11685:17;11681:27;11671:122;;11712:79;;:::i;:::-;11671:122;11829:6;11816:20;11854:94;11944:3;11936:6;11929:4;11921:6;11917:17;11854:94;:::i;:::-;11845:103;;11661:293;11584:370;;;;:::o;11960:539::-;12044:6;12093:2;12081:9;12072:7;12068:23;12064:32;12061:119;;;12099:79;;:::i;:::-;12061:119;12247:1;12236:9;12232:17;12219:31;12277:18;12269:6;12266:30;12263:117;;;12299:79;;:::i;:::-;12263:117;12404:78;12474:7;12465:6;12454:9;12450:22;12404:78;:::i;:::-;12394:88;;12190:302;11960:539;;;;:::o;12505:116::-;12575:21;12590:5;12575:21;:::i;:::-;12568:5;12565:32;12555:60;;12611:1;12608;12601:12;12555:60;12505:116;:::o;12627:133::-;12670:5;12708:6;12695:20;12686:29;;12724:30;12748:5;12724:30;:::i;:::-;12627:133;;;;:::o;12766:468::-;12831:6;12839;12888:2;12876:9;12867:7;12863:23;12859:32;12856:119;;;12894:79;;:::i;:::-;12856:119;13014:1;13039:53;13084:7;13075:6;13064:9;13060:22;13039:53;:::i;:::-;13029:63;;12985:117;13141:2;13167:50;13209:7;13200:6;13189:9;13185:22;13167:50;:::i;:::-;13157:60;;13112:115;12766:468;;;;;:::o;13240:307::-;13301:4;13391:18;13383:6;13380:30;13377:56;;;13413:18;;:::i;:::-;13377:56;13451:29;13473:6;13451:29;:::i;:::-;13443:37;;13535:4;13529;13525:15;13517:23;;13240:307;;;:::o;13553:410::-;13630:5;13655:65;13671:48;13712:6;13671:48;:::i;:::-;13655:65;:::i;:::-;13646:74;;13743:6;13736:5;13729:21;13781:4;13774:5;13770:16;13819:3;13810:6;13805:3;13801:16;13798:25;13795:112;;;13826:79;;:::i;:::-;13795:112;13916:41;13950:6;13945:3;13940;13916:41;:::i;:::-;13636:327;13553:410;;;;;:::o;13982:338::-;14037:5;14086:3;14079:4;14071:6;14067:17;14063:27;14053:122;;14094:79;;:::i;:::-;14053:122;14211:6;14198:20;14236:78;14310:3;14302:6;14295:4;14287:6;14283:17;14236:78;:::i;:::-;14227:87;;14043:277;13982:338;;;;:::o;14326:943::-;14421:6;14429;14437;14445;14494:3;14482:9;14473:7;14469:23;14465:33;14462:120;;;14501:79;;:::i;:::-;14462:120;14621:1;14646:53;14691:7;14682:6;14671:9;14667:22;14646:53;:::i;:::-;14636:63;;14592:117;14748:2;14774:53;14819:7;14810:6;14799:9;14795:22;14774:53;:::i;:::-;14764:63;;14719:118;14876:2;14902:53;14947:7;14938:6;14927:9;14923:22;14902:53;:::i;:::-;14892:63;;14847:118;15032:2;15021:9;15017:18;15004:32;15063:18;15055:6;15052:30;15049:117;;;15085:79;;:::i;:::-;15049:117;15190:62;15244:7;15235:6;15224:9;15220:22;15190:62;:::i;:::-;15180:72;;14975:287;14326:943;;;;;;;:::o;15275:474::-;15343:6;15351;15400:2;15388:9;15379:7;15375:23;15371:32;15368:119;;;15406:79;;:::i;:::-;15368:119;15526:1;15551:53;15596:7;15587:6;15576:9;15572:22;15551:53;:::i;:::-;15541:63;;15497:117;15653:2;15679:53;15724:7;15715:6;15704:9;15700:22;15679:53;:::i;:::-;15669:63;;15624:118;15275:474;;;;;:::o;15755:180::-;15803:77;15800:1;15793:88;15900:4;15897:1;15890:15;15924:4;15921:1;15914:15;15941:320;15985:6;16022:1;16016:4;16012:12;16002:22;;16069:1;16063:4;16059:12;16090:18;16080:81;;16146:4;16138:6;16134:17;16124:27;;16080:81;16208:2;16200:6;16197:14;16177:18;16174:38;16171:84;;16227:18;;:::i;:::-;16171:84;15992:269;15941:320;;;:::o;16267:231::-;16407:34;16403:1;16395:6;16391:14;16384:58;16476:14;16471:2;16463:6;16459:15;16452:39;16267:231;:::o;16504:366::-;16646:3;16667:67;16731:2;16726:3;16667:67;:::i;:::-;16660:74;;16743:93;16832:3;16743:93;:::i;:::-;16861:2;16856:3;16852:12;16845:19;;16504:366;;;:::o;16876:419::-;17042:4;17080:2;17069:9;17065:18;17057:26;;17129:9;17123:4;17119:20;17115:1;17104:9;17100:17;17093:47;17157:131;17283:4;17157:131;:::i;:::-;17149:139;;16876:419;;;:::o;17301:220::-;17441:34;17437:1;17429:6;17425:14;17418:58;17510:3;17505:2;17497:6;17493:15;17486:28;17301:220;:::o;17527:366::-;17669:3;17690:67;17754:2;17749:3;17690:67;:::i;:::-;17683:74;;17766:93;17855:3;17766:93;:::i;:::-;17884:2;17879:3;17875:12;17868:19;;17527:366;;;:::o;17899:419::-;18065:4;18103:2;18092:9;18088:18;18080:26;;18152:9;18146:4;18142:20;18138:1;18127:9;18123:17;18116:47;18180:131;18306:4;18180:131;:::i;:::-;18172:139;;17899:419;;;:::o;18324:243::-;18464:34;18460:1;18452:6;18448:14;18441:58;18533:26;18528:2;18520:6;18516:15;18509:51;18324:243;:::o;18573:366::-;18715:3;18736:67;18800:2;18795:3;18736:67;:::i;:::-;18729:74;;18812:93;18901:3;18812:93;:::i;:::-;18930:2;18925:3;18921:12;18914:19;;18573:366;;;:::o;18945:419::-;19111:4;19149:2;19138:9;19134:18;19126:26;;19198:9;19192:4;19188:20;19184:1;19173:9;19169:17;19162:47;19226:131;19352:4;19226:131;:::i;:::-;19218:139;;18945:419;;;:::o;19370:236::-;19510:34;19506:1;19498:6;19494:14;19487:58;19579:19;19574:2;19566:6;19562:15;19555:44;19370:236;:::o;19612:366::-;19754:3;19775:67;19839:2;19834:3;19775:67;:::i;:::-;19768:74;;19851:93;19940:3;19851:93;:::i;:::-;19969:2;19964:3;19960:12;19953:19;;19612:366;;;:::o;19984:419::-;20150:4;20188:2;20177:9;20173:18;20165:26;;20237:9;20231:4;20227:20;20223:1;20212:9;20208:17;20201:47;20265:131;20391:4;20265:131;:::i;:::-;20257:139;;19984:419;;;:::o;20409:141::-;20458:4;20481:3;20473:11;;20504:3;20501:1;20494:14;20538:4;20535:1;20525:18;20517:26;;20409:141;;;:::o;20556:93::-;20593:6;20640:2;20635;20628:5;20624:14;20620:23;20610:33;;20556:93;;;:::o;20655:107::-;20699:8;20749:5;20743:4;20739:16;20718:37;;20655:107;;;;:::o;20768:393::-;20837:6;20887:1;20875:10;20871:18;20910:97;20940:66;20929:9;20910:97;:::i;:::-;21028:39;21058:8;21047:9;21028:39;:::i;:::-;21016:51;;21100:4;21096:9;21089:5;21085:21;21076:30;;21149:4;21139:8;21135:19;21128:5;21125:30;21115:40;;20844:317;;20768:393;;;;;:::o;21167:60::-;21195:3;21216:5;21209:12;;21167:60;;;:::o;21233:142::-;21283:9;21316:53;21334:34;21343:24;21361:5;21343:24;:::i;:::-;21334:34;:::i;:::-;21316:53;:::i;:::-;21303:66;;21233:142;;;:::o;21381:75::-;21424:3;21445:5;21438:12;;21381:75;;;:::o;21462:269::-;21572:39;21603:7;21572:39;:::i;:::-;21633:91;21682:41;21706:16;21682:41;:::i;:::-;21674:6;21667:4;21661:11;21633:91;:::i;:::-;21627:4;21620:105;21538:193;21462:269;;;:::o;21737:73::-;21782:3;21737:73;:::o;21816:189::-;21893:32;;:::i;:::-;21934:65;21992:6;21984;21978:4;21934:65;:::i;:::-;21869:136;21816:189;;:::o;22011:186::-;22071:120;22088:3;22081:5;22078:14;22071:120;;;22142:39;22179:1;22172:5;22142:39;:::i;:::-;22115:1;22108:5;22104:13;22095:22;;22071:120;;;22011:186;;:::o;22203:543::-;22304:2;22299:3;22296:11;22293:446;;;22338:38;22370:5;22338:38;:::i;:::-;22422:29;22440:10;22422:29;:::i;:::-;22412:8;22408:44;22605:2;22593:10;22590:18;22587:49;;;22626:8;22611:23;;22587:49;22649:80;22705:22;22723:3;22705:22;:::i;:::-;22695:8;22691:37;22678:11;22649:80;:::i;:::-;22308:431;;22293:446;22203:543;;;:::o;22752:117::-;22806:8;22856:5;22850:4;22846:16;22825:37;;22752:117;;;;:::o;22875:169::-;22919:6;22952:51;23000:1;22996:6;22988:5;22985:1;22981:13;22952:51;:::i;:::-;22948:56;23033:4;23027;23023:15;23013:25;;22926:118;22875:169;;;;:::o;23049:295::-;23125:4;23271:29;23296:3;23290:4;23271:29;:::i;:::-;23263:37;;23333:3;23330:1;23326:11;23320:4;23317:21;23309:29;;23049:295;;;;:::o;23349:1395::-;23466:37;23499:3;23466:37;:::i;:::-;23568:18;23560:6;23557:30;23554:56;;;23590:18;;:::i;:::-;23554:56;23634:38;23666:4;23660:11;23634:38;:::i;:::-;23719:67;23779:6;23771;23765:4;23719:67;:::i;:::-;23813:1;23837:4;23824:17;;23869:2;23861:6;23858:14;23886:1;23881:618;;;;24543:1;24560:6;24557:77;;;24609:9;24604:3;24600:19;24594:26;24585:35;;24557:77;24660:67;24720:6;24713:5;24660:67;:::i;:::-;24654:4;24647:81;24516:222;23851:887;;23881:618;23933:4;23929:9;23921:6;23917:22;23967:37;23999:4;23967:37;:::i;:::-;24026:1;24040:208;24054:7;24051:1;24048:14;24040:208;;;24133:9;24128:3;24124:19;24118:26;24110:6;24103:42;24184:1;24176:6;24172:14;24162:24;;24231:2;24220:9;24216:18;24203:31;;24077:4;24074:1;24070:12;24065:17;;24040:208;;;24276:6;24267:7;24264:19;24261:179;;;24334:9;24329:3;24325:19;24319:26;24377:48;24419:4;24411:6;24407:17;24396:9;24377:48;:::i;:::-;24369:6;24362:64;24284:156;24261:179;24486:1;24482;24474:6;24470:14;24466:22;24460:4;24453:36;23888:611;;;23851:887;;23441:1303;;;23349:1395;;:::o;24750:234::-;24890:34;24886:1;24878:6;24874:14;24867:58;24959:17;24954:2;24946:6;24942:15;24935:42;24750:234;:::o;24990:366::-;25132:3;25153:67;25217:2;25212:3;25153:67;:::i;:::-;25146:74;;25229:93;25318:3;25229:93;:::i;:::-;25347:2;25342:3;25338:12;25331:19;;24990:366;;;:::o;25362:419::-;25528:4;25566:2;25555:9;25551:18;25543:26;;25615:9;25609:4;25605:20;25601:1;25590:9;25586:17;25579:47;25643:131;25769:4;25643:131;:::i;:::-;25635:139;;25362:419;;;:::o;25787:228::-;25927:34;25923:1;25915:6;25911:14;25904:58;25996:11;25991:2;25983:6;25979:15;25972:36;25787:228;:::o;26021:366::-;26163:3;26184:67;26248:2;26243:3;26184:67;:::i;:::-;26177:74;;26260:93;26349:3;26260:93;:::i;:::-;26378:2;26373:3;26369:12;26362:19;;26021:366;;;:::o;26393:419::-;26559:4;26597:2;26586:9;26582:18;26574:26;;26646:9;26640:4;26636:20;26632:1;26621:9;26617:17;26610:47;26674:131;26800:4;26674:131;:::i;:::-;26666:139;;26393:419;;;:::o;26818:229::-;26958:34;26954:1;26946:6;26942:14;26935:58;27027:12;27022:2;27014:6;27010:15;27003:37;26818:229;:::o;27053:366::-;27195:3;27216:67;27280:2;27275:3;27216:67;:::i;:::-;27209:74;;27292:93;27381:3;27292:93;:::i;:::-;27410:2;27405:3;27401:12;27394:19;;27053:366;;;:::o;27425:419::-;27591:4;27629:2;27618:9;27614:18;27606:26;;27678:9;27672:4;27668:20;27664:1;27653:9;27649:17;27642:47;27706:131;27832:4;27706:131;:::i;:::-;27698:139;;27425:419;;;:::o;27850:180::-;27898:77;27895:1;27888:88;27995:4;27992:1;27985:15;28019:4;28016:1;28009:15;28036:180;28084:77;28081:1;28074:88;28181:4;28178:1;28171:15;28205:4;28202:1;28195:15;28222:233;28261:3;28284:24;28302:5;28284:24;:::i;:::-;28275:33;;28330:66;28323:5;28320:77;28317:103;;28400:18;;:::i;:::-;28317:103;28447:1;28440:5;28436:13;28429:20;;28222:233;;;:::o;28461:234::-;28601:34;28597:1;28589:6;28585:14;28578:58;28670:17;28665:2;28657:6;28653:15;28646:42;28461:234;:::o;28701:366::-;28843:3;28864:67;28928:2;28923:3;28864:67;:::i;:::-;28857:74;;28940:93;29029:3;28940:93;:::i;:::-;29058:2;29053:3;29049:12;29042:19;;28701:366;;;:::o;29073:419::-;29239:4;29277:2;29266:9;29262:18;29254:26;;29326:9;29320:4;29316:20;29312:1;29301:9;29297:17;29290:47;29354:131;29480:4;29354:131;:::i;:::-;29346:139;;29073:419;;;:::o;29498:148::-;29600:11;29637:3;29622:18;;29498:148;;;;:::o;29652:377::-;29758:3;29786:39;29819:5;29786:39;:::i;:::-;29841:89;29923:6;29918:3;29841:89;:::i;:::-;29834:96;;29939:52;29984:6;29979:3;29972:4;29965:5;29961:16;29939:52;:::i;:::-;30016:6;30011:3;30007:16;30000:23;;29762:267;29652:377;;;;:::o;30035:435::-;30215:3;30237:95;30328:3;30319:6;30237:95;:::i;:::-;30230:102;;30349:95;30440:3;30431:6;30349:95;:::i;:::-;30342:102;;30461:3;30454:10;;30035:435;;;;;:::o;30476:231::-;30616:34;30612:1;30604:6;30600:14;30593:58;30685:14;30680:2;30672:6;30668:15;30661:39;30476:231;:::o;30713:366::-;30855:3;30876:67;30940:2;30935:3;30876:67;:::i;:::-;30869:74;;30952:93;31041:3;30952:93;:::i;:::-;31070:2;31065:3;31061:12;31054:19;;30713:366;;;:::o;31085:419::-;31251:4;31289:2;31278:9;31274:18;31266:26;;31338:9;31332:4;31328:20;31324:1;31313:9;31309:17;31302:47;31366:131;31492:4;31366:131;:::i;:::-;31358:139;;31085:419;;;:::o;31510:224::-;31650:34;31646:1;31638:6;31634:14;31627:58;31719:7;31714:2;31706:6;31702:15;31695:32;31510:224;:::o;31740:366::-;31882:3;31903:67;31967:2;31962:3;31903:67;:::i;:::-;31896:74;;31979:93;32068:3;31979:93;:::i;:::-;32097:2;32092:3;32088:12;32081:19;;31740:366;;;:::o;32112:419::-;32278:4;32316:2;32305:9;32301:18;32293:26;;32365:9;32359:4;32355:20;32351:1;32340:9;32336:17;32329:47;32393:131;32519:4;32393:131;:::i;:::-;32385:139;;32112:419;;;:::o;32537:223::-;32677:34;32673:1;32665:6;32661:14;32654:58;32746:6;32741:2;32733:6;32729:15;32722:31;32537:223;:::o;32766:366::-;32908:3;32929:67;32993:2;32988:3;32929:67;:::i;:::-;32922:74;;33005:93;33094:3;33005:93;:::i;:::-;33123:2;33118:3;33114:12;33107:19;;32766:366;;;:::o;33138:419::-;33304:4;33342:2;33331:9;33327:18;33319:26;;33391:9;33385:4;33381:20;33377:1;33366:9;33362:17;33355:47;33419:131;33545:4;33419:131;:::i;:::-;33411:139;;33138:419;;;:::o;33563:191::-;33603:4;33623:20;33641:1;33623:20;:::i;:::-;33618:25;;33657:20;33675:1;33657:20;:::i;:::-;33652:25;;33696:1;33693;33690:8;33687:34;;;33701:18;;:::i;:::-;33687:34;33746:1;33743;33739:9;33731:17;;33563:191;;;;:::o;33760:305::-;33800:3;33819:20;33837:1;33819:20;:::i;:::-;33814:25;;33853:20;33871:1;33853:20;:::i;:::-;33848:25;;34007:1;33939:66;33935:74;33932:1;33929:81;33926:107;;;34013:18;;:::i;:::-;33926:107;34057:1;34054;34050:9;34043:16;;33760:305;;;;:::o;34071:168::-;34211:20;34207:1;34199:6;34195:14;34188:44;34071:168;:::o;34245:366::-;34387:3;34408:67;34472:2;34467:3;34408:67;:::i;:::-;34401:74;;34484:93;34573:3;34484:93;:::i;:::-;34602:2;34597:3;34593:12;34586:19;;34245:366;;;:::o;34617:419::-;34783:4;34821:2;34810:9;34806:18;34798:26;;34870:9;34864:4;34860:20;34856:1;34845:9;34841:17;34834:47;34898:131;35024:4;34898:131;:::i;:::-;34890:139;;34617:419;;;:::o;35042:174::-;35182:26;35178:1;35170:6;35166:14;35159:50;35042:174;:::o;35222:366::-;35364:3;35385:67;35449:2;35444:3;35385:67;:::i;:::-;35378:74;;35461:93;35550:3;35461:93;:::i;:::-;35579:2;35574:3;35570:12;35563:19;;35222:366;;;:::o;35594:419::-;35760:4;35798:2;35787:9;35783:18;35775:26;;35847:9;35841:4;35837:20;35833:1;35822:9;35818:17;35811:47;35875:131;36001:4;35875:131;:::i;:::-;35867:139;;35594:419;;;:::o;36019:180::-;36067:77;36064:1;36057:88;36164:4;36161:1;36154:15;36188:4;36185:1;36178:15;36205:176;36237:1;36254:20;36272:1;36254:20;:::i;:::-;36249:25;;36288:20;36306:1;36288:20;:::i;:::-;36283:25;;36327:1;36317:35;;36332:18;;:::i;:::-;36317:35;36373:1;36370;36366:9;36361:14;;36205:176;;;;:::o;36387:185::-;36427:1;36444:20;36462:1;36444:20;:::i;:::-;36439:25;;36478:20;36496:1;36478:20;:::i;:::-;36473:25;;36517:1;36507:35;;36522:18;;:::i;:::-;36507:35;36564:1;36561;36557:9;36552:14;;36387:185;;;;:::o;36578:229::-;36718:34;36714:1;36706:6;36702:14;36695:58;36787:12;36782:2;36774:6;36770:15;36763:37;36578:229;:::o;36813:366::-;36955:3;36976:67;37040:2;37035:3;36976:67;:::i;:::-;36969:74;;37052:93;37141:3;37052:93;:::i;:::-;37170:2;37165:3;37161:12;37154:19;;36813:366;;;:::o;37185:419::-;37351:4;37389:2;37378:9;37374:18;37366:26;;37438:9;37432:4;37428:20;37424:1;37413:9;37409:17;37402:47;37466:131;37592:4;37466:131;:::i;:::-;37458:139;;37185:419;;;:::o;37610:230::-;37750:34;37746:1;37738:6;37734:14;37727:58;37819:13;37814:2;37806:6;37802:15;37795:38;37610:230;:::o;37846:366::-;37988:3;38009:67;38073:2;38068:3;38009:67;:::i;:::-;38002:74;;38085:93;38174:3;38085:93;:::i;:::-;38203:2;38198:3;38194:12;38187:19;;37846:366;;;:::o;38218:419::-;38384:4;38422:2;38411:9;38407:18;38399:26;;38471:9;38465:4;38461:20;38457:1;38446:9;38442:17;38435:47;38499:131;38625:4;38499:131;:::i;:::-;38491:139;;38218:419;;;:::o;38643:170::-;38783:22;38779:1;38771:6;38767:14;38760:46;38643:170;:::o;38819:366::-;38961:3;38982:67;39046:2;39041:3;38982:67;:::i;:::-;38975:74;;39058:93;39147:3;39058:93;:::i;:::-;39176:2;39171:3;39167:12;39160:19;;38819:366;;;:::o;39191:419::-;39357:4;39395:2;39384:9;39380:18;39372:26;;39444:9;39438:4;39434:20;39430:1;39419:9;39415:17;39408:47;39472:131;39598:4;39472:131;:::i;:::-;39464:139;;39191:419;;;:::o;39616:147::-;39717:11;39754:3;39739:18;;39616:147;;;;:::o;39769:114::-;;:::o;39889:398::-;40048:3;40069:83;40150:1;40145:3;40069:83;:::i;:::-;40062:90;;40161:93;40250:3;40161:93;:::i;:::-;40279:1;40274:3;40270:11;40263:18;;39889:398;;;:::o;40293:379::-;40477:3;40499:147;40642:3;40499:147;:::i;:::-;40492:154;;40663:3;40656:10;;40293:379;;;:::o;40678:170::-;40818:22;40814:1;40806:6;40802:14;40795:46;40678:170;:::o;40854:366::-;40996:3;41017:67;41081:2;41076:3;41017:67;:::i;:::-;41010:74;;41093:93;41182:3;41093:93;:::i;:::-;41211:2;41206:3;41202:12;41195:19;;40854:366;;;:::o;41226:419::-;41392:4;41430:2;41419:9;41415:18;41407:26;;41479:9;41473:4;41469:20;41465:1;41454:9;41450:17;41443:47;41507:131;41633:4;41507:131;:::i;:::-;41499:139;;41226:419;;;:::o;41651:166::-;41791:18;41787:1;41779:6;41775:14;41768:42;41651:166;:::o;41823:366::-;41965:3;41986:67;42050:2;42045:3;41986:67;:::i;:::-;41979:74;;42062:93;42151:3;42062:93;:::i;:::-;42180:2;42175:3;42171:12;42164:19;;41823:366;;;:::o;42195:419::-;42361:4;42399:2;42388:9;42384:18;42376:26;;42448:9;42442:4;42438:20;42434:1;42423:9;42419:17;42412:47;42476:131;42602:4;42476:131;:::i;:::-;42468:139;;42195:419;;;:::o;42620:181::-;42760:33;42756:1;42748:6;42744:14;42737:57;42620:181;:::o;42807:366::-;42949:3;42970:67;43034:2;43029:3;42970:67;:::i;:::-;42963:74;;43046:93;43135:3;43046:93;:::i;:::-;43164:2;43159:3;43155:12;43148:19;;42807:366;;;:::o;43179:419::-;43345:4;43383:2;43372:9;43368:18;43360:26;;43432:9;43426:4;43422:20;43418:1;43407:9;43403:17;43396:47;43460:131;43586:4;43460:131;:::i;:::-;43452:139;;43179:419;;;:::o;43604:171::-;43744:23;43740:1;43732:6;43728:14;43721:47;43604:171;:::o;43781:366::-;43923:3;43944:67;44008:2;44003:3;43944:67;:::i;:::-;43937:74;;44020:93;44109:3;44020:93;:::i;:::-;44138:2;44133:3;44129:12;44122:19;;43781:366;;;:::o;44153:419::-;44319:4;44357:2;44346:9;44342:18;44334:26;;44406:9;44400:4;44396:20;44392:1;44381:9;44377:17;44370:47;44434:131;44560:4;44434:131;:::i;:::-;44426:139;;44153:419;;;:::o;44578:177::-;44718:29;44714:1;44706:6;44702:14;44695:53;44578:177;:::o;44761:366::-;44903:3;44924:67;44988:2;44983:3;44924:67;:::i;:::-;44917:74;;45000:93;45089:3;45000:93;:::i;:::-;45118:2;45113:3;45109:12;45102:19;;44761:366;;;:::o;45133:419::-;45299:4;45337:2;45326:9;45322:18;45314:26;;45386:9;45380:4;45376:20;45372:1;45361:9;45357:17;45350:47;45414:131;45540:4;45414:131;:::i;:::-;45406:139;;45133:419;;;:::o;45558:232::-;45698:34;45694:1;45686:6;45682:14;45675:58;45767:15;45762:2;45754:6;45750:15;45743:40;45558:232;:::o;45796:366::-;45938:3;45959:67;46023:2;46018:3;45959:67;:::i;:::-;45952:74;;46035:93;46124:3;46035:93;:::i;:::-;46153:2;46148:3;46144:12;46137:19;;45796:366;;;:::o;46168:419::-;46334:4;46372:2;46361:9;46357:18;46349:26;;46421:9;46415:4;46411:20;46407:1;46396:9;46392:17;46385:47;46449:131;46575:4;46449:131;:::i;:::-;46441:139;;46168:419;;;:::o;46593:247::-;46733:34;46729:1;46721:6;46717:14;46710:58;46802:30;46797:2;46789:6;46785:15;46778:55;46593:247;:::o;46846:366::-;46988:3;47009:67;47073:2;47068:3;47009:67;:::i;:::-;47002:74;;47085:93;47174:3;47085:93;:::i;:::-;47203:2;47198:3;47194:12;47187:19;;46846:366;;;:::o;47218:419::-;47384:4;47422:2;47411:9;47407:18;47399:26;;47471:9;47465:4;47461:20;47457:1;47446:9;47442:17;47435:47;47499:131;47625:4;47499:131;:::i;:::-;47491:139;;47218:419;;;:::o;47643:175::-;47783:27;47779:1;47771:6;47767:14;47760:51;47643:175;:::o;47824:366::-;47966:3;47987:67;48051:2;48046:3;47987:67;:::i;:::-;47980:74;;48063:93;48152:3;48063:93;:::i;:::-;48181:2;48176:3;48172:12;48165:19;;47824:366;;;:::o;48196:419::-;48362:4;48400:2;48389:9;48385:18;48377:26;;48449:9;48443:4;48439:20;48435:1;48424:9;48420:17;48413:47;48477:131;48603:4;48477:131;:::i;:::-;48469:139;;48196:419;;;:::o;48621:237::-;48761:34;48757:1;48749:6;48745:14;48738:58;48830:20;48825:2;48817:6;48813:15;48806:45;48621:237;:::o;48864:366::-;49006:3;49027:67;49091:2;49086:3;49027:67;:::i;:::-;49020:74;;49103:93;49192:3;49103:93;:::i;:::-;49221:2;49216:3;49212:12;49205:19;;48864:366;;;:::o;49236:419::-;49402:4;49440:2;49429:9;49425:18;49417:26;;49489:9;49483:4;49479:20;49475:1;49464:9;49460:17;49453:47;49517:131;49643:4;49517:131;:::i;:::-;49509:139;;49236:419;;;:::o;49661:173::-;49801:25;49797:1;49789:6;49785:14;49778:49;49661:173;:::o;49840:402::-;50000:3;50021:85;50103:2;50098:3;50021:85;:::i;:::-;50014:92;;50115:93;50204:3;50115:93;:::i;:::-;50233:2;50228:3;50224:12;50217:19;;49840:402;;;:::o;50248:167::-;50388:19;50384:1;50376:6;50372:14;50365:43;50248:167;:::o;50421:402::-;50581:3;50602:85;50684:2;50679:3;50602:85;:::i;:::-;50595:92;;50696:93;50785:3;50696:93;:::i;:::-;50814:2;50809:3;50805:12;50798:19;;50421:402;;;:::o;50829:967::-;51211:3;51233:148;51377:3;51233:148;:::i;:::-;51226:155;;51398:95;51489:3;51480:6;51398:95;:::i;:::-;51391:102;;51510:148;51654:3;51510:148;:::i;:::-;51503:155;;51675:95;51766:3;51757:6;51675:95;:::i;:::-;51668:102;;51787:3;51780:10;;50829:967;;;;;:::o;51802:182::-;51942:34;51938:1;51930:6;51926:14;51919:58;51802:182;:::o;51990:366::-;52132:3;52153:67;52217:2;52212:3;52153:67;:::i;:::-;52146:74;;52229:93;52318:3;52229:93;:::i;:::-;52347:2;52342:3;52338:12;52331:19;;51990:366;;;:::o;52362:419::-;52528:4;52566:2;52555:9;52551:18;52543:26;;52615:9;52609:4;52605:20;52601:1;52590:9;52586:17;52579:47;52643:131;52769:4;52643:131;:::i;:::-;52635:139;;52362:419;;;:::o;52787:178::-;52927:30;52923:1;52915:6;52911:14;52904:54;52787:178;:::o;52971:366::-;53113:3;53134:67;53198:2;53193:3;53134:67;:::i;:::-;53127:74;;53210:93;53299:3;53210:93;:::i;:::-;53328:2;53323:3;53319:12;53312:19;;52971:366;;;:::o;53343:419::-;53509:4;53547:2;53536:9;53532:18;53524:26;;53596:9;53590:4;53586:20;53582:1;53571:9;53567:17;53560:47;53624:131;53750:4;53624:131;:::i;:::-;53616:139;;53343:419;;;:::o;53768:98::-;53819:6;53853:5;53847:12;53837:22;;53768:98;;;:::o;53872:168::-;53955:11;53989:6;53984:3;53977:19;54029:4;54024:3;54020:14;54005:29;;53872:168;;;;:::o;54046:360::-;54132:3;54160:38;54192:5;54160:38;:::i;:::-;54214:70;54277:6;54272:3;54214:70;:::i;:::-;54207:77;;54293:52;54338:6;54333:3;54326:4;54319:5;54315:16;54293:52;:::i;:::-;54370:29;54392:6;54370:29;:::i;:::-;54365:3;54361:39;54354:46;;54136:270;54046:360;;;;:::o;54412:640::-;54607:4;54645:3;54634:9;54630:19;54622:27;;54659:71;54727:1;54716:9;54712:17;54703:6;54659:71;:::i;:::-;54740:72;54808:2;54797:9;54793:18;54784:6;54740:72;:::i;:::-;54822;54890:2;54879:9;54875:18;54866:6;54822:72;:::i;:::-;54941:9;54935:4;54931:20;54926:2;54915:9;54911:18;54904:48;54969:76;55040:4;55031:6;54969:76;:::i;:::-;54961:84;;54412:640;;;;;;;:::o;55058:141::-;55114:5;55145:6;55139:13;55130:22;;55161:32;55187:5;55161:32;:::i;:::-;55058:141;;;;:::o;55205:349::-;55274:6;55323:2;55311:9;55302:7;55298:23;55294:32;55291:119;;;55329:79;;:::i;:::-;55291:119;55449:1;55474:63;55529:7;55520:6;55509:9;55505:22;55474:63;:::i;:::-;55464:73;;55420:127;55205:349;;;;:::o;55560:348::-;55600:7;55623:20;55641:1;55623:20;:::i;:::-;55618:25;;55657:20;55675:1;55657:20;:::i;:::-;55652:25;;55845:1;55777:66;55773:74;55770:1;55767:81;55762:1;55755:9;55748:17;55744:105;55741:131;;;55852:18;;:::i;:::-;55741:131;55900:1;55897;55893:9;55882:20;;55560:348;;;;:::o;55914:171::-;55953:3;55976:24;55994:5;55976:24;:::i;:::-;55967:33;;56022:4;56015:5;56012:15;56009:41;;56030:18;;:::i;:::-;56009:41;56077:1;56070:5;56066:13;56059:20;;55914:171;;;:::o;56091:182::-;56231:34;56227:1;56219:6;56215:14;56208:58;56091:182;:::o;56279:366::-;56421:3;56442:67;56506:2;56501:3;56442:67;:::i;:::-;56435:74;;56518:93;56607:3;56518:93;:::i;:::-;56636:2;56631:3;56627:12;56620:19;;56279:366;;;:::o;56651:419::-;56817:4;56855:2;56844:9;56840:18;56832:26;;56904:9;56898:4;56894:20;56890:1;56879:9;56875:17;56868:47;56932:131;57058:4;56932:131;:::i;:::-;56924:139;;56651:419;;;:::o
Swarm Source
ipfs://9e75d11e6dff25941b11bc5c796551b4d9f429998511cde25bb9b2a593a46579
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.