ERC-1155
Overview
Max Total Supply
19,942 W
Holders
461
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
W1155
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-10 */ // File: IOperatorFilterRegistry.sol pragma solidity ^0.8.0; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: OperatorFilterer.sol pragma solidity ^0.8.0; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } // File: DefaultOperatorFilterer.sol pragma solidity ^0.8.0; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // File: openzeppelin-contracts/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: openzeppelin-contracts/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/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/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/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 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/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/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/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); 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 token owner or 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: caller is not token owner or 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {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 `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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: openzeppelin-contracts/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: W1155.sol pragma solidity ^0.8.0; contract W1155 is ERC1155Supply, Ownable, DefaultOperatorFilterer{ string public name; string public symbol; mapping(address => bool) public isMinter; mapping(address => bool) private disableMarkets; modifier onlyMinter(){ require(isMinter[msg.sender], "W1155:not minter"); _; } modifier notDisableMarket(address operator){ require(!disableMarkets[operator], "W1155:market disabled"); _; } constructor(string memory _name, string memory _symbol, string memory uri_) ERC1155(uri_){ name = _name; symbol = _symbol; } function setURI(string memory uri_) external onlyOwner { _setURI(uri_); } function setMinter(address account, bool enable) external onlyOwner{ isMinter[account] = enable; } function mint(address to, uint256 id, uint256 amount, bytes memory data) external onlyMinter{ _mint(to, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) external onlyMinter { _mintBatch(to, ids, amounts, data); } function setDisableMarket(address operator, bool disable) public onlyOwner{ disableMarkets[operator] = disable; } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) notDisableMarket(operator){ super.setApprovalForAll(operator, approved); } function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data) public override onlyAllowedOperator(from) notDisableMarket(from){ super.safeTransferFrom(from, to, id, amount, data); } function safeBatchTransferFrom(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public override onlyAllowedOperator(from) notDisableMarket(from){ super.safeBatchTransferFrom(from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"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":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"id","type":"uint256"}],"name":"exists","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":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"disable","type":"bool"}],"name":"setDisableMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002561380380620025618339810160408190526200003491620003bd565b733cc6cdda760b79bafa08df41ecfa224f810dceb66001826200005781620001df565b506200006333620001f8565b6daaeb6d7670e522a718067333cd4e3b15620001a8578015620000f657604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620000d757600080fd5b505af1158015620000ec573d6000803e3d6000fd5b50505050620001a8565b6001600160a01b03821615620001475760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000bc565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200018e57600080fd5b505af1158015620001a3573d6000803e3d6000fd5b505050505b50508251620001bf9060059060208601906200024a565b508151620001d59060069060208501906200024a565b505050506200048b565b8051620001f49060029060208401906200024a565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000258906200044e565b90600052602060002090601f0160209004810192826200027c5760008555620002c7565b82601f106200029757805160ff1916838001178555620002c7565b82800160010185558215620002c7579182015b82811115620002c7578251825591602001919060010190620002aa565b50620002d5929150620002d9565b5090565b5b80821115620002d55760008155600101620002da565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200031857600080fd5b81516001600160401b0380821115620003355762000335620002f0565b604051601f8301601f19908116603f01168101908282118183101715620003605762000360620002f0565b816040528381526020925086838588010111156200037d57600080fd5b600091505b83821015620003a1578582018301518183018401529082019062000382565b83821115620003b35760008385830101525b9695505050505050565b600080600060608486031215620003d357600080fd5b83516001600160401b0380821115620003eb57600080fd5b620003f98783880162000306565b945060208601519150808211156200041057600080fd5b6200041e8783880162000306565b935060408601519150808211156200043557600080fd5b50620004448682870162000306565b9150509250925092565b600181811c908216806200046357607f821691505b602082108114156200048557634e487b7160e01b600052602260045260246000fd5b50919050565b6120c6806200049b6000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c8063731133e9116100b8578063bd85b0391161007c578063bd85b039146102cb578063cf456ae7146102eb578063de83864b146102fe578063e985e9c514610311578063f242432a1461034d578063f2fde38b1461036057600080fd5b8063731133e9146102695780638da5cb5b1461027c57806395d89b411461028d578063a22cb46514610295578063aa271e1a146102a857600080fd5b80631f7fdffa1161010a5780631f7fdffa146101cc5780632eb2c2d6146101df57806341f43434146101f25780634e1273f41461021f5780634f558e791461023f578063715018a61461026157600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806302fe53051461018f57806306fdde03146101a45780630e89341c146101b9575b600080fd5b61015961015436600461163b565b610373565b6040519081526020015b60405180910390f35b61017f61017a36600461167b565b610409565b6040519015158152602001610163565b6101a261019d366004611740565b61045b565b005b6101ac61046f565b60405161016391906117de565b6101ac6101c73660046117f1565b6104fd565b6101a26101da3660046118bf565b610591565b6101a26101ed366004611958565b6105f5565b6102076daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b039091168152602001610163565b61023261022d366004611a02565b610660565b6040516101639190611b08565b61017f61024d3660046117f1565b600090815260036020526040902054151590565b6101a261078a565b6101a2610277366004611b1b565b61079e565b6004546001600160a01b0316610207565b6101ac6107fc565b6101a26102a3366004611b7e565b610809565b61017f6102b6366004611bb5565b60076020526000908152604090205460ff1681565b6101596102d93660046117f1565b60009081526003602052604090205490565b6101a26102f9366004611b7e565b610858565b6101a261030c366004611b7e565b61088b565b61017f61031f366004611bd0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101a261035b366004611c03565b6108be565b6101a261036e366004611bb5565b610920565b60006001600160a01b0383166103e35760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061043a57506001600160e01b031982166303a24d0760e21b145b8061045557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610463610996565b61046c816109f0565b50565b6005805461047c90611c68565b80601f01602080910402602001604051908101604052809291908181526020018280546104a890611c68565b80156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b505050505081565b60606002805461050c90611c68565b80601f016020809104026020016040519081016040528092919081815260200182805461053890611c68565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050509050919050565b3360009081526007602052604090205460ff166105e35760405162461bcd60e51b815260206004820152601060248201526f2b98989a9a9d3737ba1036b4b73a32b960811b60448201526064016103da565b6105ef84848484610a07565b50505050565b846001600160a01b038116331461060f5761060f33610b68565b6001600160a01b038616600090815260086020526040902054869060ff161561064a5760405162461bcd60e51b81526004016103da90611ca3565b6106578787878787610c21565b50505050505050565b606081518351146106c55760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103da565b6000835167ffffffffffffffff8111156106e1576106e161169f565b60405190808252806020026020018201604052801561070a578160200160208202803683370190505b50905060005b84518110156107825761075585828151811061072e5761072e611cd2565b602002602001015185838151811061074857610748611cd2565b6020026020010151610373565b82828151811061076757610767611cd2565b602090810291909101015261077b81611cfe565b9050610710565b509392505050565b610792610996565b61079c6000610c66565b565b3360009081526007602052604090205460ff166107f05760405162461bcd60e51b815260206004820152601060248201526f2b98989a9a9d3737ba1036b4b73a32b960811b60448201526064016103da565b6105ef84848484610cb8565b6006805461047c90611c68565b8161081381610b68565b6001600160a01b038316600090815260086020526040902054839060ff161561084e5760405162461bcd60e51b81526004016103da90611ca3565b6105ef8484610d98565b610860610996565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610893610996565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b846001600160a01b03811633146108d8576108d833610b68565b6001600160a01b038616600090815260086020526040902054869060ff16156109135760405162461bcd60e51b81526004016103da90611ca3565b6106578787878787610da3565b610928610996565b6001600160a01b03811661098d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103da565b61046c81610c66565b6004546001600160a01b0316331461079c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103da565b8051610a03906002906020840190611586565b5050565b6001600160a01b038416610a2d5760405162461bcd60e51b81526004016103da90611d19565b8151835114610a4e5760405162461bcd60e51b81526004016103da90611d5a565b33610a5e81600087878787610de8565b60005b8451811015610af957838181518110610a7c57610a7c611cd2565b6020026020010151600080878481518110610a9957610a99611cd2565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ae19190611da2565b90915550819050610af181611cfe565b915050610a61565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b4a929190611dba565b60405180910390a4610b6181600087878787610f69565b5050505050565b6daaeb6d7670e522a718067333cd4e3b1561046c57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190611de8565b61046c57604051633b79c77360e21b81526001600160a01b03821660048201526024016103da565b6001600160a01b038516331480610c3d5750610c3d853361031f565b610c595760405162461bcd60e51b81526004016103da90611e05565b610b6185858585856110c5565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416610cde5760405162461bcd60e51b81526004016103da90611d19565b336000610cea85611267565b90506000610cf785611267565b9050610d0883600089858589610de8565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610d38908490611da2565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610657836000898989896112b2565b610a0333838361136d565b6001600160a01b038516331480610dbf5750610dbf853361031f565b610ddb5760405162461bcd60e51b81526004016103da90611e05565b610b61858585858561144e565b6001600160a01b038516610e6f5760005b8351811015610e6d57828181518110610e1457610e14611cd2565b602002602001015160036000868481518110610e3257610e32611cd2565b602002602001015181526020019081526020016000206000828254610e579190611da2565b90915550610e66905081611cfe565b9050610df9565b505b6001600160a01b038416610f615760005b8351811015610657576000848281518110610e9d57610e9d611cd2565b602002602001015190506000848381518110610ebb57610ebb611cd2565b6020026020010151905060006003600084815260200190815260200160002054905081811015610f3e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016103da565b60009283526003602052604090922091039055610f5a81611cfe565b9050610e80565b505050505050565b6001600160a01b0384163b15610f615760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fad9089908990889088908890600401611e53565b6020604051808303816000875af1925050508015610fe8575060408051601f3d908101601f19168201909252610fe591810190611eb1565b60015b61109557610ff4611ece565b806308c379a0141561102e5750611009611eea565b806110145750611030565b8060405162461bcd60e51b81526004016103da91906117de565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103da565b6001600160e01b0319811663bc197c8160e01b146106575760405162461bcd60e51b81526004016103da90611f74565b81518351146110e65760405162461bcd60e51b81526004016103da90611d5a565b6001600160a01b03841661110c5760405162461bcd60e51b81526004016103da90611fbc565b3361111b818787878787610de8565b60005b845181101561120157600085828151811061113b5761113b611cd2565b60200260200101519050600085838151811061115957611159611cd2565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111a95760405162461bcd60e51b81526004016103da90612001565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111e6908490611da2565b92505081905550505050806111fa90611cfe565b905061111e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611251929190611dba565b60405180910390a4610f61818787878787610f69565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106112a1576112a1611cd2565b602090810291909101015292915050565b6001600160a01b0384163b15610f615760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112f6908990899088908890889060040161204b565b6020604051808303816000875af1925050508015611331575060408051601f3d908101601f1916820190925261132e91810190611eb1565b60015b61133d57610ff4611ece565b6001600160e01b0319811663f23a6e6160e01b146106575760405162461bcd60e51b81526004016103da90611f74565b816001600160a01b0316836001600160a01b031614156113e15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103da565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166114745760405162461bcd60e51b81526004016103da90611fbc565b33600061148085611267565b9050600061148d85611267565b905061149d838989858589610de8565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156114de5760405162461bcd60e51b81526004016103da90612001565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061151b908490611da2565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461157b848a8a8a8a8a6112b2565b505050505050505050565b82805461159290611c68565b90600052602060002090601f0160209004810192826115b457600085556115fa565b82601f106115cd57805160ff19168380011785556115fa565b828001600101855582156115fa579182015b828111156115fa5782518255916020019190600101906115df565b5061160692915061160a565b5090565b5b80821115611606576000815560010161160b565b80356001600160a01b038116811461163657600080fd5b919050565b6000806040838503121561164e57600080fd5b6116578361161f565b946020939093013593505050565b6001600160e01b03198116811461046c57600080fd5b60006020828403121561168d57600080fd5b813561169881611665565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156116db576116db61169f565b6040525050565b600067ffffffffffffffff8311156116fc576116fc61169f565b604051611713601f8501601f1916602001826116b5565b80915083815284848401111561172857600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561175257600080fd5b813567ffffffffffffffff81111561176957600080fd5b8201601f8101841361177a57600080fd5b611789848235602084016116e2565b949350505050565b6000815180845260005b818110156117b75760208185018101518683018201520161179b565b818111156117c9576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006116986020830184611791565b60006020828403121561180357600080fd5b5035919050565b600067ffffffffffffffff8211156118245761182461169f565b5060051b60200190565b600082601f83011261183f57600080fd5b8135602061184c8261180a565b60405161185982826116b5565b83815260059390931b850182019282810191508684111561187957600080fd5b8286015b84811015611894578035835291830191830161187d565b509695505050505050565b600082601f8301126118b057600080fd5b611698838335602085016116e2565b600080600080608085870312156118d557600080fd5b6118de8561161f565b9350602085013567ffffffffffffffff808211156118fb57600080fd5b6119078883890161182e565b9450604087013591508082111561191d57600080fd5b6119298883890161182e565b9350606087013591508082111561193f57600080fd5b5061194c8782880161189f565b91505092959194509250565b600080600080600060a0868803121561197057600080fd5b6119798661161f565b94506119876020870161161f565b9350604086013567ffffffffffffffff808211156119a457600080fd5b6119b089838a0161182e565b945060608801359150808211156119c657600080fd5b6119d289838a0161182e565b935060808801359150808211156119e857600080fd5b506119f58882890161189f565b9150509295509295909350565b60008060408385031215611a1557600080fd5b823567ffffffffffffffff80821115611a2d57600080fd5b818501915085601f830112611a4157600080fd5b81356020611a4e8261180a565b604051611a5b82826116b5565b83815260059390931b8501820192828101915089841115611a7b57600080fd5b948201945b83861015611aa057611a918661161f565b82529482019490820190611a80565b96505086013592505080821115611ab657600080fd5b50611ac38582860161182e565b9150509250929050565b600081518084526020808501945080840160005b83811015611afd57815187529582019590820190600101611ae1565b509495945050505050565b6020815260006116986020830184611acd565b60008060008060808587031215611b3157600080fd5b611b3a8561161f565b93506020850135925060408501359150606085013567ffffffffffffffff811115611b6457600080fd5b61194c8782880161189f565b801515811461046c57600080fd5b60008060408385031215611b9157600080fd5b611b9a8361161f565b91506020830135611baa81611b70565b809150509250929050565b600060208284031215611bc757600080fd5b6116988261161f565b60008060408385031215611be357600080fd5b611bec8361161f565b9150611bfa6020840161161f565b90509250929050565b600080600080600060a08688031215611c1b57600080fd5b611c248661161f565b9450611c326020870161161f565b93506040860135925060608601359150608086013567ffffffffffffffff811115611c5c57600080fd5b6119f58882890161189f565b600181811c90821680611c7c57607f821691505b60208210811415611c9d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526015908201527415cc4c4d4d4e9b585c9ad95d08191a5cd8589b1959605a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d1257611d12611ce8565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60008219821115611db557611db5611ce8565b500190565b604081526000611dcd6040830185611acd565b8281036020840152611ddf8185611acd565b95945050505050565b600060208284031215611dfa57600080fd5b815161169881611b70565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e7f90830186611acd565b8281036060840152611e918186611acd565b90508281036080840152611ea58185611791565b98975050505050505050565b600060208284031215611ec357600080fd5b815161169881611665565b600060033d1115611ee75760046000803e5060005160e01c5b90565b600060443d1015611ef85790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f2857505050505090565b8285019150815181811115611f405750505050505090565b843d8701016020828501011115611f5a5750505050505090565b611f69602082860101876116b5565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061208590830184611791565b97965050505050505056fea264697066735822122097abaaa97f5ea604031b96802c2228ce3c01705b0607f9f32fba68c60a8688d964736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f616e6772796361742e696f2f6d657461646174612f6a736f6e732f7700000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c8063731133e9116100b8578063bd85b0391161007c578063bd85b039146102cb578063cf456ae7146102eb578063de83864b146102fe578063e985e9c514610311578063f242432a1461034d578063f2fde38b1461036057600080fd5b8063731133e9146102695780638da5cb5b1461027c57806395d89b411461028d578063a22cb46514610295578063aa271e1a146102a857600080fd5b80631f7fdffa1161010a5780631f7fdffa146101cc5780632eb2c2d6146101df57806341f43434146101f25780634e1273f41461021f5780634f558e791461023f578063715018a61461026157600080fd5b8062fdd58e1461014657806301ffc9a71461016c57806302fe53051461018f57806306fdde03146101a45780630e89341c146101b9575b600080fd5b61015961015436600461163b565b610373565b6040519081526020015b60405180910390f35b61017f61017a36600461167b565b610409565b6040519015158152602001610163565b6101a261019d366004611740565b61045b565b005b6101ac61046f565b60405161016391906117de565b6101ac6101c73660046117f1565b6104fd565b6101a26101da3660046118bf565b610591565b6101a26101ed366004611958565b6105f5565b6102076daaeb6d7670e522a718067333cd4e81565b6040516001600160a01b039091168152602001610163565b61023261022d366004611a02565b610660565b6040516101639190611b08565b61017f61024d3660046117f1565b600090815260036020526040902054151590565b6101a261078a565b6101a2610277366004611b1b565b61079e565b6004546001600160a01b0316610207565b6101ac6107fc565b6101a26102a3366004611b7e565b610809565b61017f6102b6366004611bb5565b60076020526000908152604090205460ff1681565b6101596102d93660046117f1565b60009081526003602052604090205490565b6101a26102f9366004611b7e565b610858565b6101a261030c366004611b7e565b61088b565b61017f61031f366004611bd0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101a261035b366004611c03565b6108be565b6101a261036e366004611bb5565b610920565b60006001600160a01b0383166103e35760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061043a57506001600160e01b031982166303a24d0760e21b145b8061045557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610463610996565b61046c816109f0565b50565b6005805461047c90611c68565b80601f01602080910402602001604051908101604052809291908181526020018280546104a890611c68565b80156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b505050505081565b60606002805461050c90611c68565b80601f016020809104026020016040519081016040528092919081815260200182805461053890611c68565b80156105855780601f1061055a57610100808354040283529160200191610585565b820191906000526020600020905b81548152906001019060200180831161056857829003601f168201915b50505050509050919050565b3360009081526007602052604090205460ff166105e35760405162461bcd60e51b815260206004820152601060248201526f2b98989a9a9d3737ba1036b4b73a32b960811b60448201526064016103da565b6105ef84848484610a07565b50505050565b846001600160a01b038116331461060f5761060f33610b68565b6001600160a01b038616600090815260086020526040902054869060ff161561064a5760405162461bcd60e51b81526004016103da90611ca3565b6106578787878787610c21565b50505050505050565b606081518351146106c55760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103da565b6000835167ffffffffffffffff8111156106e1576106e161169f565b60405190808252806020026020018201604052801561070a578160200160208202803683370190505b50905060005b84518110156107825761075585828151811061072e5761072e611cd2565b602002602001015185838151811061074857610748611cd2565b6020026020010151610373565b82828151811061076757610767611cd2565b602090810291909101015261077b81611cfe565b9050610710565b509392505050565b610792610996565b61079c6000610c66565b565b3360009081526007602052604090205460ff166107f05760405162461bcd60e51b815260206004820152601060248201526f2b98989a9a9d3737ba1036b4b73a32b960811b60448201526064016103da565b6105ef84848484610cb8565b6006805461047c90611c68565b8161081381610b68565b6001600160a01b038316600090815260086020526040902054839060ff161561084e5760405162461bcd60e51b81526004016103da90611ca3565b6105ef8484610d98565b610860610996565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610893610996565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b846001600160a01b03811633146108d8576108d833610b68565b6001600160a01b038616600090815260086020526040902054869060ff16156109135760405162461bcd60e51b81526004016103da90611ca3565b6106578787878787610da3565b610928610996565b6001600160a01b03811661098d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103da565b61046c81610c66565b6004546001600160a01b0316331461079c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103da565b8051610a03906002906020840190611586565b5050565b6001600160a01b038416610a2d5760405162461bcd60e51b81526004016103da90611d19565b8151835114610a4e5760405162461bcd60e51b81526004016103da90611d5a565b33610a5e81600087878787610de8565b60005b8451811015610af957838181518110610a7c57610a7c611cd2565b6020026020010151600080878481518110610a9957610a99611cd2565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ae19190611da2565b90915550819050610af181611cfe565b915050610a61565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b4a929190611dba565b60405180910390a4610b6181600087878787610f69565b5050505050565b6daaeb6d7670e522a718067333cd4e3b1561046c57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190611de8565b61046c57604051633b79c77360e21b81526001600160a01b03821660048201526024016103da565b6001600160a01b038516331480610c3d5750610c3d853361031f565b610c595760405162461bcd60e51b81526004016103da90611e05565b610b6185858585856110c5565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416610cde5760405162461bcd60e51b81526004016103da90611d19565b336000610cea85611267565b90506000610cf785611267565b9050610d0883600089858589610de8565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610d38908490611da2565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610657836000898989896112b2565b610a0333838361136d565b6001600160a01b038516331480610dbf5750610dbf853361031f565b610ddb5760405162461bcd60e51b81526004016103da90611e05565b610b61858585858561144e565b6001600160a01b038516610e6f5760005b8351811015610e6d57828181518110610e1457610e14611cd2565b602002602001015160036000868481518110610e3257610e32611cd2565b602002602001015181526020019081526020016000206000828254610e579190611da2565b90915550610e66905081611cfe565b9050610df9565b505b6001600160a01b038416610f615760005b8351811015610657576000848281518110610e9d57610e9d611cd2565b602002602001015190506000848381518110610ebb57610ebb611cd2565b6020026020010151905060006003600084815260200190815260200160002054905081811015610f3e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016103da565b60009283526003602052604090922091039055610f5a81611cfe565b9050610e80565b505050505050565b6001600160a01b0384163b15610f615760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fad9089908990889088908890600401611e53565b6020604051808303816000875af1925050508015610fe8575060408051601f3d908101601f19168201909252610fe591810190611eb1565b60015b61109557610ff4611ece565b806308c379a0141561102e5750611009611eea565b806110145750611030565b8060405162461bcd60e51b81526004016103da91906117de565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103da565b6001600160e01b0319811663bc197c8160e01b146106575760405162461bcd60e51b81526004016103da90611f74565b81518351146110e65760405162461bcd60e51b81526004016103da90611d5a565b6001600160a01b03841661110c5760405162461bcd60e51b81526004016103da90611fbc565b3361111b818787878787610de8565b60005b845181101561120157600085828151811061113b5761113b611cd2565b60200260200101519050600085838151811061115957611159611cd2565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111a95760405162461bcd60e51b81526004016103da90612001565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111e6908490611da2565b92505081905550505050806111fa90611cfe565b905061111e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611251929190611dba565b60405180910390a4610f61818787878787610f69565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106112a1576112a1611cd2565b602090810291909101015292915050565b6001600160a01b0384163b15610f615760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112f6908990899088908890889060040161204b565b6020604051808303816000875af1925050508015611331575060408051601f3d908101601f1916820190925261132e91810190611eb1565b60015b61133d57610ff4611ece565b6001600160e01b0319811663f23a6e6160e01b146106575760405162461bcd60e51b81526004016103da90611f74565b816001600160a01b0316836001600160a01b031614156113e15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103da565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166114745760405162461bcd60e51b81526004016103da90611fbc565b33600061148085611267565b9050600061148d85611267565b905061149d838989858589610de8565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156114de5760405162461bcd60e51b81526004016103da90612001565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061151b908490611da2565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461157b848a8a8a8a8a6112b2565b505050505050505050565b82805461159290611c68565b90600052602060002090601f0160209004810192826115b457600085556115fa565b82601f106115cd57805160ff19168380011785556115fa565b828001600101855582156115fa579182015b828111156115fa5782518255916020019190600101906115df565b5061160692915061160a565b5090565b5b80821115611606576000815560010161160b565b80356001600160a01b038116811461163657600080fd5b919050565b6000806040838503121561164e57600080fd5b6116578361161f565b946020939093013593505050565b6001600160e01b03198116811461046c57600080fd5b60006020828403121561168d57600080fd5b813561169881611665565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156116db576116db61169f565b6040525050565b600067ffffffffffffffff8311156116fc576116fc61169f565b604051611713601f8501601f1916602001826116b5565b80915083815284848401111561172857600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561175257600080fd5b813567ffffffffffffffff81111561176957600080fd5b8201601f8101841361177a57600080fd5b611789848235602084016116e2565b949350505050565b6000815180845260005b818110156117b75760208185018101518683018201520161179b565b818111156117c9576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006116986020830184611791565b60006020828403121561180357600080fd5b5035919050565b600067ffffffffffffffff8211156118245761182461169f565b5060051b60200190565b600082601f83011261183f57600080fd5b8135602061184c8261180a565b60405161185982826116b5565b83815260059390931b850182019282810191508684111561187957600080fd5b8286015b84811015611894578035835291830191830161187d565b509695505050505050565b600082601f8301126118b057600080fd5b611698838335602085016116e2565b600080600080608085870312156118d557600080fd5b6118de8561161f565b9350602085013567ffffffffffffffff808211156118fb57600080fd5b6119078883890161182e565b9450604087013591508082111561191d57600080fd5b6119298883890161182e565b9350606087013591508082111561193f57600080fd5b5061194c8782880161189f565b91505092959194509250565b600080600080600060a0868803121561197057600080fd5b6119798661161f565b94506119876020870161161f565b9350604086013567ffffffffffffffff808211156119a457600080fd5b6119b089838a0161182e565b945060608801359150808211156119c657600080fd5b6119d289838a0161182e565b935060808801359150808211156119e857600080fd5b506119f58882890161189f565b9150509295509295909350565b60008060408385031215611a1557600080fd5b823567ffffffffffffffff80821115611a2d57600080fd5b818501915085601f830112611a4157600080fd5b81356020611a4e8261180a565b604051611a5b82826116b5565b83815260059390931b8501820192828101915089841115611a7b57600080fd5b948201945b83861015611aa057611a918661161f565b82529482019490820190611a80565b96505086013592505080821115611ab657600080fd5b50611ac38582860161182e565b9150509250929050565b600081518084526020808501945080840160005b83811015611afd57815187529582019590820190600101611ae1565b509495945050505050565b6020815260006116986020830184611acd565b60008060008060808587031215611b3157600080fd5b611b3a8561161f565b93506020850135925060408501359150606085013567ffffffffffffffff811115611b6457600080fd5b61194c8782880161189f565b801515811461046c57600080fd5b60008060408385031215611b9157600080fd5b611b9a8361161f565b91506020830135611baa81611b70565b809150509250929050565b600060208284031215611bc757600080fd5b6116988261161f565b60008060408385031215611be357600080fd5b611bec8361161f565b9150611bfa6020840161161f565b90509250929050565b600080600080600060a08688031215611c1b57600080fd5b611c248661161f565b9450611c326020870161161f565b93506040860135925060608601359150608086013567ffffffffffffffff811115611c5c57600080fd5b6119f58882890161189f565b600181811c90821680611c7c57607f821691505b60208210811415611c9d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526015908201527415cc4c4d4d4e9b585c9ad95d08191a5cd8589b1959605a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d1257611d12611ce8565b5060010190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60008219821115611db557611db5611ce8565b500190565b604081526000611dcd6040830185611acd565b8281036020840152611ddf8185611acd565b95945050505050565b600060208284031215611dfa57600080fd5b815161169881611b70565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e7f90830186611acd565b8281036060840152611e918186611acd565b90508281036080840152611ea58185611791565b98975050505050505050565b600060208284031215611ec357600080fd5b815161169881611665565b600060033d1115611ee75760046000803e5060005160e01c5b90565b600060443d1015611ef85790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f2857505050505090565b8285019150815181811115611f405750505050505090565b843d8701016020828501011115611f5a5750505050505090565b611f69602082860101876116b5565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061208590830184611791565b97965050505050505056fea264697066735822122097abaaa97f5ea604031b96802c2228ce3c01705b0607f9f32fba68c60a8688d964736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002468747470733a2f2f616e6772796361742e696f2f6d657461646174612f6a736f6e732f7700000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): W
Arg [1] : _symbol (string): W
Arg [2] : uri_ (string): https://angrycat.io/metadata/jsons/w
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 5700000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 5700000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000024
Arg [8] : 68747470733a2f2f616e6772796361742e696f2f6d657461646174612f6a736f
Arg [9] : 6e732f7700000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47592:2066:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27206:230;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;27206:230:0;;;;;;;;26229:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;26229:310:0;1019:187:1;48238:87:0;;;;;;:::i;:::-;;:::i;:::-;;47664:18;;;:::i;:::-;;;;;;;:::i;26950:105::-;;;;;;:::i;:::-;;:::i;48611:171::-;;;;;;:::i;:::-;;:::i;49391:264::-;;;;;;:::i;:::-;;:::i;2867:143::-;;2967:42;2867:143;;;;;-1:-1:-1;;;;;6573:32:1;;;6555:51;;6543:2;6528:18;2867:143:0;6378:234:1;27602:524:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43691:122::-;;;;;;:::i;:::-;43748:4;43569:16;;;:12;:16;;;;;;-1:-1:-1;;;43691:122:0;46718:103;;;:::i;48461:138::-;;;;;;:::i;:::-;;:::i;46070:87::-;46143:6;;-1:-1:-1;;;;;46143:6:0;46070:87;;47689:20;;;:::i;48933:202::-;;;;;;:::i;:::-;;:::i;47716:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;43480:113;;;;;;:::i;:::-;43542:7;43569:16;;;:12;:16;;;;;;;43480:113;48337:112;;;;;;:::i;:::-;;:::i;48794:127::-;;;;;;:::i;:::-;;:::i;28426:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;28549:27:0;;;28525:4;28549:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;28426:168;49147:232;;;;;;:::i;:::-;;:::i;46976:201::-;;;;;;:::i;:::-;;:::i;27206:230::-;27292:7;-1:-1:-1;;;;;27320:21:0;;27312:76;;;;-1:-1:-1;;;27312:76:0;;10992:2:1;27312:76:0;;;10974:21:1;11031:2;11011:18;;;11004:30;11070:34;11050:18;;;11043:62;-1:-1:-1;;;11121:18:1;;;11114:40;11171:19;;27312:76:0;;;;;;;;;-1:-1:-1;27406:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;27406:22:0;;;;;;;;;;;;27206:230::o;26229:310::-;26331:4;-1:-1:-1;;;;;;26368:41:0;;-1:-1:-1;;;26368:41:0;;:110;;-1:-1:-1;;;;;;;26426:52:0;;-1:-1:-1;;;26426:52:0;26368:110;:163;;;-1:-1:-1;;;;;;;;;;16681:40:0;;;26495:36;26348:183;26229:310;-1:-1:-1;;26229:310:0:o;48238:87::-;45956:13;:11;:13::i;:::-;48304::::1;48312:4;48304:7;:13::i;:::-;48238:87:::0;:::o;47664:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26950:105::-;27010:13;27043:4;27036:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26950:105;;;:::o;48611:171::-;47872:10;47863:20;;;;:8;:20;;;;;;;;47855:49;;;;-1:-1:-1;;;47855:49:0;;11788:2:1;47855:49:0;;;11770:21:1;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:46;11902:18;;47855:49:0;11586:340:1;47855:49:0;48740:34:::1;48751:2;48755:3;48760:7;48769:4;48740:10;:34::i;:::-;48611:171:::0;;;;:::o;49391:264::-;49551:4;-1:-1:-1;;;;;4208:18:0;;4216:10;4208:18;4204:83;;4243:32;4264:10;4243:20;:32::i;:::-;-1:-1:-1;;;;;47998:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;49574:4;;47998:24:::1;;47997:25;47989:59;;;;-1:-1:-1::0;;;47989:59:0::1;;;;;;;:::i;:::-;49590:57:::2;49618:4;49624:2;49628:3;49633:7;49642:4;49590:27;:57::i;:::-;4297:1:::1;49391:264:::0;;;;;;:::o;27602:524::-;27758:16;27819:3;:10;27800:8;:15;:29;27792:83;;;;-1:-1:-1;;;27792:83:0;;12483:2:1;27792:83:0;;;12465:21:1;12522:2;12502:18;;;12495:30;12561:34;12541:18;;;12534:62;-1:-1:-1;;;12612:18:1;;;12605:39;12661:19;;27792:83:0;12281:405:1;27792:83:0;27888:30;27935:8;:15;27921:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27921:30:0;;27888:63;;27969:9;27964:122;27988:8;:15;27984:1;:19;27964:122;;;28044:30;28054:8;28063:1;28054:11;;;;;;;;:::i;:::-;;;;;;;28067:3;28071:1;28067:6;;;;;;;;:::i;:::-;;;;;;;28044:9;:30::i;:::-;28025:13;28039:1;28025:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;28005:3;;;:::i;:::-;;;27964:122;;;-1:-1:-1;28105:13:0;27602:524;-1:-1:-1;;;27602:524:0:o;46718:103::-;45956:13;:11;:13::i;:::-;46783:30:::1;46810:1;46783:18;:30::i;:::-;46718:103::o:0;48461:138::-;47872:10;47863:20;;;;:8;:20;;;;;;;;47855:49;;;;-1:-1:-1;;;47855:49:0;;11788:2:1;47855:49:0;;;11770:21:1;11827:2;11807:18;;;11800:30;-1:-1:-1;;;11846:18:1;;;11839:46;11902:18;;47855:49:0;11586:340:1;47855:49:0;48564:27:::1;48570:2;48574;48578:6;48586:4;48564:5;:27::i;47689:20::-:0;;;;;;;:::i;48933:202::-;49037:8;4388:30;4409:8;4388:20;:30::i;:::-;-1:-1:-1;;;;;47998:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;49064:8;;47998:24:::1;;47997:25;47989:59;;;;-1:-1:-1::0;;;47989:59:0::1;;;;;;;:::i;:::-;49084:43:::2;49108:8;49118;49084:23;:43::i;48337:112::-:0;45956:13;:11;:13::i;:::-;-1:-1:-1;;;;;48415:17:0;;;::::1;;::::0;;;:8:::1;:17;::::0;;;;:26;;-1:-1:-1;;48415:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48337:112::o;48794:127::-;45956:13;:11;:13::i;:::-;-1:-1:-1;;;;;48879:24:0;;;::::1;;::::0;;;:14:::1;:24;::::0;;;;:34;;-1:-1:-1;;48879:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48794:127::o;49147:232::-;49282:4;-1:-1:-1;;;;;4208:18:0;;4216:10;4208:18;4204:83;;4243:32;4264:10;4243:20;:32::i;:::-;-1:-1:-1;;;;;47998:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;49305:4;;47998:24:::1;;47997:25;47989:59;;;;-1:-1:-1::0;;;47989:59:0::1;;;;;;;:::i;:::-;49321:50:::2;49344:4;49350:2;49354;49358:6;49366:4;49321:22;:50::i;46976:201::-:0;45956:13;:11;:13::i;:::-;-1:-1:-1;;;;;47065:22:0;::::1;47057:73;;;::::0;-1:-1:-1;;;47057:73:0;;13297:2:1;47057:73:0::1;::::0;::::1;13279:21:1::0;13336:2;13316:18;;;13309:30;13375:34;13355:18;;;13348:62;-1:-1:-1;;;13426:18:1;;;13419:36;13472:19;;47057:73:0::1;13095:402:1::0;47057:73:0::1;47141:28;47160:8;47141:18;:28::i;46235:132::-:0;46143:6;;-1:-1:-1;;;;;46143:6:0;24994:10;46299:23;46291:68;;;;-1:-1:-1;;;46291:68:0;;13704:2:1;46291:68:0;;;13686:21:1;;;13723:18;;;13716:30;13782:34;13762:18;;;13755:62;13834:18;;46291:68:0;13502:356:1;33373:88:0;33440:13;;;;:4;;:13;;;;;:::i;:::-;;33373:88;:::o;34979:813::-;-1:-1:-1;;;;;35157:16:0;;35149:62;;;;-1:-1:-1;;;35149:62:0;;;;;;;:::i;:::-;35244:7;:14;35230:3;:10;:28;35222:81;;;;-1:-1:-1;;;35222:81:0;;;;;;;:::i;:::-;24994:10;35360:66;24994:10;35316:16;35403:2;35407:3;35412:7;35421:4;35360:20;:66::i;:::-;35444:9;35439:103;35463:3;:10;35459:1;:14;35439:103;;;35520:7;35528:1;35520:10;;;;;;;;:::i;:::-;;;;;;;35495:9;:17;35505:3;35509:1;35505:6;;;;;;;;:::i;:::-;;;;;;;35495:17;;;;;;;;;;;:21;35513:2;-1:-1:-1;;;;;35495:21:0;-1:-1:-1;;;;;35495:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;35475:3:0;;-1:-1:-1;35475:3:0;;;:::i;:::-;;;;35439:103;;;;35595:2;-1:-1:-1;;;;;35559:53:0;35591:1;-1:-1:-1;;;;;35559:53:0;35573:8;-1:-1:-1;;;;;35559:53:0;;35599:3;35604:7;35559:53;;;;;;;:::i;:::-;;;;;;;;35703:81;35739:8;35757:1;35761:2;35765:3;35770:7;35779:4;35703:35;:81::i;:::-;35138:654;34979:813;;;;:::o;4446:419::-;2967:42;4637:45;:49;4633:225;;4708:67;;-1:-1:-1;;;4708:67:0;;4759:4;4708:67;;;15489:34:1;-1:-1:-1;;;;;15559:15:1;;15539:18;;;15532:43;2967:42:0;;4708;;15424:18:1;;4708:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4703:144;;4803:28;;-1:-1:-1;;;4803:28:0;;-1:-1:-1;;;;;6573:32:1;;4803:28:0;;;6555:51:1;6528:18;;4803:28:0;6378:234:1;29149:438:0;-1:-1:-1;;;;;29382:20:0;;24994:10;29382:20;;:60;;-1:-1:-1;29406:36:0;29423:4;24994:10;28426:168;:::i;29406:36::-;29360:156;;;;-1:-1:-1;;;29360:156:0;;;;;;;:::i;:::-;29527:52;29550:4;29556:2;29560:3;29565:7;29574:4;29527:22;:52::i;47337:191::-;47430:6;;;-1:-1:-1;;;;;47447:17:0;;;-1:-1:-1;;;;;;47447:17:0;;;;;;;47480:40;;47430:6;;;47447:17;47430:6;;47480:40;;47411:16;;47480:40;47400:128;47337:191;:::o;33847:729::-;-1:-1:-1;;;;;34000:16:0;;33992:62;;;;-1:-1:-1;;;33992:62:0;;;;;;;:::i;:::-;24994:10;34067:16;34132:21;34150:2;34132:17;:21::i;:::-;34109:44;;34164:24;34191:25;34209:6;34191:17;:25::i;:::-;34164:52;;34229:66;34250:8;34268:1;34272:2;34276:3;34281:7;34290:4;34229:20;:66::i;:::-;34308:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34308:17:0;;;;;;;;;:27;;34329:6;;34308:9;:27;;34329:6;;34308:27;:::i;:::-;;;;-1:-1:-1;;34351:52:0;;;16425:25:1;;;16481:2;16466:18;;16459:34;;;-1:-1:-1;;;;;34351:52:0;;;;34384:1;;34351:52;;;;;;16398:18:1;34351:52:0;;;;;;;34494:74;34525:8;34543:1;34547:2;34551;34555:6;34563:4;34494:30;:74::i;28199:155::-;28294:52;24994:10;28327:8;28337;28294:18;:52::i;28666:406::-;-1:-1:-1;;;;;28874:20:0;;24994:10;28874:20;;:60;;-1:-1:-1;28898:36:0;28915:4;24994:10;28426:168;:::i;28898:36::-;28852:156;;;;-1:-1:-1;;;28852:156:0;;;;;;;:::i;:::-;29019:45;29037:4;29043:2;29047;29051:6;29059:4;29019:17;:45::i;43888:931::-;-1:-1:-1;;;;;44210:18:0;;44206:160;;44250:9;44245:110;44269:3;:10;44265:1;:14;44245:110;;;44329:7;44337:1;44329:10;;;;;;;;:::i;:::-;;;;;;;44305:12;:20;44318:3;44322:1;44318:6;;;;;;;;:::i;:::-;;;;;;;44305:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;44281:3:0;;-1:-1:-1;44281:3:0;;:::i;:::-;;;44245:110;;;;44206:160;-1:-1:-1;;;;;44382:16:0;;44378:434;;44420:9;44415:386;44439:3;:10;44435:1;:14;44415:386;;;44475:10;44488:3;44492:1;44488:6;;;;;;;;:::i;:::-;;;;;;;44475:19;;44513:14;44530:7;44538:1;44530:10;;;;;;;;:::i;:::-;;;;;;;44513:27;;44559:14;44576:12;:16;44589:2;44576:16;;;;;;;;;;;;44559:33;;44629:6;44619;:16;;44611:69;;;;-1:-1:-1;;;44611:69:0;;16706:2:1;44611:69:0;;;16688:21:1;16745:2;16725:18;;;16718:30;16784:34;16764:18;;;16757:62;-1:-1:-1;;;16835:18:1;;;16828:38;16883:19;;44611:69:0;16504:404:1;44611:69:0;44732:16;;;;:12;:16;;;;;;44751:15;;44732:34;;44451:3;;;:::i;:::-;;;44415:386;;44378:434;43888:931;;;;;;:::o;41705:813::-;-1:-1:-1;;;;;41945:13:0;;6872:19;:23;41941:570;;41981:79;;-1:-1:-1;;;41981:79:0;;-1:-1:-1;;;;;41981:43:0;;;;;:79;;42025:8;;42035:4;;42041:3;;42046:7;;42055:4;;41981:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41981:79:0;;;;;;;;-1:-1:-1;;41981:79:0;;;;;;;;;;;;:::i;:::-;;;41977:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42373:6;42366:14;;-1:-1:-1;;;42366:14:0;;;;;;;;:::i;41977:523::-;;;42422:62;;-1:-1:-1;;;42422:62:0;;19061:2:1;42422:62:0;;;19043:21:1;19100:2;19080:18;;;19073:30;19139:34;19119:18;;;19112:62;-1:-1:-1;;;19190:18:1;;;19183:50;19250:19;;42422:62:0;18859:416:1;41977:523:0;-1:-1:-1;;;;;;42142:60:0;;-1:-1:-1;;;42142:60:0;42138:159;;42227:50;;-1:-1:-1;;;42227:50:0;;;;;;;:::i;31383:1146::-;31610:7;:14;31596:3;:10;:28;31588:81;;;;-1:-1:-1;;;31588:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31688:16:0;;31680:66;;;;-1:-1:-1;;;31680:66:0;;;;;;;:::i;:::-;24994:10;31803:60;24994:10;31834:4;31840:2;31844:3;31849:7;31858:4;31803:20;:60::i;:::-;31881:9;31876:421;31900:3;:10;31896:1;:14;31876:421;;;31932:10;31945:3;31949:1;31945:6;;;;;;;;:::i;:::-;;;;;;;31932:19;;31966:14;31983:7;31991:1;31983:10;;;;;;;;:::i;:::-;;;;;;;;;;;;32010:19;32032:13;;;;;;;;;;-1:-1:-1;;;;;32032:19:0;;;;;;;;;;;;31983:10;;-1:-1:-1;32074:21:0;;;;32066:76;;;;-1:-1:-1;;;32066:76:0;;;;;;;:::i;:::-;32186:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32186:19:0;;;;;;;;;;32208:20;;;32186:42;;32258:17;;;;;;;:27;;32208:20;;32186:9;32258:27;;32208:20;;32258:27;:::i;:::-;;;;;;;;31917:380;;;31912:3;;;;:::i;:::-;;;31876:421;;;;32344:2;-1:-1:-1;;;;;32314:47:0;32338:4;-1:-1:-1;;;;;32314:47:0;32328:8;-1:-1:-1;;;;;32314:47:0;;32348:3;32353:7;32314:47;;;;;;;:::i;:::-;;;;;;;;32446:75;32482:8;32492:4;32498:2;32502:3;32507:7;32516:4;32446:35;:75::i;42526:198::-;42646:16;;;42660:1;42646:16;;;;;;;;;42592;;42621:22;;42646:16;;;;;;;;;;;;-1:-1:-1;42646:16:0;42621:41;;42684:7;42673:5;42679:1;42673:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;42711:5;42526:198;-1:-1:-1;;42526:198:0:o;40953:744::-;-1:-1:-1;;;;;41168:13:0;;6872:19;:23;41164:526;;41204:72;;-1:-1:-1;;;41204:72:0;;-1:-1:-1;;;;;41204:38:0;;;;;:72;;41243:8;;41253:4;;41259:2;;41263:6;;41271:4;;41204:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41204:72:0;;;;;;;;-1:-1:-1;;41204:72:0;;;;;;;;;;;;:::i;:::-;;;41200:479;;;;:::i;:::-;-1:-1:-1;;;;;;41326:55:0;;-1:-1:-1;;;41326:55:0;41322:154;;41406:50;;-1:-1:-1;;;41406:50:0;;;;;;;:::i;38260:331::-;38415:8;-1:-1:-1;;;;;38406:17:0;:5;-1:-1:-1;;;;;38406:17:0;;;38398:71;;;;-1:-1:-1;;;38398:71:0;;21274:2:1;38398:71:0;;;21256:21:1;21313:2;21293:18;;;21286:30;21352:34;21332:18;;;21325:62;-1:-1:-1;;;21403:18:1;;;21396:39;21452:19;;38398:71:0;21072:405:1;38398:71:0;-1:-1:-1;;;;;38480:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;38480:46:0;;;;;;;;;;38542:41;;1159::1;;;38542::0;;1132:18:1;38542:41:0;;;;;;;38260:331;;;:::o;30051:974::-;-1:-1:-1;;;;;30239:16:0;;30231:66;;;;-1:-1:-1;;;30231:66:0;;;;;;;:::i;:::-;24994:10;30310:16;30375:21;30393:2;30375:17;:21::i;:::-;30352:44;;30407:24;30434:25;30452:6;30434:17;:25::i;:::-;30407:52;;30472:60;30493:8;30503:4;30509:2;30513:3;30518:7;30527:4;30472:20;:60::i;:::-;30545:19;30567:13;;;;;;;;;;;-1:-1:-1;;;;;30567:19:0;;;;;;;;;;30605:21;;;;30597:76;;;;-1:-1:-1;;;30597:76:0;;;;;;;:::i;:::-;30709:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30709:19:0;;;;;;;;;;30731:20;;;30709:42;;30773:17;;;;;;;:27;;30731:20;;30709:9;30773:27;;30731:20;;30773:27;:::i;:::-;;;;-1:-1:-1;;30818:46:0;;;16425:25:1;;;16481:2;16466:18;;16459:34;;;-1:-1:-1;;;;;30818:46:0;;;;;;;;;;;;;;16398:18:1;30818:46:0;;;;;;;30949:68;30980:8;30990:4;30996:2;31000;31004:6;31012:4;30949:30;:68::i;:::-;30220:805;;;;30051:974;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:127::-;1272:10;1267:3;1263:20;1260:1;1253:31;1303:4;1300:1;1293:15;1327:4;1324:1;1317:15;1343:249;1453:2;1434:13;;-1:-1:-1;;1430:27:1;1418:40;;1488:18;1473:34;;1509:22;;;1470:62;1467:88;;;1535:18;;:::i;:::-;1571:2;1564:22;-1:-1:-1;;1343:249:1:o;1597:469::-;1662:5;1696:18;1688:6;1685:30;1682:56;;;1718:18;;:::i;:::-;1767:2;1761:9;1779:69;1836:2;1815:15;;-1:-1:-1;;1811:29:1;1842:4;1807:40;1761:9;1779:69;:::i;:::-;1866:6;1857:15;;1896:6;1888;1881:22;1936:3;1927:6;1922:3;1918:16;1915:25;1912:45;;;1953:1;1950;1943:12;1912:45;2003:6;1998:3;1991:4;1983:6;1979:17;1966:44;2058:1;2051:4;2042:6;2034;2030:19;2026:30;2019:41;;1597:469;;;;;:::o;2071:451::-;2140:6;2193:2;2181:9;2172:7;2168:23;2164:32;2161:52;;;2209:1;2206;2199:12;2161:52;2249:9;2236:23;2282:18;2274:6;2271:30;2268:50;;;2314:1;2311;2304:12;2268:50;2337:22;;2390:4;2382:13;;2378:27;-1:-1:-1;2368:55:1;;2419:1;2416;2409:12;2368:55;2442:74;2508:7;2503:2;2490:16;2485:2;2481;2477:11;2442:74;:::i;:::-;2432:84;2071:451;-1:-1:-1;;;;2071:451:1:o;2527:472::-;2569:3;2607:5;2601:12;2634:6;2629:3;2622:19;2659:1;2669:162;2683:6;2680:1;2677:13;2669:162;;;2745:4;2801:13;;;2797:22;;2791:29;2773:11;;;2769:20;;2762:59;2698:12;2669:162;;;2849:6;2846:1;2843:13;2840:87;;;2915:1;2908:4;2899:6;2894:3;2890:16;2886:27;2879:38;2840:87;-1:-1:-1;2981:2:1;2960:15;-1:-1:-1;;2956:29:1;2947:39;;;;2988:4;2943:50;;2527:472;-1:-1:-1;;2527:472:1:o;3004:220::-;3153:2;3142:9;3135:21;3116:4;3173:45;3214:2;3203:9;3199:18;3191:6;3173:45;:::i;3229:180::-;3288:6;3341:2;3329:9;3320:7;3316:23;3312:32;3309:52;;;3357:1;3354;3347:12;3309:52;-1:-1:-1;3380:23:1;;3229:180;-1:-1:-1;3229:180:1:o;3414:183::-;3474:4;3507:18;3499:6;3496:30;3493:56;;;3529:18;;:::i;:::-;-1:-1:-1;3574:1:1;3570:14;3586:4;3566:25;;3414:183::o;3602:724::-;3656:5;3709:3;3702:4;3694:6;3690:17;3686:27;3676:55;;3727:1;3724;3717:12;3676:55;3763:6;3750:20;3789:4;3812:43;3852:2;3812:43;:::i;:::-;3884:2;3878:9;3896:31;3924:2;3916:6;3896:31;:::i;:::-;3962:18;;;4054:1;4050:10;;;;4038:23;;4034:32;;;3996:15;;;;-1:-1:-1;4078:15:1;;;4075:35;;;4106:1;4103;4096:12;4075:35;4142:2;4134:6;4130:15;4154:142;4170:6;4165:3;4162:15;4154:142;;;4236:17;;4224:30;;4274:12;;;;4187;;4154:142;;;-1:-1:-1;4314:6:1;3602:724;-1:-1:-1;;;;;;3602:724:1:o;4331:221::-;4373:5;4426:3;4419:4;4411:6;4407:17;4403:27;4393:55;;4444:1;4441;4434:12;4393:55;4466:80;4542:3;4533:6;4520:20;4513:4;4505:6;4501:17;4466:80;:::i;4557:868::-;4702:6;4710;4718;4726;4779:3;4767:9;4758:7;4754:23;4750:33;4747:53;;;4796:1;4793;4786:12;4747:53;4819:29;4838:9;4819:29;:::i;:::-;4809:39;;4899:2;4888:9;4884:18;4871:32;4922:18;4963:2;4955:6;4952:14;4949:34;;;4979:1;4976;4969:12;4949:34;5002:61;5055:7;5046:6;5035:9;5031:22;5002:61;:::i;:::-;4992:71;;5116:2;5105:9;5101:18;5088:32;5072:48;;5145:2;5135:8;5132:16;5129:36;;;5161:1;5158;5151:12;5129:36;5184:63;5239:7;5228:8;5217:9;5213:24;5184:63;:::i;:::-;5174:73;;5300:2;5289:9;5285:18;5272:32;5256:48;;5329:2;5319:8;5316:16;5313:36;;;5345:1;5342;5335:12;5313:36;;5368:51;5411:7;5400:8;5389:9;5385:24;5368:51;:::i;:::-;5358:61;;;4557:868;;;;;;;:::o;5430:943::-;5584:6;5592;5600;5608;5616;5669:3;5657:9;5648:7;5644:23;5640:33;5637:53;;;5686:1;5683;5676:12;5637:53;5709:29;5728:9;5709:29;:::i;:::-;5699:39;;5757:38;5791:2;5780:9;5776:18;5757:38;:::i;:::-;5747:48;;5846:2;5835:9;5831:18;5818:32;5869:18;5910:2;5902:6;5899:14;5896:34;;;5926:1;5923;5916:12;5896:34;5949:61;6002:7;5993:6;5982:9;5978:22;5949:61;:::i;:::-;5939:71;;6063:2;6052:9;6048:18;6035:32;6019:48;;6092:2;6082:8;6079:16;6076:36;;;6108:1;6105;6098:12;6076:36;6131:63;6186:7;6175:8;6164:9;6160:24;6131:63;:::i;:::-;6121:73;;6247:3;6236:9;6232:19;6219:33;6203:49;;6277:2;6267:8;6264:16;6261:36;;;6293:1;6290;6283:12;6261:36;;6316:51;6359:7;6348:8;6337:9;6333:24;6316:51;:::i;:::-;6306:61;;;5430:943;;;;;;;;:::o;6617:1208::-;6735:6;6743;6796:2;6784:9;6775:7;6771:23;6767:32;6764:52;;;6812:1;6809;6802:12;6764:52;6852:9;6839:23;6881:18;6922:2;6914:6;6911:14;6908:34;;;6938:1;6935;6928:12;6908:34;6976:6;6965:9;6961:22;6951:32;;7021:7;7014:4;7010:2;7006:13;7002:27;6992:55;;7043:1;7040;7033:12;6992:55;7079:2;7066:16;7101:4;7124:43;7164:2;7124:43;:::i;:::-;7196:2;7190:9;7208:31;7236:2;7228:6;7208:31;:::i;:::-;7274:18;;;7362:1;7358:10;;;;7350:19;;7346:28;;;7308:15;;;;-1:-1:-1;7386:19:1;;;7383:39;;;7418:1;7415;7408:12;7383:39;7442:11;;;;7462:148;7478:6;7473:3;7470:15;7462:148;;;7544:23;7563:3;7544:23;:::i;:::-;7532:36;;7495:12;;;;7588;;;;7462:148;;;7629:6;-1:-1:-1;;7673:18:1;;7660:32;;-1:-1:-1;;7704:16:1;;;7701:36;;;7733:1;7730;7723:12;7701:36;;7756:63;7811:7;7800:8;7789:9;7785:24;7756:63;:::i;:::-;7746:73;;;6617:1208;;;;;:::o;7830:435::-;7883:3;7921:5;7915:12;7948:6;7943:3;7936:19;7974:4;8003:2;7998:3;7994:12;7987:19;;8040:2;8033:5;8029:14;8061:1;8071:169;8085:6;8082:1;8079:13;8071:169;;;8146:13;;8134:26;;8180:12;;;;8215:15;;;;8107:1;8100:9;8071:169;;;-1:-1:-1;8256:3:1;;7830:435;-1:-1:-1;;;;;7830:435:1:o;8270:261::-;8449:2;8438:9;8431:21;8412:4;8469:56;8521:2;8510:9;8506:18;8498:6;8469:56;:::i;8536:531::-;8631:6;8639;8647;8655;8708:3;8696:9;8687:7;8683:23;8679:33;8676:53;;;8725:1;8722;8715:12;8676:53;8748:29;8767:9;8748:29;:::i;:::-;8738:39;;8824:2;8813:9;8809:18;8796:32;8786:42;;8875:2;8864:9;8860:18;8847:32;8837:42;;8930:2;8919:9;8915:18;8902:32;8957:18;8949:6;8946:30;8943:50;;;8989:1;8986;8979:12;8943:50;9012:49;9053:7;9044:6;9033:9;9029:22;9012:49;:::i;9280:118::-;9366:5;9359:13;9352:21;9345:5;9342:32;9332:60;;9388:1;9385;9378:12;9403:315;9468:6;9476;9529:2;9517:9;9508:7;9504:23;9500:32;9497:52;;;9545:1;9542;9535:12;9497:52;9568:29;9587:9;9568:29;:::i;:::-;9558:39;;9647:2;9636:9;9632:18;9619:32;9660:28;9682:5;9660:28;:::i;:::-;9707:5;9697:15;;;9403:315;;;;;:::o;9723:186::-;9782:6;9835:2;9823:9;9814:7;9810:23;9806:32;9803:52;;;9851:1;9848;9841:12;9803:52;9874:29;9893:9;9874:29;:::i;9914:260::-;9982:6;9990;10043:2;10031:9;10022:7;10018:23;10014:32;10011:52;;;10059:1;10056;10049:12;10011:52;10082:29;10101:9;10082:29;:::i;:::-;10072:39;;10130:38;10164:2;10153:9;10149:18;10130:38;:::i;:::-;10120:48;;9914:260;;;;;:::o;10179:606::-;10283:6;10291;10299;10307;10315;10368:3;10356:9;10347:7;10343:23;10339:33;10336:53;;;10385:1;10382;10375:12;10336:53;10408:29;10427:9;10408:29;:::i;:::-;10398:39;;10456:38;10490:2;10479:9;10475:18;10456:38;:::i;:::-;10446:48;;10541:2;10530:9;10526:18;10513:32;10503:42;;10592:2;10581:9;10577:18;10564:32;10554:42;;10647:3;10636:9;10632:19;10619:33;10675:18;10667:6;10664:30;10661:50;;;10707:1;10704;10697:12;10661:50;10730:49;10771:7;10762:6;10751:9;10747:22;10730:49;:::i;11201:380::-;11280:1;11276:12;;;;11323;;;11344:61;;11398:4;11390:6;11386:17;11376:27;;11344:61;11451:2;11443:6;11440:14;11420:18;11417:38;11414:161;;;11497:10;11492:3;11488:20;11485:1;11478:31;11532:4;11529:1;11522:15;11560:4;11557:1;11550:15;11414:161;;11201:380;;;:::o;11931:345::-;12133:2;12115:21;;;12172:2;12152:18;;;12145:30;-1:-1:-1;;;12206:2:1;12191:18;;12184:51;12267:2;12252:18;;11931:345::o;12691:127::-;12752:10;12747:3;12743:20;12740:1;12733:31;12783:4;12780:1;12773:15;12807:4;12804:1;12797:15;12823:127;12884:10;12879:3;12875:20;12872:1;12865:31;12915:4;12912:1;12905:15;12939:4;12936:1;12929:15;12955:135;12994:3;-1:-1:-1;;13015:17:1;;13012:43;;;13035:18;;:::i;:::-;-1:-1:-1;13082:1:1;13071:13;;12955:135::o;13863:397::-;14065:2;14047:21;;;14104:2;14084:18;;;14077:30;14143:34;14138:2;14123:18;;14116:62;-1:-1:-1;;;14209:2:1;14194:18;;14187:31;14250:3;14235:19;;13863:397::o;14265:404::-;14467:2;14449:21;;;14506:2;14486:18;;;14479:30;14545:34;14540:2;14525:18;;14518:62;-1:-1:-1;;;14611:2:1;14596:18;;14589:38;14659:3;14644:19;;14265:404::o;14674:128::-;14714:3;14745:1;14741:6;14738:1;14735:13;14732:39;;;14751:18;;:::i;:::-;-1:-1:-1;14787:9:1;;14674:128::o;14807:465::-;15064:2;15053:9;15046:21;15027:4;15090:56;15142:2;15131:9;15127:18;15119:6;15090:56;:::i;:::-;15194:9;15186:6;15182:22;15177:2;15166:9;15162:18;15155:50;15222:44;15259:6;15251;15222:44;:::i;:::-;15214:52;14807:465;-1:-1:-1;;;;;14807:465:1:o;15586:245::-;15653:6;15706:2;15694:9;15685:7;15681:23;15677:32;15674:52;;;15722:1;15719;15712:12;15674:52;15754:9;15748:16;15773:28;15795:5;15773:28;:::i;15836:410::-;16038:2;16020:21;;;16077:2;16057:18;;;16050:30;16116:34;16111:2;16096:18;;16089:62;-1:-1:-1;;;16182:2:1;16167:18;;16160:44;16236:3;16221:19;;15836:410::o;16913:827::-;-1:-1:-1;;;;;17310:15:1;;;17292:34;;17362:15;;17357:2;17342:18;;17335:43;17272:3;17409:2;17394:18;;17387:31;;;17235:4;;17441:57;;17478:19;;17470:6;17441:57;:::i;:::-;17546:9;17538:6;17534:22;17529:2;17518:9;17514:18;17507:50;17580:44;17617:6;17609;17580:44;:::i;:::-;17566:58;;17673:9;17665:6;17661:22;17655:3;17644:9;17640:19;17633:51;17701:33;17727:6;17719;17701:33;:::i;:::-;17693:41;16913:827;-1:-1:-1;;;;;;;;16913:827:1:o;17745:249::-;17814:6;17867:2;17855:9;17846:7;17842:23;17838:32;17835:52;;;17883:1;17880;17873:12;17835:52;17915:9;17909:16;17934:30;17958:5;17934:30;:::i;17999:179::-;18034:3;18076:1;18058:16;18055:23;18052:120;;;18122:1;18119;18116;18101:23;-1:-1:-1;18159:1:1;18153:8;18148:3;18144:18;18052:120;17999:179;:::o;18183:671::-;18222:3;18264:4;18246:16;18243:26;18240:39;;;18183:671;:::o;18240:39::-;18306:2;18300:9;-1:-1:-1;;18371:16:1;18367:25;;18364:1;18300:9;18343:50;18422:4;18416:11;18446:16;18481:18;18552:2;18545:4;18537:6;18533:17;18530:25;18525:2;18517:6;18514:14;18511:45;18508:58;;;18559:5;;;;;18183:671;:::o;18508:58::-;18596:6;18590:4;18586:17;18575:28;;18632:3;18626:10;18659:2;18651:6;18648:14;18645:27;;;18665:5;;;;;;18183:671;:::o;18645:27::-;18749:2;18730:16;18724:4;18720:27;18716:36;18709:4;18700:6;18695:3;18691:16;18687:27;18684:69;18681:82;;;18756:5;;;;;;18183:671;:::o;18681:82::-;18772:57;18823:4;18814:6;18806;18802:19;18798:30;18792:4;18772:57;:::i;:::-;-1:-1:-1;18845:3:1;;18183:671;-1:-1:-1;;;;;18183:671:1:o;19280:404::-;19482:2;19464:21;;;19521:2;19501:18;;;19494:30;19560:34;19555:2;19540:18;;19533:62;-1:-1:-1;;;19626:2:1;19611:18;;19604:38;19674:3;19659:19;;19280:404::o;19689:401::-;19891:2;19873:21;;;19930:2;19910:18;;;19903:30;19969:34;19964:2;19949:18;;19942:62;-1:-1:-1;;;20035:2:1;20020:18;;20013:35;20080:3;20065:19;;19689:401::o;20095:406::-;20297:2;20279:21;;;20336:2;20316:18;;;20309:30;20375:34;20370:2;20355:18;;20348:62;-1:-1:-1;;;20441:2:1;20426:18;;20419:40;20491:3;20476:19;;20095:406::o;20506:561::-;-1:-1:-1;;;;;20803:15:1;;;20785:34;;20855:15;;20850:2;20835:18;;20828:43;20902:2;20887:18;;20880:34;;;20945:2;20930:18;;20923:34;;;20765:3;20988;20973:19;;20966:32;;;20728:4;;21015:46;;21041:19;;21033:6;21015:46;:::i;:::-;21007:54;20506:561;-1:-1:-1;;;;;;;20506:561:1:o
Swarm Source
ipfs://97abaaa97f5ea604031b96802c2228ce3c01705b0607f9f32fba68c60a8688d9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.