Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
69
Holders
69
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
InfernityRewards
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-04 */ // 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/cryptography/ECDSA.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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/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/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: In Progress/ERC1155Airdrops.sol pragma solidity ^0.8.7; contract InfernityRewards is ERC1155, Ownable { using ECDSA for bytes32; using Strings for uint; struct TokenSettings { bool isSaleActive; uint120 maxSupply; uint120 currentSupply; } modifier directOnly { require(tx.origin == msg.sender, "You may only interact with this function directly!"); _; } constructor(string memory baseUri_) ERC1155("") { baseUri = baseUri_; } address signer = 0x3402F7106bFCe1426784FaE31F2900cc7bF11b29; string baseUri; mapping(uint => TokenSettings) public tokenSettings; mapping(uint => mapping(address => uint)) public mintsOfTokenOfAddress; mapping(uint => bool) public settingsLocked; function mint(uint id, uint amount, uint maxMints, bytes memory signature) external directOnly { TokenSettings storage settings = tokenSettings[id]; require(settings.isSaleActive, "Sale is not active currently"); require((settings.currentSupply += uint120(amount)) <= settings.maxSupply, "Mint would exceed max supply"); require((mintsOfTokenOfAddress[id][msg.sender] += amount) <= maxMints, string(abi.encodePacked( "Mint would exceed remaining mints for address (", (maxMints - (mintsOfTokenOfAddress[id][msg.sender] - amount)).toString() ,")") )); require(keccak256(abi.encode(msg.sender, id, maxMints)).toEthSignedMessageHash().recover(signature) == signer, "Invalid signature"); _mint(msg.sender, id, amount, ""); } /* Public View Only Functions */ function uri(uint id) public view override(ERC1155) returns(string memory) { require(tokenSettings[id].currentSupply > 0, "Token does not exist"); return string(abi.encodePacked(baseUri,id.toString(),".json")); } function tokenIdToSettings(uint id) external view returns(TokenSettings memory) { return tokenSettings[id]; } /* Owner Only Functions */ function adminMint(uint id, address[] memory to, uint[] memory amount) external onlyOwner { unchecked { uint totalMinted; for(uint i = 0; i < to.length; i++) { _mint(to[i], id, amount[i], ""); totalMinted += amount[i]; } TokenSettings storage settings = tokenSettings[id]; require((settings.currentSupply += uint120(totalMinted)) <= settings.maxSupply, "Mint would exceed max supply"); } } function lockSettings(uint id) external onlyOwner { settingsLocked[id] = true; } function changeSigner(address signer_) external onlyOwner { signer = signer_; } function changeBaseUri(string calldata baseUri_) external onlyOwner { baseUri = baseUri_; } function setTokenSettings(uint id, bool isSaleActive, uint120 maxSupply) external onlyOwner { require(!settingsLocked[id], "Settings are no longer changeable for this token"); TokenSettings storage settings = tokenSettings[id]; settings.isSaleActive = isSaleActive; settings.maxSupply = maxSupply; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri_","type":"string"}],"name":"changeBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer_","type":"address"}],"name":"changeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"lockSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxMints","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"mintsOfTokenOfAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"},{"internalType":"uint120","name":"maxSupply","type":"uint120"}],"name":"setTokenSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"settingsLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenIdToSettings","outputs":[{"components":[{"internalType":"bool","name":"isSaleActive","type":"bool"},{"internalType":"uint120","name":"maxSupply","type":"uint120"},{"internalType":"uint120","name":"currentSupply","type":"uint120"}],"internalType":"struct InfernityRewards.TokenSettings","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSettings","outputs":[{"internalType":"bool","name":"isSaleActive","type":"bool"},{"internalType":"uint120","name":"maxSupply","type":"uint120"},{"internalType":"uint120","name":"currentSupply","type":"uint120"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600480546001600160a01b031916733402f7106bfce1426784fae31f2900cc7bf11b291790553480156200003757600080fd5b5060405162002eaa38038062002eaa8339810160408190526200005a91620001ae565b60408051602081019091526000815262000074816200009d565b506200008033620000b6565b80516200009590600590602084019062000108565b5050620002dd565b8051620000b290600290602084019062000108565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000116906200028a565b90600052602060002090601f0160209004810192826200013a576000855562000185565b82601f106200015557805160ff191683800117855562000185565b8280016001018555821562000185579182015b828111156200018557825182559160200191906001019062000168565b506200019392915062000197565b5090565b5b8082111562000193576000815560010162000198565b60006020808385031215620001c257600080fd5b82516001600160401b0380821115620001da57600080fd5b818501915085601f830112620001ef57600080fd5b815181811115620002045762000204620002c7565b604051601f8201601f19908116603f011681019083821181831017156200022f576200022f620002c7565b8160405282815288868487010111156200024857600080fd5b600093505b828410156200026c57848401860151818501870152928501926200024d565b828411156200027e5760008684830101525b98975050505050505050565b600181811c908216806200029f57607f821691505b60208210811415620002c157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612bbd80620002ed6000396000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c806377a54b4b116100d8578063cfb377d61161008c578063edb30fdc11610066578063edb30fdc1461043d578063f242432a14610450578063f2fde38b1461046357600080fd5b8063cfb377d6146103c3578063d47becc2146103ee578063e985e9c51461040157600080fd5b80638da5cb5b116100bd5780638da5cb5b14610382578063a22cb4651461039d578063aad2b723146103b057600080fd5b806377a54b4b146102ce5780637996988c146102e157600080fd5b80634a9eee691161012f5780635059d0d2116101145780635059d0d21461023f578063666bc5b3146102a3578063715018a6146102c657600080fd5b80634a9eee691461020c5780634e1273f41461021f57600080fd5b80630e89341c116101605780630e89341c146101c45780632eb2c2d6146101e4578063492d306b146101f957600080fd5b8062fdd58e1461017b57806301ffc9a7146101a1575b600080fd5b61018e6101893660046123a7565b610476565b6040519081526020015b60405180910390f35b6101b46101af366004612435565b61051f565b6040519015158152602001610198565b6101d76101d23660046124e1565b6105bc565b60405161019891906128f1565b6101f76101f236600461226e565b61065c565b005b6101f761020736600461246f565b6106fe565b6101f761021a3660046125d6565b610769565b61023261022d3660046123d1565b610aa2565b60405161019891906128b9565b61027c61024d3660046124e1565b60066020526000908152604090205460ff8116906001600160781b036101008204811691600160801b90041683565b6040805193151584526001600160781b039283166020850152911690820152606001610198565b6101b46102b13660046124e1565b60086020526000908152604090205460ff1681565b6101f7610be0565b6101f76102dc3660046124e1565b610c46565b61034d6102ef3660046124e1565b6040805160608082018352600080835260208084018290529284018190529384526006825292829020825193840183525460ff8116151584526001600160781b036101008204811692850192909252600160801b9004169082015290565b604080518251151581526020808401516001600160781b03908116918301919091529282015190921690820152606001610198565b6003546040516001600160a01b039091168152602001610198565b6101f76103ab36600461237d565b610cbb565b6101f76103be366004612219565b610cca565b61018e6103d13660046124fa565b600760209081526000928352604080842090915290825290205481565b6101f76103fc36600461258a565b610d53565b6101b461040f36600461223b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101f761044b36600461251d565b610ea7565b6101f761045e366004612318565b61102f565b6101f7610471366004612219565b6110ca565b60006001600160a01b0383166104f95760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061058257506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806105b657507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b600081815260066020526040902054606090600160801b90046001600160781b031661062a5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f0565b6005610635836111ac565b6040516020016106469291906126b3565b6040516020818303038152906040529050919050565b6001600160a01b0385163314806106785750610678853361040f565b6106ea5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016104f0565b6106f785858585856112e6565b5050505050565b6003546001600160a01b031633146107585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b61076460058383611ff8565b505050565b3233146107de5760405162461bcd60e51b815260206004820152603260248201527f596f75206d6179206f6e6c7920696e746572616374207769746820746869732060448201527f66756e6374696f6e206469726563746c7921000000000000000000000000000060648201526084016104f0565b6000848152600660205260409020805460ff1661083d5760405162461bcd60e51b815260206004820152601c60248201527f53616c65206973206e6f74206163746976652063757272656e746c790000000060448201526064016104f0565b80546001600160781b0361010082048116918691849160109161086a918591600160801b90910416612928565b92506101000a8154816001600160781b0302191690836001600160781b0316021790556001600160781b031611156108e45760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016104f0565b600085815260076020908152604080832033845290915281208054859287929161090f908490612953565b9182905550600088815260076020908152604080832033845290915290205492101591610951915061094290879061297f565b61094c908661297f565b6111ac565b6040516020016109619190612786565b6040516020818303038152906040529061098e5760405162461bcd60e51b81526004016104f091906128f1565b5060045460408051336020820152908101879052606081018590526001600160a01b0390911690610a31908490610a2b90608001604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611559565b6001600160a01b031614610a875760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016104f0565b6106f733868660405180602001604052806000815250611575565b60608151835114610b1b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104f0565b6000835167ffffffffffffffff811115610b3757610b37612ab5565b604051908082528060200260200182016040528015610b60578160200160208202803683370190505b50905060005b8451811015610bd857610bab858281518110610b8457610b84612a9f565b6020026020010151858381518110610b9e57610b9e612a9f565b6020026020010151610476565b828281518110610bbd57610bbd612a9f565b6020908102919091010152610bd181612a2e565b9050610b66565b509392505050565b6003546001600160a01b03163314610c3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b610c44600061169b565b565b6003546001600160a01b03163314610ca05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6000908152600860205260409020805460ff19166001179055565b610cc63383836116fa565b5050565b6003546001600160a01b03163314610d245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610dad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b60008381526008602052604090205460ff1615610e325760405162461bcd60e51b815260206004820152603060248201527f53657474696e677320617265206e6f206c6f6e676572206368616e676561626c60448201527f6520666f72207468697320746f6b656e0000000000000000000000000000000060648201526084016104f0565b60009283526006602052604090922080546001600160781b03909316610100027fffffffffffffffffffffffffffffffff000000000000000000000000000000ff921515929092167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090931692909217179055565b6003546001600160a01b03163314610f015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6000805b8351811015610f8657610f5b848281518110610f2357610f23612a9f565b602002602001015186858481518110610f3e57610f3e612a9f565b602002602001015160405180602001604052806000815250611575565b828181518110610f6d57610f6d612a9f565b6020026020010151820191508080600101915050610f05565b5060008481526006602052604090208054600160801b8082046001600160781b03908116850181169182027fff000000000000000000000000000000ffffffffffffffffffffffffffffffff84161784556101009092049190911610156106f75760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016104f0565b6001600160a01b03851633148061104b575061104b853361040f565b6110bd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016104f0565b6106f785858585856117ef565b6003546001600160a01b031633146111245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6001600160a01b0381166111a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f0565b6111a98161169b565b50565b6060816111ec57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611216578061120081612a2e565b915061120f9050600a8361296b565b91506111f0565b60008167ffffffffffffffff81111561123157611231612ab5565b6040519080825280601f01601f19166020018201604052801561125b576020820181803683370190505b5090505b84156112de5761127060018361297f565b915061127d600a86612a49565b611288906030612953565b60f81b81838151811061129d5761129d612a9f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506112d7600a8661296b565b945061125f565b949350505050565b815183511461135d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104f0565b6001600160a01b0384166113c15760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016104f0565b3360005b84518110156114eb5760008582815181106113e2576113e2612a9f565b60200260200101519050600085838151811061140057611400612a9f565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114935760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016104f0565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114d0908490612953565b92505081905550505050806114e490612a2e565b90506113c5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161153b9291906128cc565b60405180910390a461155181878787878761198d565b505050505050565b60008060006115688585611b42565b91509150610bd881611bb2565b6001600160a01b0384166115f15760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104f0565b3361160b8160008761160288611d6d565b6106f788611d6d565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061163b908490612953565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106f781600087878787611db8565b600380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104f0565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118535760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016104f0565b3361186381878761160288611d6d565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156118e75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016104f0565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611924908490612953565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611984828888888888611db8565b50505050505050565b6001600160a01b0384163b156115515760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119d19089908990889088908890600401612818565b602060405180830381600087803b1580156119eb57600080fd5b505af1925050508015611a1b575060408051601f3d908101601f19168201909252611a1891810190612452565b60015b611ad157611a27612acb565b806308c379a01415611a615750611a3c612ae7565b80611a475750611a63565b8060405162461bcd60e51b81526004016104f091906128f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104f0565b6001600160e01b0319811663bc197c8160e01b146119845760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016104f0565b600080825160411415611b795760208301516040840151606085015160001a611b6d87828585611ec3565b94509450505050611bab565b825160401415611ba35760208301516040840151611b98868383611fb0565b935093505050611bab565b506000905060025b9250929050565b6000816004811115611bc657611bc6612a89565b1415611bcf5750565b6001816004811115611be357611be3612a89565b1415611c315760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104f0565b6002816004811115611c4557611c45612a89565b1415611c935760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104f0565b6003816004811115611ca757611ca7612a89565b1415611d005760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104f0565b6004816004811115611d1457611d14612a89565b14156111a95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104f0565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da757611da7612a9f565b602090810291909101015292915050565b6001600160a01b0384163b156115515760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611dfc9089908990889088908890600401612876565b602060405180830381600087803b158015611e1657600080fd5b505af1925050508015611e46575060408051601f3d908101601f19168201909252611e4391810190612452565b60015b611e5257611a27612acb565b6001600160e01b0319811663f23a6e6160e01b146119845760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016104f0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611efa5750600090506003611fa7565b8460ff16601b14158015611f1257508460ff16601c14155b15611f235750600090506004611fa7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f77573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611fa057600060019250925050611fa7565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b01611fea87828885611ec3565b935093505050935093915050565b828054612004906129c6565b90600052602060002090601f016020900481019282612026576000855561206c565b82601f1061203f5782800160ff1982351617855561206c565b8280016001018555821561206c579182015b8281111561206c578235825591602001919060010190612051565b5061207892915061207c565b5090565b5b80821115612078576000815560010161207d565b80356001600160a01b03811681146120a857600080fd5b919050565b600082601f8301126120be57600080fd5b813560206120cb82612904565b6040516120d88282612a01565b8381528281019150858301600585901b870184018810156120f857600080fd5b60005b8581101561211e5761210c82612091565b845292840192908401906001016120fb565b5090979650505050505050565b600082601f83011261213c57600080fd5b8135602061214982612904565b6040516121568282612a01565b8381528281019150858301600585901b8701840188101561217657600080fd5b60005b8581101561211e57813584529284019290840190600101612179565b803580151581146120a857600080fd5b600082601f8301126121b657600080fd5b813567ffffffffffffffff8111156121d0576121d0612ab5565b6040516121e7601f8301601f191660200182612a01565b8181528460208386010111156121fc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561222b57600080fd5b61223482612091565b9392505050565b6000806040838503121561224e57600080fd5b61225783612091565b915061226560208401612091565b90509250929050565b600080600080600060a0868803121561228657600080fd5b61228f86612091565b945061229d60208701612091565b9350604086013567ffffffffffffffff808211156122ba57600080fd5b6122c689838a0161212b565b945060608801359150808211156122dc57600080fd5b6122e889838a0161212b565b935060808801359150808211156122fe57600080fd5b5061230b888289016121a5565b9150509295509295909350565b600080600080600060a0868803121561233057600080fd5b61233986612091565b945061234760208701612091565b93506040860135925060608601359150608086013567ffffffffffffffff81111561237157600080fd5b61230b888289016121a5565b6000806040838503121561239057600080fd5b61239983612091565b915061226560208401612195565b600080604083850312156123ba57600080fd5b6123c383612091565b946020939093013593505050565b600080604083850312156123e457600080fd5b823567ffffffffffffffff808211156123fc57600080fd5b612408868387016120ad565b9350602085013591508082111561241e57600080fd5b5061242b8582860161212b565b9150509250929050565b60006020828403121561244757600080fd5b813561223481612b71565b60006020828403121561246457600080fd5b815161223481612b71565b6000806020838503121561248257600080fd5b823567ffffffffffffffff8082111561249a57600080fd5b818501915085601f8301126124ae57600080fd5b8135818111156124bd57600080fd5b8660208285010111156124cf57600080fd5b60209290920196919550909350505050565b6000602082840312156124f357600080fd5b5035919050565b6000806040838503121561250d57600080fd5b8235915061226560208401612091565b60008060006060848603121561253257600080fd5b83359250602084013567ffffffffffffffff8082111561255157600080fd5b61255d878388016120ad565b9350604086013591508082111561257357600080fd5b506125808682870161212b565b9150509250925092565b60008060006060848603121561259f57600080fd5b833592506125af60208501612195565b915060408401356001600160781b03811681146125cb57600080fd5b809150509250925092565b600080600080608085870312156125ec57600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561261857600080fd5b612624878288016121a5565b91505092959194509250565b600081518084526020808501945080840160005b8381101561266057815187529582019590820190600101612644565b509495945050505050565b60008151808452612683816020860160208601612996565b601f01601f19169290920160200192915050565b600081516126a9818560208601612996565b9290920192915050565b600080845481600182811c9150808316806126cf57607f831692505b60208084108214156126ef57634e487b7160e01b86526022600452602486fd5b818015612703576001811461271457612741565b60ff19861689528489019650612741565b60008b81526020902060005b868110156127395781548b820152908501908301612720565b505084890196505b50505050505061277d6127548286612697565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b7f4d696e7420776f756c64206578636565642072656d61696e696e67206d696e7481527f7320666f722061646472657373202800000000000000000000000000000000006020820152600082516127e481602f850160208701612996565b7f2900000000000000000000000000000000000000000000000000000000000000602f939091019283015250603001919050565b60006001600160a01b03808816835280871660208401525060a0604083015261284460a0830186612630565b82810360608401526128568186612630565b9050828103608084015261286a818561266b565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526128ae60a083018461266b565b979650505050505050565b6020815260006122346020830184612630565b6040815260006128df6040830185612630565b828103602084015261277d8185612630565b602081526000612234602083018461266b565b600067ffffffffffffffff82111561291e5761291e612ab5565b5060051b60200190565b60006001600160781b0380831681851680830382111561294a5761294a612a5d565b01949350505050565b6000821982111561296657612966612a5d565b500190565b60008261297a5761297a612a73565b500490565b60008282101561299157612991612a5d565b500390565b60005b838110156129b1578181015183820152602001612999565b838111156129c0576000848401525b50505050565b600181811c908216806129da57607f821691505b602082108114156129fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612a2757612a27612ab5565b6040525050565b6000600019821415612a4257612a42612a5d565b5060010190565b600082612a5857612a58612a73565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612ae45760046000803e5060005160e01c5b90565b600060443d1015612af55790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612b2557505050505090565b8285019150815181811115612b3d5750505050505090565b843d8701016020828501011115612b575750505050505090565b612b6660208286010187612a01565b509095945050505050565b6001600160e01b0319811681146111a957600080fdfea26469706673582212202612b194196ca238487a3bce1cdce11b9bc5d51c4f0dd189eb6ab182bedbfe3d64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6245674441454a4c726f5779766f3947704b314c6f61316775636164373233434677746d3333784375386d512f00000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101765760003560e01c806377a54b4b116100d8578063cfb377d61161008c578063edb30fdc11610066578063edb30fdc1461043d578063f242432a14610450578063f2fde38b1461046357600080fd5b8063cfb377d6146103c3578063d47becc2146103ee578063e985e9c51461040157600080fd5b80638da5cb5b116100bd5780638da5cb5b14610382578063a22cb4651461039d578063aad2b723146103b057600080fd5b806377a54b4b146102ce5780637996988c146102e157600080fd5b80634a9eee691161012f5780635059d0d2116101145780635059d0d21461023f578063666bc5b3146102a3578063715018a6146102c657600080fd5b80634a9eee691461020c5780634e1273f41461021f57600080fd5b80630e89341c116101605780630e89341c146101c45780632eb2c2d6146101e4578063492d306b146101f957600080fd5b8062fdd58e1461017b57806301ffc9a7146101a1575b600080fd5b61018e6101893660046123a7565b610476565b6040519081526020015b60405180910390f35b6101b46101af366004612435565b61051f565b6040519015158152602001610198565b6101d76101d23660046124e1565b6105bc565b60405161019891906128f1565b6101f76101f236600461226e565b61065c565b005b6101f761020736600461246f565b6106fe565b6101f761021a3660046125d6565b610769565b61023261022d3660046123d1565b610aa2565b60405161019891906128b9565b61027c61024d3660046124e1565b60066020526000908152604090205460ff8116906001600160781b036101008204811691600160801b90041683565b6040805193151584526001600160781b039283166020850152911690820152606001610198565b6101b46102b13660046124e1565b60086020526000908152604090205460ff1681565b6101f7610be0565b6101f76102dc3660046124e1565b610c46565b61034d6102ef3660046124e1565b6040805160608082018352600080835260208084018290529284018190529384526006825292829020825193840183525460ff8116151584526001600160781b036101008204811692850192909252600160801b9004169082015290565b604080518251151581526020808401516001600160781b03908116918301919091529282015190921690820152606001610198565b6003546040516001600160a01b039091168152602001610198565b6101f76103ab36600461237d565b610cbb565b6101f76103be366004612219565b610cca565b61018e6103d13660046124fa565b600760209081526000928352604080842090915290825290205481565b6101f76103fc36600461258a565b610d53565b6101b461040f36600461223b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101f761044b36600461251d565b610ea7565b6101f761045e366004612318565b61102f565b6101f7610471366004612219565b6110ca565b60006001600160a01b0383166104f95760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061058257506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806105b657507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b600081815260066020526040902054606090600160801b90046001600160781b031661062a5760405162461bcd60e51b815260206004820152601460248201527f546f6b656e20646f6573206e6f7420657869737400000000000000000000000060448201526064016104f0565b6005610635836111ac565b6040516020016106469291906126b3565b6040516020818303038152906040529050919050565b6001600160a01b0385163314806106785750610678853361040f565b6106ea5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016104f0565b6106f785858585856112e6565b5050505050565b6003546001600160a01b031633146107585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b61076460058383611ff8565b505050565b3233146107de5760405162461bcd60e51b815260206004820152603260248201527f596f75206d6179206f6e6c7920696e746572616374207769746820746869732060448201527f66756e6374696f6e206469726563746c7921000000000000000000000000000060648201526084016104f0565b6000848152600660205260409020805460ff1661083d5760405162461bcd60e51b815260206004820152601c60248201527f53616c65206973206e6f74206163746976652063757272656e746c790000000060448201526064016104f0565b80546001600160781b0361010082048116918691849160109161086a918591600160801b90910416612928565b92506101000a8154816001600160781b0302191690836001600160781b0316021790556001600160781b031611156108e45760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016104f0565b600085815260076020908152604080832033845290915281208054859287929161090f908490612953565b9182905550600088815260076020908152604080832033845290915290205492101591610951915061094290879061297f565b61094c908661297f565b6111ac565b6040516020016109619190612786565b6040516020818303038152906040529061098e5760405162461bcd60e51b81526004016104f091906128f1565b5060045460408051336020820152908101879052606081018590526001600160a01b0390911690610a31908490610a2b90608001604051602081830303815290604052805190602001206040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611559565b6001600160a01b031614610a875760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016104f0565b6106f733868660405180602001604052806000815250611575565b60608151835114610b1b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016104f0565b6000835167ffffffffffffffff811115610b3757610b37612ab5565b604051908082528060200260200182016040528015610b60578160200160208202803683370190505b50905060005b8451811015610bd857610bab858281518110610b8457610b84612a9f565b6020026020010151858381518110610b9e57610b9e612a9f565b6020026020010151610476565b828281518110610bbd57610bbd612a9f565b6020908102919091010152610bd181612a2e565b9050610b66565b509392505050565b6003546001600160a01b03163314610c3a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b610c44600061169b565b565b6003546001600160a01b03163314610ca05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6000908152600860205260409020805460ff19166001179055565b610cc63383836116fa565b5050565b6003546001600160a01b03163314610d245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610dad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b60008381526008602052604090205460ff1615610e325760405162461bcd60e51b815260206004820152603060248201527f53657474696e677320617265206e6f206c6f6e676572206368616e676561626c60448201527f6520666f72207468697320746f6b656e0000000000000000000000000000000060648201526084016104f0565b60009283526006602052604090922080546001600160781b03909316610100027fffffffffffffffffffffffffffffffff000000000000000000000000000000ff921515929092167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090931692909217179055565b6003546001600160a01b03163314610f015760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6000805b8351811015610f8657610f5b848281518110610f2357610f23612a9f565b602002602001015186858481518110610f3e57610f3e612a9f565b602002602001015160405180602001604052806000815250611575565b828181518110610f6d57610f6d612a9f565b6020026020010151820191508080600101915050610f05565b5060008481526006602052604090208054600160801b8082046001600160781b03908116850181169182027fff000000000000000000000000000000ffffffffffffffffffffffffffffffff84161784556101009092049190911610156106f75760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016104f0565b6001600160a01b03851633148061104b575061104b853361040f565b6110bd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f766564000000000000000000000000000000000000000000000060648201526084016104f0565b6106f785858585856117ef565b6003546001600160a01b031633146111245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f0565b6001600160a01b0381166111a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f0565b6111a98161169b565b50565b6060816111ec57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611216578061120081612a2e565b915061120f9050600a8361296b565b91506111f0565b60008167ffffffffffffffff81111561123157611231612ab5565b6040519080825280601f01601f19166020018201604052801561125b576020820181803683370190505b5090505b84156112de5761127060018361297f565b915061127d600a86612a49565b611288906030612953565b60f81b81838151811061129d5761129d612a9f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506112d7600a8661296b565b945061125f565b949350505050565b815183511461135d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016104f0565b6001600160a01b0384166113c15760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016104f0565b3360005b84518110156114eb5760008582815181106113e2576113e2612a9f565b60200260200101519050600085838151811061140057611400612a9f565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114935760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016104f0565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114d0908490612953565b92505081905550505050806114e490612a2e565b90506113c5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161153b9291906128cc565b60405180910390a461155181878787878761198d565b505050505050565b60008060006115688585611b42565b91509150610bd881611bb2565b6001600160a01b0384166115f15760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104f0565b3361160b8160008761160288611d6d565b6106f788611d6d565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061163b908490612953565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46106f781600087878787611db8565b600380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117825760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016104f0565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118535760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016104f0565b3361186381878761160288611d6d565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156118e75760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016104f0565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611924908490612953565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611984828888888888611db8565b50505050505050565b6001600160a01b0384163b156115515760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119d19089908990889088908890600401612818565b602060405180830381600087803b1580156119eb57600080fd5b505af1925050508015611a1b575060408051601f3d908101601f19168201909252611a1891810190612452565b60015b611ad157611a27612acb565b806308c379a01415611a615750611a3c612ae7565b80611a475750611a63565b8060405162461bcd60e51b81526004016104f091906128f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016104f0565b6001600160e01b0319811663bc197c8160e01b146119845760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016104f0565b600080825160411415611b795760208301516040840151606085015160001a611b6d87828585611ec3565b94509450505050611bab565b825160401415611ba35760208301516040840151611b98868383611fb0565b935093505050611bab565b506000905060025b9250929050565b6000816004811115611bc657611bc6612a89565b1415611bcf5750565b6001816004811115611be357611be3612a89565b1415611c315760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104f0565b6002816004811115611c4557611c45612a89565b1415611c935760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104f0565b6003816004811115611ca757611ca7612a89565b1415611d005760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104f0565b6004816004811115611d1457611d14612a89565b14156111a95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104f0565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da757611da7612a9f565b602090810291909101015292915050565b6001600160a01b0384163b156115515760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611dfc9089908990889088908890600401612876565b602060405180830381600087803b158015611e1657600080fd5b505af1925050508015611e46575060408051601f3d908101601f19168201909252611e4391810190612452565b60015b611e5257611a27612acb565b6001600160e01b0319811663f23a6e6160e01b146119845760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016104f0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611efa5750600090506003611fa7565b8460ff16601b14158015611f1257508460ff16601c14155b15611f235750600090506004611fa7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f77573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611fa057600060019250925050611fa7565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b01611fea87828885611ec3565b935093505050935093915050565b828054612004906129c6565b90600052602060002090601f016020900481019282612026576000855561206c565b82601f1061203f5782800160ff1982351617855561206c565b8280016001018555821561206c579182015b8281111561206c578235825591602001919060010190612051565b5061207892915061207c565b5090565b5b80821115612078576000815560010161207d565b80356001600160a01b03811681146120a857600080fd5b919050565b600082601f8301126120be57600080fd5b813560206120cb82612904565b6040516120d88282612a01565b8381528281019150858301600585901b870184018810156120f857600080fd5b60005b8581101561211e5761210c82612091565b845292840192908401906001016120fb565b5090979650505050505050565b600082601f83011261213c57600080fd5b8135602061214982612904565b6040516121568282612a01565b8381528281019150858301600585901b8701840188101561217657600080fd5b60005b8581101561211e57813584529284019290840190600101612179565b803580151581146120a857600080fd5b600082601f8301126121b657600080fd5b813567ffffffffffffffff8111156121d0576121d0612ab5565b6040516121e7601f8301601f191660200182612a01565b8181528460208386010111156121fc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561222b57600080fd5b61223482612091565b9392505050565b6000806040838503121561224e57600080fd5b61225783612091565b915061226560208401612091565b90509250929050565b600080600080600060a0868803121561228657600080fd5b61228f86612091565b945061229d60208701612091565b9350604086013567ffffffffffffffff808211156122ba57600080fd5b6122c689838a0161212b565b945060608801359150808211156122dc57600080fd5b6122e889838a0161212b565b935060808801359150808211156122fe57600080fd5b5061230b888289016121a5565b9150509295509295909350565b600080600080600060a0868803121561233057600080fd5b61233986612091565b945061234760208701612091565b93506040860135925060608601359150608086013567ffffffffffffffff81111561237157600080fd5b61230b888289016121a5565b6000806040838503121561239057600080fd5b61239983612091565b915061226560208401612195565b600080604083850312156123ba57600080fd5b6123c383612091565b946020939093013593505050565b600080604083850312156123e457600080fd5b823567ffffffffffffffff808211156123fc57600080fd5b612408868387016120ad565b9350602085013591508082111561241e57600080fd5b5061242b8582860161212b565b9150509250929050565b60006020828403121561244757600080fd5b813561223481612b71565b60006020828403121561246457600080fd5b815161223481612b71565b6000806020838503121561248257600080fd5b823567ffffffffffffffff8082111561249a57600080fd5b818501915085601f8301126124ae57600080fd5b8135818111156124bd57600080fd5b8660208285010111156124cf57600080fd5b60209290920196919550909350505050565b6000602082840312156124f357600080fd5b5035919050565b6000806040838503121561250d57600080fd5b8235915061226560208401612091565b60008060006060848603121561253257600080fd5b83359250602084013567ffffffffffffffff8082111561255157600080fd5b61255d878388016120ad565b9350604086013591508082111561257357600080fd5b506125808682870161212b565b9150509250925092565b60008060006060848603121561259f57600080fd5b833592506125af60208501612195565b915060408401356001600160781b03811681146125cb57600080fd5b809150509250925092565b600080600080608085870312156125ec57600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561261857600080fd5b612624878288016121a5565b91505092959194509250565b600081518084526020808501945080840160005b8381101561266057815187529582019590820190600101612644565b509495945050505050565b60008151808452612683816020860160208601612996565b601f01601f19169290920160200192915050565b600081516126a9818560208601612996565b9290920192915050565b600080845481600182811c9150808316806126cf57607f831692505b60208084108214156126ef57634e487b7160e01b86526022600452602486fd5b818015612703576001811461271457612741565b60ff19861689528489019650612741565b60008b81526020902060005b868110156127395781548b820152908501908301612720565b505084890196505b50505050505061277d6127548286612697565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b7f4d696e7420776f756c64206578636565642072656d61696e696e67206d696e7481527f7320666f722061646472657373202800000000000000000000000000000000006020820152600082516127e481602f850160208701612996565b7f2900000000000000000000000000000000000000000000000000000000000000602f939091019283015250603001919050565b60006001600160a01b03808816835280871660208401525060a0604083015261284460a0830186612630565b82810360608401526128568186612630565b9050828103608084015261286a818561266b565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526128ae60a083018461266b565b979650505050505050565b6020815260006122346020830184612630565b6040815260006128df6040830185612630565b828103602084015261277d8185612630565b602081526000612234602083018461266b565b600067ffffffffffffffff82111561291e5761291e612ab5565b5060051b60200190565b60006001600160781b0380831681851680830382111561294a5761294a612a5d565b01949350505050565b6000821982111561296657612966612a5d565b500190565b60008261297a5761297a612a73565b500490565b60008282101561299157612991612a5d565b500390565b60005b838110156129b1578181015183820152602001612999565b838111156129c0576000848401525b50505050565b600181811c908216806129da57607f821691505b602082108114156129fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612a2757612a27612ab5565b6040525050565b6000600019821415612a4257612a42612a5d565b5060010190565b600082612a5857612a58612a73565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612ae45760046000803e5060005160e01c5b90565b600060443d1015612af55790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612b2557505050505090565b8285019150815181811115612b3d5750505050505090565b843d8701016020828501011115612b575750505050505090565b612b6660208286010187612a01565b509095945050505050565b6001600160e01b0319811681146111a957600080fdfea26469706673582212202612b194196ca238487a3bce1cdce11b9bc5d51c4f0dd189eb6ab182bedbfe3d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6245674441454a4c726f5779766f3947704b314c6f61316775636164373233434677746d3333784375386d512f00000000000000000000
-----Decoded View---------------
Arg [0] : baseUri_ (string): ipfs://QmbEgDAEJLroWyvo9GpK1Loa1gucad723CFwtm33xCu8mQ/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d6245674441454a4c726f5779766f3947704b314c6f6131
Arg [3] : 6775636164373233434677746d3333784375386d512f00000000000000000000
Deployed Bytecode Sourcemap
48252:3263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34668:231;;;;;;:::i;:::-;;:::i;:::-;;;25861:25:1;;;25849:2;25834:18;34668:231:0;;;;;;;;33691:310;;;;;;:::i;:::-;;:::i;:::-;;;15104:14:1;;15097:22;15079:41;;15067:2;15052:18;33691:310:0;14939:187:1;49926:235:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36607:442::-;;;;;;:::i;:::-;;:::i;:::-;;51058:105;;;;;;:::i;:::-;;:::i;49007:871::-;;;;;;:::i;:::-;;:::i;35065:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48820:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48820:51:0;;;;;;-1:-1:-1;;;48820:51:0;;;;;;;;;15352:14:1;;15345:22;15327:41;;-1:-1:-1;;;;;15455:15:1;;;15450:2;15435:18;;15428:43;15507:15;;15487:18;;;15480:43;15315:2;15300:18;48820:51:0;15131:398:1;48955:43:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14296:103;;;:::i;50855:94::-;;;;;;:::i;:::-;;:::i;50169:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;50267:17:0;;;:13;:17;;;;;;50260:24;;;;;;;;;;;;;;;-1:-1:-1;;;;;50260:24:0;;;;;;;;;;;;-1:-1:-1;;;50260:24:0;;;;;;;;50169:123;;;;;25452:13:1;;25445:21;25438:29;25420:48;;25515:4;25503:17;;;25497:24;-1:-1:-1;;;;;25610:21:1;;;25588:20;;;25581:51;;;;25680:17;;;25674:24;25670:33;;;25648:20;;;25641:63;25408:2;25393:18;50169:123:0;25212:498:1;13645:87:0;13718:6;;13645:87;;-1:-1:-1;;;;;13718:6:0;;;12303:74:1;;12291:2;12276:18;13645:87:0;12157:226:1;35662:155:0;;;;;;:::i;:::-;;:::i;50957:93::-;;;;;;:::i;:::-;;:::i;48878:70::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;51171:341;;;;;;:::i;:::-;;:::i;35889:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;36012:27:0;;;35988:4;36012:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;35889:168;50334:513;;;;;;:::i;:::-;;:::i;36129:401::-;;;;;;:::i;:::-;;:::i;14554:201::-;;;;;;:::i;:::-;;:::i;34668:231::-;34754:7;-1:-1:-1;;;;;34782:21:0;;34774:77;;;;-1:-1:-1;;;34774:77:0;;18263:2:1;34774:77:0;;;18245:21:1;18302:2;18282:18;;;18275:30;18341:34;18321:18;;;18314:62;18412:13;18392:18;;;18385:41;18443:19;;34774:77:0;;;;;;;;;-1:-1:-1;34869:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;34869:22:0;;;;;;;;;;;;34668:231::o;33691:310::-;33793:4;-1:-1:-1;;;;;;33830:41:0;;33845:26;33830:41;;:110;;-1:-1:-1;;;;;;;33888:52:0;;33903:37;33888:52;33830:110;:163;;;-1:-1:-1;25170:25:0;-1:-1:-1;;;;;;25155:40:0;;;33957:36;33810:183;33691:310;-1:-1:-1;;33691:310:0:o;49926:235::-;50054:1;50020:17;;;:13;:17;;;;;:31;49986:13;;-1:-1:-1;;;50020:31:0;;-1:-1:-1;;;;;50020:31:0;50012:68;;;;-1:-1:-1;;;50012:68:0;;20241:2:1;50012:68:0;;;20223:21:1;20280:2;20260:18;;;20253:30;20319:22;20299:18;;;20292:50;20359:18;;50012:68:0;20039:344:1;50012:68:0;50122:7;50130:13;:2;:11;:13::i;:::-;50105:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50091:62;;49926:235;;;:::o;36607:442::-;-1:-1:-1;;;;;36840:20:0;;12449:10;36840:20;;:60;;-1:-1:-1;36864:36:0;36881:4;12449:10;35889:168;:::i;36864:36::-;36818:160;;;;-1:-1:-1;;;36818:160:0;;21413:2:1;36818:160:0;;;21395:21:1;21452:2;21432:18;;;21425:30;21491:34;21471:18;;;21464:62;21562:20;21542:18;;;21535:48;21600:19;;36818:160:0;21211:414:1;36818:160:0;36989:52;37012:4;37018:2;37022:3;37027:7;37036:4;36989:22;:52::i;:::-;36607:442;;;;;:::o;51058:105::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;51137:18:::1;:7;51147:8:::0;;51137:18:::1;:::i;:::-;;51058:105:::0;;:::o;49007:871::-;48530:9;48543:10;48530:23;48522:86;;;;-1:-1:-1;;;48522:86:0;;21832:2:1;48522:86:0;;;21814:21:1;21871:2;21851:18;;;21844:30;21910:34;21890:18;;;21883:62;21981:20;21961:18;;;21954:48;22019:19;;48522:86:0;21630:414:1;48522:86:0;49113:30:::1;49146:17:::0;;;:13:::1;:17;::::0;;;;49184:21;;::::1;;49176:62;;;::::0;-1:-1:-1;;;49176:62:0;;23426:2:1;49176:62:0::1;::::0;::::1;23408:21:1::0;23465:2;23445:18;;;23438:30;23504;23484:18;;;23477:58;23552:18;;49176:62:0::1;23224:352:1::0;49176:62:0::1;49304:18:::0;;-1:-1:-1;;;;;49304:18:0::1;::::0;::::1;::::0;::::1;::::0;49292:6;;49304:8;;49258:22:::1;::::0;:41:::1;::::0;49292:6;;-1:-1:-1;;;49258:41:0;;::::1;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;49258:41:0::1;;;;;-1:-1:-1::0;;;;;49258:41:0::1;;;;;-1:-1:-1::0;;;;;49257:65:0::1;;;49249:106;;;::::0;-1:-1:-1;;;49249:106:0;;17137:2:1;49249:106:0::1;::::0;::::1;17119:21:1::0;17176:2;17156:18;;;17149:30;17215;17195:18;;;17188:58;17263:18;;49249:106:0::1;16935:352:1::0;49249:106:0::1;49375:25;::::0;;;:21:::1;:25;::::0;;;;;;;49401:10:::1;49375:37:::0;;;;;;;:47;;49427:8;;49416:6;;49375:37;:47:::1;::::0;49416:6;;49375:47:::1;:::i;:::-;::::0;;;;-1:-1:-1;49574:25:0::1;::::0;;;:21:::1;:25;::::0;;;;;;;49600:10:::1;49574:37:::0;;;;;;;;49374:61;-1:-1:-1;49374:61:0::1;::::0;49561:72:::1;::::0;-1:-1:-1;49574:46:0::1;::::0;49614:6;;49574:46:::1;:::i;:::-;49562:59;::::0;:8;:59:::1;:::i;:::-;49561:70;:72::i;:::-;49458:198;;;;;;;;:::i;:::-;;;;;;;;;;;;;49366:306;;;;;-1:-1:-1::0;;;49366:306:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;49796:6:0::1;::::0;49711:36:::1;::::0;;49722:10:::1;49711:36;::::0;::::1;14032:74:1::0;14122:18;;;14115:34;;;14165:18;;;14158:34;;;-1:-1:-1;;;;;49796:6:0;;::::1;::::0;49701:91:::1;::::0;49782:9;;49701:72:::1;::::0;14005:18:1;;49711:36:0::1;;;;;;;;;;;;49701:47;;;;;;10577:58:::0;;11357:66:1;10577:58:0;;;11345:79:1;11440:12;;;11433:28;;;10444:7:0;;11477:12:1;;10577:58:0;;;;;;;;;;;;10567:69;;;;;;10560:76;;10375:269;;;;49701:72:::1;:80:::0;::::1;:91::i;:::-;-1:-1:-1::0;;;;;49701:101:0::1;;49693:131;;;::::0;-1:-1:-1;;;49693:131:0;;19492:2:1;49693:131:0::1;::::0;::::1;19474:21:1::0;19531:2;19511:18;;;19504:30;19570:19;19550:18;;;19543:47;19607:18;;49693:131:0::1;19290:341:1::0;49693:131:0::1;49837:33;49843:10;49855:2;49859:6;49837:33;;;;;;;;;;;::::0;:5:::1;:33::i;35065:524::-:0;35221:16;35282:3;:10;35263:8;:15;:29;35255:83;;;;-1:-1:-1;;;35255:83:0;;24193:2:1;35255:83:0;;;24175:21:1;24232:2;24212:18;;;24205:30;24271:34;24251:18;;;24244:62;24342:11;24322:18;;;24315:39;24371:19;;35255:83:0;23991:405:1;35255:83:0;35351:30;35398:8;:15;35384:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35384:30:0;;35351:63;;35432:9;35427:122;35451:8;:15;35447:1;:19;35427:122;;;35507:30;35517:8;35526:1;35517:11;;;;;;;;:::i;:::-;;;;;;;35530:3;35534:1;35530:6;;;;;;;;:::i;:::-;;;;;;;35507:9;:30::i;:::-;35488:13;35502:1;35488:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;35468:3;;;:::i;:::-;;;35427:122;;;-1:-1:-1;35568:13:0;35065:524;-1:-1:-1;;;35065:524:0:o;14296:103::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;14361:30:::1;14388:1;14361:18;:30::i;:::-;14296:103::o:0;50855:94::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;50916:18:::1;::::0;;;:14:::1;:18;::::0;;;;:25;;-1:-1:-1;;50916:25:0::1;50937:4;50916:25;::::0;;50855:94::o;35662:155::-;35757:52;12449:10;35790:8;35800;35757:18;:52::i;:::-;35662:155;;:::o;50957:93::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;51026:6:::1;:16:::0;;-1:-1:-1;;51026:16:0::1;-1:-1:-1::0;;;;;51026:16:0;;;::::1;::::0;;;::::1;::::0;;50957:93::o;51171:341::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;51283:18:::1;::::0;;;:14:::1;:18;::::0;;;;;::::1;;51282:19;51274:80;;;::::0;-1:-1:-1;;;51274:80:0;;20590:2:1;51274:80:0::1;::::0;::::1;20572:21:1::0;20629:2;20609:18;;;20602:30;20668:34;20648:18;;;20641:62;20739:18;20719;;;20712:46;20775:19;;51274:80:0::1;20388:412:1::0;51274:80:0::1;51365:30;51398:17:::0;;;:13:::1;:17;::::0;;;;;51427:36;;-1:-1:-1;;;;;51474:30:0;;::::1;51427:36;51474:30;::::0;51427:36;::::1;;51474:30:::0;;;;;;;;;;;;::::1;::::0;;51171:341::o;50334:513::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;50460:16:::1;::::0;50491:145:::1;50511:2;:9;50507:1;:13;50491:145;;;50546:31;50552:2;50555:1;50552:5;;;;;;;;:::i;:::-;;;;;;;50559:2;50563:6;50570:1;50563:9;;;;;;;;:::i;:::-;;;;;;;50546:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;50611:6;50618:1;50611:9;;;;;;;;:::i;:::-;;;;;;;50596:24;;;;50522:3;;;;;;;50491:145;;;-1:-1:-1::0;50652:30:0::1;50685:17:::0;;;:13:::1;:17;::::0;;;;50777:18;;-1:-1:-1;;;50726:46:0;;::::1;-1:-1:-1::0;;;;;50726:46:0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;;::::0;;50777:18:::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;50725:70:0::1;50717:111;;;::::0;-1:-1:-1;;;50717:111:0;;17137:2:1;50717:111:0::1;::::0;::::1;17119:21:1::0;17176:2;17156:18;;;17149:30;17215;17195:18;;;17188:58;17263:18;;50717:111:0::1;16935:352:1::0;36129:401:0;-1:-1:-1;;;;;36337:20:0;;12449:10;36337:20;;:60;;-1:-1:-1;36361:36:0;36378:4;12449:10;35889:168;:::i;36361:36::-;36315:151;;;;-1:-1:-1;;;36315:151:0;;19082:2:1;36315:151:0;;;19064:21:1;19121:2;19101:18;;;19094:30;19160:34;19140:18;;;19133:62;19231:11;19211:18;;;19204:39;19260:19;;36315:151:0;18880:405:1;36315:151:0;36477:45;36495:4;36501:2;36505;36509:6;36517:4;36477:17;:45::i;14554:201::-;13718:6;;-1:-1:-1;;;;;13718:6:0;12449:10;13865:23;13857:68;;;;-1:-1:-1;;;13857:68:0;;23065:2:1;13857:68:0;;;23047:21:1;;;23084:18;;;23077:30;23143:34;23123:18;;;23116:62;23195:18;;13857:68:0;22863:356:1;13857:68:0;-1:-1:-1;;;;;14643:22:0;::::1;14635:73;;;::::0;-1:-1:-1;;;14635:73:0;;18675:2:1;14635:73:0::1;::::0;::::1;18657:21:1::0;18714:2;18694:18;;;18687:30;18753:34;18733:18;;;18726:62;18824:8;18804:18;;;18797:36;18850:19;;14635:73:0::1;18473:402:1::0;14635:73:0::1;14719:28;14738:8;14719:18;:28::i;:::-;14554:201:::0;:::o;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;;;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;;1073:6;365:723;-1:-1:-1;;;;365:723:0:o;38691:1074::-;38918:7;:14;38904:3;:10;:28;38896:81;;;;-1:-1:-1;;;38896:81:0;;24603:2:1;38896:81:0;;;24585:21:1;24642:2;24622:18;;;24615:30;24681:34;24661:18;;;24654:62;24752:10;24732:18;;;24725:38;24780:19;;38896:81:0;24401:404:1;38896:81:0;-1:-1:-1;;;;;38996:16:0;;38988:66;;;;-1:-1:-1;;;38988:66:0;;21007:2:1;38988:66:0;;;20989:21:1;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:35;21181:19;;38988:66:0;20805:401:1;38988:66:0;12449:10;39067:16;39184:421;39208:3;:10;39204:1;:14;39184:421;;;39240:10;39253:3;39257:1;39253:6;;;;;;;;:::i;:::-;;;;;;;39240:19;;39274:14;39291:7;39299:1;39291:10;;;;;;;;:::i;:::-;;;;;;;;;;;;39318:19;39340:13;;;;;;;;;;-1:-1:-1;;;;;39340:19:0;;;;;;;;;;;;39291:10;;-1:-1:-1;39382:21:0;;;;39374:76;;;;-1:-1:-1;;;39374:76:0;;22654:2:1;39374:76:0;;;22636:21:1;22693:2;22673:18;;;22666:30;22732:34;22712:18;;;22705:62;-1:-1:-1;;;22783:18:1;;;22776:40;22833:19;;39374:76:0;22452:406:1;39374:76:0;39494:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39494:19:0;;;;;;;;;;39516:20;;;39494:42;;39566:17;;;;;;;:27;;39516:20;;39494:9;39566:27;;39516:20;;39566:27;:::i;:::-;;;;;;;;39225:380;;;39220:3;;;;:::i;:::-;;;39184:421;;;;39652:2;-1:-1:-1;;;;;39622:47:0;39646:4;-1:-1:-1;;;;;39622:47:0;39636:8;-1:-1:-1;;;;;39622:47:0;;39656:3;39661:7;39622:47;;;;;;;:::i;:::-;;;;;;;;39682:75;39718:8;39728:4;39734:2;39738:3;39743:7;39752:4;39682:35;:75::i;:::-;38885:880;38691:1074;;;;;:::o;6526:231::-;6604:7;6625:17;6644:18;6666:27;6677:4;6683:9;6666:10;:27::i;:::-;6624:69;;;;6704:18;6716:5;6704:11;:18::i;41083:569::-;-1:-1:-1;;;;;41236:16:0;;41228:62;;;;-1:-1:-1;;;41228:62:0;;25012:2:1;41228:62:0;;;24994:21:1;25051:2;25031:18;;;25024:30;25090:34;25070:18;;;25063:62;25161:3;25141:18;;;25134:31;25182:19;;41228:62:0;24810:397:1;41228:62:0;12449:10;41347:102;12449:10;41303:16;41390:2;41394:21;41412:2;41394:17;:21::i;:::-;41417:25;41435:6;41417:17;:25::i;41347:102::-;41462:9;:13;;;;;;;;;;;-1:-1:-1;;;;;41462:17:0;;;;;;;;;:27;;41483:6;;41462:9;:27;;41483:6;;41462:27;:::i;:::-;;;;-1:-1:-1;;41505:52:0;;;26071:25:1;;;26127:2;26112:18;;26105:34;;;-1:-1:-1;;;;;41505:52:0;;;;41538:1;;41505:52;;;;;;26044:18:1;41505:52:0;;;;;;;41570:74;41601:8;41619:1;41623:2;41627;41631:6;41639:4;41570:30;:74::i;14915:191::-;15008:6;;;-1:-1:-1;;;;;15025:17:0;;;-1:-1:-1;;15025:17:0;;;;;;;15058:40;;15008:6;;;15025:17;15008:6;;15058:40;;14989:16;;15058:40;14978:128;14915:191;:::o;44877:331::-;45032:8;-1:-1:-1;;;;;45023:17:0;:5;-1:-1:-1;;;;;45023:17:0;;;45015:71;;;;-1:-1:-1;;;45015:71:0;;23783:2:1;45015:71:0;;;23765:21:1;23822:2;23802:18;;;23795:30;23861:34;23841:18;;;23834:62;23932:11;23912:18;;;23905:39;23961:19;;45015:71:0;23581:405:1;45015:71:0;-1:-1:-1;;;;;45097:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;45097:46:0;;;;;;;;;;45159:41;;15079::1;;;45159::0;;15052:18:1;45159:41:0;;;;;;;44877:331;;;:::o;37513:820::-;-1:-1:-1;;;;;37701:16:0;;37693:66;;;;-1:-1:-1;;;37693:66:0;;21007:2:1;37693:66:0;;;20989:21:1;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:35;21181:19;;37693:66:0;20805:401:1;37693:66:0;12449:10;37816:96;12449:10;37847:4;37853:2;37857:21;37875:2;37857:17;:21::i;37816:96::-;37925:19;37947:13;;;;;;;;;;;-1:-1:-1;;;;;37947:19:0;;;;;;;;;;37985:21;;;;37977:76;;;;-1:-1:-1;;;37977:76:0;;22654:2:1;37977:76:0;;;22636:21:1;22693:2;22673:18;;;22666:30;22732:34;22712:18;;;22705:62;-1:-1:-1;;;22783:18:1;;;22776:40;22833:19;;37977:76:0;22452:406:1;37977:76:0;38089:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38089:19:0;;;;;;;;;;38111:20;;;38089:42;;38153:17;;;;;;;:27;;38111:20;;38089:9;38153:27;;38111:20;;38153:27;:::i;:::-;;;;-1:-1:-1;;38198:46:0;;;26071:25:1;;;26127:2;26112:18;;26105:34;;;-1:-1:-1;;;;;38198:46:0;;;;;;;;;;;;;;26044:18:1;38198:46:0;;;;;;;38257:68;38288:8;38298:4;38304:2;38308;38312:6;38320:4;38257:30;:68::i;:::-;37682:651;;37513:820;;;;;:::o;47145:813::-;-1:-1:-1;;;;;47385:13:0;;16256:20;16304:8;47381:570;;47421:79;;-1:-1:-1;;;47421:79:0;;-1:-1:-1;;;;;47421:43:0;;;;;:79;;47465:8;;47475:4;;47481:3;;47486:7;;47495:4;;47421:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47421:79:0;;;;;;;;-1:-1:-1;;47421:79:0;;;;;;;;;;;;:::i;:::-;;;47417:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;47813:6;47806:14;;-1:-1:-1;;;47806:14:0;;;;;;;;:::i;47417:523::-;;;47862:62;;-1:-1:-1;;;47862:62:0;;16716:2:1;47862:62:0;;;16698:21:1;16755:2;16735:18;;;16728:30;16794:34;16774:18;;;16767:62;16865:22;16845:18;;;16838:50;16905:19;;47862:62:0;16514:416:1;47417:523:0;-1:-1:-1;;;;;;47582:60:0;;-1:-1:-1;;;47582:60:0;47578:159;;47667:50;;-1:-1:-1;;;47667:50:0;;17494:2:1;47667:50:0;;;17476:21:1;17533:2;17513:18;;;17506:30;17572:34;17552:18;;;17545:62;-1:-1:-1;;;17623:18:1;;;17616:38;17671:19;;47667:50:0;17292:404:1;4416:1308:0;4497:7;4506:12;4731:9;:16;4751:2;4731:22;4727:990;;;5027:4;5012:20;;5006:27;5077:4;5062:20;;5056:27;5135:4;5120:20;;5114:27;4770:9;5106:36;5178:25;5189:4;5106:36;5006:27;5056;5178:10;:25::i;:::-;5171:32;;;;;;;;;4727:990;5225:9;:16;5245:2;5225:22;5221:496;;;5500:4;5485:20;;5479:27;5551:4;5536:20;;5530:27;5593:23;5604:4;5479:27;5530;5593:10;:23::i;:::-;5586:30;;;;;;;;5221:496;-1:-1:-1;5665:1:0;;-1:-1:-1;5669:35:0;5221:496;4416:1308;;;;;:::o;2687:643::-;2765:20;2756:5;:29;;;;;;;;:::i;:::-;;2752:571;;;2687:643;:::o;2752:571::-;2863:29;2854:5;:38;;;;;;;;:::i;:::-;;2850:473;;;2909:34;;-1:-1:-1;;;2909:34:0;;16363:2:1;2909:34:0;;;16345:21:1;16402:2;16382:18;;;16375:30;16441:26;16421:18;;;16414:54;16485:18;;2909:34:0;16161:348:1;2850:473:0;2974:35;2965:5;:44;;;;;;;;:::i;:::-;;2961:362;;;3026:41;;-1:-1:-1;;;3026:41:0;;17903:2:1;3026:41:0;;;17885:21:1;17942:2;17922:18;;;17915:30;17981:33;17961:18;;;17954:61;18032:18;;3026:41:0;17701:355:1;2961:362:0;3098:30;3089:5;:39;;;;;;;;:::i;:::-;;3085:238;;;3145:44;;-1:-1:-1;;;3145:44:0;;19838:2:1;3145:44:0;;;19820:21:1;19877:2;19857:18;;;19850:30;19916:34;19896:18;;;19889:62;-1:-1:-1;;;19967:18:1;;;19960:32;20009:19;;3145:44:0;19636:398:1;3085:238:0;3220:30;3211:5;:39;;;;;;;;:::i;:::-;;3207:116;;;3267:44;;-1:-1:-1;;;3267:44:0;;22251:2:1;3267:44:0;;;22233:21:1;22290:2;22270:18;;;22263:30;22329:34;22309:18;;;22302:62;-1:-1:-1;;;22380:18:1;;;22373:32;22422:19;;3267:44:0;22049:398:1;47966:198:0;48086:16;;;48100:1;48086:16;;;;;;;;;48032;;48061:22;;48086:16;;;;;;;;;;;;-1:-1:-1;48086:16:0;48061:41;;48124:7;48113:5;48119:1;48113:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;48151:5;47966:198;-1:-1:-1;;47966:198:0:o;46393:744::-;-1:-1:-1;;;;;46608:13:0;;16256:20;16304:8;46604:526;;46644:72;;-1:-1:-1;;;46644:72:0;;-1:-1:-1;;;;;46644:38:0;;;;;:72;;46683:8;;46693:4;;46699:2;;46703:6;;46711:4;;46644:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46644:72:0;;;;;;;;-1:-1:-1;;46644:72:0;;;;;;;;;;;;:::i;:::-;;;46640:479;;;;:::i;:::-;-1:-1:-1;;;;;;46766:55:0;;-1:-1:-1;;;46766:55:0;46762:154;;46846:50;;-1:-1:-1;;;46846:50:0;;17494:2:1;46846:50:0;;;17476:21:1;17533:2;17513:18;;;17506:30;17572:34;17552:18;;;17545:62;-1:-1:-1;;;17623:18:1;;;17616:38;17671:19;;46846:50:0;17292:404:1;8025:1632:0;8156:7;;9090:66;9077:79;;9073:163;;;-1:-1:-1;9189:1:0;;-1:-1:-1;9193:30:0;9173:51;;9073:163;9250:1;:7;;9255:2;9250:7;;:18;;;;;9261:1;:7;;9266:2;9261:7;;9250:18;9246:102;;;-1:-1:-1;9301:1:0;;-1:-1:-1;9305:30:0;9285:51;;9246:102;9462:24;;;9445:14;9462:24;;;;;;;;;15761:25:1;;;15834:4;15822:17;;15802:18;;;15795:45;;;;15856:18;;;15849:34;;;15899:18;;;15892:34;;;9462:24:0;;15733:19:1;;9462:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9462:24:0;;-1:-1:-1;;9462:24:0;;;-1:-1:-1;;;;;;;9501:20:0;;9497:103;;9554:1;9558:29;9538:50;;;;;;;9497:103;9620:6;-1:-1:-1;9628:20:0;;-1:-1:-1;8025:1632:0;;;;;;;;:::o;7020:391::-;7134:7;;7243:66;7235:75;;7337:3;7333:12;;;7347:2;7329:21;7378:25;7389:4;7329:21;7398:1;7235:75;7378:10;:25::i;:::-;7371:32;;;;;;7020:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:196:1;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:741::-;269:5;322:3;315:4;307:6;303:17;299:27;289:55;;340:1;337;330:12;289:55;376:6;363:20;402:4;425:43;465:2;425:43;:::i;:::-;497:2;491:9;509:31;537:2;529:6;509:31;:::i;:::-;575:18;;;609:15;;;;-1:-1:-1;644:15:1;;;694:1;690:10;;;678:23;;674:32;;671:41;-1:-1:-1;668:61:1;;;725:1;722;715:12;668:61;747:1;757:169;771:2;768:1;765:9;757:169;;;828:23;847:3;828:23;:::i;:::-;816:36;;872:12;;;;904;;;;789:1;782:9;757:169;;;-1:-1:-1;944:6:1;;215:741;-1:-1:-1;;;;;;;215:741:1:o;961:735::-;1015:5;1068:3;1061:4;1053:6;1049:17;1045:27;1035:55;;1086:1;1083;1076:12;1035:55;1122:6;1109:20;1148:4;1171:43;1211:2;1171:43;:::i;:::-;1243:2;1237:9;1255:31;1283:2;1275:6;1255:31;:::i;:::-;1321:18;;;1355:15;;;;-1:-1:-1;1390:15:1;;;1440:1;1436:10;;;1424:23;;1420:32;;1417:41;-1:-1:-1;1414:61:1;;;1471:1;1468;1461:12;1414:61;1493:1;1503:163;1517:2;1514:1;1511:9;1503:163;;;1574:17;;1562:30;;1612:12;;;;1644;;;;1535:1;1528:9;1503:163;;1701:160;1766:20;;1822:13;;1815:21;1805:32;;1795:60;;1851:1;1848;1841:12;1866:555;1908:5;1961:3;1954:4;1946:6;1942:17;1938:27;1928:55;;1979:1;1976;1969:12;1928:55;2015:6;2002:20;2041:18;2037:2;2034:26;2031:52;;;2063:18;;:::i;:::-;2112:2;2106:9;2124:67;2179:2;2160:13;;-1:-1:-1;;2156:27:1;2185:4;2152:38;2106:9;2124:67;:::i;:::-;2215:2;2207:6;2200:18;2261:3;2254:4;2249:2;2241:6;2237:15;2233:26;2230:35;2227:55;;;2278:1;2275;2268:12;2227:55;2342:2;2335:4;2327:6;2323:17;2316:4;2308:6;2304:17;2291:54;2389:1;2365:15;;;2382:4;2361:26;2354:37;;;;2369:6;1866:555;-1:-1:-1;;;1866:555:1:o;2426:186::-;2485:6;2538:2;2526:9;2517:7;2513:23;2509:32;2506:52;;;2554:1;2551;2544:12;2506:52;2577:29;2596:9;2577:29;:::i;:::-;2567:39;2426:186;-1:-1:-1;;;2426:186:1:o;2617:260::-;2685:6;2693;2746:2;2734:9;2725:7;2721:23;2717:32;2714:52;;;2762:1;2759;2752:12;2714:52;2785:29;2804:9;2785:29;:::i;:::-;2775:39;;2833:38;2867:2;2856:9;2852:18;2833:38;:::i;:::-;2823:48;;2617:260;;;;;:::o;2882:943::-;3036:6;3044;3052;3060;3068;3121:3;3109:9;3100:7;3096:23;3092:33;3089:53;;;3138:1;3135;3128:12;3089:53;3161:29;3180:9;3161:29;:::i;:::-;3151:39;;3209:38;3243:2;3232:9;3228:18;3209:38;:::i;:::-;3199:48;;3298:2;3287:9;3283:18;3270:32;3321:18;3362:2;3354:6;3351:14;3348:34;;;3378:1;3375;3368:12;3348:34;3401:61;3454:7;3445:6;3434:9;3430:22;3401:61;:::i;:::-;3391:71;;3515:2;3504:9;3500:18;3487:32;3471:48;;3544:2;3534:8;3531:16;3528:36;;;3560:1;3557;3550:12;3528:36;3583:63;3638:7;3627:8;3616:9;3612:24;3583:63;:::i;:::-;3573:73;;3699:3;3688:9;3684:19;3671:33;3655:49;;3729:2;3719:8;3716:16;3713:36;;;3745:1;3742;3735:12;3713:36;;3768:51;3811:7;3800:8;3789:9;3785:24;3768:51;:::i;:::-;3758:61;;;2882:943;;;;;;;;:::o;3830:606::-;3934:6;3942;3950;3958;3966;4019:3;4007:9;3998:7;3994:23;3990:33;3987:53;;;4036:1;4033;4026:12;3987:53;4059:29;4078:9;4059:29;:::i;:::-;4049:39;;4107:38;4141:2;4130:9;4126:18;4107:38;:::i;:::-;4097:48;;4192:2;4181:9;4177:18;4164:32;4154:42;;4243:2;4232:9;4228:18;4215:32;4205:42;;4298:3;4287:9;4283:19;4270:33;4326:18;4318:6;4315:30;4312:50;;;4358:1;4355;4348:12;4312:50;4381:49;4422:7;4413:6;4402:9;4398:22;4381:49;:::i;4441:254::-;4506:6;4514;4567:2;4555:9;4546:7;4542:23;4538:32;4535:52;;;4583:1;4580;4573:12;4535:52;4606:29;4625:9;4606:29;:::i;:::-;4596:39;;4654:35;4685:2;4674:9;4670:18;4654:35;:::i;4700:254::-;4768:6;4776;4829:2;4817:9;4808:7;4804:23;4800:32;4797:52;;;4845:1;4842;4835:12;4797:52;4868:29;4887:9;4868:29;:::i;:::-;4858:39;4944:2;4929:18;;;;4916:32;;-1:-1:-1;;;4700:254:1:o;4959:595::-;5077:6;5085;5138:2;5126:9;5117:7;5113:23;5109:32;5106:52;;;5154:1;5151;5144:12;5106:52;5194:9;5181:23;5223:18;5264:2;5256:6;5253:14;5250:34;;;5280:1;5277;5270:12;5250:34;5303:61;5356:7;5347:6;5336:9;5332:22;5303:61;:::i;:::-;5293:71;;5417:2;5406:9;5402:18;5389:32;5373:48;;5446:2;5436:8;5433:16;5430:36;;;5462:1;5459;5452:12;5430:36;;5485:63;5540:7;5529:8;5518:9;5514:24;5485:63;:::i;:::-;5475:73;;;4959:595;;;;;:::o;5559:245::-;5617:6;5670:2;5658:9;5649:7;5645:23;5641:32;5638:52;;;5686:1;5683;5676:12;5638:52;5725:9;5712:23;5744:30;5768:5;5744:30;:::i;5809:249::-;5878:6;5931:2;5919:9;5910:7;5906:23;5902:32;5899:52;;;5947:1;5944;5937:12;5899:52;5979:9;5973:16;5998:30;6022:5;5998:30;:::i;6063:592::-;6134:6;6142;6195:2;6183:9;6174:7;6170:23;6166:32;6163:52;;;6211:1;6208;6201:12;6163:52;6251:9;6238:23;6280:18;6321:2;6313:6;6310:14;6307:34;;;6337:1;6334;6327:12;6307:34;6375:6;6364:9;6360:22;6350:32;;6420:7;6413:4;6409:2;6405:13;6401:27;6391:55;;6442:1;6439;6432:12;6391:55;6482:2;6469:16;6508:2;6500:6;6497:14;6494:34;;;6524:1;6521;6514:12;6494:34;6569:7;6564:2;6555:6;6551:2;6547:15;6543:24;6540:37;6537:57;;;6590:1;6587;6580:12;6537:57;6621:2;6613:11;;;;;6643:6;;-1:-1:-1;6063:592:1;;-1:-1:-1;;;;6063:592:1:o;6660:180::-;6719:6;6772:2;6760:9;6751:7;6747:23;6743:32;6740:52;;;6788:1;6785;6778:12;6740:52;-1:-1:-1;6811:23:1;;6660:180;-1:-1:-1;6660:180:1:o;6845:254::-;6913:6;6921;6974:2;6962:9;6953:7;6949:23;6945:32;6942:52;;;6990:1;6987;6980:12;6942:52;7026:9;7013:23;7003:33;;7055:38;7089:2;7078:9;7074:18;7055:38;:::i;7104:663::-;7231:6;7239;7247;7300:2;7288:9;7279:7;7275:23;7271:32;7268:52;;;7316:1;7313;7306:12;7268:52;7352:9;7339:23;7329:33;;7413:2;7402:9;7398:18;7385:32;7436:18;7477:2;7469:6;7466:14;7463:34;;;7493:1;7490;7483:12;7463:34;7516:61;7569:7;7560:6;7549:9;7545:22;7516:61;:::i;:::-;7506:71;;7630:2;7619:9;7615:18;7602:32;7586:48;;7659:2;7649:8;7646:16;7643:36;;;7675:1;7672;7665:12;7643:36;;7698:63;7753:7;7742:8;7731:9;7727:24;7698:63;:::i;:::-;7688:73;;;7104:663;;;;;:::o;7772:435::-;7846:6;7854;7862;7915:2;7903:9;7894:7;7890:23;7886:32;7883:52;;;7931:1;7928;7921:12;7883:52;7967:9;7954:23;7944:33;;7996:35;8027:2;8016:9;8012:18;7996:35;:::i;:::-;7986:45;;8081:2;8070:9;8066:18;8053:32;-1:-1:-1;;;;;8118:5:1;8114:44;8107:5;8104:55;8094:83;;8173:1;8170;8163:12;8094:83;8196:5;8186:15;;;7772:435;;;;;:::o;8212:525::-;8307:6;8315;8323;8331;8384:3;8372:9;8363:7;8359:23;8355:33;8352:53;;;8401:1;8398;8391:12;8352:53;8437:9;8424:23;8414:33;;8494:2;8483:9;8479:18;8466:32;8456:42;;8545:2;8534:9;8530:18;8517:32;8507:42;;8600:2;8589:9;8585:18;8572:32;8627:18;8619:6;8616:30;8613:50;;;8659:1;8656;8649:12;8613:50;8682:49;8723:7;8714:6;8703:9;8699:22;8682:49;:::i;:::-;8672:59;;;8212:525;;;;;;;:::o;8742:435::-;8795:3;8833:5;8827:12;8860:6;8855:3;8848:19;8886:4;8915:2;8910:3;8906:12;8899:19;;8952:2;8945:5;8941:14;8973:1;8983:169;8997:6;8994:1;8991:13;8983:169;;;9058:13;;9046:26;;9092:12;;;;9127:15;;;;9019:1;9012:9;8983:169;;;-1:-1:-1;9168:3:1;;8742:435;-1:-1:-1;;;;;8742:435:1:o;9182:257::-;9223:3;9261:5;9255:12;9288:6;9283:3;9276:19;9304:63;9360:6;9353:4;9348:3;9344:14;9337:4;9330:5;9326:16;9304:63;:::i;:::-;9421:2;9400:15;-1:-1:-1;;9396:29:1;9387:39;;;;9428:4;9383:50;;9182:257;-1:-1:-1;;9182:257:1:o;9444:185::-;9486:3;9524:5;9518:12;9539:52;9584:6;9579:3;9572:4;9565:5;9561:16;9539:52;:::i;:::-;9607:16;;;;;9444:185;-1:-1:-1;;9444:185:1:o;9752:1358::-;10029:3;10058:1;10091:6;10085:13;10121:3;10143:1;10171:9;10167:2;10163:18;10153:28;;10231:2;10220:9;10216:18;10253;10243:61;;10297:4;10289:6;10285:17;10275:27;;10243:61;10323:2;10371;10363:6;10360:14;10340:18;10337:38;10334:222;;;-1:-1:-1;;;10405:3:1;10398:90;10511:4;10508:1;10501:15;10541:4;10536:3;10529:17;10334:222;10572:18;10599:104;;;;10717:1;10712:320;;;;10565:467;;10599:104;-1:-1:-1;;10632:24:1;;10620:37;;10677:16;;;;-1:-1:-1;10599:104:1;;10712:320;26411:1;26404:14;;;26448:4;26435:18;;10807:1;10821:165;10835:6;10832:1;10829:13;10821:165;;;10913:14;;10900:11;;;10893:35;10956:16;;;;10850:10;;10821:165;;;10825:3;;11015:6;11010:3;11006:16;10999:23;;10565:467;;;;;;;11048:56;11073:30;11099:3;11091:6;11073:30;:::i;:::-;9706:7;9694:20;;9739:1;9730:11;;9634:113;11048:56;11041:63;9752:1358;-1:-1:-1;;;;;9752:1358:1:o;11500:652::-;11863:34;11858:3;11851:47;11928:17;11923:2;11918:3;11914:12;11907:39;11833:3;11975:6;11969:13;11991:60;12044:6;12039:2;12034:3;12030:12;12025:2;12017:6;12013:15;11991:60;:::i;:::-;12115:3;12110:2;12070:16;;;;12102:11;;;12095:24;-1:-1:-1;12143:2:1;12135:11;;11500:652;-1:-1:-1;11500:652:1:o;12388:849::-;12710:4;-1:-1:-1;;;;;12820:2:1;12812:6;12808:15;12797:9;12790:34;12872:2;12864:6;12860:15;12855:2;12844:9;12840:18;12833:43;;12912:3;12907:2;12896:9;12892:18;12885:31;12939:57;12991:3;12980:9;12976:19;12968:6;12939:57;:::i;:::-;13044:9;13036:6;13032:22;13027:2;13016:9;13012:18;13005:50;13078:44;13115:6;13107;13078:44;:::i;:::-;13064:58;;13171:9;13163:6;13159:22;13153:3;13142:9;13138:19;13131:51;13199:32;13224:6;13216;13199:32;:::i;:::-;13191:40;12388:849;-1:-1:-1;;;;;;;;12388:849:1:o;13242:583::-;13464:4;-1:-1:-1;;;;;13574:2:1;13566:6;13562:15;13551:9;13544:34;13626:2;13618:6;13614:15;13609:2;13598:9;13594:18;13587:43;;13666:6;13661:2;13650:9;13646:18;13639:34;13709:6;13704:2;13693:9;13689:18;13682:34;13753:3;13747;13736:9;13732:19;13725:32;13774:45;13814:3;13803:9;13799:19;13791:6;13774:45;:::i;:::-;13766:53;13242:583;-1:-1:-1;;;;;;;13242:583:1:o;14203:261::-;14382:2;14371:9;14364:21;14345:4;14402:56;14454:2;14443:9;14439:18;14431:6;14402:56;:::i;14469:465::-;14726:2;14715:9;14708:21;14689:4;14752:56;14804:2;14793:9;14789:18;14781:6;14752:56;:::i;:::-;14856:9;14848:6;14844:22;14839:2;14828:9;14824:18;14817:50;14884:44;14921:6;14913;14884:44;:::i;15937:219::-;16086:2;16075:9;16068:21;16049:4;16106:44;16146:2;16135:9;16131:18;16123:6;16106:44;:::i;26150:183::-;26210:4;26243:18;26235:6;26232:30;26229:56;;;26265:18;;:::i;:::-;-1:-1:-1;26310:1:1;26306:14;26322:4;26302:25;;26150:183::o;26464:251::-;26504:3;-1:-1:-1;;;;;26591:2:1;26588:1;26584:10;26621:2;26618:1;26614:10;26652:3;26648:2;26644:12;26639:3;26636:21;26633:47;;;26660:18;;:::i;:::-;26696:13;;26464:251;-1:-1:-1;;;;26464:251:1:o;26720:128::-;26760:3;26791:1;26787:6;26784:1;26781:13;26778:39;;;26797:18;;:::i;:::-;-1:-1:-1;26833:9:1;;26720:128::o;26853:120::-;26893:1;26919;26909:35;;26924:18;;:::i;:::-;-1:-1:-1;26958:9:1;;26853:120::o;26978:125::-;27018:4;27046:1;27043;27040:8;27037:34;;;27051:18;;:::i;:::-;-1:-1:-1;27088:9:1;;26978:125::o;27108:258::-;27180:1;27190:113;27204:6;27201:1;27198:13;27190:113;;;27280:11;;;27274:18;27261:11;;;27254:39;27226:2;27219:10;27190:113;;;27321:6;27318:1;27315:13;27312:48;;;27356:1;27347:6;27342:3;27338:16;27331:27;27312:48;;27108:258;;;:::o;27371:437::-;27450:1;27446:12;;;;27493;;;27514:61;;27568:4;27560:6;27556:17;27546:27;;27514:61;27621:2;27613:6;27610:14;27590:18;27587:38;27584:218;;;-1:-1:-1;;;27655:1:1;27648:88;27759:4;27756:1;27749:15;27787:4;27784:1;27777:15;27584:218;;27371:437;;;:::o;27813:249::-;27923:2;27904:13;;-1:-1:-1;;27900:27:1;27888:40;;27958:18;27943:34;;27979:22;;;27940:62;27937:88;;;28005:18;;:::i;:::-;28041:2;28034:22;-1:-1:-1;;27813:249:1:o;28067:135::-;28106:3;-1:-1:-1;;28127:17:1;;28124:43;;;28147:18;;:::i;:::-;-1:-1:-1;28194:1:1;28183:13;;28067:135::o;28207:112::-;28239:1;28265;28255:35;;28270:18;;:::i;:::-;-1:-1:-1;28304:9:1;;28207:112::o;28324:184::-;-1:-1:-1;;;28373:1:1;28366:88;28473:4;28470:1;28463:15;28497:4;28494:1;28487:15;28513:184;-1:-1:-1;;;28562:1:1;28555:88;28662:4;28659:1;28652:15;28686:4;28683:1;28676:15;28702:184;-1:-1:-1;;;28751:1:1;28744:88;28851:4;28848:1;28841:15;28875:4;28872:1;28865:15;28891:184;-1:-1:-1;;;28940:1:1;28933:88;29040:4;29037:1;29030:15;29064:4;29061:1;29054:15;29080:184;-1:-1:-1;;;29129:1:1;29122:88;29229:4;29226:1;29219:15;29253:4;29250:1;29243:15;29269:179;29304:3;29346:1;29328:16;29325:23;29322:120;;;29392:1;29389;29386;29371:23;-1:-1:-1;29429:1:1;29423:8;29418:3;29414:18;29322:120;29269:179;:::o;29453:671::-;29492:3;29534:4;29516:16;29513:26;29510:39;;;29453:671;:::o;29510:39::-;29576:2;29570:9;-1:-1:-1;;29641:16:1;29637:25;;29634:1;29570:9;29613:50;29692:4;29686:11;29716:16;29751:18;29822:2;29815:4;29807:6;29803:17;29800:25;29795:2;29787:6;29784:14;29781:45;29778:58;;;29829:5;;;;;29453:671;:::o;29778:58::-;29866:6;29860:4;29856:17;29845:28;;29902:3;29896:10;29929:2;29921:6;29918:14;29915:27;;;29935:5;;;;;;29453:671;:::o;29915:27::-;30019:2;30000:16;29994:4;29990:27;29986:36;29979:4;29970:6;29965:3;29961:16;29957:27;29954:69;29951:82;;;30026:5;;;;;;29453:671;:::o;29951:82::-;30042:57;30093:4;30084:6;30076;30072:19;30068:30;30062:4;30042:57;:::i;:::-;-1:-1:-1;30115:3:1;;29453:671;-1:-1:-1;;;;;29453:671:1:o;30129:177::-;-1:-1:-1;;;;;;30207:5:1;30203:78;30196:5;30193:89;30183:117;;30296:1;30293;30286:12
Swarm Source
ipfs://2612b194196ca238487a3bce1cdce11b9bc5d51c4f0dd189eb6ab182bedbfe3d
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.