Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,148 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 20425714 | 26 days ago | IN | 0 ETH | 0.00016537 | ||||
Set Approval For... | 19948766 | 93 days ago | IN | 0 ETH | 0.0002074 | ||||
Set Approval For... | 19862653 | 105 days ago | IN | 0 ETH | 0.00034376 | ||||
Set Approval For... | 19862653 | 105 days ago | IN | 0 ETH | 0.00034376 | ||||
Set Approval For... | 19862653 | 105 days ago | IN | 0 ETH | 0.00031765 | ||||
Set Approval For... | 19822168 | 111 days ago | IN | 0 ETH | 0.00013043 | ||||
Set Approval For... | 19688247 | 129 days ago | IN | 0 ETH | 0.00055376 | ||||
Safe Transfer Fr... | 19405121 | 169 days ago | IN | 0 ETH | 0.00214191 | ||||
Set Approval For... | 19156402 | 204 days ago | IN | 0 ETH | 0.00040746 | ||||
Set Approval For... | 19057436 | 218 days ago | IN | 0 ETH | 0.00037303 | ||||
Set Approval For... | 19057435 | 218 days ago | IN | 0 ETH | 0.00036206 | ||||
Set Approval For... | 18978857 | 229 days ago | IN | 0 ETH | 0.00141201 | ||||
Set Approval For... | 18974136 | 229 days ago | IN | 0 ETH | 0.00121508 | ||||
Set Approval For... | 18796042 | 254 days ago | IN | 0 ETH | 0.00188042 | ||||
Set Approval For... | 18203677 | 337 days ago | IN | 0 ETH | 0.00015461 | ||||
Set Approval For... | 17847976 | 387 days ago | IN | 0 ETH | 0.00061891 | ||||
Set Approval For... | 17540985 | 430 days ago | IN | 0 ETH | 0.00063015 | ||||
Set Approval For... | 17022100 | 504 days ago | IN | 0 ETH | 0.00126334 | ||||
Set Approval For... | 17019312 | 504 days ago | IN | 0 ETH | 0.00151535 | ||||
Set Approval For... | 17005361 | 506 days ago | IN | 0 ETH | 0.00205351 | ||||
Set Approval For... | 16985648 | 509 days ago | IN | 0 ETH | 0.00127131 | ||||
Set Approval For... | 16842821 | 529 days ago | IN | 0 ETH | 0.00132368 | ||||
Set Approval For... | 16743077 | 543 days ago | IN | 0 ETH | 0.00111912 | ||||
Set Approval For... | 16680487 | 552 days ago | IN | 0 ETH | 0.00124489 | ||||
Set Approval For... | 16574824 | 566 days ago | IN | 0 ETH | 0.00094642 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TenthLifePotions
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-18 */ // ████████╗███████╗███╗░░██╗████████╗██╗░░██╗ ██╗░░░░░██╗███████╗███████╗ // ╚══██╔══╝██╔════╝████╗░██║╚══██╔══╝██║░░██║ ██║░░░░░██║██╔════╝██╔════╝ // ░░░██║░░░█████╗░░██╔██╗██║░░░██║░░░███████║ ██║░░░░░██║█████╗░░█████╗░░ // ░░░██║░░░██╔══╝░░██║╚████║░░░██║░░░██╔══██║ ██║░░░░░██║██╔══╝░░██╔══╝░░ // ░░░██║░░░███████╗██║░╚███║░░░██║░░░██║░░██║ ███████╗██║██║░░░░░███████╗ // ░░░╚═╝░░░╚══════╝╚═╝░░╚══╝░░░╚═╝░░░╚═╝░░╚═╝ ╚══════╝╚═╝╚═╝░░░░░╚══════╝ // ██████╗░░█████╗░████████╗██╗░█████╗░███╗░░██╗░██████╗ // ██╔══██╗██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝ // ██████╔╝██║░░██║░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░ // ██╔═══╝░██║░░██║░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗ // ██║░░░░░╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝ // ╚═╝░░░░░░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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 (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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 (last updated v4.5.0) (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. * * NOTE: 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. * * NOTE: 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: Doodoriesportions.sol pragma solidity ^0.8.7; contract TenthLifePotions is ERC1155, Ownable { using Strings for uint256; uint256 public constant RANDOM_PORTION_ID = 0; uint256 public constant RARE_PORTION_ID = 1; uint256 public constant LEGENDARY_PORTION_ID = 2; string private baseURI; bytes32 private portionRoot; mapping(address => bool) public portionsMinted; mapping(address => bool) public extensionContracts; constructor(string memory _baseURI) ERC1155(_baseURI) { baseURI = _baseURI; } function setExtentionContracts(address _address, bool _state) public onlyOwner{ extensionContracts[_address] = _state; } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function setPortionRoot(bytes32 _root) public onlyOwner { portionRoot = _root; } function _verify(bytes32 _leafNode, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, portionRoot, _leafNode); } function _leaf(address account, uint256[] memory portionData) internal pure returns (bytes32) { return keccak256(abi.encodePacked(account, portionData)); } function mintPortion(uint256[] memory portionData, bytes32[] calldata _proof) public { require(_verify(_leaf(msg.sender, portionData), _proof), "Invalid proof"); require(!portionsMinted[msg.sender], "You have already minted your portions"); //random mints if(portionData[0] > 0){ _mint(msg.sender, RANDOM_PORTION_ID, portionData[0], ""); } //rare mints if(portionData[1] > 0){ _mint(msg.sender, RARE_PORTION_ID, portionData[1], ""); } //legendary mints if(portionData[2] > 0){ _mint(msg.sender, LEGENDARY_PORTION_ID, portionData[2], ""); } portionsMinted[msg.sender] = true; } function overridePortionsMinted(address _address, bool _state) public onlyOwner{ portionsMinted[_address] = _state; } function mint( uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(msg.sender, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function burn(address _burnAddress, uint256 _portionID, uint256 _amount) external { require(extensionContracts[msg.sender], "No permission"); _burn(_burnAddress, _portionID, _amount); } function burnBatch(address _burnAddress, uint[] memory _ids, uint[] memory _amounts) external { require(extensionContracts[msg.sender], "No permission"); _burnBatch(_burnAddress, _ids, _amounts); } function airdrop(address[] memory _airdropAddresses, uint256 _portionType, uint256 _amount) public onlyOwner { for (uint256 i = 0; i < _airdropAddresses.length; i++) { address to = _airdropAddresses[i]; _mint(to, _portionType, _amount, ""); } } function updateBaseUri(string memory _baseURI) external onlyOwner { baseURI = _baseURI; } function uri(uint256 typeId) public view override returns (string memory) { return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, typeId.toString())) : baseURI; } }
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":[],"name":"LEGENDARY_PORTION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RANDOM_PORTION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RARE_PORTION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_airdropAddresses","type":"address[]"},{"internalType":"uint256","name":"_portionType","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","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":"address","name":"_burnAddress","type":"address"},{"internalType":"uint256","name":"_portionID","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnAddress","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"extensionContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"portionData","type":"uint256[]"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintPortion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"overridePortionsMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"portionsMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setExtentionContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setPortionRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002ba738038062002ba783398101604081905262000034916200017a565b80620000408162000069565b506200004c3362000082565b805162000061906004906020840190620000d4565b5050620002a9565b80516200007e906002906020840190620000d4565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000e29062000256565b90600052602060002090601f01602090048101928262000106576000855562000151565b82601f106200012157805160ff191683800117855562000151565b8280016001018555821562000151579182015b828111156200015157825182559160200191906001019062000134565b506200015f92915062000163565b5090565b5b808211156200015f576000815560010162000164565b600060208083850312156200018e57600080fd5b82516001600160401b0380821115620001a657600080fd5b818501915085601f830112620001bb57600080fd5b815181811115620001d057620001d062000293565b604051601f8201601f19908116603f01168101908382118183101715620001fb57620001fb62000293565b8160405282815288868487010111156200021457600080fd5b600093505b8284101562000238578484018601518185018701529285019262000219565b828411156200024a5760008684830101525b98975050505050505050565b600181811c908216806200026b57607f821691505b602082108114156200028d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6128ee80620002b96000396000f3fe608060405234801561001057600080fd5b50600436106101a85760003560e01c8063715018a6116100f9578063a52eb5d011610097578063f242432a11610071578063f242432a146103d1578063f2fde38b146103e4578063f3a98bfa146103f7578063f5298aca146103ff57600080fd5b8063a52eb5d01461035f578063aa91b8f314610372578063e985e9c51461039557600080fd5b80639d7deda9116100d35780639d7deda91461031e578063a128283214610331578063a22cb46514610339578063a496dedf1461034c57600080fd5b8063715018a6146102d8578063728a791a146102e05780638da5cb5b1461030357600080fd5b806311fe271f1161016657806339f7e37f1161014057806339f7e37f1461027f5780634e1273f41461029257806359337d7b146102b25780636b20c454146102c557600080fd5b806311fe271f146102465780631f7fdffa146102595780632eb2c2d61461026c57600080fd5b8062fdd58e146101ad57806301ffc9a7146101d357806302fe5305146101f657806308dc9f421461020b5780630e89341c1461021e5780630ef811181461023e575b600080fd5b6101c06101bb366004611f75565b610412565b6040519081526020015b60405180910390f35b6101e66101e1366004612134565b6104a9565b60405190151581526020016101ca565b61020961020436600461216e565b6104fb565b005b6102096102193660046121b6565b610531565b61023161022c36600461211b565b61056c565b6040516101ca919061244e565b6101c0600081565b610209610254366004612082565b610645565b610209610267366004611ea1565b610825565b61020961027a366004611d21565b610861565b61020961028d36600461216e565b6108f8565b6102a56102a0366004611fd2565b610939565b6040516101ca9190612416565b6102096102c0366004611f39565b610a62565b6102096102d3366004611e2e565b610ab7565b610209610b11565b6101e66102ee366004611cd3565b60076020526000908152604090205460ff1681565b6003546040516001600160a01b0390911681526020016101ca565b61020961032c36600461211b565b610b47565b6101c0600181565b610209610347366004611f39565b610b76565b61020961035a366004612035565b610b81565b61020961036d366004611f39565b610c03565b6101e6610380366004611cd3565b60066020526000908152604090205460ff1681565b6101e66103a3366004611cee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102096103df366004611dca565b610c58565b6102096103f2366004611cd3565b610cdf565b6101c0600281565b61020961040d366004611f9f565b610d77565b60006001600160a01b0383166104835760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104da57506001600160e01b031982166303a24d0760e21b145b806104f557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146105255760405162461bcd60e51b815260040161047a906125bf565b61052e81610dd1565b50565b6003546001600160a01b0316331461055b5760405162461bcd60e51b815260040161047a906125bf565b61056733848484610de4565b505050565b606060006004805461057d9061270f565b90501161061457600480546105919061270f565b80601f01602080910402602001604051908101604052809291908181526020018280546105bd9061270f565b801561060a5780601f106105df5761010080835404028352916020019161060a565b820191906000526020600020905b8154815290600101906020018083116105ed57829003601f168201915b50505050506104f5565b600461061f83610eb4565b6040516020016106309291906122cc565b60405160208183030381529060405292915050565b61068b6106523385610fb9565b838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610fec92505050565b6106c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161047a565b3360009081526006602052604090205460ff16156107355760405162461bcd60e51b815260206004820152602560248201527f596f75206861766520616c7265616479206d696e74656420796f757220706f7260448201526474696f6e7360d81b606482015260840161047a565b60008360008151811061074a5761074a6127d1565b6020026020010151111561078e5761078e33600085600081518110610771576107716127d1565b602002602001015160405180602001604052806000815250610de4565b6000836001815181106107a3576107a36127d1565b602002602001015111156107ca576107ca33600185600181518110610771576107716127d1565b6000836002815181106107df576107df6127d1565b602002602001015111156108065761080633600285600281518110610771576107716127d1565b5050336000908152600660205260409020805460ff1916600117905550565b6003546001600160a01b0316331461084f5760405162461bcd60e51b815260040161047a906125bf565b61085b84848484611002565b50505050565b6001600160a01b03851633148061087d575061087d85336103a3565b6108e45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161047a565b6108f1858585858561114d565b5050505050565b6003546001600160a01b031633146109225760405162461bcd60e51b815260040161047a906125bf565b8051610935906004906020840190611ab9565b5050565b6060815183511461099e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161047a565b600083516001600160401b038111156109b9576109b96127e7565b6040519080825280602002602001820160405280156109e2578160200160208202803683370190505b50905060005b8451811015610a5a57610a2d858281518110610a0657610a066127d1565b6020026020010151858381518110610a2057610a206127d1565b6020026020010151610412565b828281518110610a3f57610a3f6127d1565b6020908102919091010152610a5381612776565b90506109e8565b509392505050565b6003546001600160a01b03163314610a8c5760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360009081526007602052604090205460ff16610b065760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b604482015260640161047a565b6105678383836112e9565b6003546001600160a01b03163314610b3b5760405162461bcd60e51b815260040161047a906125bf565b610b456000611465565b565b6003546001600160a01b03163314610b715760405162461bcd60e51b815260040161047a906125bf565b600555565b6109353383836114b7565b6003546001600160a01b03163314610bab5760405162461bcd60e51b815260040161047a906125bf565b60005b835181101561085b576000848281518110610bcb57610bcb6127d1565b60200260200101519050610bf081858560405180602001604052806000815250610de4565b5080610bfb81612776565b915050610bae565b6003546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038516331480610c745750610c7485336103a3565b610cd25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161047a565b6108f18585858585611598565b6003546001600160a01b03163314610d095760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b038116610d6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161047a565b61052e81611465565b3360009081526007602052604090205460ff16610dc65760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b604482015260640161047a565b6105678383836116b5565b8051610935906002906020840190611ab9565b6001600160a01b038416610e0a5760405162461bcd60e51b815260040161047a9061263c565b33610e2481600087610e1b886117b7565b6108f1886117b7565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610e549084906126a0565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108f181600087878787611802565b606081610ed85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f025780610eec81612776565b9150610efb9050600a836126b8565b9150610edc565b6000816001600160401b03811115610f1c57610f1c6127e7565b6040519080825280601f01601f191660200182016040528015610f46576020820181803683370190505b5090505b8415610fb157610f5b6001836126cc565b9150610f68600a86612791565b610f739060306126a0565b60f81b818381518110610f8857610f886127d1565b60200101906001600160f81b031916908160001a905350610faa600a866126b8565b9450610f4a565b949350505050565b60008282604051602001610fce92919061227e565b60405160208183030381529060405280519060200120905092915050565b6000610ffb826005548561196d565b9392505050565b6001600160a01b0384166110285760405162461bcd60e51b815260040161047a9061263c565b81518351146110495760405162461bcd60e51b815260040161047a906125f4565b3360005b84518110156110e557838181518110611068576110686127d1565b6020026020010151600080878481518110611085576110856127d1565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110cd91906126a0565b909155508190506110dd81612776565b91505061104d565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611136929190612429565b60405180910390a46108f181600087878787611983565b815183511461116e5760405162461bcd60e51b815260040161047a906125f4565b6001600160a01b0384166111945760405162461bcd60e51b815260040161047a906124ed565b3360005b845181101561127b5760008582815181106111b5576111b56127d1565b6020026020010151905060008583815181106111d3576111d36127d1565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112235760405162461bcd60e51b815260040161047a90612575565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906112609084906126a0565b925050819055505050508061127490612776565b9050611198565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112cb929190612429565b60405180910390a46112e1818787878787611983565b505050505050565b6001600160a01b03831661130f5760405162461bcd60e51b815260040161047a90612532565b80518251146113305760405162461bcd60e51b815260040161047a906125f4565b604080516020810190915260009081905233905b8351811015611406576000848281518110611361576113616127d1565b60200260200101519050600084838151811061137f5761137f6127d1565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156113cf5760405162461bcd60e51b815260040161047a906124a9565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806113fe81612776565b915050611344565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611457929190612429565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561152b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161047a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115be5760405162461bcd60e51b815260040161047a906124ed565b336115ce818787610e1b886117b7565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561160f5760405162461bcd60e51b815260040161047a90612575565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061164c9084906126a0565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116ac828888888888611802565b50505050505050565b6001600160a01b0383166116db5760405162461bcd60e51b815260040161047a90612532565b3361170b818560006116ec876117b7565b6116f5876117b7565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b03881684529091529020548281101561174c5760405162461bcd60e51b815260040161047a906124a9565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106117f1576117f16127d1565b602090810291909101015292915050565b6001600160a01b0384163b156112e15760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061184690899089908890889088906004016123d1565b602060405180830381600087803b15801561186057600080fd5b505af1925050508015611890575060408051601f3d908101601f1916820190925261188d91810190612151565b60015b61193d5761189c6127fd565b806308c379a014156118d657506118b1612819565b806118bc57506118d8565b8060405162461bcd60e51b815260040161047a919061244e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161047a565b6001600160e01b0319811663f23a6e6160e01b146116ac5760405162461bcd60e51b815260040161047a90612461565b60008261197a8584611a4d565b14949350505050565b6001600160a01b0384163b156112e15760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119c79089908990889088908890600401612373565b602060405180830381600087803b1580156119e157600080fd5b505af1925050508015611a11575060408051601f3d908101601f19168201909252611a0e91810190612151565b60015b611a1d5761189c6127fd565b6001600160e01b0319811663bc197c8160e01b146116ac5760405162461bcd60e51b815260040161047a90612461565b600081815b8451811015610a5a576000858281518110611a6f57611a6f6127d1565b60200260200101519050808311611a955760008381526020829052604090209250611aa6565b600081815260208490526040902092505b5080611ab181612776565b915050611a52565b828054611ac59061270f565b90600052602060002090601f016020900481019282611ae75760008555611b2d565b82601f10611b0057805160ff1916838001178555611b2d565b82800160010185558215611b2d579182015b82811115611b2d578251825591602001919060010190611b12565b50611b39929150611b3d565b5090565b5b80821115611b395760008155600101611b3e565b60006001600160401b03831115611b6b57611b6b6127e7565b604051611b82601f8501601f19166020018261274a565b809150838152848484011115611b9757600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611bc657600080fd5b919050565b600082601f830112611bdc57600080fd5b81356020611be98261267d565b604051611bf6828261274a565b8381528281019150858301600585901b87018401881015611c1657600080fd5b60005b85811015611c3c57611c2a82611baf565b84529284019290840190600101611c19565b5090979650505050505050565b600082601f830112611c5a57600080fd5b81356020611c678261267d565b604051611c74828261274a565b8381528281019150858301600585901b87018401881015611c9457600080fd5b60005b85811015611c3c57813584529284019290840190600101611c97565b600082601f830112611cc457600080fd5b610ffb83833560208501611b52565b600060208284031215611ce557600080fd5b610ffb82611baf565b60008060408385031215611d0157600080fd5b611d0a83611baf565b9150611d1860208401611baf565b90509250929050565b600080600080600060a08688031215611d3957600080fd5b611d4286611baf565b9450611d5060208701611baf565b935060408601356001600160401b0380821115611d6c57600080fd5b611d7889838a01611c49565b94506060880135915080821115611d8e57600080fd5b611d9a89838a01611c49565b93506080880135915080821115611db057600080fd5b50611dbd88828901611cb3565b9150509295509295909350565b600080600080600060a08688031215611de257600080fd5b611deb86611baf565b9450611df960208701611baf565b9350604086013592506060860135915060808601356001600160401b03811115611e2257600080fd5b611dbd88828901611cb3565b600080600060608486031215611e4357600080fd5b611e4c84611baf565b925060208401356001600160401b0380821115611e6857600080fd5b611e7487838801611c49565b93506040860135915080821115611e8a57600080fd5b50611e9786828701611c49565b9150509250925092565b60008060008060808587031215611eb757600080fd5b611ec085611baf565b935060208501356001600160401b0380821115611edc57600080fd5b611ee888838901611c49565b94506040870135915080821115611efe57600080fd5b611f0a88838901611c49565b93506060870135915080821115611f2057600080fd5b50611f2d87828801611cb3565b91505092959194509250565b60008060408385031215611f4c57600080fd5b611f5583611baf565b915060208301358015158114611f6a57600080fd5b809150509250929050565b60008060408385031215611f8857600080fd5b611f9183611baf565b946020939093013593505050565b600080600060608486031215611fb457600080fd5b611fbd84611baf565b95602085013595506040909401359392505050565b60008060408385031215611fe557600080fd5b82356001600160401b0380821115611ffc57600080fd5b61200886838701611bcb565b9350602085013591508082111561201e57600080fd5b5061202b85828601611c49565b9150509250929050565b60008060006060848603121561204a57600080fd5b83356001600160401b0381111561206057600080fd5b61206c86828701611bcb565b9660208601359650604090950135949350505050565b60008060006040848603121561209757600080fd5b83356001600160401b03808211156120ae57600080fd5b6120ba87838801611c49565b945060208601359150808211156120d057600080fd5b818601915086601f8301126120e457600080fd5b8135818111156120f357600080fd5b8760208260051b850101111561210857600080fd5b6020830194508093505050509250925092565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135610ffb816128a2565b60006020828403121561216357600080fd5b8151610ffb816128a2565b60006020828403121561218057600080fd5b81356001600160401b0381111561219657600080fd5b8201601f810184136121a757600080fd5b610fb184823560208401611b52565b6000806000606084860312156121cb57600080fd5b833592506020840135915060408401356001600160401b038111156121ef57600080fd5b611e9786828701611cb3565b600081518084526020808501945080840160005b8381101561222b5781518752958201959082019060010161220f565b509495945050505050565b6000815180845261224e8160208601602086016126e3565b601f01601f19169290920160200192915050565b600081516122748185602086016126e3565b9290920192915050565b6bffffffffffffffffffffffff198360601b1681526000601482018351602080860160005b838110156122bf578151855293820193908201906001016122a3565b5092979650505050505050565b600080845481600182811c9150808316806122e857607f831692505b602080841082141561230857634e487b7160e01b86526022600452602486fd5b81801561231c576001811461232d5761235a565b60ff1986168952848901965061235a565b60008b81526020902060005b868110156123525781548b820152908501908301612339565b505084890196505b50505050505061236a8185612262565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061239f908301866121fb565b82810360608401526123b181866121fb565b905082810360808401526123c58185612236565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061240b90830184612236565b979650505050505050565b602081526000610ffb60208301846121fb565b60408152600061243c60408301856121fb565b828103602084015261236a81856121fb565b602081526000610ffb6020830184612236565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612696576126966127e7565b5060051b60200190565b600082198211156126b3576126b36127a5565b500190565b6000826126c7576126c76127bb565b500490565b6000828210156126de576126de6127a5565b500390565b60005b838110156126fe5781810151838201526020016126e6565b8381111561085b5750506000910152565b600181811c9082168061272357607f821691505b6020821081141561274457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561276f5761276f6127e7565b6040525050565b600060001982141561278a5761278a6127a5565b5060010190565b6000826127a0576127a06127bb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156128165760046000803e5060005160e01c5b90565b600060443d10156128275790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561285657505050505090565b828501915081518181111561286e5750505050505090565b843d87010160208285010111156128885750505050505090565b6128976020828601018761274a565b509095945050505050565b6001600160e01b03198116811461052e57600080fdfea2646970667358221220476610dbc79576f10a42ecd33d885718848a40a31130e323755d69ce6e0f1cf864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f75732d63656e7472616c312d646f6f646f726965732e636c6f756466756e6374696f6e732e6e65742f6170702f706f7274696f6e732f0000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a85760003560e01c8063715018a6116100f9578063a52eb5d011610097578063f242432a11610071578063f242432a146103d1578063f2fde38b146103e4578063f3a98bfa146103f7578063f5298aca146103ff57600080fd5b8063a52eb5d01461035f578063aa91b8f314610372578063e985e9c51461039557600080fd5b80639d7deda9116100d35780639d7deda91461031e578063a128283214610331578063a22cb46514610339578063a496dedf1461034c57600080fd5b8063715018a6146102d8578063728a791a146102e05780638da5cb5b1461030357600080fd5b806311fe271f1161016657806339f7e37f1161014057806339f7e37f1461027f5780634e1273f41461029257806359337d7b146102b25780636b20c454146102c557600080fd5b806311fe271f146102465780631f7fdffa146102595780632eb2c2d61461026c57600080fd5b8062fdd58e146101ad57806301ffc9a7146101d357806302fe5305146101f657806308dc9f421461020b5780630e89341c1461021e5780630ef811181461023e575b600080fd5b6101c06101bb366004611f75565b610412565b6040519081526020015b60405180910390f35b6101e66101e1366004612134565b6104a9565b60405190151581526020016101ca565b61020961020436600461216e565b6104fb565b005b6102096102193660046121b6565b610531565b61023161022c36600461211b565b61056c565b6040516101ca919061244e565b6101c0600081565b610209610254366004612082565b610645565b610209610267366004611ea1565b610825565b61020961027a366004611d21565b610861565b61020961028d36600461216e565b6108f8565b6102a56102a0366004611fd2565b610939565b6040516101ca9190612416565b6102096102c0366004611f39565b610a62565b6102096102d3366004611e2e565b610ab7565b610209610b11565b6101e66102ee366004611cd3565b60076020526000908152604090205460ff1681565b6003546040516001600160a01b0390911681526020016101ca565b61020961032c36600461211b565b610b47565b6101c0600181565b610209610347366004611f39565b610b76565b61020961035a366004612035565b610b81565b61020961036d366004611f39565b610c03565b6101e6610380366004611cd3565b60066020526000908152604090205460ff1681565b6101e66103a3366004611cee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102096103df366004611dca565b610c58565b6102096103f2366004611cd3565b610cdf565b6101c0600281565b61020961040d366004611f9f565b610d77565b60006001600160a01b0383166104835760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104da57506001600160e01b031982166303a24d0760e21b145b806104f557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146105255760405162461bcd60e51b815260040161047a906125bf565b61052e81610dd1565b50565b6003546001600160a01b0316331461055b5760405162461bcd60e51b815260040161047a906125bf565b61056733848484610de4565b505050565b606060006004805461057d9061270f565b90501161061457600480546105919061270f565b80601f01602080910402602001604051908101604052809291908181526020018280546105bd9061270f565b801561060a5780601f106105df5761010080835404028352916020019161060a565b820191906000526020600020905b8154815290600101906020018083116105ed57829003601f168201915b50505050506104f5565b600461061f83610eb4565b6040516020016106309291906122cc565b60405160208183030381529060405292915050565b61068b6106523385610fb9565b838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610fec92505050565b6106c75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161047a565b3360009081526006602052604090205460ff16156107355760405162461bcd60e51b815260206004820152602560248201527f596f75206861766520616c7265616479206d696e74656420796f757220706f7260448201526474696f6e7360d81b606482015260840161047a565b60008360008151811061074a5761074a6127d1565b6020026020010151111561078e5761078e33600085600081518110610771576107716127d1565b602002602001015160405180602001604052806000815250610de4565b6000836001815181106107a3576107a36127d1565b602002602001015111156107ca576107ca33600185600181518110610771576107716127d1565b6000836002815181106107df576107df6127d1565b602002602001015111156108065761080633600285600281518110610771576107716127d1565b5050336000908152600660205260409020805460ff1916600117905550565b6003546001600160a01b0316331461084f5760405162461bcd60e51b815260040161047a906125bf565b61085b84848484611002565b50505050565b6001600160a01b03851633148061087d575061087d85336103a3565b6108e45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161047a565b6108f1858585858561114d565b5050505050565b6003546001600160a01b031633146109225760405162461bcd60e51b815260040161047a906125bf565b8051610935906004906020840190611ab9565b5050565b6060815183511461099e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161047a565b600083516001600160401b038111156109b9576109b96127e7565b6040519080825280602002602001820160405280156109e2578160200160208202803683370190505b50905060005b8451811015610a5a57610a2d858281518110610a0657610a066127d1565b6020026020010151858381518110610a2057610a206127d1565b6020026020010151610412565b828281518110610a3f57610a3f6127d1565b6020908102919091010152610a5381612776565b90506109e8565b509392505050565b6003546001600160a01b03163314610a8c5760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b3360009081526007602052604090205460ff16610b065760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b604482015260640161047a565b6105678383836112e9565b6003546001600160a01b03163314610b3b5760405162461bcd60e51b815260040161047a906125bf565b610b456000611465565b565b6003546001600160a01b03163314610b715760405162461bcd60e51b815260040161047a906125bf565b600555565b6109353383836114b7565b6003546001600160a01b03163314610bab5760405162461bcd60e51b815260040161047a906125bf565b60005b835181101561085b576000848281518110610bcb57610bcb6127d1565b60200260200101519050610bf081858560405180602001604052806000815250610de4565b5080610bfb81612776565b915050610bae565b6003546001600160a01b03163314610c2d5760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b038516331480610c745750610c7485336103a3565b610cd25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161047a565b6108f18585858585611598565b6003546001600160a01b03163314610d095760405162461bcd60e51b815260040161047a906125bf565b6001600160a01b038116610d6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161047a565b61052e81611465565b3360009081526007602052604090205460ff16610dc65760405162461bcd60e51b815260206004820152600d60248201526c2737903832b936b4b9b9b4b7b760991b604482015260640161047a565b6105678383836116b5565b8051610935906002906020840190611ab9565b6001600160a01b038416610e0a5760405162461bcd60e51b815260040161047a9061263c565b33610e2481600087610e1b886117b7565b6108f1886117b7565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610e549084906126a0565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108f181600087878787611802565b606081610ed85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610f025780610eec81612776565b9150610efb9050600a836126b8565b9150610edc565b6000816001600160401b03811115610f1c57610f1c6127e7565b6040519080825280601f01601f191660200182016040528015610f46576020820181803683370190505b5090505b8415610fb157610f5b6001836126cc565b9150610f68600a86612791565b610f739060306126a0565b60f81b818381518110610f8857610f886127d1565b60200101906001600160f81b031916908160001a905350610faa600a866126b8565b9450610f4a565b949350505050565b60008282604051602001610fce92919061227e565b60405160208183030381529060405280519060200120905092915050565b6000610ffb826005548561196d565b9392505050565b6001600160a01b0384166110285760405162461bcd60e51b815260040161047a9061263c565b81518351146110495760405162461bcd60e51b815260040161047a906125f4565b3360005b84518110156110e557838181518110611068576110686127d1565b6020026020010151600080878481518110611085576110856127d1565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546110cd91906126a0565b909155508190506110dd81612776565b91505061104d565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611136929190612429565b60405180910390a46108f181600087878787611983565b815183511461116e5760405162461bcd60e51b815260040161047a906125f4565b6001600160a01b0384166111945760405162461bcd60e51b815260040161047a906124ed565b3360005b845181101561127b5760008582815181106111b5576111b56127d1565b6020026020010151905060008583815181106111d3576111d36127d1565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112235760405162461bcd60e51b815260040161047a90612575565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906112609084906126a0565b925050819055505050508061127490612776565b9050611198565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112cb929190612429565b60405180910390a46112e1818787878787611983565b505050505050565b6001600160a01b03831661130f5760405162461bcd60e51b815260040161047a90612532565b80518251146113305760405162461bcd60e51b815260040161047a906125f4565b604080516020810190915260009081905233905b8351811015611406576000848281518110611361576113616127d1565b60200260200101519050600084838151811061137f5761137f6127d1565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156113cf5760405162461bcd60e51b815260040161047a906124a9565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806113fe81612776565b915050611344565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611457929190612429565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561152b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161047a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115be5760405162461bcd60e51b815260040161047a906124ed565b336115ce818787610e1b886117b7565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561160f5760405162461bcd60e51b815260040161047a90612575565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061164c9084906126a0565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116ac828888888888611802565b50505050505050565b6001600160a01b0383166116db5760405162461bcd60e51b815260040161047a90612532565b3361170b818560006116ec876117b7565b6116f5876117b7565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b03881684529091529020548281101561174c5760405162461bcd60e51b815260040161047a906124a9565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106117f1576117f16127d1565b602090810291909101015292915050565b6001600160a01b0384163b156112e15760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061184690899089908890889088906004016123d1565b602060405180830381600087803b15801561186057600080fd5b505af1925050508015611890575060408051601f3d908101601f1916820190925261188d91810190612151565b60015b61193d5761189c6127fd565b806308c379a014156118d657506118b1612819565b806118bc57506118d8565b8060405162461bcd60e51b815260040161047a919061244e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161047a565b6001600160e01b0319811663f23a6e6160e01b146116ac5760405162461bcd60e51b815260040161047a90612461565b60008261197a8584611a4d565b14949350505050565b6001600160a01b0384163b156112e15760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119c79089908990889088908890600401612373565b602060405180830381600087803b1580156119e157600080fd5b505af1925050508015611a11575060408051601f3d908101601f19168201909252611a0e91810190612151565b60015b611a1d5761189c6127fd565b6001600160e01b0319811663bc197c8160e01b146116ac5760405162461bcd60e51b815260040161047a90612461565b600081815b8451811015610a5a576000858281518110611a6f57611a6f6127d1565b60200260200101519050808311611a955760008381526020829052604090209250611aa6565b600081815260208490526040902092505b5080611ab181612776565b915050611a52565b828054611ac59061270f565b90600052602060002090601f016020900481019282611ae75760008555611b2d565b82601f10611b0057805160ff1916838001178555611b2d565b82800160010185558215611b2d579182015b82811115611b2d578251825591602001919060010190611b12565b50611b39929150611b3d565b5090565b5b80821115611b395760008155600101611b3e565b60006001600160401b03831115611b6b57611b6b6127e7565b604051611b82601f8501601f19166020018261274a565b809150838152848484011115611b9757600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611bc657600080fd5b919050565b600082601f830112611bdc57600080fd5b81356020611be98261267d565b604051611bf6828261274a565b8381528281019150858301600585901b87018401881015611c1657600080fd5b60005b85811015611c3c57611c2a82611baf565b84529284019290840190600101611c19565b5090979650505050505050565b600082601f830112611c5a57600080fd5b81356020611c678261267d565b604051611c74828261274a565b8381528281019150858301600585901b87018401881015611c9457600080fd5b60005b85811015611c3c57813584529284019290840190600101611c97565b600082601f830112611cc457600080fd5b610ffb83833560208501611b52565b600060208284031215611ce557600080fd5b610ffb82611baf565b60008060408385031215611d0157600080fd5b611d0a83611baf565b9150611d1860208401611baf565b90509250929050565b600080600080600060a08688031215611d3957600080fd5b611d4286611baf565b9450611d5060208701611baf565b935060408601356001600160401b0380821115611d6c57600080fd5b611d7889838a01611c49565b94506060880135915080821115611d8e57600080fd5b611d9a89838a01611c49565b93506080880135915080821115611db057600080fd5b50611dbd88828901611cb3565b9150509295509295909350565b600080600080600060a08688031215611de257600080fd5b611deb86611baf565b9450611df960208701611baf565b9350604086013592506060860135915060808601356001600160401b03811115611e2257600080fd5b611dbd88828901611cb3565b600080600060608486031215611e4357600080fd5b611e4c84611baf565b925060208401356001600160401b0380821115611e6857600080fd5b611e7487838801611c49565b93506040860135915080821115611e8a57600080fd5b50611e9786828701611c49565b9150509250925092565b60008060008060808587031215611eb757600080fd5b611ec085611baf565b935060208501356001600160401b0380821115611edc57600080fd5b611ee888838901611c49565b94506040870135915080821115611efe57600080fd5b611f0a88838901611c49565b93506060870135915080821115611f2057600080fd5b50611f2d87828801611cb3565b91505092959194509250565b60008060408385031215611f4c57600080fd5b611f5583611baf565b915060208301358015158114611f6a57600080fd5b809150509250929050565b60008060408385031215611f8857600080fd5b611f9183611baf565b946020939093013593505050565b600080600060608486031215611fb457600080fd5b611fbd84611baf565b95602085013595506040909401359392505050565b60008060408385031215611fe557600080fd5b82356001600160401b0380821115611ffc57600080fd5b61200886838701611bcb565b9350602085013591508082111561201e57600080fd5b5061202b85828601611c49565b9150509250929050565b60008060006060848603121561204a57600080fd5b83356001600160401b0381111561206057600080fd5b61206c86828701611bcb565b9660208601359650604090950135949350505050565b60008060006040848603121561209757600080fd5b83356001600160401b03808211156120ae57600080fd5b6120ba87838801611c49565b945060208601359150808211156120d057600080fd5b818601915086601f8301126120e457600080fd5b8135818111156120f357600080fd5b8760208260051b850101111561210857600080fd5b6020830194508093505050509250925092565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135610ffb816128a2565b60006020828403121561216357600080fd5b8151610ffb816128a2565b60006020828403121561218057600080fd5b81356001600160401b0381111561219657600080fd5b8201601f810184136121a757600080fd5b610fb184823560208401611b52565b6000806000606084860312156121cb57600080fd5b833592506020840135915060408401356001600160401b038111156121ef57600080fd5b611e9786828701611cb3565b600081518084526020808501945080840160005b8381101561222b5781518752958201959082019060010161220f565b509495945050505050565b6000815180845261224e8160208601602086016126e3565b601f01601f19169290920160200192915050565b600081516122748185602086016126e3565b9290920192915050565b6bffffffffffffffffffffffff198360601b1681526000601482018351602080860160005b838110156122bf578151855293820193908201906001016122a3565b5092979650505050505050565b600080845481600182811c9150808316806122e857607f831692505b602080841082141561230857634e487b7160e01b86526022600452602486fd5b81801561231c576001811461232d5761235a565b60ff1986168952848901965061235a565b60008b81526020902060005b868110156123525781548b820152908501908301612339565b505084890196505b50505050505061236a8185612262565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061239f908301866121fb565b82810360608401526123b181866121fb565b905082810360808401526123c58185612236565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061240b90830184612236565b979650505050505050565b602081526000610ffb60208301846121fb565b60408152600061243c60408301856121fb565b828103602084015261236a81856121fb565b602081526000610ffb6020830184612236565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612696576126966127e7565b5060051b60200190565b600082198211156126b3576126b36127a5565b500190565b6000826126c7576126c76127bb565b500490565b6000828210156126de576126de6127a5565b500390565b60005b838110156126fe5781810151838201526020016126e6565b8381111561085b5750506000910152565b600181811c9082168061272357607f821691505b6020821081141561274457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561276f5761276f6127e7565b6040525050565b600060001982141561278a5761278a6127a5565b5060010190565b6000826127a0576127a06127bb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156128165760046000803e5060005160e01c5b90565b600060443d10156128275790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561285657505050505090565b828501915081518181111561286e5750505050505090565b843d87010160208285010111156128885750505050505090565b6128976020828601018761274a565b509095945050505050565b6001600160e01b03198116811461052e57600080fdfea2646970667358221220476610dbc79576f10a42ecd33d885718848a40a31130e323755d69ce6e0f1cf864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f75732d63656e7472616c312d646f6f646f726965732e636c6f756466756e6374696f6e732e6e65742f6170702f706f7274696f6e732f0000
-----Decoded View---------------
Arg [0] : _baseURI (string): https://us-central1-doodories.cloudfunctions.net/app/portions/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [2] : 68747470733a2f2f75732d63656e7472616c312d646f6f646f726965732e636c
Arg [3] : 6f756466756e6374696f6e732e6e65742f6170702f706f7274696f6e732f0000
Deployed Bytecode Sourcemap
43780:3705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30204:231;;;;;;:::i;:::-;;:::i;:::-;;;23422:25:1;;;23410:2;23395:18;30204:231:0;;;;;;;;29227:310;;;;;;:::i;:::-;;:::i;:::-;;;15839:14:1;;15832:22;15814:41;;15802:2;15787:18;29227:310:0;15674:187:1;44482:89:0;;;;;;:::i;:::-;;:::i;:::-;;45941:156;;;;;;:::i;:::-;;:::i;47178:304::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43869:45::-;;43913:1;43869:45;;45062:732;;;;;;:::i;:::-;;:::i;46105:191::-;;;;;;:::i;:::-;;:::i;32143:442::-;;;;;;:::i;:::-;;:::i;47062:103::-;;;;;;:::i;:::-;;:::i;30601:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44340:134::-;;;;;;:::i;:::-;;:::i;46522:219::-;;;;;;:::i;:::-;;:::i;9433:103::-;;;:::i;44169:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8782:87;8855:6;;8782:87;;-1:-1:-1;;;;;8855:6:0;;;13480:51:1;;13468:2;13453:18;8782:87:0;13334:203:1;44579:94:0;;;;;;:::i;:::-;;:::i;43922:43::-;;43964:1;43922:43;;31198:155;;;;;;:::i;:::-;;:::i;46748:293::-;;;;;;:::i;:::-;;:::i;45802:131::-;;;;;;:::i;:::-;;:::i;44115:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31425:168;;;;;;:::i;:::-;-1:-1:-1;;;;;31548:27:0;;;31524:4;31548:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;31425:168;31665:401;;;;;;:::i;:::-;;:::i;9691:201::-;;;;;;:::i;:::-;;:::i;43973:48::-;;44020:1;43973:48;;46304:210;;;;;;:::i;:::-;;:::i;30204:231::-;30290:7;-1:-1:-1;;;;;30318:21:0;;30310:77;;;;-1:-1:-1;;;30310:77:0;;17122:2:1;30310:77:0;;;17104:21:1;17161:2;17141:18;;;17134:30;17200:34;17180:18;;;17173:62;-1:-1:-1;;;17251:18:1;;;17244:41;17302:19;;30310:77:0;;;;;;;;;-1:-1:-1;30405:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;30405:22:0;;;;;;;;;;;;30204:231::o;29227:310::-;29329:4;-1:-1:-1;;;;;;29366:41:0;;-1:-1:-1;;;29366:41:0;;:110;;-1:-1:-1;;;;;;;29424:52:0;;-1:-1:-1;;;29424:52:0;29366:110;:163;;;-1:-1:-1;;;;;;;;;;20644:40:0;;;29493:36;29346:183;29227:310;-1:-1:-1;;29227:310:0:o;44482:89::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;44548:15:::1;44556:6;44548:7;:15::i;:::-;44482:89:::0;:::o;45941:156::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;46054:35:::1;46060:10;46072:2;46076:6;46084:4;46054:5;:35::i;:::-;45941:156:::0;;;:::o;47178:304::-;47289:13;47374:1;47356:7;47350:21;;;;;:::i;:::-;;;:25;:124;;47467:7;47350:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47419:7;47428:17;:6;:15;:17::i;:::-;47402:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47330:144;47178:304;-1:-1:-1;;47178:304:0:o;45062:732::-;45175:47;45183:30;45189:10;45201:11;45183:5;:30::i;:::-;45215:6;;45175:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45175:7:0;;-1:-1:-1;;;45175:47:0:i;:::-;45167:73;;;;-1:-1:-1;;;45167:73:0;;21505:2:1;45167:73:0;;;21487:21:1;21544:2;21524:18;;;21517:30;-1:-1:-1;;;21563:18:1;;;21556:43;21616:18;;45167:73:0;21303:337:1;45167:73:0;45274:10;45259:26;;;;:14;:26;;;;;;;;45258:27;45250:77;;;;-1:-1:-1;;;45250:77:0;;18756:2:1;45250:77:0;;;18738:21:1;18795:2;18775:18;;;18768:30;18834:34;18814:18;;;18807:62;-1:-1:-1;;;18885:18:1;;;18878:35;18930:19;;45250:77:0;18554:401:1;45250:77:0;45382:1;45365:11;45377:1;45365:14;;;;;;;;:::i;:::-;;;;;;;:18;45362:104;;;45399:56;45405:10;43913:1;45436:11;45448:1;45436:14;;;;;;;;:::i;:::-;;;;;;;45399:56;;;;;;;;;;;;:5;:56::i;:::-;45517:1;45500:11;45512:1;45500:14;;;;;;;;:::i;:::-;;;;;;;:18;45497:102;;;45534:54;45540:10;43964:1;45569:11;45581:1;45569:14;;;;;;;;:::i;45534:54::-;45655:1;45638:11;45650:1;45638:14;;;;;;;;:::i;:::-;;;;;;;:18;45635:107;;;45672:59;45678:10;44020:1;45712:11;45724:1;45712:14;;;;;;;;:::i;45672:59::-;-1:-1:-1;;45768:10:0;45753:26;;;;:14;:26;;;;;:33;;-1:-1:-1;;45753:33:0;45782:4;45753:33;;;-1:-1:-1;45062:732:0:o;46105:191::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;46254:34:::1;46265:2;46269:3;46274:7;46283:4;46254:10;:34::i;:::-;46105:191:::0;;;;:::o;32143:442::-;-1:-1:-1;;;;;32376:20:0;;7586:10;32376:20;;:60;;-1:-1:-1;32400:36:0;32417:4;7586:10;31425:168;:::i;32400:36::-;32354:160;;;;-1:-1:-1;;;32354:160:0;;19568:2:1;32354:160:0;;;19550:21:1;19607:2;19587:18;;;19580:30;19646:34;19626:18;;;19619:62;-1:-1:-1;;;19697:18:1;;;19690:48;19755:19;;32354:160:0;19366:414:1;32354:160:0;32525:52;32548:4;32554:2;32558:3;32563:7;32572:4;32525:22;:52::i;:::-;32143:442;;;;;:::o;47062:103::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;47139:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47062:103:::0;:::o;30601:524::-;30757:16;30818:3;:10;30799:8;:15;:29;30791:83;;;;-1:-1:-1;;;30791:83:0;;22257:2:1;30791:83:0;;;22239:21:1;22296:2;22276:18;;;22269:30;22335:34;22315:18;;;22308:62;-1:-1:-1;;;22386:18:1;;;22379:39;22435:19;;30791:83:0;22055:405:1;30791:83:0;30887:30;30934:8;:15;-1:-1:-1;;;;;30920:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30920:30:0;;30887:63;;30968:9;30963:122;30987:8;:15;30983:1;:19;30963:122;;;31043:30;31053:8;31062:1;31053:11;;;;;;;;:::i;:::-;;;;;;;31066:3;31070:1;31066:6;;;;;;;;:::i;:::-;;;;;;;31043:9;:30::i;:::-;31024:13;31038:1;31024:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;31004:3;;;:::i;:::-;;;30963:122;;;-1:-1:-1;31104:13:0;30601:524;-1:-1:-1;;;30601:524:0:o;44340:134::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44429:28:0;;;::::1;;::::0;;;:18:::1;:28;::::0;;;;:37;;-1:-1:-1;;44429:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44340:134::o;46522:219::-;46654:10;46635:30;;;;:18;:30;;;;;;;;46627:56;;;;-1:-1:-1;;;46627:56:0;;20802:2:1;46627:56:0;;;20784:21:1;20841:2;20821:18;;;20814:30;-1:-1:-1;;;20860:18:1;;;20853:43;20913:18;;46627:56:0;20600:337:1;46627:56:0;46695:40;46706:12;46720:4;46726:8;46695:10;:40::i;9433:103::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;9498:30:::1;9525:1;9498:18;:30::i;:::-;9433:103::o:0;44579:94::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;44646:11:::1;:19:::0;44579:94::o;31198:155::-;31293:52;7586:10;31326:8;31336;31293:18;:52::i;46748:293::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;46873:9:::1;46868:166;46892:17;:24;46888:1;:28;46868:166;;;46938:10;46951:17;46969:1;46951:20;;;;;;;;:::i;:::-;;;;;;;46938:33;;46986:36;46992:2;46996:12;47010:7;46986:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;-1:-1:-1::0;46918:3:0;::::1;::::0;::::1;:::i;:::-;;;;46868:166;;45802:131:::0;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45892:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:33;;-1:-1:-1;;45892:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45802:131::o;31665:401::-;-1:-1:-1;;;;;31873:20:0;;7586:10;31873:20;;:60;;-1:-1:-1;31897:36:0;31914:4;7586:10;31425:168;:::i;31897:36::-;31851:151;;;;-1:-1:-1;;;31851:151:0;;18346:2:1;31851:151:0;;;18328:21:1;18385:2;18365:18;;;18358:30;18424:34;18404:18;;;18397:62;-1:-1:-1;;;18475:18:1;;;18468:39;18524:19;;31851:151:0;18144:405:1;31851:151:0;32013:45;32031:4;32037:2;32041;32045:6;32053:4;32013:17;:45::i;9691:201::-;8855:6;;-1:-1:-1;;;;;8855:6:0;7586:10;9002:23;8994:68;;;;-1:-1:-1;;;8994:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9780:22:0;::::1;9772:73;;;::::0;-1:-1:-1;;;9772:73:0;;17534:2:1;9772:73:0::1;::::0;::::1;17516:21:1::0;17573:2;17553:18;;;17546:30;17612:34;17592:18;;;17585:62;-1:-1:-1;;;17663:18:1;;;17656:36;17709:19;;9772:73:0::1;17332:402:1::0;9772:73:0::1;9856:28;9875:8;9856:18;:28::i;46304:210::-:0;46424:10;46405:30;;;;:18;:30;;;;;;;;46397:56;;;;-1:-1:-1;;;46397:56:0;;20802:2:1;46397:56:0;;;20784:21:1;20841:2;20821:18;;;20814:30;-1:-1:-1;;;20860:18:1;;;20853:43;20913:18;;46397:56:0;20600:337:1;46397:56:0;46466:40;46472:12;46486:10;46498:7;46466:5;:40::i;36145:88::-;36212:13;;;;:4;;:13;;;;;:::i;36619:569::-;-1:-1:-1;;;;;36772:16:0;;36764:62;;;;-1:-1:-1;;;36764:62:0;;;;;;;:::i;:::-;7586:10;36883:102;7586:10;36839:16;36926:2;36930:21;36948:2;36930:17;:21::i;:::-;36953:25;36971:6;36953:17;:25::i;36883:102::-;36998:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36998:17:0;;;;;;;;;:27;;37019:6;;36998:9;:27;;37019:6;;36998:27;:::i;:::-;;;;-1:-1:-1;;37041:52:0;;;23632:25:1;;;23688:2;23673:18;;23666:34;;;-1:-1:-1;;;;;37041:52:0;;;;37074:1;;37041:52;;;;;;23605:18:1;37041:52:0;;;;;;;37106:74;37137:8;37155:1;37159:2;37163;37167:6;37175:4;37106:30;:74::i;5068:723::-;5124:13;5345:10;5341:53;;-1:-1:-1;;5372:10:0;;;;;;;;;;;;-1:-1:-1;;;5372:10:0;;;;;5068:723::o;5341:53::-;5419:5;5404:12;5460:78;5467:9;;5460:78;;5493:8;;;;:::i;:::-;;-1:-1:-1;5516:10:0;;-1:-1:-1;5524:2:0;5516:10;;:::i;:::-;;;5460:78;;;5548:19;5580:6;-1:-1:-1;;;;;5570:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5570:17:0;;5548:39;;5598:154;5605:10;;5598:154;;5632:11;5642:1;5632:11;;:::i;:::-;;-1:-1:-1;5701:10:0;5709:2;5701:5;:10;:::i;:::-;5688:24;;:2;:24;:::i;:::-;5675:39;;5658:6;5665;5658:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5658:56:0;;;;;;;;-1:-1:-1;5729:11:0;5738:2;5729:11;;:::i;:::-;;;5598:154;;;5776:6;5068:723;-1:-1:-1;;;;5068:723:0:o;44885:169::-;44970:7;45024;45033:11;45007:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44997:49;;;;;;44990:56;;44885:169;;;;:::o;44681:196::-;44791:4;44820:49;44839:5;44846:11;;44859:9;44820:18;:49::i;:::-;44813:56;44681:196;-1:-1:-1;;;44681:196:0:o;37544:735::-;-1:-1:-1;;;;;37722:16:0;;37714:62;;;;-1:-1:-1;;;37714:62:0;;;;;;;:::i;:::-;37809:7;:14;37795:3;:10;:28;37787:81;;;;-1:-1:-1;;;37787:81:0;;;;;;;:::i;:::-;7586:10;37881:16;38004:103;38028:3;:10;38024:1;:14;38004:103;;;38085:7;38093:1;38085:10;;;;;;;;:::i;:::-;;;;;;;38060:9;:17;38070:3;38074:1;38070:6;;;;;;;;:::i;:::-;;;;;;;38060:17;;;;;;;;;;;:21;38078:2;-1:-1:-1;;;;;38060:21:0;-1:-1:-1;;;;;38060:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;38040:3:0;;-1:-1:-1;38040:3:0;;;:::i;:::-;;;;38004:103;;;;38160:2;-1:-1:-1;;;;;38124:53:0;38156:1;-1:-1:-1;;;;;38124:53:0;38138:8;-1:-1:-1;;;;;38124:53:0;;38164:3;38169:7;38124:53;;;;;;;:::i;:::-;;;;;;;;38190:81;38226:8;38244:1;38248:2;38252:3;38257:7;38266:4;38190:35;:81::i;34227:1074::-;34454:7;:14;34440:3;:10;:28;34432:81;;;;-1:-1:-1;;;34432:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34532:16:0;;34524:66;;;;-1:-1:-1;;;34524:66:0;;;;;;;:::i;:::-;7586:10;34603:16;34720:421;34744:3;:10;34740:1;:14;34720:421;;;34776:10;34789:3;34793:1;34789:6;;;;;;;;:::i;:::-;;;;;;;34776:19;;34810:14;34827:7;34835:1;34827:10;;;;;;;;:::i;:::-;;;;;;;;;;;;34854:19;34876:13;;;;;;;;;;-1:-1:-1;;;;;34876:19:0;;;;;;;;;;;;34827:10;;-1:-1:-1;34918:21:0;;;;34910:76;;;;-1:-1:-1;;;34910:76:0;;;;;;;:::i;:::-;35030:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35030:19:0;;;;;;;;;;35052:20;;;35030:42;;35102:17;;;;;;;:27;;35052:20;;35030:9;35102:27;;35052:20;;35102:27;:::i;:::-;;;;;;;;34761:380;;;34756:3;;;;:::i;:::-;;;34720:421;;;;35188:2;-1:-1:-1;;;;;35158:47:0;35182:4;-1:-1:-1;;;;;35158:47:0;35172:8;-1:-1:-1;;;;;35158:47:0;;35192:3;35197:7;35158:47;;;;;;;:::i;:::-;;;;;;;;35218:75;35254:8;35264:4;35270:2;35274:3;35279:7;35288:4;35218:35;:75::i;:::-;34421:880;34227:1074;;;;;:::o;39380:891::-;-1:-1:-1;;;;;39532:18:0;;39524:66;;;;-1:-1:-1;;;39524:66:0;;;;;;;:::i;:::-;39623:7;:14;39609:3;:10;:28;39601:81;;;;-1:-1:-1;;;39601:81:0;;;;;;;:::i;:::-;39739:66;;;;;;;;;39695:16;39739:66;;;;7586:10;;39818:373;39842:3;:10;39838:1;:14;39818:373;;;39874:10;39887:3;39891:1;39887:6;;;;;;;;:::i;:::-;;;;;;;39874:19;;39908:14;39925:7;39933:1;39925:10;;;;;;;;:::i;:::-;;;;;;;;;;;;39952:19;39974:13;;;;;;;;;;-1:-1:-1;;;;;39974:19:0;;;;;;;;;;;;39925:10;;-1:-1:-1;40016:21:0;;;;40008:70;;;;-1:-1:-1;;;40008:70:0;;;;;;;:::i;:::-;40122:9;:13;;;;;;;;;;;-1:-1:-1;;;;;40122:19:0;;;;;;;;;;40144:20;;40122:42;;39854:3;;;;:::i;:::-;;;;39818:373;;;;40246:1;-1:-1:-1;;;;;40208:55:0;40232:4;-1:-1:-1;;;;;40208:55:0;40222:8;-1:-1:-1;;;;;40208:55:0;;40250:3;40255:7;40208:55;;;;;;;:::i;:::-;;;;;;;;39513:758;39380:891;;;:::o;10052:191::-;10145:6;;;-1:-1:-1;;;;;10162:17:0;;;-1:-1:-1;;;;;;10162:17:0;;;;;;;10195:40;;10145:6;;;10162:17;10145:6;;10195:40;;10126:16;;10195:40;10115:128;10052:191;:::o;40413:331::-;40568:8;-1:-1:-1;;;;;40559:17:0;:5;-1:-1:-1;;;;;40559:17:0;;;40551:71;;;;-1:-1:-1;;;40551:71:0;;21847:2:1;40551:71:0;;;21829:21:1;21886:2;21866:18;;;21859:30;21925:34;21905:18;;;21898:62;-1:-1:-1;;;21976:18:1;;;21969:39;22025:19;;40551:71:0;21645:405:1;40551:71:0;-1:-1:-1;;;;;40633:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;40633:46:0;;;;;;;;;;40695:41;;15814::1;;;40695::0;;15787:18:1;40695:41:0;;;;;;;40413:331;;;:::o;33049:820::-;-1:-1:-1;;;;;33237:16:0;;33229:66;;;;-1:-1:-1;;;33229:66:0;;;;;;;:::i;:::-;7586:10;33352:96;7586:10;33383:4;33389:2;33393:21;33411:2;33393:17;:21::i;33352:96::-;33461:19;33483:13;;;;;;;;;;;-1:-1:-1;;;;;33483:19:0;;;;;;;;;;33521:21;;;;33513:76;;;;-1:-1:-1;;;33513:76:0;;;;;;;:::i;:::-;33625:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33625:19:0;;;;;;;;;;33647:20;;;33625:42;;33689:17;;;;;;;:27;;33647:20;;33625:9;33689:27;;33647:20;;33689:27;:::i;:::-;;;;-1:-1:-1;;33734:46:0;;;23632:25:1;;;23688:2;23673:18;;23666:34;;;-1:-1:-1;;;;;33734:46:0;;;;;;;;;;;;;;23605:18:1;33734:46:0;;;;;;;33793:68;33824:8;33834:4;33840:2;33844;33848:6;33856:4;33793:30;:68::i;:::-;33218:651;;33049:820;;;;;:::o;38529:648::-;-1:-1:-1;;;;;38656:18:0;;38648:66;;;;-1:-1:-1;;;38648:66:0;;;;;;;:::i;:::-;7586:10;38771:102;7586:10;38802:4;38727:16;38820:21;38838:2;38820:17;:21::i;:::-;38843:25;38861:6;38843:17;:25::i;:::-;-1:-1:-1;;38771:102:0;;;;;;;;;-1:-1:-1;38771:102:0;;-1:-1:-1;;;34227:1074:0;38771:102;38886:19;38908:13;;;;;;;;;;;-1:-1:-1;;;;;38908:19:0;;;;;;;;;;38946:21;;;;38938:70;;;;-1:-1:-1;;;38938:70:0;;;;;;;:::i;:::-;39044:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39044:19:0;;;;;;;;;;;;39066:20;;;39044:42;;39115:54;;23632:25:1;;;23673:18;;;23666:34;;;39044:19:0;;39115:54;;;;;;23605:18:1;39115:54:0;;;;;;;38637:540;;38529:648;;;:::o;43502:198::-;43622:16;;;43636:1;43622:16;;;;;;;;;43568;;43597:22;;43622:16;;;;;;;;;;;;-1:-1:-1;43622:16:0;43597:41;;43660:7;43649:5;43655:1;43649:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;43687:5;43502:198;-1:-1:-1;;43502:198:0:o;41929:744::-;-1:-1:-1;;;;;42144:13:0;;11778:19;:23;42140:526;;42180:72;;-1:-1:-1;;;42180:72:0;;-1:-1:-1;;;;;42180:38:0;;;;;:72;;42219:8;;42229:4;;42235:2;;42239:6;;42247:4;;42180:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42180:72:0;;;;;;;;-1:-1:-1;;42180:72:0;;;;;;;;;;;;:::i;:::-;;;42176:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42528:6;42521:14;;-1:-1:-1;;;42521:14:0;;;;;;;;:::i;42176:479::-;;;42577:62;;-1:-1:-1;;;42577:62:0;;16292:2:1;42577:62:0;;;16274:21:1;16331:2;16311:18;;;16304:30;16370:34;16350:18;;;16343:62;-1:-1:-1;;;16421:18:1;;;16414:50;16481:19;;42577:62:0;16090:416:1;42176:479:0;-1:-1:-1;;;;;;42302:55:0;;-1:-1:-1;;;42302:55:0;42298:154;;42382:50;;-1:-1:-1;;;42382:50:0;;;;;;;:::i;3237:190::-;3362:4;3415;3386:25;3399:5;3406:4;3386:12;:25::i;:::-;:33;;3237:190;-1:-1:-1;;;;3237:190:0:o;42681:813::-;-1:-1:-1;;;;;42921:13:0;;11778:19;:23;42917:570;;42957:79;;-1:-1:-1;;;42957:79:0;;-1:-1:-1;;;;;42957:43:0;;;;;:79;;43001:8;;43011:4;;43017:3;;43022:7;;43031:4;;42957:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42957:79:0;;;;;;;;-1:-1:-1;;42957:79:0;;;;;;;;;;;;:::i;:::-;;;42953:523;;;;:::i;:::-;-1:-1:-1;;;;;;43118:60:0;;-1:-1:-1;;;43118:60:0;43114:159;;43203:50;;-1:-1:-1;;;43203:50:0;;;;;;;:::i;3789:675::-;3872:7;3915:4;3872:7;3930:497;3954:5;:12;3950:1;:16;3930:497;;;3988:20;4011:5;4017:1;4011:8;;;;;;;;:::i;:::-;;;;;;;3988:31;;4054:12;4038;:28;4034:382;;4540:13;4590:15;;;4626:4;4619:15;;;4673:4;4657:21;;4166:57;;4034:382;;;4540:13;4590:15;;;4626:4;4619:15;;;4673:4;4657:21;;4343:57;;4034:382;-1:-1:-1;3968:3:0;;;;:::i;:::-;;;;3930:497;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:741::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:169;1221:2;1218:1;1215:9;1207:169;;;1278:23;1297:3;1278:23;:::i;:::-;1266:36;;1322:12;;;;1354;;;;1239:1;1232:9;1207:169;;;-1:-1:-1;1394:6:1;;665:741;-1:-1:-1;;;;;;;665:741:1:o;1411:735::-;1465:5;1518:3;1511:4;1503:6;1499:17;1495:27;1485:55;;1536:1;1533;1526:12;1485:55;1572:6;1559:20;1598:4;1621:43;1661:2;1621:43;:::i;:::-;1693:2;1687:9;1705:31;1733:2;1725:6;1705:31;:::i;:::-;1771:18;;;1805:15;;;;-1:-1:-1;1840:15:1;;;1890:1;1886:10;;;1874:23;;1870:32;;1867:41;-1:-1:-1;1864:61:1;;;1921:1;1918;1911:12;1864:61;1943:1;1953:163;1967:2;1964:1;1961:9;1953:163;;;2024:17;;2012:30;;2062:12;;;;2094;;;;1985:1;1978:9;1953:163;;2151:220;2193:5;2246:3;2239:4;2231:6;2227:17;2223:27;2213:55;;2264:1;2261;2254:12;2213:55;2286:79;2361:3;2352:6;2339:20;2332:4;2324:6;2320:17;2286:79;:::i;2376:186::-;2435:6;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2527:29;2546:9;2527:29;:::i;2567:260::-;2635:6;2643;2696:2;2684:9;2675:7;2671:23;2667:32;2664:52;;;2712:1;2709;2702:12;2664:52;2735:29;2754:9;2735:29;:::i;:::-;2725:39;;2783:38;2817:2;2806:9;2802:18;2783:38;:::i;:::-;2773:48;;2567:260;;;;;:::o;2832:943::-;2986:6;2994;3002;3010;3018;3071:3;3059:9;3050:7;3046:23;3042:33;3039:53;;;3088:1;3085;3078:12;3039:53;3111:29;3130:9;3111:29;:::i;:::-;3101:39;;3159:38;3193:2;3182:9;3178:18;3159:38;:::i;:::-;3149:48;;3248:2;3237:9;3233:18;3220:32;-1:-1:-1;;;;;3312:2:1;3304:6;3301:14;3298:34;;;3328:1;3325;3318:12;3298:34;3351:61;3404:7;3395:6;3384:9;3380:22;3351:61;:::i;:::-;3341:71;;3465:2;3454:9;3450:18;3437:32;3421:48;;3494:2;3484:8;3481:16;3478:36;;;3510:1;3507;3500:12;3478:36;3533:63;3588:7;3577:8;3566:9;3562:24;3533:63;:::i;:::-;3523:73;;3649:3;3638:9;3634:19;3621:33;3605:49;;3679:2;3669:8;3666:16;3663:36;;;3695:1;3692;3685:12;3663:36;;3718:51;3761:7;3750:8;3739:9;3735:24;3718:51;:::i;:::-;3708:61;;;2832:943;;;;;;;;:::o;3780:606::-;3884:6;3892;3900;3908;3916;3969:3;3957:9;3948:7;3944:23;3940:33;3937:53;;;3986:1;3983;3976:12;3937:53;4009:29;4028:9;4009:29;:::i;:::-;3999:39;;4057:38;4091:2;4080:9;4076:18;4057:38;:::i;:::-;4047:48;;4142:2;4131:9;4127:18;4114:32;4104:42;;4193:2;4182:9;4178:18;4165:32;4155:42;;4248:3;4237:9;4233:19;4220:33;-1:-1:-1;;;;;4268:6:1;4265:30;4262:50;;;4308:1;4305;4298:12;4262:50;4331:49;4372:7;4363:6;4352:9;4348:22;4331:49;:::i;4391:669::-;4518:6;4526;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4626:29;4645:9;4626:29;:::i;:::-;4616:39;;4706:2;4695:9;4691:18;4678:32;-1:-1:-1;;;;;4770:2:1;4762:6;4759:14;4756:34;;;4786:1;4783;4776:12;4756:34;4809:61;4862:7;4853:6;4842:9;4838:22;4809:61;:::i;:::-;4799:71;;4923:2;4912:9;4908:18;4895:32;4879:48;;4952:2;4942:8;4939:16;4936:36;;;4968:1;4965;4958:12;4936:36;;4991:63;5046:7;5035:8;5024:9;5020:24;4991:63;:::i;:::-;4981:73;;;4391:669;;;;;:::o;5065:868::-;5210:6;5218;5226;5234;5287:3;5275:9;5266:7;5262:23;5258:33;5255:53;;;5304:1;5301;5294:12;5255:53;5327:29;5346:9;5327:29;:::i;:::-;5317:39;;5407:2;5396:9;5392:18;5379:32;-1:-1:-1;;;;;5471:2:1;5463:6;5460:14;5457:34;;;5487:1;5484;5477:12;5457:34;5510:61;5563:7;5554:6;5543:9;5539:22;5510:61;:::i;:::-;5500:71;;5624:2;5613:9;5609:18;5596:32;5580:48;;5653:2;5643:8;5640:16;5637:36;;;5669:1;5666;5659:12;5637:36;5692:63;5747:7;5736:8;5725:9;5721:24;5692:63;:::i;:::-;5682:73;;5808:2;5797:9;5793:18;5780:32;5764:48;;5837:2;5827:8;5824:16;5821:36;;;5853:1;5850;5843:12;5821:36;;5876:51;5919:7;5908:8;5897:9;5893:24;5876:51;:::i;:::-;5866:61;;;5065:868;;;;;;;:::o;5938:347::-;6003:6;6011;6064:2;6052:9;6043:7;6039:23;6035:32;6032:52;;;6080:1;6077;6070:12;6032:52;6103:29;6122:9;6103:29;:::i;:::-;6093:39;;6182:2;6171:9;6167:18;6154:32;6229:5;6222:13;6215:21;6208:5;6205:32;6195:60;;6251:1;6248;6241:12;6195:60;6274:5;6264:15;;;5938:347;;;;;:::o;6290:254::-;6358:6;6366;6419:2;6407:9;6398:7;6394:23;6390:32;6387:52;;;6435:1;6432;6425:12;6387:52;6458:29;6477:9;6458:29;:::i;:::-;6448:39;6534:2;6519:18;;;;6506:32;;-1:-1:-1;;;6290:254:1:o;6549:322::-;6626:6;6634;6642;6695:2;6683:9;6674:7;6670:23;6666:32;6663:52;;;6711:1;6708;6701:12;6663:52;6734:29;6753:9;6734:29;:::i;:::-;6724:39;6810:2;6795:18;;6782:32;;-1:-1:-1;6861:2:1;6846:18;;;6833:32;;6549:322;-1:-1:-1;;;6549:322:1:o;6876:595::-;6994:6;7002;7055:2;7043:9;7034:7;7030:23;7026:32;7023:52;;;7071:1;7068;7061:12;7023:52;7111:9;7098:23;-1:-1:-1;;;;;7181:2:1;7173:6;7170:14;7167:34;;;7197:1;7194;7187:12;7167:34;7220:61;7273:7;7264:6;7253:9;7249:22;7220:61;:::i;:::-;7210:71;;7334:2;7323:9;7319:18;7306:32;7290:48;;7363:2;7353:8;7350:16;7347:36;;;7379:1;7376;7369:12;7347:36;;7402:63;7457:7;7446:8;7435:9;7431:24;7402:63;:::i;:::-;7392:73;;;6876:595;;;;;:::o;7476:484::-;7578:6;7586;7594;7647:2;7635:9;7626:7;7622:23;7618:32;7615:52;;;7663:1;7660;7653:12;7615:52;7703:9;7690:23;-1:-1:-1;;;;;7728:6:1;7725:30;7722:50;;;7768:1;7765;7758:12;7722:50;7791:61;7844:7;7835:6;7824:9;7820:22;7791:61;:::i;:::-;7781:71;7899:2;7884:18;;7871:32;;-1:-1:-1;7950:2:1;7935:18;;;7922:32;;7476:484;-1:-1:-1;;;;7476:484:1:o;7965:841::-;8085:6;8093;8101;8154:2;8142:9;8133:7;8129:23;8125:32;8122:52;;;8170:1;8167;8160:12;8122:52;8210:9;8197:23;-1:-1:-1;;;;;8280:2:1;8272:6;8269:14;8266:34;;;8296:1;8293;8286:12;8266:34;8319:61;8372:7;8363:6;8352:9;8348:22;8319:61;:::i;:::-;8309:71;;8433:2;8422:9;8418:18;8405:32;8389:48;;8462:2;8452:8;8449:16;8446:36;;;8478:1;8475;8468:12;8446:36;8516:8;8505:9;8501:24;8491:34;;8563:7;8556:4;8552:2;8548:13;8544:27;8534:55;;8585:1;8582;8575:12;8534:55;8625:2;8612:16;8651:2;8643:6;8640:14;8637:34;;;8667:1;8664;8657:12;8637:34;8720:7;8715:2;8705:6;8702:1;8698:14;8694:2;8690:23;8686:32;8683:45;8680:65;;;8741:1;8738;8731:12;8680:65;8772:2;8768;8764:11;8754:21;;8794:6;8784:16;;;;;7965:841;;;;;:::o;8811:180::-;8870:6;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;-1:-1:-1;8962:23:1;;8811:180;-1:-1:-1;8811:180:1:o;8996:245::-;9054:6;9107:2;9095:9;9086:7;9082:23;9078:32;9075:52;;;9123:1;9120;9113:12;9075:52;9162:9;9149:23;9181:30;9205:5;9181:30;:::i;9246:249::-;9315:6;9368:2;9356:9;9347:7;9343:23;9339:32;9336:52;;;9384:1;9381;9374:12;9336:52;9416:9;9410:16;9435:30;9459:5;9435:30;:::i;9500:450::-;9569:6;9622:2;9610:9;9601:7;9597:23;9593:32;9590:52;;;9638:1;9635;9628:12;9590:52;9678:9;9665:23;-1:-1:-1;;;;;9703:6:1;9700:30;9697:50;;;9743:1;9740;9733:12;9697:50;9766:22;;9819:4;9811:13;;9807:27;-1:-1:-1;9797:55:1;;9848:1;9845;9838:12;9797:55;9871:73;9936:7;9931:2;9918:16;9913:2;9909;9905:11;9871:73;:::i;10140:456::-;10226:6;10234;10242;10295:2;10283:9;10274:7;10270:23;10266:32;10263:52;;;10311:1;10308;10301:12;10263:52;10347:9;10334:23;10324:33;;10404:2;10393:9;10389:18;10376:32;10366:42;;10459:2;10448:9;10444:18;10431:32;-1:-1:-1;;;;;10478:6:1;10475:30;10472:50;;;10518:1;10515;10508:12;10472:50;10541:49;10582:7;10573:6;10562:9;10558:22;10541:49;:::i;10601:435::-;10654:3;10692:5;10686:12;10719:6;10714:3;10707:19;10745:4;10774:2;10769:3;10765:12;10758:19;;10811:2;10804:5;10800:14;10832:1;10842:169;10856:6;10853:1;10850:13;10842:169;;;10917:13;;10905:26;;10951:12;;;;10986:15;;;;10878:1;10871:9;10842:169;;;-1:-1:-1;11027:3:1;;10601:435;-1:-1:-1;;;;;10601:435:1:o;11041:257::-;11082:3;11120:5;11114:12;11147:6;11142:3;11135:19;11163:63;11219:6;11212:4;11207:3;11203:14;11196:4;11189:5;11185:16;11163:63;:::i;:::-;11280:2;11259:15;-1:-1:-1;;11255:29:1;11246:39;;;;11287:4;11242:50;;11041:257;-1:-1:-1;;11041:257:1:o;11303:185::-;11345:3;11383:5;11377:12;11398:52;11443:6;11438:3;11431:4;11424:5;11420:16;11398:52;:::i;:::-;11466:16;;;;;11303:185;-1:-1:-1;;11303:185:1:o;11493:657::-;11737:26;11733:31;11724:6;11720:2;11716:15;11712:53;11707:3;11700:66;11682:3;11797:2;11792:3;11788:12;11829:6;11823:13;11878:4;11917:2;11909:6;11905:15;11938:1;11948:175;11962:6;11959:1;11956:13;11948:175;;;12025:13;;12011:28;;12061:14;;;;12098:15;;;;11984:1;11977:9;11948:175;;;-1:-1:-1;12139:5:1;;11493:657;-1:-1:-1;;;;;;;11493:657:1:o;12155:1174::-;12331:3;12360:1;12393:6;12387:13;12423:3;12445:1;12473:9;12469:2;12465:18;12455:28;;12533:2;12522:9;12518:18;12555;12545:61;;12599:4;12591:6;12587:17;12577:27;;12545:61;12625:2;12673;12665:6;12662:14;12642:18;12639:38;12636:165;;;-1:-1:-1;;;12700:33:1;;12756:4;12753:1;12746:15;12786:4;12707:3;12774:17;12636:165;12817:18;12844:104;;;;12962:1;12957:320;;;;12810:467;;12844:104;-1:-1:-1;;12877:24:1;;12865:37;;12922:16;;;;-1:-1:-1;12844:104:1;;12957:320;23972:1;23965:14;;;24009:4;23996:18;;13052:1;13066:165;13080:6;13077:1;13074:13;13066:165;;;13158:14;;13145:11;;;13138:35;13201:16;;;;13095:10;;13066:165;;;13070:3;;13260:6;13255:3;13251:16;13244:23;;12810:467;;;;;;;13293:30;13319:3;13311:6;13293:30;:::i;:::-;13286:37;12155:1174;-1:-1:-1;;;;;12155:1174:1:o;13542:826::-;-1:-1:-1;;;;;13939:15:1;;;13921:34;;13991:15;;13986:2;13971:18;;13964:43;13901:3;14038:2;14023:18;;14016:31;;;13864:4;;14070:57;;14107:19;;14099:6;14070:57;:::i;:::-;14175:9;14167:6;14163:22;14158:2;14147:9;14143:18;14136:50;14209:44;14246:6;14238;14209:44;:::i;:::-;14195:58;;14302:9;14294:6;14290:22;14284:3;14273:9;14269:19;14262:51;14330:32;14355:6;14347;14330:32;:::i;:::-;14322:40;13542:826;-1:-1:-1;;;;;;;;13542:826:1:o;14373:560::-;-1:-1:-1;;;;;14670:15:1;;;14652:34;;14722:15;;14717:2;14702:18;;14695:43;14769:2;14754:18;;14747:34;;;14812:2;14797:18;;14790:34;;;14632:3;14855;14840:19;;14833:32;;;14595:4;;14882:45;;14907:19;;14899:6;14882:45;:::i;:::-;14874:53;14373:560;-1:-1:-1;;;;;;;14373:560:1:o;14938:261::-;15117:2;15106:9;15099:21;15080:4;15137:56;15189:2;15178:9;15174:18;15166:6;15137:56;:::i;15204:465::-;15461:2;15450:9;15443:21;15424:4;15487:56;15539:2;15528:9;15524:18;15516:6;15487:56;:::i;:::-;15591:9;15583:6;15579:22;15574:2;15563:9;15559:18;15552:50;15619:44;15656:6;15648;15619:44;:::i;15866:219::-;16015:2;16004:9;15997:21;15978:4;16035:44;16075:2;16064:9;16060:18;16052:6;16035:44;:::i;16511:404::-;16713:2;16695:21;;;16752:2;16732:18;;;16725:30;16791:34;16786:2;16771:18;;16764:62;-1:-1:-1;;;16857:2:1;16842:18;;16835:38;16905:3;16890:19;;16511:404::o;17739:400::-;17941:2;17923:21;;;17980:2;17960:18;;;17953:30;18019:34;18014:2;17999:18;;17992:62;-1:-1:-1;;;18085:2:1;18070:18;;18063:34;18129:3;18114:19;;17739:400::o;18960:401::-;19162:2;19144:21;;;19201:2;19181:18;;;19174:30;19240:34;19235:2;19220:18;;19213:62;-1:-1:-1;;;19306:2:1;19291:18;;19284:35;19351:3;19336:19;;18960:401::o;19785:399::-;19987:2;19969:21;;;20026:2;20006:18;;;19999:30;20065:34;20060:2;20045:18;;20038:62;-1:-1:-1;;;20131:2:1;20116:18;;20109:33;20174:3;20159:19;;19785:399::o;20189:406::-;20391:2;20373:21;;;20430:2;20410:18;;;20403:30;20469:34;20464:2;20449:18;;20442:62;-1:-1:-1;;;20535:2:1;20520:18;;20513:40;20585:3;20570:19;;20189:406::o;20942:356::-;21144:2;21126:21;;;21163:18;;;21156:30;21222:34;21217:2;21202:18;;21195:62;21289:2;21274:18;;20942:356::o;22465:404::-;22667:2;22649:21;;;22706:2;22686:18;;;22679:30;22745:34;22740:2;22725:18;;22718:62;-1:-1:-1;;;22811:2:1;22796:18;;22789:38;22859:3;22844:19;;22465:404::o;22874:397::-;23076:2;23058:21;;;23115:2;23095:18;;;23088:30;23154:34;23149:2;23134:18;;23127:62;-1:-1:-1;;;23220:2:1;23205:18;;23198:31;23261:3;23246:19;;22874:397::o;23711:183::-;23771:4;-1:-1:-1;;;;;23796:6:1;23793:30;23790:56;;;23826:18;;:::i;:::-;-1:-1:-1;23871:1:1;23867:14;23883:4;23863:25;;23711:183::o;24025:128::-;24065:3;24096:1;24092:6;24089:1;24086:13;24083:39;;;24102:18;;:::i;:::-;-1:-1:-1;24138:9:1;;24025:128::o;24158:120::-;24198:1;24224;24214:35;;24229:18;;:::i;:::-;-1:-1:-1;24263:9:1;;24158:120::o;24283:125::-;24323:4;24351:1;24348;24345:8;24342:34;;;24356:18;;:::i;:::-;-1:-1:-1;24393:9:1;;24283:125::o;24413:258::-;24485:1;24495:113;24509:6;24506:1;24503:13;24495:113;;;24585:11;;;24579:18;24566:11;;;24559:39;24531:2;24524:10;24495:113;;;24626:6;24623:1;24620:13;24617:48;;;-1:-1:-1;;24661:1:1;24643:16;;24636:27;24413:258::o;24676:380::-;24755:1;24751:12;;;;24798;;;24819:61;;24873:4;24865:6;24861:17;24851:27;;24819:61;24926:2;24918:6;24915:14;24895:18;24892:38;24889:161;;;24972:10;24967:3;24963:20;24960:1;24953:31;25007:4;25004:1;24997:15;25035:4;25032:1;25025:15;24889:161;;24676:380;;;:::o;25061:249::-;25171:2;25152:13;;-1:-1:-1;;25148:27:1;25136:40;;-1:-1:-1;;;;;25191:34:1;;25227:22;;;25188:62;25185:88;;;25253:18;;:::i;:::-;25289:2;25282:22;-1:-1:-1;;25061:249:1:o;25315:135::-;25354:3;-1:-1:-1;;25375:17:1;;25372:43;;;25395:18;;:::i;:::-;-1:-1:-1;25442:1:1;25431:13;;25315:135::o;25455:112::-;25487:1;25513;25503:35;;25518:18;;:::i;:::-;-1:-1:-1;25552:9:1;;25455:112::o;25572:127::-;25633:10;25628:3;25624:20;25621:1;25614:31;25664:4;25661:1;25654:15;25688:4;25685:1;25678:15;25704:127;25765:10;25760:3;25756:20;25753:1;25746:31;25796:4;25793:1;25786:15;25820:4;25817:1;25810:15;25836:127;25897:10;25892:3;25888:20;25885:1;25878:31;25928:4;25925:1;25918:15;25952:4;25949:1;25942:15;25968:127;26029:10;26024:3;26020:20;26017:1;26010:31;26060:4;26057:1;26050:15;26084:4;26081:1;26074:15;26100:179;26135:3;26177:1;26159:16;26156:23;26153:120;;;26223:1;26220;26217;26202:23;-1:-1:-1;26260:1:1;26254:8;26249:3;26245:18;26153:120;26100:179;:::o;26284:671::-;26323:3;26365:4;26347:16;26344:26;26341:39;;;26284:671;:::o;26341:39::-;26407:2;26401:9;-1:-1:-1;;26472:16:1;26468:25;;26465:1;26401:9;26444:50;26523:4;26517:11;26547:16;-1:-1:-1;;;;;26653:2:1;26646:4;26638:6;26634:17;26631:25;26626:2;26618:6;26615:14;26612:45;26609:58;;;26660:5;;;;;26284:671;:::o;26609:58::-;26697:6;26691:4;26687:17;26676:28;;26733:3;26727:10;26760:2;26752:6;26749:14;26746:27;;;26766:5;;;;;;26284:671;:::o;26746:27::-;26850:2;26831:16;26825:4;26821:27;26817:36;26810:4;26801:6;26796:3;26792:16;26788:27;26785:69;26782:82;;;26857:5;;;;;;26284:671;:::o;26782:82::-;26873:57;26924:4;26915:6;26907;26903:19;26899:30;26893:4;26873:57;:::i;:::-;-1:-1:-1;26946:3:1;;26284:671;-1:-1:-1;;;;;26284:671:1:o;26960:131::-;-1:-1:-1;;;;;;27034:32:1;;27024:43;;27014:71;;27081:1;27078;27071:12
Swarm Source
ipfs://476610dbc79576f10a42ecd33d885718848a40a31130e323755d69ce6e0f1cf8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.