ERC-1155
Overview
Max Total Supply
264 PINGALBRO
Holders
142
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 Source Code Verified (Exact Match)
Contract Name:
PinGalaxyBroadcast
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (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: @openzeppelin/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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (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/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (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 nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); 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/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: contracts/pin-galaxy-broadcast.sol // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%% (%%%%%%%%(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%( // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#((*******((%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%(*... &&&&&&& ...*(%%%% %%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%(.. &&&&&&&&&&&&&&&&&&& .,(%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%% %%%%%%%%%%#*. &&&&&&&&&&&&&&&&&&&&&&&&& .*#%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%*. &&&&&&&&&&&&&&&&&&&&&&&&&&&&& .*%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%*. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .(%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%% %%%#*. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .*#%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%/. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&../%%%%%%%%%%%%%%%%%%% // ((**((***.****... &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ...***,.***((**((( // %%%%%%%%%(#%%((((*, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ,*(((%%%#(%%%%%%%%%% // %%%%%%%%%%%%%%%%%%#*. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .*#%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%(..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.*(%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%(*.(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*.*#%%%%%%%%%%%%%%%#%%%*% // %%%%%%%%%,%%%%%%%%%%%%(,.&&&&&&&&&&&&&&&&&&&&&&&&&&&&*.,(%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%# %%%%%%%#*.*&&&&&&&&&&&&&&&&&&&&&&&*./#%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%/*..*&&&&&&&&&&&&&&%*..*(%%%(%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#/,,...........,*/#%%%%%%%%%%%%%%%%%%/%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% // // ______ _ _____ _ // | ___ \(_) | __ \ | | // | |_/ / _ _ __ | | \/ __ _ | | __ _ __ __ _ _ // | __/ | || '_ \ | | __ / _` || | / _` |\ \/ /| | | | // | | | || | | | | |_\ \| (_| || || (_| | > < | |_| | // \_| |_||_| |_| \____/ \__,_||_| \__,_|/_/\_\ \__, | // __/ | // |___/ // pragma solidity ^0.8.16; interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); } interface IPinGalaxyStardust is IERC20 { function burnFrom(address account, uint256 amount) external; } interface IERC721 { function ownerOf(uint256 tokenId) external view returns (address owner); } contract PinGalaxyBroadcast is ERC1155Supply, Ownable { string public name; string public symbol; uint256 public broadcastsCount = 1; uint256 public maxSupply = 250; uint256 public ETH_PRICE = 0.0042 ether; uint256 public PINGALSD_PRICE = 420 * (10**18); address private PINPLANETS_ADDRESS = 0xa808F088391839728897b83849323cf823Ab73AF; address private PINGALSD_ADDRESS = 0x79B0e8e680d3063B274441dB1F96619C2f997d20; string private _contractURI = "https://pingalaxy.xyz/api/broadcast/contract_metadata.json"; constructor() ERC1155("https://pingalaxy.xyz/api/broadcast/metadata/{id}") { name = "Pin Galaxy Broadcast"; symbol = "PINGALBRO"; for (uint256 i = 1; i <= maxSupply; i++) { address ownerOfToken = IERC721(PINPLANETS_ADDRESS).ownerOf(i); _mint(ownerOfToken, 1, 1, ""); } } function contractURI() public view returns (string memory) { return _contractURI; } // mint functions function receiveTransmissionUsingStardust(uint256 id) public { require(id >= 1 && id <= broadcastsCount, "Cannot tune transmission"); require( IPinGalaxyStardust(PINGALSD_ADDRESS).balanceOf(msg.sender) >= PINGALSD_PRICE, "Not enough PINGALSD" ); require( totalSupply(id) < maxSupply, "Broadcast is over, try another frequency" ); IPinGalaxyStardust(PINGALSD_ADDRESS).burnFrom( msg.sender, PINGALSD_PRICE ); _mint(msg.sender, id, 1, ""); } function receiveTransmissionUsingEth(uint256 id) public payable { require(id >= 1 && id <= broadcastsCount, "Cannot tune transmission"); require(msg.value == ETH_PRICE, "Wrong ETH amount"); require( totalSupply(id) < maxSupply, "Broadcast is over, try another frequency" ); _mint(msg.sender, id, 1, ""); } // onlyOwner functions function setUri(string memory uri_) external onlyOwner { _setURI(uri_); } function setContractUri(string memory uri_) external onlyOwner { _contractURI = uri_; } function broadcast() external onlyOwner { broadcastsCount++; } function withdraw() external onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success, "Transfer failed!"); } function withdrawTokens(address tokenAddress) external onlyOwner { IERC20(tokenAddress).transfer( msg.sender, IERC20(tokenAddress).balanceOf(address(this)) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"ETH_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PINGALSD_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"broadcast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"broadcastsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"receiveTransmissionUsingEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"receiveTransmissionUsingStardust","outputs":[],"stateMutability":"nonpayable","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":"string","name":"uri_","type":"string"}],"name":"setContractUri","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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600160075560fa600855660eebe0b40e80006009556816c4abbebea0100000600a55600b80546001600160a01b031990811673a808f088391839728897b83849323cf823ab73af17909155600c80549091167379b0e8e680d3063b274441db1f96619c2f997d2017905560e0604052603a60808181529062002dda60a039600d906200008c908262000818565b503480156200009a57600080fd5b5060405180606001604052806031815260200162002e1460319139620000c08162000201565b50620000cc3362000213565b60408051808201909152601481527f50696e2047616c6178792042726f61646361737400000000000000000000000060208201526005906200010f908262000818565b5060408051808201909152600981526850494e47414c42524f60b81b60208201526006906200013f908262000818565b5060015b6008548111620001fa57600b546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa15801562000198573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001be9190620008e4565b9050620001e481600180604051806020016040528060008152506200026560201b60201c565b5080620001f1816200092c565b91505062000143565b5062000b25565b60026200020f828262000818565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416620002cb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b336000620002d98562000398565b90506000620002e88562000398565b9050620002fb83600089858589620003e6565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906200032d90849062000948565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46200038f836000898989896200059c565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110620003d557620003d562000964565b602090810291909101015292915050565b620004018686868686866200059460201b62000e7f1760201c565b6001600160a01b038516620004955760005b8351811015620004935782818151811062000432576200043262000964565b60200260200101516003600086848151811062000453576200045362000964565b6020026020010151815260200190815260200160002060008282546200047a919062000948565b909155506200048b9050816200092c565b905062000413565b505b6001600160a01b038416620005945760005b83518110156200038f576000848281518110620004c857620004c862000964565b602002602001015190506000848381518110620004e957620004e962000964565b60200260200101519050600060036000848152602001908152602001600020549050818110156200056e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401620002c2565b600092835260036020526040909220910390556200058c816200092c565b9050620004a7565b505050505050565b620005bb846001600160a01b03166200076860201b62000e871760201c565b15620005945760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190620005f79089908990889088908890600401620009c2565b6020604051808303816000875af192505050801562000635575060408051601f3d908101601f19168201909252620006329181019062000a09565b60015b620006f5576200064462000a35565b806308c379a0036200068457506200065b62000a81565b8062000668575062000686565b8060405162461bcd60e51b8152600401620002c2919062000b10565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401620002c2565b6001600160e01b0319811663f23a6e6160e01b146200038f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401620002c2565b6001600160a01b03163b151590565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007a257607f821691505b602082108103620007c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081357600081815260208120601f850160051c81016020861015620007f25750805b601f850160051c820191505b818110156200059457828155600101620007fe565b505050565b81516001600160401b0381111562000834576200083462000777565b6200084c816200084584546200078d565b84620007c9565b602080601f8311600181146200088457600084156200086b5750858301515b600019600386901b1c1916600185901b17855562000594565b600085815260208120601f198616915b82811015620008b55788860151825594840194600190910190840162000894565b5085821015620008d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008f757600080fd5b81516001600160a01b03811681146200090f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60006001820162000941576200094162000916565b5060010190565b808201808211156200095e576200095e62000916565b92915050565b634e487b7160e01b600052603260045260246000fd5b6000815180845260005b81811015620009a25760208185018101518683018201520162000984565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090620009fe908301846200097a565b979650505050505050565b60006020828403121562000a1c57600080fd5b81516001600160e01b0319811681146200090f57600080fd5b600060033d111562000a4f5760046000803e5060005160e01c5b90565b601f8201601f191681016001600160401b038111828210171562000a7a5762000a7a62000777565b6040525050565b600060443d101562000a905790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000ac057505050505090565b828501915081518181111562000ad95750505050505090565b843d870101602082850101111562000af45750505050505090565b62000b056020828601018762000a52565b509095945050505050565b6020815260006200090f60208301846200097a565b6122a58062000b356000396000f3fe60806040526004361061019b5760003560e01c80638c89dc0a116100ec578063c107f3631161008a578063e8a3d48511610064578063e8a3d48514610477578063e985e9c51461048c578063f242432a146104d5578063f2fde38b146104f557600080fd5b8063c107f3631461042e578063ccb4807b14610441578063d5abeb011461046157600080fd5b80639b642de1116100c65780639b642de1146103ac578063a22cb465146103cc578063afc98040146103ec578063bd85b0391461040157600080fd5b80638c89dc0a146103595780638da5cb5b1461036f57806395d89b411461039757600080fd5b80633ccfd60b116101595780634f558e79116101335780634f558e79146102e957806368b69ec114610318578063715018a61461032e5780638832bc291461034357600080fd5b80633ccfd60b1461028757806349df728c1461029c5780634e1273f4146102bc57600080fd5b8062fdd58e146101a057806301ffc9a7146101d357806306fdde03146102035780630705dee7146102255780630e89341c146102475780632eb2c2d614610267575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611862565b610515565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee3660046118a2565b6105ae565b60405190151581526020016101ca565b34801561020f57600080fd5b506102186105fe565b6040516101ca919061190c565b34801561023157600080fd5b5061024561024036600461191f565b61068c565b005b34801561025357600080fd5b5061021861026236600461191f565b61084f565b34801561027357600080fd5b50610245610282366004611a8e565b6108e3565b34801561029357600080fd5b5061024561092f565b3480156102a857600080fd5b506102456102b7366004611b38565b6109c2565b3480156102c857600080fd5b506102dc6102d7366004611b53565b610aaf565b6040516101ca9190611c59565b3480156102f557600080fd5b506101f361030436600461191f565b600090815260036020526040902054151590565b34801561032457600080fd5b506101c0600a5481565b34801561033a57600080fd5b50610245610bd9565b34801561034f57600080fd5b506101c060095481565b34801561036557600080fd5b506101c060075481565b34801561037b57600080fd5b506004546040516001600160a01b0390911681526020016101ca565b3480156103a357600080fd5b50610218610bed565b3480156103b857600080fd5b506102456103c7366004611c6c565b610bfa565b3480156103d857600080fd5b506102456103e7366004611ccb565b610c0b565b3480156103f857600080fd5b50610245610c16565b34801561040d57600080fd5b506101c061041c36600461191f565b60009081526003602052604090205490565b61024561043c36600461191f565b610c35565b34801561044d57600080fd5b5061024561045c366004611c6c565b610d1e565b34801561046d57600080fd5b506101c060085481565b34801561048357600080fd5b50610218610d32565b34801561049857600080fd5b506101f36104a7366004611d02565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104e157600080fd5b506102456104f0366004611d35565b610dc4565b34801561050157600080fd5b50610245610510366004611b38565b610e09565b60006001600160a01b0383166105855760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105df57506001600160e01b031982166303a24d0760e21b145b806105a857506301ffc9a760e01b6001600160e01b03198316146105a8565b6005805461060b90611d9a565b80601f016020809104026020016040519081016040528092919081815260200182805461063790611d9a565b80156106845780601f1061065957610100808354040283529160200191610684565b820191906000526020600020905b81548152906001019060200180831161066757829003601f168201915b505050505081565b6001811015801561069f57506007548111155b6106e65760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103a3ab732903a3930b739b6b4b9b9b4b7b760411b604482015260640161057c565b600a54600c546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190611dd4565b10156107995760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0814125391d05314d1606a1b604482015260640161057c565b600854600082815260036020526040902054106107c85760405162461bcd60e51b815260040161057c90611ded565b600c54600a5460405163079cc67960e41b815233600482015260248101919091526001600160a01b03909116906379cc679090604401600060405180830381600087803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b5050505061084c3382600160405180602001604052806000815250610e96565b50565b60606002805461085e90611d9a565b80601f016020809104026020016040519081016040528092919081815260200182805461088a90611d9a565b80156108d75780601f106108ac576101008083540402835291602001916108d7565b820191906000526020600020905b8154815290600101906020018083116108ba57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806108ff57506108ff85336104a7565b61091b5760405162461bcd60e51b815260040161057c90611e35565b6109288585858585610fb9565b5050505050565b61093761119c565b604051600090339047908381818185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061084c5760405162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015260640161057c565b6109ca61119c565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab9190611e84565b5050565b60608151835114610b145760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161057c565b6000835167ffffffffffffffff811115610b3057610b30611938565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b50905060005b8451811015610bd157610ba4858281518110610b7d57610b7d611ea1565b6020026020010151858381518110610b9757610b97611ea1565b6020026020010151610515565b828281518110610bb657610bb6611ea1565b6020908102919091010152610bca81611ecd565b9050610b5f565b509392505050565b610be161119c565b610beb60006111f6565b565b6006805461060b90611d9a565b610c0261119c565b61084c81611248565b610aab338383611254565b610c1e61119c565b60078054906000610c2e83611ecd565b9190505550565b60018110158015610c4857506007548111155b610c8f5760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103a3ab732903a3930b739b6b4b9b9b4b7b760411b604482015260640161057c565b6009543414610cd35760405162461bcd60e51b815260206004820152601060248201526f15dc9bdb99c811551208185b5bdd5b9d60821b604482015260640161057c565b60085460008281526003602052604090205410610d025760405162461bcd60e51b815260040161057c90611ded565b61084c3382600160405180602001604052806000815250610e96565b610d2661119c565b600d610aab8282611f31565b6060600d8054610d4190611d9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90611d9a565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b5050505050905090565b6001600160a01b038516331480610de05750610de085336104a7565b610dfc5760405162461bcd60e51b815260040161057c90611e35565b6109288585858585611334565b610e1161119c565b6001600160a01b038116610e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161057c565b61084c816111f6565b505050505050565b6001600160a01b03163b151590565b6001600160a01b038416610ef65760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161057c565b336000610f028561146c565b90506000610f0f8561146c565b9050610f20836000898585896114b7565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610f50908490611ff1565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610fb083600089898989611630565b50505050505050565b815183511461101b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161057c565b6001600160a01b0384166110415760405162461bcd60e51b815260040161057c90612004565b336110508187878787876114b7565b60005b845181101561113657600085828151811061107057611070611ea1565b60200260200101519050600085838151811061108e5761108e611ea1565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110de5760405162461bcd60e51b815260040161057c90612049565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061111b908490611ff1565b925050819055505050508061112f90611ecd565b9050611053565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611186929190612093565b60405180910390a4610e7f81878787878761178b565b6004546001600160a01b03163314610beb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161057c565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002610aab8282611f31565b816001600160a01b0316836001600160a01b0316036112c75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161057c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661135a5760405162461bcd60e51b815260040161057c90612004565b3360006113668561146c565b905060006113738561146c565b90506113838389898585896114b7565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156113c45760405162461bcd60e51b815260040161057c90612049565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611401908490611ff1565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611461848a8a8a8a8a611630565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106114a6576114a6611ea1565b602090810291909101015292915050565b6001600160a01b03851661153e5760005b835181101561153c578281815181106114e3576114e3611ea1565b60200260200101516003600086848151811061150157611501611ea1565b6020026020010151815260200190815260200160002060008282546115269190611ff1565b90915550611535905081611ecd565b90506114c8565b505b6001600160a01b038416610e7f5760005b8351811015610fb057600084828151811061156c5761156c611ea1565b60200260200101519050600084838151811061158a5761158a611ea1565b602002602001015190506000600360008481526020019081526020016000205490508181101561160d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161057c565b6000928352600360205260409092209103905561162981611ecd565b905061154f565b6001600160a01b0384163b15610e7f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061167490899089908890889088906004016120c1565b6020604051808303816000875af19250505080156116af575060408051601f3d908101601f191682019092526116ac91810190612106565b60015b61175b576116bb612123565b806308c379a0036116f457506116cf61213f565b806116da57506116f6565b8060405162461bcd60e51b815260040161057c919061190c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161057c565b6001600160e01b0319811663f23a6e6160e01b14610fb05760405162461bcd60e51b815260040161057c906121c9565b6001600160a01b0384163b15610e7f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906117cf9089908990889088908890600401612211565b6020604051808303816000875af192505050801561180a575060408051601f3d908101601f1916820190925261180791810190612106565b60015b611816576116bb612123565b6001600160e01b0319811663bc197c8160e01b14610fb05760405162461bcd60e51b815260040161057c906121c9565b80356001600160a01b038116811461185d57600080fd5b919050565b6000806040838503121561187557600080fd5b61187e83611846565b946020939093013593505050565b6001600160e01b03198116811461084c57600080fd5b6000602082840312156118b457600080fd5b81356118bf8161188c565b9392505050565b6000815180845260005b818110156118ec576020818501810151868301820152016118d0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006118bf60208301846118c6565b60006020828403121561193157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561197457611974611938565b6040525050565b600067ffffffffffffffff82111561199557611995611938565b5060051b60200190565b600082601f8301126119b057600080fd5b813560206119bd8261197b565b6040516119ca828261194e565b83815260059390931b85018201928281019150868411156119ea57600080fd5b8286015b84811015611a0557803583529183019183016119ee565b509695505050505050565b600067ffffffffffffffff831115611a2a57611a2a611938565b604051611a41601f8501601f19166020018261194e565b809150838152848484011115611a5657600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611a7f57600080fd5b6118bf83833560208501611a10565b600080600080600060a08688031215611aa657600080fd5b611aaf86611846565b9450611abd60208701611846565b9350604086013567ffffffffffffffff80821115611ada57600080fd5b611ae689838a0161199f565b94506060880135915080821115611afc57600080fd5b611b0889838a0161199f565b93506080880135915080821115611b1e57600080fd5b50611b2b88828901611a6e565b9150509295509295909350565b600060208284031215611b4a57600080fd5b6118bf82611846565b60008060408385031215611b6657600080fd5b823567ffffffffffffffff80821115611b7e57600080fd5b818501915085601f830112611b9257600080fd5b81356020611b9f8261197b565b604051611bac828261194e565b83815260059390931b8501820192828101915089841115611bcc57600080fd5b948201945b83861015611bf157611be286611846565b82529482019490820190611bd1565b96505086013592505080821115611c0757600080fd5b50611c148582860161199f565b9150509250929050565b600081518084526020808501945080840160005b83811015611c4e57815187529582019590820190600101611c32565b509495945050505050565b6020815260006118bf6020830184611c1e565b600060208284031215611c7e57600080fd5b813567ffffffffffffffff811115611c9557600080fd5b8201601f81018413611ca657600080fd5b611cb584823560208401611a10565b949350505050565b801515811461084c57600080fd5b60008060408385031215611cde57600080fd5b611ce783611846565b91506020830135611cf781611cbd565b809150509250929050565b60008060408385031215611d1557600080fd5b611d1e83611846565b9150611d2c60208401611846565b90509250929050565b600080600080600060a08688031215611d4d57600080fd5b611d5686611846565b9450611d6460208701611846565b93506040860135925060608601359150608086013567ffffffffffffffff811115611d8e57600080fd5b611b2b88828901611a6e565b600181811c90821680611dae57607f821691505b602082108103611dce57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611de657600080fd5b5051919050565b60208082526028908201527f42726f616463617374206973206f7665722c2074727920616e6f74686572206660408201526772657175656e637960c01b606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b600060208284031215611e9657600080fd5b81516118bf81611cbd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611edf57611edf611eb7565b5060010190565b601f821115611f2c57600081815260208120601f850160051c81016020861015611f0d5750805b601f850160051c820191505b81811015610e7f57828155600101611f19565b505050565b815167ffffffffffffffff811115611f4b57611f4b611938565b611f5f81611f598454611d9a565b84611ee6565b602080601f831160018114611f945760008415611f7c5750858301515b600019600386901b1c1916600185901b178555610e7f565b600085815260208120601f198616915b82811015611fc357888601518255948401946001909101908401611fa4565b5085821015611fe15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156105a8576105a8611eb7565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006120a66040830185611c1e565b82810360208401526120b88185611c1e565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906120fb908301846118c6565b979650505050505050565b60006020828403121561211857600080fd5b81516118bf8161188c565b600060033d111561213c5760046000803e5060005160e01c5b90565b600060443d101561214d5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561217d57505050505090565b82850191508151818111156121955750505050505090565b843d87010160208285010111156121af5750505050505090565b6121be6020828601018761194e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061223d90830186611c1e565b828103606084015261224f8186611c1e565b9050828103608084015261226381856118c6565b9897505050505050505056fea264697066735822122073ce04d02f2882f35d8c9db873a6d696f9f71e8e4714d1c8a1639ed6a1879bb264736f6c6343000811003368747470733a2f2f70696e67616c6178792e78797a2f6170692f62726f6164636173742f636f6e74726163745f6d657461646174612e6a736f6e68747470733a2f2f70696e67616c6178792e78797a2f6170692f62726f6164636173742f6d657461646174612f7b69647d
Deployed Bytecode
0x60806040526004361061019b5760003560e01c80638c89dc0a116100ec578063c107f3631161008a578063e8a3d48511610064578063e8a3d48514610477578063e985e9c51461048c578063f242432a146104d5578063f2fde38b146104f557600080fd5b8063c107f3631461042e578063ccb4807b14610441578063d5abeb011461046157600080fd5b80639b642de1116100c65780639b642de1146103ac578063a22cb465146103cc578063afc98040146103ec578063bd85b0391461040157600080fd5b80638c89dc0a146103595780638da5cb5b1461036f57806395d89b411461039757600080fd5b80633ccfd60b116101595780634f558e79116101335780634f558e79146102e957806368b69ec114610318578063715018a61461032e5780638832bc291461034357600080fd5b80633ccfd60b1461028757806349df728c1461029c5780634e1273f4146102bc57600080fd5b8062fdd58e146101a057806301ffc9a7146101d357806306fdde03146102035780630705dee7146102255780630e89341c146102475780632eb2c2d614610267575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611862565b610515565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee3660046118a2565b6105ae565b60405190151581526020016101ca565b34801561020f57600080fd5b506102186105fe565b6040516101ca919061190c565b34801561023157600080fd5b5061024561024036600461191f565b61068c565b005b34801561025357600080fd5b5061021861026236600461191f565b61084f565b34801561027357600080fd5b50610245610282366004611a8e565b6108e3565b34801561029357600080fd5b5061024561092f565b3480156102a857600080fd5b506102456102b7366004611b38565b6109c2565b3480156102c857600080fd5b506102dc6102d7366004611b53565b610aaf565b6040516101ca9190611c59565b3480156102f557600080fd5b506101f361030436600461191f565b600090815260036020526040902054151590565b34801561032457600080fd5b506101c0600a5481565b34801561033a57600080fd5b50610245610bd9565b34801561034f57600080fd5b506101c060095481565b34801561036557600080fd5b506101c060075481565b34801561037b57600080fd5b506004546040516001600160a01b0390911681526020016101ca565b3480156103a357600080fd5b50610218610bed565b3480156103b857600080fd5b506102456103c7366004611c6c565b610bfa565b3480156103d857600080fd5b506102456103e7366004611ccb565b610c0b565b3480156103f857600080fd5b50610245610c16565b34801561040d57600080fd5b506101c061041c36600461191f565b60009081526003602052604090205490565b61024561043c36600461191f565b610c35565b34801561044d57600080fd5b5061024561045c366004611c6c565b610d1e565b34801561046d57600080fd5b506101c060085481565b34801561048357600080fd5b50610218610d32565b34801561049857600080fd5b506101f36104a7366004611d02565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104e157600080fd5b506102456104f0366004611d35565b610dc4565b34801561050157600080fd5b50610245610510366004611b38565b610e09565b60006001600160a01b0383166105855760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806105df57506001600160e01b031982166303a24d0760e21b145b806105a857506301ffc9a760e01b6001600160e01b03198316146105a8565b6005805461060b90611d9a565b80601f016020809104026020016040519081016040528092919081815260200182805461063790611d9a565b80156106845780601f1061065957610100808354040283529160200191610684565b820191906000526020600020905b81548152906001019060200180831161066757829003601f168201915b505050505081565b6001811015801561069f57506007548111155b6106e65760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103a3ab732903a3930b739b6b4b9b9b4b7b760411b604482015260640161057c565b600a54600c546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190611dd4565b10156107995760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da0814125391d05314d1606a1b604482015260640161057c565b600854600082815260036020526040902054106107c85760405162461bcd60e51b815260040161057c90611ded565b600c54600a5460405163079cc67960e41b815233600482015260248101919091526001600160a01b03909116906379cc679090604401600060405180830381600087803b15801561081857600080fd5b505af115801561082c573d6000803e3d6000fd5b5050505061084c3382600160405180602001604052806000815250610e96565b50565b60606002805461085e90611d9a565b80601f016020809104026020016040519081016040528092919081815260200182805461088a90611d9a565b80156108d75780601f106108ac576101008083540402835291602001916108d7565b820191906000526020600020905b8154815290600101906020018083116108ba57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806108ff57506108ff85336104a7565b61091b5760405162461bcd60e51b815260040161057c90611e35565b6109288585858585610fb9565b5050505050565b61093761119c565b604051600090339047908381818185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061084c5760405162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015260640161057c565b6109ca61119c565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3c9190611dd4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aab9190611e84565b5050565b60608151835114610b145760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161057c565b6000835167ffffffffffffffff811115610b3057610b30611938565b604051908082528060200260200182016040528015610b59578160200160208202803683370190505b50905060005b8451811015610bd157610ba4858281518110610b7d57610b7d611ea1565b6020026020010151858381518110610b9757610b97611ea1565b6020026020010151610515565b828281518110610bb657610bb6611ea1565b6020908102919091010152610bca81611ecd565b9050610b5f565b509392505050565b610be161119c565b610beb60006111f6565b565b6006805461060b90611d9a565b610c0261119c565b61084c81611248565b610aab338383611254565b610c1e61119c565b60078054906000610c2e83611ecd565b9190505550565b60018110158015610c4857506007548111155b610c8f5760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103a3ab732903a3930b739b6b4b9b9b4b7b760411b604482015260640161057c565b6009543414610cd35760405162461bcd60e51b815260206004820152601060248201526f15dc9bdb99c811551208185b5bdd5b9d60821b604482015260640161057c565b60085460008281526003602052604090205410610d025760405162461bcd60e51b815260040161057c90611ded565b61084c3382600160405180602001604052806000815250610e96565b610d2661119c565b600d610aab8282611f31565b6060600d8054610d4190611d9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6d90611d9a565b8015610dba5780601f10610d8f57610100808354040283529160200191610dba565b820191906000526020600020905b815481529060010190602001808311610d9d57829003601f168201915b5050505050905090565b6001600160a01b038516331480610de05750610de085336104a7565b610dfc5760405162461bcd60e51b815260040161057c90611e35565b6109288585858585611334565b610e1161119c565b6001600160a01b038116610e765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161057c565b61084c816111f6565b505050505050565b6001600160a01b03163b151590565b6001600160a01b038416610ef65760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161057c565b336000610f028561146c565b90506000610f0f8561146c565b9050610f20836000898585896114b7565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610f50908490611ff1565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610fb083600089898989611630565b50505050505050565b815183511461101b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161057c565b6001600160a01b0384166110415760405162461bcd60e51b815260040161057c90612004565b336110508187878787876114b7565b60005b845181101561113657600085828151811061107057611070611ea1565b60200260200101519050600085838151811061108e5761108e611ea1565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110de5760405162461bcd60e51b815260040161057c90612049565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061111b908490611ff1565b925050819055505050508061112f90611ecd565b9050611053565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611186929190612093565b60405180910390a4610e7f81878787878761178b565b6004546001600160a01b03163314610beb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161057c565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002610aab8282611f31565b816001600160a01b0316836001600160a01b0316036112c75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161057c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661135a5760405162461bcd60e51b815260040161057c90612004565b3360006113668561146c565b905060006113738561146c565b90506113838389898585896114b7565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156113c45760405162461bcd60e51b815260040161057c90612049565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611401908490611ff1565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611461848a8a8a8a8a611630565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106114a6576114a6611ea1565b602090810291909101015292915050565b6001600160a01b03851661153e5760005b835181101561153c578281815181106114e3576114e3611ea1565b60200260200101516003600086848151811061150157611501611ea1565b6020026020010151815260200190815260200160002060008282546115269190611ff1565b90915550611535905081611ecd565b90506114c8565b505b6001600160a01b038416610e7f5760005b8351811015610fb057600084828151811061156c5761156c611ea1565b60200260200101519050600084838151811061158a5761158a611ea1565b602002602001015190506000600360008481526020019081526020016000205490508181101561160d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161057c565b6000928352600360205260409092209103905561162981611ecd565b905061154f565b6001600160a01b0384163b15610e7f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061167490899089908890889088906004016120c1565b6020604051808303816000875af19250505080156116af575060408051601f3d908101601f191682019092526116ac91810190612106565b60015b61175b576116bb612123565b806308c379a0036116f457506116cf61213f565b806116da57506116f6565b8060405162461bcd60e51b815260040161057c919061190c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161057c565b6001600160e01b0319811663f23a6e6160e01b14610fb05760405162461bcd60e51b815260040161057c906121c9565b6001600160a01b0384163b15610e7f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906117cf9089908990889088908890600401612211565b6020604051808303816000875af192505050801561180a575060408051601f3d908101601f1916820190925261180791810190612106565b60015b611816576116bb612123565b6001600160e01b0319811663bc197c8160e01b14610fb05760405162461bcd60e51b815260040161057c906121c9565b80356001600160a01b038116811461185d57600080fd5b919050565b6000806040838503121561187557600080fd5b61187e83611846565b946020939093013593505050565b6001600160e01b03198116811461084c57600080fd5b6000602082840312156118b457600080fd5b81356118bf8161188c565b9392505050565b6000815180845260005b818110156118ec576020818501810151868301820152016118d0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006118bf60208301846118c6565b60006020828403121561193157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561197457611974611938565b6040525050565b600067ffffffffffffffff82111561199557611995611938565b5060051b60200190565b600082601f8301126119b057600080fd5b813560206119bd8261197b565b6040516119ca828261194e565b83815260059390931b85018201928281019150868411156119ea57600080fd5b8286015b84811015611a0557803583529183019183016119ee565b509695505050505050565b600067ffffffffffffffff831115611a2a57611a2a611938565b604051611a41601f8501601f19166020018261194e565b809150838152848484011115611a5657600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611a7f57600080fd5b6118bf83833560208501611a10565b600080600080600060a08688031215611aa657600080fd5b611aaf86611846565b9450611abd60208701611846565b9350604086013567ffffffffffffffff80821115611ada57600080fd5b611ae689838a0161199f565b94506060880135915080821115611afc57600080fd5b611b0889838a0161199f565b93506080880135915080821115611b1e57600080fd5b50611b2b88828901611a6e565b9150509295509295909350565b600060208284031215611b4a57600080fd5b6118bf82611846565b60008060408385031215611b6657600080fd5b823567ffffffffffffffff80821115611b7e57600080fd5b818501915085601f830112611b9257600080fd5b81356020611b9f8261197b565b604051611bac828261194e565b83815260059390931b8501820192828101915089841115611bcc57600080fd5b948201945b83861015611bf157611be286611846565b82529482019490820190611bd1565b96505086013592505080821115611c0757600080fd5b50611c148582860161199f565b9150509250929050565b600081518084526020808501945080840160005b83811015611c4e57815187529582019590820190600101611c32565b509495945050505050565b6020815260006118bf6020830184611c1e565b600060208284031215611c7e57600080fd5b813567ffffffffffffffff811115611c9557600080fd5b8201601f81018413611ca657600080fd5b611cb584823560208401611a10565b949350505050565b801515811461084c57600080fd5b60008060408385031215611cde57600080fd5b611ce783611846565b91506020830135611cf781611cbd565b809150509250929050565b60008060408385031215611d1557600080fd5b611d1e83611846565b9150611d2c60208401611846565b90509250929050565b600080600080600060a08688031215611d4d57600080fd5b611d5686611846565b9450611d6460208701611846565b93506040860135925060608601359150608086013567ffffffffffffffff811115611d8e57600080fd5b611b2b88828901611a6e565b600181811c90821680611dae57607f821691505b602082108103611dce57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611de657600080fd5b5051919050565b60208082526028908201527f42726f616463617374206973206f7665722c2074727920616e6f74686572206660408201526772657175656e637960c01b606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b600060208284031215611e9657600080fd5b81516118bf81611cbd565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611edf57611edf611eb7565b5060010190565b601f821115611f2c57600081815260208120601f850160051c81016020861015611f0d5750805b601f850160051c820191505b81811015610e7f57828155600101611f19565b505050565b815167ffffffffffffffff811115611f4b57611f4b611938565b611f5f81611f598454611d9a565b84611ee6565b602080601f831160018114611f945760008415611f7c5750858301515b600019600386901b1c1916600185901b178555610e7f565b600085815260208120601f198616915b82811015611fc357888601518255948401946001909101908401611fa4565b5085821015611fe15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156105a8576105a8611eb7565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006120a66040830185611c1e565b82810360208401526120b88185611c1e565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906120fb908301846118c6565b979650505050505050565b60006020828403121561211857600080fd5b81516118bf8161188c565b600060033d111561213c5760046000803e5060005160e01c5b90565b600060443d101561214d5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561217d57505050505090565b82850191508151818111156121955750505050505090565b843d87010160208285010111156121af5750505050505090565b6121be6020828601018761194e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061223d90830186611c1e565b828103606084015261224f8186611c1e565b9050828103608084015261226381856118c6565b9897505050505050505056fea264697066735822122073ce04d02f2882f35d8c9db873a6d696f9f71e8e4714d1c8a1639ed6a1879bb264736f6c63430008110033
Deployed Bytecode Sourcemap
45205:2816:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:230;;;;;;;;;;-1:-1:-1;23661:230:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;23661:230:0;;;;;;;;22684:310;;;;;;;;;;-1:-1:-1;22684:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;22684:310:0;1019:187:1;45268:18:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46290:614::-;;;;;;;;;;-1:-1:-1;46290:614:0;;;;;:::i;:::-;;:::i;:::-;;23405:105;;;;;;;;;;-1:-1:-1;23405:105:0;;;;;:::i;:::-;;:::i;25605:439::-;;;;;;;;;;-1:-1:-1;25605:439:0;;;;;:::i;:::-;;:::i;47619:182::-;;;;;;;;;;;;;:::i;47809:209::-;;;;;;;;;;-1:-1:-1;47809:209:0;;;;;:::i;:::-;;:::i;24057:524::-;;;;;;;;;;-1:-1:-1;24057:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40139:122::-;;;;;;;;;;-1:-1:-1;40139:122:0;;;;;:::i;:::-;40196:4;40017:16;;;:12;:16;;;;;;-1:-1:-1;;;40139:122:0;45448:46;;;;;;;;;;;;;;;;2813:103;;;;;;;;;;;;;:::i;45402:39::-;;;;;;;;;;;;;;;;45324:34;;;;;;;;;;;;;;;;2165:87;;;;;;;;;;-1:-1:-1;2238:6:0;;2165:87;;-1:-1:-1;;;;;2238:6:0;;;7254:51:1;;7242:2;7227:18;2165:87:0;7108:203:1;45293:20:0;;;;;;;;;;;;;:::i;47331:87::-;;;;;;;;;;-1:-1:-1;47331:87:0;;;;;:::i;:::-;;:::i;24654:155::-;;;;;;;;;;-1:-1:-1;24654:155:0;;;;;:::i;:::-;;:::i;47535:76::-;;;;;;;;;;;;;:::i;39928:113::-;;;;;;;;;;-1:-1:-1;39928:113:0;;;;;:::i;:::-;39990:7;40017:16;;;:12;:16;;;;;;;39928:113;46912:383;;;;;;:::i;:::-;;:::i;47426:101::-;;;;;;;;;;-1:-1:-1;47426:101:0;;;;;:::i;:::-;;:::i;45365:30::-;;;;;;;;;;;;;;;;46162:97;;;;;;;;;;;;;:::i;24881:168::-;;;;;;;;;;-1:-1:-1;24881:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;25004:27:0;;;24980:4;25004:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24881:168;25121:407;;;;;;;;;;-1:-1:-1;25121:407:0;;;;;:::i;:::-;;:::i;3071:201::-;;;;;;;;;;-1:-1:-1;3071:201:0;;;;;:::i;:::-;;:::i;23661:230::-;23747:7;-1:-1:-1;;;;;23775:21:0;;23767:76;;;;-1:-1:-1;;;23767:76:0;;9292:2:1;23767:76:0;;;9274:21:1;9331:2;9311:18;;;9304:30;9370:34;9350:18;;;9343:62;-1:-1:-1;;;9421:18:1;;;9414:40;9471:19;;23767:76:0;;;;;;;;;-1:-1:-1;23861:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23861:22:0;;;;;;;;;;23661:230;;;;;:::o;22684:310::-;22786:4;-1:-1:-1;;;;;;22823:41:0;;-1:-1:-1;;;22823:41:0;;:110;;-1:-1:-1;;;;;;;22881:52:0;;-1:-1:-1;;;22881:52:0;22823:110;:163;;;-1:-1:-1;;;;;;;;;;14074:40:0;;;22950:36;13965:157;45268:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46290:614::-;46376:1;46370:2;:7;;:32;;;;;46387:15;;46381:2;:21;;46370:32;46362:69;;;;-1:-1:-1;;;46362:69:0;;10088:2:1;46362:69:0;;;10070:21:1;10127:2;10107:18;;;10100:30;-1:-1:-1;;;10146:18:1;;;10139:54;10210:18;;46362:69:0;9886:348:1;46362:69:0;46543:14;;46483:16;;46464:58;;-1:-1:-1;;;46464:58:0;;46511:10;46464:58;;;7254:51:1;-1:-1:-1;;;;;46483:16:0;;;;46464:46;;7227:18:1;;46464:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:93;;46442:162;;;;-1:-1:-1;;;46442:162:0;;10630:2:1;46442:162:0;;;10612:21:1;10669:2;10649:18;;;10642:30;-1:-1:-1;;;10688:18:1;;;10681:49;10747:18;;46442:162:0;10428:343:1;46442:162:0;46655:9;;39990:7;40017:16;;;:12;:16;;;;;;46637:27;46615:117;;;;-1:-1:-1;;;46615:117:0;;;;;;;:::i;:::-;46764:16;;46830:14;;46745:110;;-1:-1:-1;;;46745:110:0;;46805:10;46745:110;;;11359:51:1;11426:18;;;11419:34;;;;-1:-1:-1;;;;;46764:16:0;;;;46745:45;;11332:18:1;;46745:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46868:28;46874:10;46886:2;46890:1;46868:28;;;;;;;;;;;;:5;:28::i;:::-;46290:614;:::o;23405:105::-;23465:13;23498:4;23491:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23405:105;;;:::o;25605:439::-;-1:-1:-1;;;;;25838:20:0;;796:10;25838:20;;:60;;-1:-1:-1;25862:36:0;25879:4;796:10;24881:168;:::i;25862:36::-;25816:157;;;;-1:-1:-1;;;25816:157:0;;;;;;;:::i;:::-;25984:52;26007:4;26013:2;26017:3;26022:7;26031:4;25984:22;:52::i;:::-;25605:439;;;;;:::o;47619:182::-;2051:13;:11;:13::i;:::-;47688:58:::1;::::0;47670:12:::1;::::0;47696:10:::1;::::0;47720:21:::1;::::0;47670:12;47688:58;47670:12;47688:58;47720:21;47696:10;47688:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47669:77;;;47765:7;47757:36;;;::::0;-1:-1:-1;;;47757:36:0;;12292:2:1;47757:36:0::1;::::0;::::1;12274:21:1::0;12331:2;12311:18;;;12304:30;-1:-1:-1;;;12350:18:1;;;12343:46;12406:18;;47757:36:0::1;12090:340:1::0;47809:209:0;2051:13;:11;:13::i;:::-;47954:45:::1;::::0;-1:-1:-1;;;47954:45:0;;47993:4:::1;47954:45;::::0;::::1;7254:51:1::0;-1:-1:-1;;;;;47885:29:0;::::1;::::0;::::1;::::0;47929:10:::1;::::0;47885:29;;47954:30:::1;::::0;7227:18:1;;47954:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47885:125;::::0;-1:-1:-1;;;;;;47885:125:0::1;::::0;;;;;;-1:-1:-1;;;;;11377:32:1;;;47885:125:0::1;::::0;::::1;11359:51:1::0;11426:18;;;11419:34;11332:18;;47885:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47809:209:::0;:::o;24057:524::-;24213:16;24274:3;:10;24255:8;:15;:29;24247:83;;;;-1:-1:-1;;;24247:83:0;;12887:2:1;24247:83:0;;;12869:21:1;12926:2;12906:18;;;12899:30;12965:34;12945:18;;;12938:62;-1:-1:-1;;;13016:18:1;;;13009:39;13065:19;;24247:83:0;12685:405:1;24247:83:0;24343:30;24390:8;:15;24376:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24376:30:0;;24343:63;;24424:9;24419:122;24443:8;:15;24439:1;:19;24419:122;;;24499:30;24509:8;24518:1;24509:11;;;;;;;;:::i;:::-;;;;;;;24522:3;24526:1;24522:6;;;;;;;;:::i;:::-;;;;;;;24499:9;:30::i;:::-;24480:13;24494:1;24480:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24460:3;;;:::i;:::-;;;24419:122;;;-1:-1:-1;24560:13:0;24057:524;-1:-1:-1;;;24057:524:0:o;2813:103::-;2051:13;:11;:13::i;:::-;2878:30:::1;2905:1;2878:18;:30::i;:::-;2813:103::o:0;45293:20::-;;;;;;;:::i;47331:87::-;2051:13;:11;:13::i;:::-;47397::::1;47405:4;47397:7;:13::i;24654:155::-:0;24749:52;796:10;24782:8;24792;24749:18;:52::i;47535:76::-;2051:13;:11;:13::i;:::-;47586:15:::1;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;47535:76::o:0;46912:383::-;47001:1;46995:2;:7;;:32;;;;;47012:15;;47006:2;:21;;46995:32;46987:69;;;;-1:-1:-1;;;46987:69:0;;10088:2:1;46987:69:0;;;10070:21:1;10127:2;10107:18;;;10100:30;-1:-1:-1;;;10146:18:1;;;10139:54;10210:18;;46987:69:0;9886:348:1;46987:69:0;47088:9;;47075;:22;47067:51;;;;-1:-1:-1;;;47067:51:0;;13701:2:1;47067:51:0;;;13683:21:1;13740:2;13720:18;;;13713:30;-1:-1:-1;;;13759:18:1;;;13752:46;13815:18;;47067:51:0;13499:340:1;47067:51:0;47169:9;;39990:7;40017:16;;;:12;:16;;;;;;47151:27;47129:117;;;;-1:-1:-1;;;47129:117:0;;;;;;;:::i;:::-;47259:28;47265:10;47277:2;47281:1;47259:28;;;;;;;;;;;;:5;:28::i;47426:101::-;2051:13;:11;:13::i;:::-;47500:12:::1;:19;47515:4:::0;47500:12;:19:::1;:::i;46162:97::-:0;46206:13;46239:12;46232:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46162:97;:::o;25121:407::-;-1:-1:-1;;;;;25329:20:0;;796:10;25329:20;;:60;;-1:-1:-1;25353:36:0;25370:4;796:10;24881:168;:::i;25353:36::-;25307:157;;;;-1:-1:-1;;;25307:157:0;;;;;;;:::i;:::-;25475:45;25493:4;25499:2;25503;25507:6;25515:4;25475:17;:45::i;3071:201::-;2051:13;:11;:13::i;:::-;-1:-1:-1;;;;;3160:22:0;::::1;3152:73;;;::::0;-1:-1:-1;;;3152:73:0;;16250:2:1;3152:73:0::1;::::0;::::1;16232:21:1::0;16289:2;16269:18;;;16262:30;16328:34;16308:18;;;16301:62;-1:-1:-1;;;16379:18:1;;;16372:36;16425:19;;3152:73:0::1;16048:402:1::0;3152:73:0::1;3236:28;3255:8;3236:18;:28::i;36006:221::-:0;;;;;;;:::o;4863:326::-;-1:-1:-1;;;;;5158:19:0;;:23;;;4863:326::o;30304:729::-;-1:-1:-1;;;;;30457:16:0;;30449:62;;;;-1:-1:-1;;;30449:62:0;;16657:2:1;30449:62:0;;;16639:21:1;16696:2;16676:18;;;16669:30;16735:34;16715:18;;;16708:62;-1:-1:-1;;;16786:18:1;;;16779:31;16827:19;;30449:62:0;16455:397:1;30449:62:0;796:10;30524:16;30589:21;30607:2;30589:17;:21::i;:::-;30566:44;;30621:24;30648:25;30666:6;30648:17;:25::i;:::-;30621:52;;30686:66;30707:8;30725:1;30729:2;30733:3;30738:7;30747:4;30686:20;:66::i;:::-;30765:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30765:17:0;;;;;;;;;:27;;30786:6;;30765:9;:27;;30786:6;;30765:27;:::i;:::-;;;;-1:-1:-1;;30808:52:0;;;17161:25:1;;;17217:2;17202:18;;17195:34;;;-1:-1:-1;;;;;30808:52:0;;;;30841:1;;30808:52;;;;;;17134:18:1;30808:52:0;;;;;;;30951:74;30982:8;31000:1;31004:2;31008;31012:6;31020:4;30951:30;:74::i;:::-;30438:595;;;30304:729;;;;:::o;27840:1146::-;28067:7;:14;28053:3;:10;:28;28045:81;;;;-1:-1:-1;;;28045:81:0;;17442:2:1;28045:81:0;;;17424:21:1;17481:2;17461:18;;;17454:30;17520:34;17500:18;;;17493:62;-1:-1:-1;;;17571:18:1;;;17564:38;17619:19;;28045:81:0;17240:404:1;28045:81:0;-1:-1:-1;;;;;28145:16:0;;28137:66;;;;-1:-1:-1;;;28137:66:0;;;;;;;:::i;:::-;796:10;28260:60;796:10;28291:4;28297:2;28301:3;28306:7;28315:4;28260:20;:60::i;:::-;28338:9;28333:421;28357:3;:10;28353:1;:14;28333:421;;;28389:10;28402:3;28406:1;28402:6;;;;;;;;:::i;:::-;;;;;;;28389:19;;28423:14;28440:7;28448:1;28440:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28467:19;28489:13;;;;;;;;;;-1:-1:-1;;;;;28489:19:0;;;;;;;;;;;;28440:10;;-1:-1:-1;28531:21:0;;;;28523:76;;;;-1:-1:-1;;;28523:76:0;;;;;;;:::i;:::-;28643:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28643:19:0;;;;;;;;;;28665:20;;;28643:42;;28715:17;;;;;;;:27;;28665:20;;28643:9;28715:27;;28665:20;;28715:27;:::i;:::-;;;;;;;;28374:380;;;28369:3;;;;:::i;:::-;;;28333:421;;;;28801:2;-1:-1:-1;;;;;28771:47:0;28795:4;-1:-1:-1;;;;;28771:47:0;28785:8;-1:-1:-1;;;;;28771:47:0;;28805:3;28810:7;28771:47;;;;;;;:::i;:::-;;;;;;;;28903:75;28939:8;28949:4;28955:2;28959:3;28964:7;28973:4;28903:35;:75::i;2330:132::-;2238:6;;-1:-1:-1;;;;;2238:6:0;796:10;2394:23;2386:68;;;;-1:-1:-1;;;2386:68:0;;19138:2:1;2386:68:0;;;19120:21:1;;;19157:18;;;19150:30;19216:34;19196:18;;;19189:62;19268:18;;2386:68:0;18936:356:1;3432:191:0;3525:6;;;-1:-1:-1;;;;;3542:17:0;;;-1:-1:-1;;;;;;3542:17:0;;;;;;;3575:40;;3525:6;;;3542:17;3525:6;;3575:40;;3506:16;;3575:40;3495:128;3432:191;:::o;29830:88::-;29897:4;:13;29904:6;29897:4;:13;:::i;34717:331::-;34872:8;-1:-1:-1;;;;;34863:17:0;:5;-1:-1:-1;;;;;34863:17:0;;34855:71;;;;-1:-1:-1;;;34855:71:0;;19499:2:1;34855:71:0;;;19481:21:1;19538:2;19518:18;;;19511:30;19577:34;19557:18;;;19550:62;-1:-1:-1;;;19628:18:1;;;19621:39;19677:19;;34855:71:0;19297:405:1;34855:71:0;-1:-1:-1;;;;;34937:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34937:46:0;;;;;;;;;;34999:41;;1159::1;;;34999::0;;1132:18:1;34999:41:0;;;;;;;34717:331;;;:::o;26508:974::-;-1:-1:-1;;;;;26696:16:0;;26688:66;;;;-1:-1:-1;;;26688:66:0;;;;;;;:::i;:::-;796:10;26767:16;26832:21;26850:2;26832:17;:21::i;:::-;26809:44;;26864:24;26891:25;26909:6;26891:17;:25::i;:::-;26864:52;;26929:60;26950:8;26960:4;26966:2;26970:3;26975:7;26984:4;26929:20;:60::i;:::-;27002:19;27024:13;;;;;;;;;;;-1:-1:-1;;;;;27024:19:0;;;;;;;;;;27062:21;;;;27054:76;;;;-1:-1:-1;;;27054:76:0;;;;;;;:::i;:::-;27166:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27166:19:0;;;;;;;;;;27188:20;;;27166:42;;27230:17;;;;;;;:27;;27188:20;;27166:9;27230:27;;27188:20;;27230:27;:::i;:::-;;;;-1:-1:-1;;27275:46:0;;;17161:25:1;;;17217:2;17202:18;;17195:34;;;-1:-1:-1;;;;;27275:46:0;;;;;;;;;;;;;;17134:18:1;27275:46:0;;;;;;;27406:68;27437:8;27447:4;27453:2;27457;27461:6;27469:4;27406:30;:68::i;:::-;26677:805;;;;26508:974;;;;;:::o;38983:198::-;39103:16;;;39117:1;39103:16;;;;;;;;;39049;;39078:22;;39103:16;;;;;;;;;;;;-1:-1:-1;39103:16:0;39078:41;;39141:7;39130:5;39136:1;39130:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;39168:5;38983:198;-1:-1:-1;;38983:198:0:o;40336:931::-;-1:-1:-1;;;;;40658:18:0;;40654:160;;40698:9;40693:110;40717:3;:10;40713:1;:14;40693:110;;;40777:7;40785:1;40777:10;;;;;;;;:::i;:::-;;;;;;;40753:12;:20;40766:3;40770:1;40766:6;;;;;;;;:::i;:::-;;;;;;;40753:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40729:3:0;;-1:-1:-1;40729:3:0;;:::i;:::-;;;40693:110;;;;40654:160;-1:-1:-1;;;;;40830:16:0;;40826:434;;40868:9;40863:386;40887:3;:10;40883:1;:14;40863:386;;;40923:10;40936:3;40940:1;40936:6;;;;;;;;:::i;:::-;;;;;;;40923:19;;40961:14;40978:7;40986:1;40978:10;;;;;;;;:::i;:::-;;;;;;;40961:27;;41007:14;41024:12;:16;41037:2;41024:16;;;;;;;;;;;;41007:33;;41077:6;41067;:16;;41059:69;;;;-1:-1:-1;;;41059:69:0;;19909:2:1;41059:69:0;;;19891:21:1;19948:2;19928:18;;;19921:30;19987:34;19967:18;;;19960:62;-1:-1:-1;;;20038:18:1;;;20031:38;20086:19;;41059:69:0;19707:404:1;41059:69:0;41180:16;;;;:12;:16;;;;;;41199:15;;41180:34;;40899:3;;;:::i;:::-;;;40863:386;;37410:744;-1:-1:-1;;;;;37625:13:0;;5158:19;:23;37621:526;;37661:72;;-1:-1:-1;;;37661:72:0;;-1:-1:-1;;;;;37661:38:0;;;;;:72;;37700:8;;37710:4;;37716:2;;37720:6;;37728:4;;37661:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37661:72:0;;;;;;;;-1:-1:-1;;37661:72:0;;;;;;;;;;;;:::i;:::-;;;37657:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38009:6;38002:14;;-1:-1:-1;;;38002:14:0;;;;;;;;:::i;37657:479::-;;;38058:62;;-1:-1:-1;;;38058:62:0;;21998:2:1;38058:62:0;;;21980:21:1;22037:2;22017:18;;;22010:30;22076:34;22056:18;;;22049:62;-1:-1:-1;;;22127:18:1;;;22120:50;22187:19;;38058:62:0;21796:416:1;37657:479:0;-1:-1:-1;;;;;;37783:55:0;;-1:-1:-1;;;37783:55:0;37779:154;;37863:50;;-1:-1:-1;;;37863:50:0;;;;;;;:::i;38162:813::-;-1:-1:-1;;;;;38402:13:0;;5158:19;:23;38398:570;;38438:79;;-1:-1:-1;;;38438:79:0;;-1:-1:-1;;;;;38438:43:0;;;;;:79;;38482:8;;38492:4;;38498:3;;38503:7;;38512:4;;38438:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38438:79:0;;;;;;;;-1:-1:-1;;38438:79:0;;;;;;;;;;;;:::i;:::-;;;38434:523;;;;:::i;:::-;-1:-1:-1;;;;;;38599:60:0;;-1:-1:-1;;;38599:60:0;38595:159;;38684:50;;-1:-1:-1;;;38684:50:0;;;;;;;:::i;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:423::-;1253:3;1291:5;1285:12;1318:6;1313:3;1306:19;1343:1;1353:162;1367:6;1364:1;1361:13;1353:162;;;1429:4;1485:13;;;1481:22;;1475:29;1457:11;;;1453:20;;1446:59;1382:12;1353:162;;;1357:3;1560:1;1553:4;1544:6;1539:3;1535:16;1531:27;1524:38;1623:4;1616:2;1612:7;1607:2;1599:6;1595:15;1591:29;1586:3;1582:39;1578:50;1571:57;;;1211:423;;;;:::o;1639:220::-;1788:2;1777:9;1770:21;1751:4;1808:45;1849:2;1838:9;1834:18;1826:6;1808:45;:::i;1864:180::-;1923:6;1976:2;1964:9;1955:7;1951:23;1947:32;1944:52;;;1992:1;1989;1982:12;1944:52;-1:-1:-1;2015:23:1;;1864:180;-1:-1:-1;1864:180:1:o;2049:127::-;2110:10;2105:3;2101:20;2098:1;2091:31;2141:4;2138:1;2131:15;2165:4;2162:1;2155:15;2181:249;2291:2;2272:13;;-1:-1:-1;;2268:27:1;2256:40;;2326:18;2311:34;;2347:22;;;2308:62;2305:88;;;2373:18;;:::i;:::-;2409:2;2402:22;-1:-1:-1;;2181:249:1:o;2435:183::-;2495:4;2528:18;2520:6;2517:30;2514:56;;;2550:18;;:::i;:::-;-1:-1:-1;2595:1:1;2591:14;2607:4;2587:25;;2435:183::o;2623:724::-;2677:5;2730:3;2723:4;2715:6;2711:17;2707:27;2697:55;;2748:1;2745;2738:12;2697:55;2784:6;2771:20;2810:4;2833:43;2873:2;2833:43;:::i;:::-;2905:2;2899:9;2917:31;2945:2;2937:6;2917:31;:::i;:::-;2983:18;;;3075:1;3071:10;;;;3059:23;;3055:32;;;3017:15;;;;-1:-1:-1;3099:15:1;;;3096:35;;;3127:1;3124;3117:12;3096:35;3163:2;3155:6;3151:15;3175:142;3191:6;3186:3;3183:15;3175:142;;;3257:17;;3245:30;;3295:12;;;;3208;;3175:142;;;-1:-1:-1;3335:6:1;2623:724;-1:-1:-1;;;;;;2623:724:1:o;3352:468::-;3416:5;3450:18;3442:6;3439:30;3436:56;;;3472:18;;:::i;:::-;3521:2;3515:9;3533:69;3590:2;3569:15;;-1:-1:-1;;3565:29:1;3596:4;3561:40;3515:9;3533:69;:::i;:::-;3620:6;3611:15;;3650:6;3642;3635:22;3690:3;3681:6;3676:3;3672:16;3669:25;3666:45;;;3707:1;3704;3697:12;3666:45;3757:6;3752:3;3745:4;3737:6;3733:17;3720:44;3812:1;3805:4;3796:6;3788;3784:19;3780:30;3773:41;;3352:468;;;;;:::o;3825:220::-;3867:5;3920:3;3913:4;3905:6;3901:17;3897:27;3887:55;;3938:1;3935;3928:12;3887:55;3960:79;4035:3;4026:6;4013:20;4006:4;3998:6;3994:17;3960:79;:::i;4050:943::-;4204:6;4212;4220;4228;4236;4289:3;4277:9;4268:7;4264:23;4260:33;4257:53;;;4306:1;4303;4296:12;4257:53;4329:29;4348:9;4329:29;:::i;:::-;4319:39;;4377:38;4411:2;4400:9;4396:18;4377:38;:::i;:::-;4367:48;;4466:2;4455:9;4451:18;4438:32;4489:18;4530:2;4522:6;4519:14;4516:34;;;4546:1;4543;4536:12;4516:34;4569:61;4622:7;4613:6;4602:9;4598:22;4569:61;:::i;:::-;4559:71;;4683:2;4672:9;4668:18;4655:32;4639:48;;4712:2;4702:8;4699:16;4696:36;;;4728:1;4725;4718:12;4696:36;4751:63;4806:7;4795:8;4784:9;4780:24;4751:63;:::i;:::-;4741:73;;4867:3;4856:9;4852:19;4839:33;4823:49;;4897:2;4887:8;4884:16;4881:36;;;4913:1;4910;4903:12;4881:36;;4936:51;4979:7;4968:8;4957:9;4953:24;4936:51;:::i;:::-;4926:61;;;4050:943;;;;;;;;:::o;4998:186::-;5057:6;5110:2;5098:9;5089:7;5085:23;5081:32;5078:52;;;5126:1;5123;5116:12;5078:52;5149:29;5168:9;5149:29;:::i;5189:1208::-;5307:6;5315;5368:2;5356:9;5347:7;5343:23;5339:32;5336:52;;;5384:1;5381;5374:12;5336:52;5424:9;5411:23;5453:18;5494:2;5486:6;5483:14;5480:34;;;5510:1;5507;5500:12;5480:34;5548:6;5537:9;5533:22;5523:32;;5593:7;5586:4;5582:2;5578:13;5574:27;5564:55;;5615:1;5612;5605:12;5564:55;5651:2;5638:16;5673:4;5696:43;5736:2;5696:43;:::i;:::-;5768:2;5762:9;5780:31;5808:2;5800:6;5780:31;:::i;:::-;5846:18;;;5934:1;5930:10;;;;5922:19;;5918:28;;;5880:15;;;;-1:-1:-1;5958:19:1;;;5955:39;;;5990:1;5987;5980:12;5955:39;6014:11;;;;6034:148;6050:6;6045:3;6042:15;6034:148;;;6116:23;6135:3;6116:23;:::i;:::-;6104:36;;6067:12;;;;6160;;;;6034:148;;;6201:6;-1:-1:-1;;6245:18:1;;6232:32;;-1:-1:-1;;6276:16:1;;;6273:36;;;6305:1;6302;6295:12;6273:36;;6328:63;6383:7;6372:8;6361:9;6357:24;6328:63;:::i;:::-;6318:73;;;5189:1208;;;;;:::o;6402:435::-;6455:3;6493:5;6487:12;6520:6;6515:3;6508:19;6546:4;6575:2;6570:3;6566:12;6559:19;;6612:2;6605:5;6601:14;6633:1;6643:169;6657:6;6654:1;6651:13;6643:169;;;6718:13;;6706:26;;6752:12;;;;6787:15;;;;6679:1;6672:9;6643:169;;;-1:-1:-1;6828:3:1;;6402:435;-1:-1:-1;;;;;6402:435:1:o;6842:261::-;7021:2;7010:9;7003:21;6984:4;7041:56;7093:2;7082:9;7078:18;7070:6;7041:56;:::i;7316:450::-;7385:6;7438:2;7426:9;7417:7;7413:23;7409:32;7406:52;;;7454:1;7451;7444:12;7406:52;7494:9;7481:23;7527:18;7519:6;7516:30;7513:50;;;7559:1;7556;7549:12;7513:50;7582:22;;7635:4;7627:13;;7623:27;-1:-1:-1;7613:55:1;;7664:1;7661;7654:12;7613:55;7687:73;7752:7;7747:2;7734:16;7729:2;7725;7721:11;7687:73;:::i;:::-;7677:83;7316:450;-1:-1:-1;;;;7316:450:1:o;7771:118::-;7857:5;7850:13;7843:21;7836:5;7833:32;7823:60;;7879:1;7876;7869:12;7894:315;7959:6;7967;8020:2;8008:9;7999:7;7995:23;7991:32;7988:52;;;8036:1;8033;8026:12;7988:52;8059:29;8078:9;8059:29;:::i;:::-;8049:39;;8138:2;8127:9;8123:18;8110:32;8151:28;8173:5;8151:28;:::i;:::-;8198:5;8188:15;;;7894:315;;;;;:::o;8214:260::-;8282:6;8290;8343:2;8331:9;8322:7;8318:23;8314:32;8311:52;;;8359:1;8356;8349:12;8311:52;8382:29;8401:9;8382:29;:::i;:::-;8372:39;;8430:38;8464:2;8453:9;8449:18;8430:38;:::i;:::-;8420:48;;8214:260;;;;;:::o;8479:606::-;8583:6;8591;8599;8607;8615;8668:3;8656:9;8647:7;8643:23;8639:33;8636:53;;;8685:1;8682;8675:12;8636:53;8708:29;8727:9;8708:29;:::i;:::-;8698:39;;8756:38;8790:2;8779:9;8775:18;8756:38;:::i;:::-;8746:48;;8841:2;8830:9;8826:18;8813:32;8803:42;;8892:2;8881:9;8877:18;8864:32;8854:42;;8947:3;8936:9;8932:19;8919:33;8975:18;8967:6;8964:30;8961:50;;;9007:1;9004;8997:12;8961:50;9030:49;9071:7;9062:6;9051:9;9047:22;9030:49;:::i;9501:380::-;9580:1;9576:12;;;;9623;;;9644:61;;9698:4;9690:6;9686:17;9676:27;;9644:61;9751:2;9743:6;9740:14;9720:18;9717:38;9714:161;;9797:10;9792:3;9788:20;9785:1;9778:31;9832:4;9829:1;9822:15;9860:4;9857:1;9850:15;9714:161;;9501:380;;;:::o;10239:184::-;10309:6;10362:2;10350:9;10341:7;10337:23;10333:32;10330:52;;;10378:1;10375;10368:12;10330:52;-1:-1:-1;10401:16:1;;10239:184;-1:-1:-1;10239:184:1:o;10776:404::-;10978:2;10960:21;;;11017:2;10997:18;;;10990:30;11056:34;11051:2;11036:18;;11029:62;-1:-1:-1;;;11122:2:1;11107:18;;11100:38;11170:3;11155:19;;10776:404::o;11464:411::-;11666:2;11648:21;;;11705:2;11685:18;;;11678:30;11744:34;11739:2;11724:18;;11717:62;-1:-1:-1;;;11810:2:1;11795:18;;11788:45;11865:3;11850:19;;11464:411::o;12435:245::-;12502:6;12555:2;12543:9;12534:7;12530:23;12526:32;12523:52;;;12571:1;12568;12561:12;12523:52;12603:9;12597:16;12622:28;12644:5;12622:28;:::i;13095:127::-;13156:10;13151:3;13147:20;13144:1;13137:31;13187:4;13184:1;13177:15;13211:4;13208:1;13201:15;13227:127;13288:10;13283:3;13279:20;13276:1;13269:31;13319:4;13316:1;13309:15;13343:4;13340:1;13333:15;13359:135;13398:3;13419:17;;;13416:43;;13439:18;;:::i;:::-;-1:-1:-1;13486:1:1;13475:13;;13359:135::o;13970:545::-;14072:2;14067:3;14064:11;14061:448;;;14108:1;14133:5;14129:2;14122:17;14178:4;14174:2;14164:19;14248:2;14236:10;14232:19;14229:1;14225:27;14219:4;14215:38;14284:4;14272:10;14269:20;14266:47;;;-1:-1:-1;14307:4:1;14266:47;14362:2;14357:3;14353:12;14350:1;14346:20;14340:4;14336:31;14326:41;;14417:82;14435:2;14428:5;14425:13;14417:82;;;14480:17;;;14461:1;14450:13;14417:82;;14061:448;13970:545;;;:::o;14691:1352::-;14817:3;14811:10;14844:18;14836:6;14833:30;14830:56;;;14866:18;;:::i;:::-;14895:97;14985:6;14945:38;14977:4;14971:11;14945:38;:::i;:::-;14939:4;14895:97;:::i;:::-;15047:4;;15111:2;15100:14;;15128:1;15123:663;;;;15830:1;15847:6;15844:89;;;-1:-1:-1;15899:19:1;;;15893:26;15844:89;-1:-1:-1;;14648:1:1;14644:11;;;14640:24;14636:29;14626:40;14672:1;14668:11;;;14623:57;15946:81;;15093:944;;15123:663;13917:1;13910:14;;;13954:4;13941:18;;-1:-1:-1;;15159:20:1;;;15277:236;15291:7;15288:1;15285:14;15277:236;;;15380:19;;;15374:26;15359:42;;15472:27;;;;15440:1;15428:14;;;;15307:19;;15277:236;;;15281:3;15541:6;15532:7;15529:19;15526:201;;;15602:19;;;15596:26;-1:-1:-1;;15685:1:1;15681:14;;;15697:3;15677:24;15673:37;15669:42;15654:58;15639:74;;15526:201;-1:-1:-1;;;;;15773:1:1;15757:14;;;15753:22;15740:36;;-1:-1:-1;14691:1352:1:o;16857:125::-;16922:9;;;16943:10;;;16940:36;;;16956:18;;:::i;17649:401::-;17851:2;17833:21;;;17890:2;17870:18;;;17863:30;17929:34;17924:2;17909:18;;17902:62;-1:-1:-1;;;17995:2:1;17980:18;;17973:35;18040:3;18025:19;;17649:401::o;18055:406::-;18257:2;18239:21;;;18296:2;18276:18;;;18269:30;18335:34;18330:2;18315:18;;18308:62;-1:-1:-1;;;18401:2:1;18386:18;;18379:40;18451:3;18436:19;;18055:406::o;18466:465::-;18723:2;18712:9;18705:21;18686:4;18749:56;18801:2;18790:9;18786:18;18778:6;18749:56;:::i;:::-;18853:9;18845:6;18841:22;18836:2;18825:9;18821:18;18814:50;18881:44;18918:6;18910;18881:44;:::i;:::-;18873:52;18466:465;-1:-1:-1;;;;;18466:465:1:o;20116:561::-;-1:-1:-1;;;;;20413:15:1;;;20395:34;;20465:15;;20460:2;20445:18;;20438:43;20512:2;20497:18;;20490:34;;;20555:2;20540:18;;20533:34;;;20375:3;20598;20583:19;;20576:32;;;20338:4;;20625:46;;20651:19;;20643:6;20625:46;:::i;:::-;20617:54;20116:561;-1:-1:-1;;;;;;;20116:561:1:o;20682:249::-;20751:6;20804:2;20792:9;20783:7;20779:23;20775:32;20772:52;;;20820:1;20817;20810:12;20772:52;20852:9;20846:16;20871:30;20895:5;20871:30;:::i;20936:179::-;20971:3;21013:1;20995:16;20992:23;20989:120;;;21059:1;21056;21053;21038:23;-1:-1:-1;21096:1:1;21090:8;21085:3;21081:18;20989:120;20936:179;:::o;21120:671::-;21159:3;21201:4;21183:16;21180:26;21177:39;;;21120:671;:::o;21177:39::-;21243:2;21237:9;-1:-1:-1;;21308:16:1;21304:25;;21301:1;21237:9;21280:50;21359:4;21353:11;21383:16;21418:18;21489:2;21482:4;21474:6;21470:17;21467:25;21462:2;21454:6;21451:14;21448:45;21445:58;;;21496:5;;;;;21120:671;:::o;21445:58::-;21533:6;21527:4;21523:17;21512:28;;21569:3;21563:10;21596:2;21588:6;21585:14;21582:27;;;21602:5;;;;;;21120:671;:::o;21582:27::-;21686:2;21667:16;21661:4;21657:27;21653:36;21646:4;21637:6;21632:3;21628:16;21624:27;21621:69;21618:82;;;21693:5;;;;;;21120:671;:::o;21618:82::-;21709:57;21760:4;21751:6;21743;21739:19;21735:30;21729:4;21709:57;:::i;:::-;-1:-1:-1;21782:3:1;;21120:671;-1:-1:-1;;;;;21120:671:1:o;22217:404::-;22419:2;22401:21;;;22458:2;22438:18;;;22431:30;22497:34;22492:2;22477:18;;22470:62;-1:-1:-1;;;22563:2:1;22548:18;;22541:38;22611:3;22596:19;;22217:404::o;22626:827::-;-1:-1:-1;;;;;23023:15:1;;;23005:34;;23075:15;;23070:2;23055:18;;23048:43;22985:3;23122:2;23107:18;;23100:31;;;22948:4;;23154:57;;23191:19;;23183:6;23154:57;:::i;:::-;23259:9;23251:6;23247:22;23242:2;23231:9;23227:18;23220:50;23293:44;23330:6;23322;23293:44;:::i;:::-;23279:58;;23386:9;23378:6;23374:22;23368:3;23357:9;23353:19;23346:51;23414:33;23440:6;23432;23414:33;:::i;:::-;23406:41;22626:827;-1:-1:-1;;;;;;;;22626:827:1:o
Swarm Source
ipfs://73ce04d02f2882f35d8c9db873a6d696f9f71e8e4714d1c8a1639ed6a1879bb2
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.