Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 38 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint PIPZ | 14878283 | 1377 days ago | IN | 0 ETH | 0.00432137 | ||||
| Mint PIPZ | 14878187 | 1377 days ago | IN | 0 ETH | 0.00471775 | ||||
| Transfer From | 14878151 | 1377 days ago | IN | 0 ETH | 0.00192404 | ||||
| Mint PIPZ | 14878129 | 1377 days ago | IN | 0 ETH | 0.00415962 | ||||
| Mint PIPZ | 14874578 | 1378 days ago | IN | 0 ETH | 0.00670594 | ||||
| Mint PIPZ | 14872553 | 1378 days ago | IN | 0 ETH | 0.00411534 | ||||
| Mint PIPZ | 14872547 | 1378 days ago | IN | 0 ETH | 0.00435428 | ||||
| Mint PIPZ | 14872542 | 1378 days ago | IN | 0 ETH | 0.00440921 | ||||
| Mint PIPZ | 14872243 | 1378 days ago | IN | 0 ETH | 0.00302223 | ||||
| Mint PIPZ | 14872218 | 1378 days ago | IN | 0 ETH | 0.00331492 | ||||
| Mint PIPZ | 14872207 | 1378 days ago | IN | 0 ETH | 0.00408336 | ||||
| Mint PIPZ | 14872155 | 1378 days ago | IN | 0 ETH | 0.00521779 | ||||
| Mint PIPZ | 14872152 | 1378 days ago | IN | 0 ETH | 0.00390512 | ||||
| Mint PIPZ | 14872078 | 1378 days ago | IN | 0 ETH | 0.00434961 | ||||
| Mint PIPZ | 14872067 | 1378 days ago | IN | 0 ETH | 0.0033543 | ||||
| Mint PIPZ | 14871994 | 1378 days ago | IN | 0 ETH | 0.00527757 | ||||
| Set Approval For... | 14871987 | 1378 days ago | IN | 0 ETH | 0.0008768 | ||||
| Mint PIPZ | 14871979 | 1378 days ago | IN | 0 ETH | 0.00449115 | ||||
| Mint PIPZ | 14871902 | 1379 days ago | IN | 0 ETH | 0.00431081 | ||||
| Mint PIPZ | 14871890 | 1379 days ago | IN | 0 ETH | 0.0048988 | ||||
| Mint PIPZ | 14871849 | 1379 days ago | IN | 0 ETH | 0.0040285 | ||||
| Mint PIPZ | 14841321 | 1383 days ago | IN | 0 ETH | 0.00286953 | ||||
| Mint PIPZ | 14841311 | 1383 days ago | IN | 0 ETH | 0.00271941 | ||||
| Mint PIPZ | 14841255 | 1384 days ago | IN | 0 ETH | 0.00257598 | ||||
| Mint PIPZ | 14841187 | 1384 days ago | IN | 0 ETH | 0.00328128 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AuraPipz
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-05-24
*/
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol)
pragma solidity ^0.8.0;
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseURI();
// If there is no base URI, return the token URI.
if (bytes(base).length == 0) {
return _tokenURI;
}
// If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.tokenURI(tokenId);
}
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual override {
super._burn(tokenId);
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// File: contracts/aura.sol
pragma solidity ^0.8.0;
contract AuraPipz is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable{
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
uint256 public constant max_Pipz = 10000;
string public PROVENANCE;
constructor() ERC721("AuraPipz", "AURAPIPZ") {}
function mintPIPZ(address recipient, string memory tokenURI)
external payable
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable)
{
super._beforeTokenTransfer(from, to, tokenId);
}
function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool)
{
return super.supportsInterface(interfaceId);
}
function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory)
{
return super.tokenURI(tokenId);
}
function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
super._burn(tokenId);
}
function safeMint(address to, uint256 tokenId) public onlyOwner {
_safeMint(to, tokenId);
}
function setProvenance(string memory provenanceHash) public onlyOwner {
PROVENANCE = provenanceHash;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_Pipz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mintPIPZ","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenance","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020017f417572615069707a0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f415552415049505a000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000285565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029e57607f821691505b60208210811415620002b557620002b462000256565b5b50919050565b613bb580620002cb6000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063ad7f6cf71161006f578063ad7f6cf7146104a9578063b88d4fde146104d4578063c87b56dd146104fd578063e985e9c51461053a578063f2fde38b14610577578063ffe630b5146105a05761014b565b806370a08231146103ad578063715018a6146103ea5780638da5cb5b1461040157806395d89b411461042c578063a144819414610457578063a22cb465146104805761014b565b806323b872dd1161010857806323b872dd146102795780632f745c59146102a257806342842e0e146102df5780634f6ccce7146103085780636352211e146103455780636373a6b1146103825761014b565b806301ffc9a7146101505780630538428a1461018d57806306fdde03146101bd578063081812fc146101e8578063095ea7b31461022557806318160ddd1461024e575b600080fd5b34801561015c57600080fd5b506101776004803603810190610172919061267d565b6105c9565b60405161018491906126c5565b60405180910390f35b6101a760048036038101906101a29190612884565b6105db565b6040516101b491906128f9565b60405180910390f35b3480156101c957600080fd5b506101d2610613565b6040516101df919061299c565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a91906129ea565b6106a5565b60405161021c9190612a26565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612a41565b61072a565b005b34801561025a57600080fd5b50610263610842565b60405161027091906128f9565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612a81565b61084f565b005b3480156102ae57600080fd5b506102c960048036038101906102c49190612a41565b6108af565b6040516102d691906128f9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190612a81565b610954565b005b34801561031457600080fd5b5061032f600480360381019061032a91906129ea565b610974565b60405161033c91906128f9565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906129ea565b6109e5565b6040516103799190612a26565b60405180910390f35b34801561038e57600080fd5b50610397610a97565b6040516103a4919061299c565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612ad4565b610b25565b6040516103e191906128f9565b60405180910390f35b3480156103f657600080fd5b506103ff610bdd565b005b34801561040d57600080fd5b50610416610c65565b6040516104239190612a26565b60405180910390f35b34801561043857600080fd5b50610441610c8f565b60405161044e919061299c565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612a41565b610d21565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612b2d565b610dab565b005b3480156104b557600080fd5b506104be610dc1565b6040516104cb91906128f9565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612c0e565b610dc7565b005b34801561050957600080fd5b50610524600480360381019061051f91906129ea565b610e29565b604051610531919061299c565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190612c91565b610e3b565b60405161056e91906126c5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612ad4565b610ecf565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612cd1565b610fc7565b005b60006105d48261105d565b9050919050565b60006105e7600c6110d7565b60006105f3600c6110ed565b90506105ff84826110fb565b61060981846112d5565b8091505092915050565b60606000805461062290612d49565b80601f016020809104026020016040519081016040528092919081815260200182805461064e90612d49565b801561069b5780601f106106705761010080835404028352916020019161069b565b820191906000526020600020905b81548152906001019060200180831161067e57829003601f168201915b5050505050905090565b60006106b082611349565b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612ded565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610735826109e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d90612e7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c56113b5565b73ffffffffffffffffffffffffffffffffffffffff1614806107f457506107f3816107ee6113b5565b610e3b565b5b610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90612f11565b60405180910390fd5b61083d83836113bd565b505050565b6000600880549050905090565b61086061085a6113b5565b82611476565b61089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690612fa3565b60405180910390fd5b6108aa838383611554565b505050565b60006108ba83610b25565b82106108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290613035565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61096f83838360405180602001604052806000815250610dc7565b505050565b600061097e610842565b82106109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906130c7565b60405180910390fd5b600882815481106109d3576109d26130e7565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590613188565b60405180910390fd5b80915050919050565b600d8054610aa490612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad090612d49565b8015610b1d5780601f10610af257610100808354040283529160200191610b1d565b820191906000526020600020905b815481529060010190602001808311610b0057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d9061321a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be56113b5565b73ffffffffffffffffffffffffffffffffffffffff16610c03610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090613286565b60405180910390fd5b610c6360006117bb565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c9e90612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054610cca90612d49565b8015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b5050505050905090565b610d296113b5565b73ffffffffffffffffffffffffffffffffffffffff16610d47610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490613286565b60405180910390fd5b610da78282611881565b5050565b610dbd610db66113b5565b838361189f565b5050565b61271081565b610dd8610dd26113b5565b83611476565b610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90612fa3565b60405180910390fd5b610e2384848484611a0c565b50505050565b6060610e3482611a68565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ed76113b5565b73ffffffffffffffffffffffffffffffffffffffff16610ef5610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613286565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613318565b60405180910390fd5b610fc4816117bb565b50565b610fcf6113b5565b73ffffffffffffffffffffffffffffffffffffffff16610fed610c65565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613286565b60405180910390fd5b80600d908051906020019061105992919061256e565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110d057506110cf82611bba565b5b9050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613384565b60405180910390fd5b61117481611349565b156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906133f0565b60405180910390fd5b6111c060008383611c9c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611210919061343f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112d160008383611cac565b5050565b6112de82611349565b61131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613507565b60405180910390fd5b80600a6000848152602001908152602001600020908051906020019061134492919061256e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611430836109e5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061148182611349565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613599565b60405180910390fd5b60006114cb836109e5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061150d575061150c8185610e3b565b5b8061154b57508373ffffffffffffffffffffffffffffffffffffffff16611533846106a5565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611574826109e5565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061362b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611631906136bd565b60405180910390fd5b611645838383611c9c565b6116506000826113bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a091906136dd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f7919061343f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117b6838383611cac565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61189b828260405180602001604052806000815250611cb1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561190e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119059061375d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ff91906126c5565b60405180910390a3505050565b611a17848484611554565b611a2384848484611d0c565b611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906137ef565b60405180910390fd5b50505050565b6060611a7382611349565b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613881565b60405180910390fd5b6000600a60008481526020019081526020016000208054611ad290612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054611afe90612d49565b8015611b4b5780601f10611b2057610100808354040283529160200191611b4b565b820191906000526020600020905b815481529060010190602001808311611b2e57829003601f168201915b505050505090506000611b5c611ea3565b9050600081511415611b72578192505050611bb5565b600082511115611ba7578082604051602001611b8f9291906138dd565b60405160208183030381529060405292505050611bb5565b611bb084611eba565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c955750611c9482611f61565b5b9050919050565b611ca7838383611fcb565b505050565b505050565b611cbb83836110fb565b611cc86000848484611d0c565b611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe906137ef565b60405180910390fd5b505050565b6000611d2d8473ffffffffffffffffffffffffffffffffffffffff166120df565b15611e96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d566113b5565b8786866040518563ffffffff1660e01b8152600401611d789493929190613956565b602060405180830381600087803b158015611d9257600080fd5b505af1925050508015611dc357506040513d601f19601f82011682018060405250810190611dc091906139b7565b60015b611e46573d8060008114611df3576040519150601f19603f3d011682016040523d82523d6000602084013e611df8565b606091505b50600081511415611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906137ef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e9b565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060611ec582611349565b611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613a56565b60405180910390fd5b6000611f0e611ea3565b90506000815111611f2e5760405180602001604052806000815250611f59565b80611f3884612102565b604051602001611f499291906138dd565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fd6838383612263565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120195761201481612268565b612058565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120575761205683826122b1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561209b576120968161241e565b6120da565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120d9576120d882826124ef565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600082141561214a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061225e565b600082905060005b6000821461217c57808061216590613a76565b915050600a826121759190613aee565b9150612152565b60008167ffffffffffffffff81111561219857612197612759565b5b6040519080825280601f01601f1916602001820160405280156121ca5781602001600182028036833780820191505090505b5090505b60008514612257576001826121e391906136dd565b9150600a856121f29190613b1f565b60306121fe919061343f565b60f81b818381518110612214576122136130e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122509190613aee565b94506121ce565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016122be84610b25565b6122c891906136dd565b90506000600760008481526020019081526020016000205490508181146123ad576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061243291906136dd565b9050600060096000848152602001908152602001600020549050600060088381548110612462576124616130e7565b5b906000526020600020015490508060088381548110612484576124836130e7565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806124d3576124d2613b50565b5b6001900381819060005260206000200160009055905550505050565b60006124fa83610b25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461257a90612d49565b90600052602060002090601f01602090048101928261259c57600085556125e3565b82601f106125b557805160ff19168380011785556125e3565b828001600101855582156125e3579182015b828111156125e25782518255916020019190600101906125c7565b5b5090506125f091906125f4565b5090565b5b8082111561260d5760008160009055506001016125f5565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61265a81612625565b811461266557600080fd5b50565b60008135905061267781612651565b92915050565b6000602082840312156126935761269261261b565b5b60006126a184828501612668565b91505092915050565b60008115159050919050565b6126bf816126aa565b82525050565b60006020820190506126da60008301846126b6565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061270b826126e0565b9050919050565b61271b81612700565b811461272657600080fd5b50565b60008135905061273881612712565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61279182612748565b810181811067ffffffffffffffff821117156127b0576127af612759565b5b80604052505050565b60006127c3612611565b90506127cf8282612788565b919050565b600067ffffffffffffffff8211156127ef576127ee612759565b5b6127f882612748565b9050602081019050919050565b82818337600083830152505050565b6000612827612822846127d4565b6127b9565b90508281526020810184848401111561284357612842612743565b5b61284e848285612805565b509392505050565b600082601f83011261286b5761286a61273e565b5b813561287b848260208601612814565b91505092915050565b6000806040838503121561289b5761289a61261b565b5b60006128a985828601612729565b925050602083013567ffffffffffffffff8111156128ca576128c9612620565b5b6128d685828601612856565b9150509250929050565b6000819050919050565b6128f3816128e0565b82525050565b600060208201905061290e60008301846128ea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561294e578082015181840152602081019050612933565b8381111561295d576000848401525b50505050565b600061296e82612914565b612978818561291f565b9350612988818560208601612930565b61299181612748565b840191505092915050565b600060208201905081810360008301526129b68184612963565b905092915050565b6129c7816128e0565b81146129d257600080fd5b50565b6000813590506129e4816129be565b92915050565b600060208284031215612a00576129ff61261b565b5b6000612a0e848285016129d5565b91505092915050565b612a2081612700565b82525050565b6000602082019050612a3b6000830184612a17565b92915050565b60008060408385031215612a5857612a5761261b565b5b6000612a6685828601612729565b9250506020612a77858286016129d5565b9150509250929050565b600080600060608486031215612a9a57612a9961261b565b5b6000612aa886828701612729565b9350506020612ab986828701612729565b9250506040612aca868287016129d5565b9150509250925092565b600060208284031215612aea57612ae961261b565b5b6000612af884828501612729565b91505092915050565b612b0a816126aa565b8114612b1557600080fd5b50565b600081359050612b2781612b01565b92915050565b60008060408385031215612b4457612b4361261b565b5b6000612b5285828601612729565b9250506020612b6385828601612b18565b9150509250929050565b600067ffffffffffffffff821115612b8857612b87612759565b5b612b9182612748565b9050602081019050919050565b6000612bb1612bac84612b6d565b6127b9565b905082815260208101848484011115612bcd57612bcc612743565b5b612bd8848285612805565b509392505050565b600082601f830112612bf557612bf461273e565b5b8135612c05848260208601612b9e565b91505092915050565b60008060008060808587031215612c2857612c2761261b565b5b6000612c3687828801612729565b9450506020612c4787828801612729565b9350506040612c58878288016129d5565b925050606085013567ffffffffffffffff811115612c7957612c78612620565b5b612c8587828801612be0565b91505092959194509250565b60008060408385031215612ca857612ca761261b565b5b6000612cb685828601612729565b9250506020612cc785828601612729565b9150509250929050565b600060208284031215612ce757612ce661261b565b5b600082013567ffffffffffffffff811115612d0557612d04612620565b5b612d1184828501612856565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d6157607f821691505b60208210811415612d7557612d74612d1a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612dd7602c8361291f565b9150612de282612d7b565b604082019050919050565b60006020820190508181036000830152612e0681612dca565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e6960218361291f565b9150612e7482612e0d565b604082019050919050565b60006020820190508181036000830152612e9881612e5c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612efb60388361291f565b9150612f0682612e9f565b604082019050919050565b60006020820190508181036000830152612f2a81612eee565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612f8d60318361291f565b9150612f9882612f31565b604082019050919050565b60006020820190508181036000830152612fbc81612f80565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061301f602b8361291f565b915061302a82612fc3565b604082019050919050565b6000602082019050818103600083015261304e81613012565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006130b1602c8361291f565b91506130bc82613055565b604082019050919050565b600060208201905081810360008301526130e0816130a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061317260298361291f565b915061317d82613116565b604082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613204602a8361291f565b915061320f826131a8565b604082019050919050565b60006020820190508181036000830152613233816131f7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061327060208361291f565b915061327b8261323a565b602082019050919050565b6000602082019050818103600083015261329f81613263565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330260268361291f565b915061330d826132a6565b604082019050919050565b60006020820190508181036000830152613331816132f5565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061336e60208361291f565b915061337982613338565b602082019050919050565b6000602082019050818103600083015261339d81613361565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006133da601c8361291f565b91506133e5826133a4565b602082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061344a826128e0565b9150613455836128e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561348a57613489613410565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006134f1602e8361291f565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613583602c8361291f565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061361560258361291f565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136a760248361291f565b91506136b28261364b565b604082019050919050565b600060208201905081810360008301526136d68161369a565b9050919050565b60006136e8826128e0565b91506136f3836128e0565b92508282101561370657613705613410565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061374760198361291f565b915061375282613711565b602082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137d960328361291f565b91506137e48261377d565b604082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b600061386b60318361291f565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b600081905092915050565b60006138b782612914565b6138c181856138a1565b93506138d1818560208601612930565b80840191505092915050565b60006138e982856138ac565b91506138f582846138ac565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061392882613901565b613932818561390c565b9350613942818560208601612930565b61394b81612748565b840191505092915050565b600060808201905061396b6000830187612a17565b6139786020830186612a17565b61398560408301856128ea565b8181036060830152613997818461391d565b905095945050505050565b6000815190506139b181612651565b92915050565b6000602082840312156139cd576139cc61261b565b5b60006139db848285016139a2565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613a40602f8361291f565b9150613a4b826139e4565b604082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b6000613a81826128e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab457613ab3613410565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613af9826128e0565b9150613b04836128e0565b925082613b1457613b13613abf565b5b828204905092915050565b6000613b2a826128e0565b9150613b35836128e0565b925082613b4557613b44613abf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e75ac2957bb4cbef05ad30869bb8b0fb65b10aa1f4a86b8b9e486605baec9c0d64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061014b5760003560e01c806370a08231116100b6578063ad7f6cf71161006f578063ad7f6cf7146104a9578063b88d4fde146104d4578063c87b56dd146104fd578063e985e9c51461053a578063f2fde38b14610577578063ffe630b5146105a05761014b565b806370a08231146103ad578063715018a6146103ea5780638da5cb5b1461040157806395d89b411461042c578063a144819414610457578063a22cb465146104805761014b565b806323b872dd1161010857806323b872dd146102795780632f745c59146102a257806342842e0e146102df5780634f6ccce7146103085780636352211e146103455780636373a6b1146103825761014b565b806301ffc9a7146101505780630538428a1461018d57806306fdde03146101bd578063081812fc146101e8578063095ea7b31461022557806318160ddd1461024e575b600080fd5b34801561015c57600080fd5b506101776004803603810190610172919061267d565b6105c9565b60405161018491906126c5565b60405180910390f35b6101a760048036038101906101a29190612884565b6105db565b6040516101b491906128f9565b60405180910390f35b3480156101c957600080fd5b506101d2610613565b6040516101df919061299c565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a91906129ea565b6106a5565b60405161021c9190612a26565b60405180910390f35b34801561023157600080fd5b5061024c60048036038101906102479190612a41565b61072a565b005b34801561025a57600080fd5b50610263610842565b60405161027091906128f9565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612a81565b61084f565b005b3480156102ae57600080fd5b506102c960048036038101906102c49190612a41565b6108af565b6040516102d691906128f9565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190612a81565b610954565b005b34801561031457600080fd5b5061032f600480360381019061032a91906129ea565b610974565b60405161033c91906128f9565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906129ea565b6109e5565b6040516103799190612a26565b60405180910390f35b34801561038e57600080fd5b50610397610a97565b6040516103a4919061299c565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190612ad4565b610b25565b6040516103e191906128f9565b60405180910390f35b3480156103f657600080fd5b506103ff610bdd565b005b34801561040d57600080fd5b50610416610c65565b6040516104239190612a26565b60405180910390f35b34801561043857600080fd5b50610441610c8f565b60405161044e919061299c565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612a41565b610d21565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612b2d565b610dab565b005b3480156104b557600080fd5b506104be610dc1565b6040516104cb91906128f9565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612c0e565b610dc7565b005b34801561050957600080fd5b50610524600480360381019061051f91906129ea565b610e29565b604051610531919061299c565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190612c91565b610e3b565b60405161056e91906126c5565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190612ad4565b610ecf565b005b3480156105ac57600080fd5b506105c760048036038101906105c29190612cd1565b610fc7565b005b60006105d48261105d565b9050919050565b60006105e7600c6110d7565b60006105f3600c6110ed565b90506105ff84826110fb565b61060981846112d5565b8091505092915050565b60606000805461062290612d49565b80601f016020809104026020016040519081016040528092919081815260200182805461064e90612d49565b801561069b5780601f106106705761010080835404028352916020019161069b565b820191906000526020600020905b81548152906001019060200180831161067e57829003601f168201915b5050505050905090565b60006106b082611349565b6106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612ded565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610735826109e5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d90612e7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c56113b5565b73ffffffffffffffffffffffffffffffffffffffff1614806107f457506107f3816107ee6113b5565b610e3b565b5b610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90612f11565b60405180910390fd5b61083d83836113bd565b505050565b6000600880549050905090565b61086061085a6113b5565b82611476565b61089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690612fa3565b60405180910390fd5b6108aa838383611554565b505050565b60006108ba83610b25565b82106108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290613035565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61096f83838360405180602001604052806000815250610dc7565b505050565b600061097e610842565b82106109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b6906130c7565b60405180910390fd5b600882815481106109d3576109d26130e7565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590613188565b60405180910390fd5b80915050919050565b600d8054610aa490612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad090612d49565b8015610b1d5780601f10610af257610100808354040283529160200191610b1d565b820191906000526020600020905b815481529060010190602001808311610b0057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d9061321a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be56113b5565b73ffffffffffffffffffffffffffffffffffffffff16610c03610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090613286565b60405180910390fd5b610c6360006117bb565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c9e90612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054610cca90612d49565b8015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b5050505050905090565b610d296113b5565b73ffffffffffffffffffffffffffffffffffffffff16610d47610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490613286565b60405180910390fd5b610da78282611881565b5050565b610dbd610db66113b5565b838361189f565b5050565b61271081565b610dd8610dd26113b5565b83611476565b610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e90612fa3565b60405180910390fd5b610e2384848484611a0c565b50505050565b6060610e3482611a68565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ed76113b5565b73ffffffffffffffffffffffffffffffffffffffff16610ef5610c65565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613286565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613318565b60405180910390fd5b610fc4816117bb565b50565b610fcf6113b5565b73ffffffffffffffffffffffffffffffffffffffff16610fed610c65565b73ffffffffffffffffffffffffffffffffffffffff1614611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613286565b60405180910390fd5b80600d908051906020019061105992919061256e565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110d057506110cf82611bba565b5b9050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116290613384565b60405180910390fd5b61117481611349565b156111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906133f0565b60405180910390fd5b6111c060008383611c9c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611210919061343f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112d160008383611cac565b5050565b6112de82611349565b61131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613507565b60405180910390fd5b80600a6000848152602001908152602001600020908051906020019061134492919061256e565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611430836109e5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061148182611349565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613599565b60405180910390fd5b60006114cb836109e5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061150d575061150c8185610e3b565b5b8061154b57508373ffffffffffffffffffffffffffffffffffffffff16611533846106a5565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611574826109e5565b73ffffffffffffffffffffffffffffffffffffffff16146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061362b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611631906136bd565b60405180910390fd5b611645838383611c9c565b6116506000826113bd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a091906136dd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f7919061343f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117b6838383611cac565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61189b828260405180602001604052806000815250611cb1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561190e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119059061375d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ff91906126c5565b60405180910390a3505050565b611a17848484611554565b611a2384848484611d0c565b611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a59906137ef565b60405180910390fd5b50505050565b6060611a7382611349565b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613881565b60405180910390fd5b6000600a60008481526020019081526020016000208054611ad290612d49565b80601f0160208091040260200160405190810160405280929190818152602001828054611afe90612d49565b8015611b4b5780601f10611b2057610100808354040283529160200191611b4b565b820191906000526020600020905b815481529060010190602001808311611b2e57829003601f168201915b505050505090506000611b5c611ea3565b9050600081511415611b72578192505050611bb5565b600082511115611ba7578082604051602001611b8f9291906138dd565b60405160208183030381529060405292505050611bb5565b611bb084611eba565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c8557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c955750611c9482611f61565b5b9050919050565b611ca7838383611fcb565b505050565b505050565b611cbb83836110fb565b611cc86000848484611d0c565b611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe906137ef565b60405180910390fd5b505050565b6000611d2d8473ffffffffffffffffffffffffffffffffffffffff166120df565b15611e96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611d566113b5565b8786866040518563ffffffff1660e01b8152600401611d789493929190613956565b602060405180830381600087803b158015611d9257600080fd5b505af1925050508015611dc357506040513d601f19601f82011682018060405250810190611dc091906139b7565b60015b611e46573d8060008114611df3576040519150601f19603f3d011682016040523d82523d6000602084013e611df8565b606091505b50600081511415611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e35906137ef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611e9b565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060611ec582611349565b611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613a56565b60405180910390fd5b6000611f0e611ea3565b90506000815111611f2e5760405180602001604052806000815250611f59565b80611f3884612102565b604051602001611f499291906138dd565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fd6838383612263565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120195761201481612268565b612058565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120575761205683826122b1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561209b576120968161241e565b6120da565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120d9576120d882826124ef565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600082141561214a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061225e565b600082905060005b6000821461217c57808061216590613a76565b915050600a826121759190613aee565b9150612152565b60008167ffffffffffffffff81111561219857612197612759565b5b6040519080825280601f01601f1916602001820160405280156121ca5781602001600182028036833780820191505090505b5090505b60008514612257576001826121e391906136dd565b9150600a856121f29190613b1f565b60306121fe919061343f565b60f81b818381518110612214576122136130e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122509190613aee565b94506121ce565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016122be84610b25565b6122c891906136dd565b90506000600760008481526020019081526020016000205490508181146123ad576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061243291906136dd565b9050600060096000848152602001908152602001600020549050600060088381548110612462576124616130e7565b5b906000526020600020015490508060088381548110612484576124836130e7565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806124d3576124d2613b50565b5b6001900381819060005260206000200160009055905550505050565b60006124fa83610b25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461257a90612d49565b90600052602060002090601f01602090048101928261259c57600085556125e3565b82601f106125b557805160ff19168380011785556125e3565b828001600101855582156125e3579182015b828111156125e25782518255916020019190600101906125c7565b5b5090506125f091906125f4565b5090565b5b8082111561260d5760008160009055506001016125f5565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61265a81612625565b811461266557600080fd5b50565b60008135905061267781612651565b92915050565b6000602082840312156126935761269261261b565b5b60006126a184828501612668565b91505092915050565b60008115159050919050565b6126bf816126aa565b82525050565b60006020820190506126da60008301846126b6565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061270b826126e0565b9050919050565b61271b81612700565b811461272657600080fd5b50565b60008135905061273881612712565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61279182612748565b810181811067ffffffffffffffff821117156127b0576127af612759565b5b80604052505050565b60006127c3612611565b90506127cf8282612788565b919050565b600067ffffffffffffffff8211156127ef576127ee612759565b5b6127f882612748565b9050602081019050919050565b82818337600083830152505050565b6000612827612822846127d4565b6127b9565b90508281526020810184848401111561284357612842612743565b5b61284e848285612805565b509392505050565b600082601f83011261286b5761286a61273e565b5b813561287b848260208601612814565b91505092915050565b6000806040838503121561289b5761289a61261b565b5b60006128a985828601612729565b925050602083013567ffffffffffffffff8111156128ca576128c9612620565b5b6128d685828601612856565b9150509250929050565b6000819050919050565b6128f3816128e0565b82525050565b600060208201905061290e60008301846128ea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561294e578082015181840152602081019050612933565b8381111561295d576000848401525b50505050565b600061296e82612914565b612978818561291f565b9350612988818560208601612930565b61299181612748565b840191505092915050565b600060208201905081810360008301526129b68184612963565b905092915050565b6129c7816128e0565b81146129d257600080fd5b50565b6000813590506129e4816129be565b92915050565b600060208284031215612a00576129ff61261b565b5b6000612a0e848285016129d5565b91505092915050565b612a2081612700565b82525050565b6000602082019050612a3b6000830184612a17565b92915050565b60008060408385031215612a5857612a5761261b565b5b6000612a6685828601612729565b9250506020612a77858286016129d5565b9150509250929050565b600080600060608486031215612a9a57612a9961261b565b5b6000612aa886828701612729565b9350506020612ab986828701612729565b9250506040612aca868287016129d5565b9150509250925092565b600060208284031215612aea57612ae961261b565b5b6000612af884828501612729565b91505092915050565b612b0a816126aa565b8114612b1557600080fd5b50565b600081359050612b2781612b01565b92915050565b60008060408385031215612b4457612b4361261b565b5b6000612b5285828601612729565b9250506020612b6385828601612b18565b9150509250929050565b600067ffffffffffffffff821115612b8857612b87612759565b5b612b9182612748565b9050602081019050919050565b6000612bb1612bac84612b6d565b6127b9565b905082815260208101848484011115612bcd57612bcc612743565b5b612bd8848285612805565b509392505050565b600082601f830112612bf557612bf461273e565b5b8135612c05848260208601612b9e565b91505092915050565b60008060008060808587031215612c2857612c2761261b565b5b6000612c3687828801612729565b9450506020612c4787828801612729565b9350506040612c58878288016129d5565b925050606085013567ffffffffffffffff811115612c7957612c78612620565b5b612c8587828801612be0565b91505092959194509250565b60008060408385031215612ca857612ca761261b565b5b6000612cb685828601612729565b9250506020612cc785828601612729565b9150509250929050565b600060208284031215612ce757612ce661261b565b5b600082013567ffffffffffffffff811115612d0557612d04612620565b5b612d1184828501612856565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d6157607f821691505b60208210811415612d7557612d74612d1a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612dd7602c8361291f565b9150612de282612d7b565b604082019050919050565b60006020820190508181036000830152612e0681612dca565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e6960218361291f565b9150612e7482612e0d565b604082019050919050565b60006020820190508181036000830152612e9881612e5c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612efb60388361291f565b9150612f0682612e9f565b604082019050919050565b60006020820190508181036000830152612f2a81612eee565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612f8d60318361291f565b9150612f9882612f31565b604082019050919050565b60006020820190508181036000830152612fbc81612f80565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061301f602b8361291f565b915061302a82612fc3565b604082019050919050565b6000602082019050818103600083015261304e81613012565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006130b1602c8361291f565b91506130bc82613055565b604082019050919050565b600060208201905081810360008301526130e0816130a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061317260298361291f565b915061317d82613116565b604082019050919050565b600060208201905081810360008301526131a181613165565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613204602a8361291f565b915061320f826131a8565b604082019050919050565b60006020820190508181036000830152613233816131f7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061327060208361291f565b915061327b8261323a565b602082019050919050565b6000602082019050818103600083015261329f81613263565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061330260268361291f565b915061330d826132a6565b604082019050919050565b60006020820190508181036000830152613331816132f5565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061336e60208361291f565b915061337982613338565b602082019050919050565b6000602082019050818103600083015261339d81613361565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006133da601c8361291f565b91506133e5826133a4565b602082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061344a826128e0565b9150613455836128e0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561348a57613489613410565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006134f1602e8361291f565b91506134fc82613495565b604082019050919050565b60006020820190508181036000830152613520816134e4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613583602c8361291f565b915061358e82613527565b604082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061361560258361291f565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006136a760248361291f565b91506136b28261364b565b604082019050919050565b600060208201905081810360008301526136d68161369a565b9050919050565b60006136e8826128e0565b91506136f3836128e0565b92508282101561370657613705613410565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061374760198361291f565b915061375282613711565b602082019050919050565b600060208201905081810360008301526137768161373a565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137d960328361291f565b91506137e48261377d565b604082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b600061386b60318361291f565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b600081905092915050565b60006138b782612914565b6138c181856138a1565b93506138d1818560208601612930565b80840191505092915050565b60006138e982856138ac565b91506138f582846138ac565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061392882613901565b613932818561390c565b9350613942818560208601612930565b61394b81612748565b840191505092915050565b600060808201905061396b6000830187612a17565b6139786020830186612a17565b61398560408301856128ea565b8181036060830152613997818461391d565b905095945050505050565b6000815190506139b181612651565b92915050565b6000602082840312156139cd576139cc61261b565b5b60006139db848285016139a2565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613a40602f8361291f565b9150613a4b826139e4565b604082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b6000613a81826128e0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ab457613ab3613410565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613af9826128e0565b9150613b04836128e0565b925082613b1457613b13613abf565b5b828204905092915050565b6000613b2a826128e0565b9150613b35836128e0565b925082613b4557613b44613abf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e75ac2957bb4cbef05ad30869bb8b0fb65b10aa1f4a86b8b9e486605baec9c0d64736f6c63430008090033
Deployed Bytecode Sourcemap
49041:1533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49862:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49338:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27637:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29197:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28720:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41458:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29947:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41126:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30357:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41648:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27331:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49250:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27061:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27806:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50340:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29490:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49203:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30613:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50047:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29716:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50453:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49862:177;49965:4;49995:36;50019:11;49995:23;:36::i;:::-;49988:43;;49862:177;;;:::o;49338:321::-;49444:7;49469:21;:9;:19;:21::i;:::-;49503:17;49523:19;:9;:17;:19::i;:::-;49503:39;;49553:27;49559:9;49570;49553:5;:27::i;:::-;49591:33;49604:9;49615:8;49591:12;:33::i;:::-;49642:9;49635:16;;;49338:321;;;;:::o;27637:100::-;27691:13;27724:5;27717:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27637:100;:::o;29197:221::-;29273:7;29301:16;29309:7;29301;:16::i;:::-;29293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29386:15;:24;29402:7;29386:24;;;;;;;;;;;;;;;;;;;;;29379:31;;29197:221;;;:::o;28720:411::-;28801:13;28817:23;28832:7;28817:14;:23::i;:::-;28801:39;;28865:5;28859:11;;:2;:11;;;;28851:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28959:5;28943:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28968:37;28985:5;28992:12;:10;:12::i;:::-;28968:16;:37::i;:::-;28943:62;28921:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29102:21;29111:2;29115:7;29102:8;:21::i;:::-;28790:341;28720:411;;:::o;41458:113::-;41519:7;41546:10;:17;;;;41539:24;;41458:113;:::o;29947:339::-;30142:41;30161:12;:10;:12::i;:::-;30175:7;30142:18;:41::i;:::-;30134:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30250:28;30260:4;30266:2;30270:7;30250:9;:28::i;:::-;29947:339;;;:::o;41126:256::-;41223:7;41259:23;41276:5;41259:16;:23::i;:::-;41251:5;:31;41243:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41348:12;:19;41361:5;41348:19;;;;;;;;;;;;;;;:26;41368:5;41348:26;;;;;;;;;;;;41341:33;;41126:256;;;;:::o;30357:185::-;30495:39;30512:4;30518:2;30522:7;30495:39;;;;;;;;;;;;:16;:39::i;:::-;30357:185;;;:::o;41648:233::-;41723:7;41759:30;:28;:30::i;:::-;41751:5;:38;41743:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41856:10;41867:5;41856:17;;;;;;;;:::i;:::-;;;;;;;;;;41849:24;;41648:233;;;:::o;27331:239::-;27403:7;27423:13;27439:7;:16;27447:7;27439:16;;;;;;;;;;;;;;;;;;;;;27423:32;;27491:1;27474:19;;:5;:19;;;;27466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27557:5;27550:12;;;27331:239;;;:::o;49250:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27061:208::-;27133:7;27178:1;27161:19;;:5;:19;;;;27153:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27245:9;:16;27255:5;27245:16;;;;;;;;;;;;;;;;27238:23;;27061:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;27806:104::-;27862:13;27895:7;27888:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27806:104;:::o;50340:105::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50415:22:::1;50425:2;50429:7;50415:9;:22::i;:::-;50340:105:::0;;:::o;29490:155::-;29585:52;29604:12;:10;:12::i;:::-;29618:8;29628;29585:18;:52::i;:::-;29490:155;;:::o;49203:40::-;49238:5;49203:40;:::o;30613:328::-;30788:41;30807:12;:10;:12::i;:::-;30821:7;30788:18;:41::i;:::-;30780:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30894:39;30908:4;30914:2;30918:7;30927:5;30894:13;:39::i;:::-;30613:328;;;;:::o;50047:160::-;50138:13;50176:23;50191:7;50176:14;:23::i;:::-;50169:30;;50047:160;;;:::o;29716:164::-;29813:4;29837:18;:25;29856:5;29837:25;;;;;;;;;;;;;;;:35;29863:8;29837:35;;;;;;;;;;;;;;;;;;;;;;;;;29830:42;;29716:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;50453:116::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50547:14:::1;50534:10;:27;;;;;;;;;;;;:::i;:::-;;50453:116:::0;:::o;40818:224::-;40920:4;40959:35;40944:50;;;:11;:50;;;;:90;;;;40998:36;41022:11;40998:23;:36::i;:::-;40944:90;40937:97;;40818:224;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;34429:439::-;34523:1;34509:16;;:2;:16;;;;34501:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34582:16;34590:7;34582;:16::i;:::-;34581:17;34573:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:45;34673:1;34677:2;34681:7;34644:20;:45::i;:::-;34719:1;34702:9;:13;34712:2;34702:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34750:2;34731:7;:16;34739:7;34731:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34795:7;34791:2;34770:33;;34787:1;34770:33;;;;;;;;;;;;34816:44;34844:1;34848:2;34852:7;34816:19;:44::i;:::-;34429:439;;:::o;48312:217::-;48412:16;48420:7;48412;:16::i;:::-;48404:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;48512:9;48490:10;:19;48501:7;48490:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;48312:217;;:::o;32451:127::-;32516:4;32568:1;32540:30;;:7;:16;32548:7;32540:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32533:37;;32451:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;36597:174::-;36699:2;36672:15;:24;36688:7;36672:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36755:7;36751:2;36717:46;;36726:23;36741:7;36726:14;:23::i;:::-;36717:46;;;;;;;;;;;;36597:174;;:::o;32745:348::-;32838:4;32863:16;32871:7;32863;:16::i;:::-;32855:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32939:13;32955:23;32970:7;32955:14;:23::i;:::-;32939:39;;33008:5;32997:16;;:7;:16;;;:52;;;;33017:32;33034:5;33041:7;33017:16;:32::i;:::-;32997:52;:87;;;;33077:7;33053:31;;:20;33065:7;33053:11;:20::i;:::-;:31;;;32997:87;32989:96;;;32745:348;;;;:::o;35854:625::-;36013:4;35986:31;;:23;36001:7;35986:14;:23::i;:::-;:31;;;35978:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36092:1;36078:16;;:2;:16;;;;36070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36148:39;36169:4;36175:2;36179:7;36148:20;:39::i;:::-;36252:29;36269:1;36273:7;36252:8;:29::i;:::-;36313:1;36294:9;:15;36304:4;36294:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36342:1;36325:9;:13;36335:2;36325:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36373:2;36354:7;:16;36362:7;36354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36412:7;36408:2;36393:27;;36402:4;36393:27;;;;;;;;;;;;36433:38;36453:4;36459:2;36463:7;36433:19;:38::i;:::-;35854:625;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;33435:110::-;33511:26;33521:2;33525:7;33511:26;;;;;;;;;;;;:9;:26::i;:::-;33435:110;;:::o;36913:315::-;37068:8;37059:17;;:5;:17;;;;37051:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:8;37117:18;:25;37136:5;37117:25;;;;;;;;;;;;;;;:35;37143:8;37117:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37201:8;37179:41;;37194:5;37179:41;;;37211:8;37179:41;;;;;;:::i;:::-;;;;;;;;36913:315;;;:::o;31823:::-;31980:28;31990:4;31996:2;32000:7;31980:9;:28::i;:::-;32027:48;32050:4;32056:2;32060:7;32069:5;32027:22;:48::i;:::-;32019:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31823:315;;;;:::o;47477:679::-;47550:13;47584:16;47592:7;47584;:16::i;:::-;47576:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47667:23;47693:10;:19;47704:7;47693:19;;;;;;;;;;;47667:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47723:18;47744:10;:8;:10::i;:::-;47723:31;;47852:1;47836:4;47830:18;:23;47826:72;;;47877:9;47870:16;;;;;;47826:72;48028:1;48008:9;48002:23;:27;47998:108;;;48077:4;48083:9;48060:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48046:48;;;;;;47998:108;48125:23;48140:7;48125:14;:23::i;:::-;48118:30;;;;47477:679;;;;:::o;26692:305::-;26794:4;26846:25;26831:40;;;:11;:40;;;;:105;;;;26903:33;26888:48;;;:11;:48;;;;26831:105;:158;;;;26953:36;26977:11;26953:23;:36::i;:::-;26831:158;26811:178;;26692:305;;;:::o;49667:187::-;49801:45;49828:4;49834:2;49838:7;49801:26;:45::i;:::-;49667:187;;;:::o;39675:125::-;;;;:::o;33772:321::-;33902:18;33908:2;33912:7;33902:5;:18::i;:::-;33953:54;33984:1;33988:2;33992:7;34001:5;33953:22;:54::i;:::-;33931:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33772:321;;;:::o;37793:799::-;37948:4;37969:15;:2;:13;;;:15::i;:::-;37965:620;;;38021:2;38005:36;;;38042:12;:10;:12::i;:::-;38056:4;38062:7;38071:5;38005:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38001:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38264:1;38247:6;:13;:18;38243:272;;;38290:60;;;;;;;;;;:::i;:::-;;;;;;;;38243:272;38465:6;38459:13;38450:6;38446:2;38442:15;38435:38;38001:529;38138:41;;;38128:51;;;:6;:51;;;;38121:58;;;;;37965:620;38569:4;38562:11;;37793:799;;;;;;;:::o;28564:94::-;28615:13;28641:9;;;;;;;;;;;;;;28564:94;:::o;27981:334::-;28054:13;28088:16;28096:7;28088;:16::i;:::-;28080:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28169:21;28193:10;:8;:10::i;:::-;28169:34;;28245:1;28227:7;28221:21;:25;:86;;;;;;;;;;;;;;;;;28273:7;28282:18;:7;:16;:18::i;:::-;28256:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28221:86;28214:93;;;27981:334;;;:::o;18351:157::-;18436:4;18475:25;18460:40;;;:11;:40;;;;18453:47;;18351:157;;;:::o;42494:589::-;42638:45;42665:4;42671:2;42675:7;42638:26;:45::i;:::-;42716:1;42700:18;;:4;:18;;;42696:187;;;42735:40;42767:7;42735:31;:40::i;:::-;42696:187;;;42805:2;42797:10;;:4;:10;;;42793:90;;42824:47;42857:4;42863:7;42824:32;:47::i;:::-;42793:90;42696:187;42911:1;42897:16;;:2;:16;;;42893:183;;;42930:45;42967:7;42930:36;:45::i;:::-;42893:183;;;43003:4;42997:10;;:2;:10;;;42993:83;;43024:40;43052:2;43056:7;43024:27;:40::i;:::-;42993:83;42893:183;42494:589;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;39164:126::-;;;;:::o;43806:164::-;43910:10;:17;;;;43883:15;:24;43899:7;43883:24;;;;;;;;;;;:44;;;;43938:10;43954:7;43938:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43806:164;:::o;44597:988::-;44863:22;44913:1;44888:22;44905:4;44888:16;:22::i;:::-;:26;;;;:::i;:::-;44863:51;;44925:18;44946:17;:26;44964:7;44946:26;;;;;;;;;;;;44925:47;;45093:14;45079:10;:28;45075:328;;45124:19;45146:12;:18;45159:4;45146:18;;;;;;;;;;;;;;;:34;45165:14;45146:34;;;;;;;;;;;;45124:56;;45230:11;45197:12;:18;45210:4;45197:18;;;;;;;;;;;;;;;:30;45216:10;45197:30;;;;;;;;;;;:44;;;;45347:10;45314:17;:30;45332:11;45314:30;;;;;;;;;;;:43;;;;45109:294;45075:328;45499:17;:26;45517:7;45499:26;;;;;;;;;;;45492:33;;;45543:12;:18;45556:4;45543:18;;;;;;;;;;;;;;;:34;45562:14;45543:34;;;;;;;;;;;45536:41;;;44678:907;;44597:988;;:::o;45880:1079::-;46133:22;46178:1;46158:10;:17;;;;:21;;;;:::i;:::-;46133:46;;46190:18;46211:15;:24;46227:7;46211:24;;;;;;;;;;;;46190:45;;46562:19;46584:10;46595:14;46584:26;;;;;;;;:::i;:::-;;;;;;;;;;46562:48;;46648:11;46623:10;46634;46623:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46759:10;46728:15;:28;46744:11;46728:28;;;;;;;;;;;:41;;;;46900:15;:24;46916:7;46900:24;;;;;;;;;;;46893:31;;;46935:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45951:1008;;;45880:1079;:::o;43384:221::-;43469:14;43486:20;43503:2;43486:16;:20::i;:::-;43469:37;;43544:7;43517:12;:16;43530:2;43517:16;;;;;;;;;;;;;;;:24;43534:6;43517:24;;;;;;;;;;;:34;;;;43591:6;43562:17;:26;43580:7;43562:26;;;;;;;;;;;:35;;;;43458:147;43384:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:117::-;2134:1;2131;2124:12;2148:117;2257:1;2254;2247:12;2271:102;2312:6;2363:2;2359:7;2354:2;2347:5;2343:14;2339:28;2329:38;;2271:102;;;:::o;2379:180::-;2427:77;2424:1;2417:88;2524:4;2521:1;2514:15;2548:4;2545:1;2538:15;2565:281;2648:27;2670:4;2648:27;:::i;:::-;2640:6;2636:40;2778:6;2766:10;2763:22;2742:18;2730:10;2727:34;2724:62;2721:88;;;2789:18;;:::i;:::-;2721:88;2829:10;2825:2;2818:22;2608:238;2565:281;;:::o;2852:129::-;2886:6;2913:20;;:::i;:::-;2903:30;;2942:33;2970:4;2962:6;2942:33;:::i;:::-;2852:129;;;:::o;2987:308::-;3049:4;3139:18;3131:6;3128:30;3125:56;;;3161:18;;:::i;:::-;3125:56;3199:29;3221:6;3199:29;:::i;:::-;3191:37;;3283:4;3277;3273:15;3265:23;;2987:308;;;:::o;3301:154::-;3385:6;3380:3;3375;3362:30;3447:1;3438:6;3433:3;3429:16;3422:27;3301:154;;;:::o;3461:412::-;3539:5;3564:66;3580:49;3622:6;3580:49;:::i;:::-;3564:66;:::i;:::-;3555:75;;3653:6;3646:5;3639:21;3691:4;3684:5;3680:16;3729:3;3720:6;3715:3;3711:16;3708:25;3705:112;;;3736:79;;:::i;:::-;3705:112;3826:41;3860:6;3855:3;3850;3826:41;:::i;:::-;3545:328;3461:412;;;;;:::o;3893:340::-;3949:5;3998:3;3991:4;3983:6;3979:17;3975:27;3965:122;;4006:79;;:::i;:::-;3965:122;4123:6;4110:20;4148:79;4223:3;4215:6;4208:4;4200:6;4196:17;4148:79;:::i;:::-;4139:88;;3955:278;3893:340;;;;:::o;4239:654::-;4317:6;4325;4374:2;4362:9;4353:7;4349:23;4345:32;4342:119;;;4380:79;;:::i;:::-;4342:119;4500:1;4525:53;4570:7;4561:6;4550:9;4546:22;4525:53;:::i;:::-;4515:63;;4471:117;4655:2;4644:9;4640:18;4627:32;4686:18;4678:6;4675:30;4672:117;;;4708:79;;:::i;:::-;4672:117;4813:63;4868:7;4859:6;4848:9;4844:22;4813:63;:::i;:::-;4803:73;;4598:288;4239:654;;;;;:::o;4899:77::-;4936:7;4965:5;4954:16;;4899:77;;;:::o;4982:118::-;5069:24;5087:5;5069:24;:::i;:::-;5064:3;5057:37;4982:118;;:::o;5106:222::-;5199:4;5237:2;5226:9;5222:18;5214:26;;5250:71;5318:1;5307:9;5303:17;5294:6;5250:71;:::i;:::-;5106:222;;;;:::o;5334:99::-;5386:6;5420:5;5414:12;5404:22;;5334:99;;;:::o;5439:169::-;5523:11;5557:6;5552:3;5545:19;5597:4;5592:3;5588:14;5573:29;;5439:169;;;;:::o;5614:307::-;5682:1;5692:113;5706:6;5703:1;5700:13;5692:113;;;5791:1;5786:3;5782:11;5776:18;5772:1;5767:3;5763:11;5756:39;5728:2;5725:1;5721:10;5716:15;;5692:113;;;5823:6;5820:1;5817:13;5814:101;;;5903:1;5894:6;5889:3;5885:16;5878:27;5814:101;5663:258;5614:307;;;:::o;5927:364::-;6015:3;6043:39;6076:5;6043:39;:::i;:::-;6098:71;6162:6;6157:3;6098:71;:::i;:::-;6091:78;;6178:52;6223:6;6218:3;6211:4;6204:5;6200:16;6178:52;:::i;:::-;6255:29;6277:6;6255:29;:::i;:::-;6250:3;6246:39;6239:46;;6019:272;5927:364;;;;:::o;6297:313::-;6410:4;6448:2;6437:9;6433:18;6425:26;;6497:9;6491:4;6487:20;6483:1;6472:9;6468:17;6461:47;6525:78;6598:4;6589:6;6525:78;:::i;:::-;6517:86;;6297:313;;;;:::o;6616:122::-;6689:24;6707:5;6689:24;:::i;:::-;6682:5;6679:35;6669:63;;6728:1;6725;6718:12;6669:63;6616:122;:::o;6744:139::-;6790:5;6828:6;6815:20;6806:29;;6844:33;6871:5;6844:33;:::i;:::-;6744:139;;;;:::o;6889:329::-;6948:6;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7123:1;7148:53;7193:7;7184:6;7173:9;7169:22;7148:53;:::i;:::-;7138:63;;7094:117;6889:329;;;;:::o;7224:118::-;7311:24;7329:5;7311:24;:::i;:::-;7306:3;7299:37;7224:118;;:::o;7348:222::-;7441:4;7479:2;7468:9;7464:18;7456:26;;7492:71;7560:1;7549:9;7545:17;7536:6;7492:71;:::i;:::-;7348:222;;;;:::o;7576:474::-;7644:6;7652;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7954:2;7980:53;8025:7;8016:6;8005:9;8001:22;7980:53;:::i;:::-;7970:63;;7925:118;7576:474;;;;;:::o;8056:619::-;8133:6;8141;8149;8198:2;8186:9;8177:7;8173:23;8169:32;8166:119;;;8204:79;;:::i;:::-;8166:119;8324:1;8349:53;8394:7;8385:6;8374:9;8370:22;8349:53;:::i;:::-;8339:63;;8295:117;8451:2;8477:53;8522:7;8513:6;8502:9;8498:22;8477:53;:::i;:::-;8467:63;;8422:118;8579:2;8605:53;8650:7;8641:6;8630:9;8626:22;8605:53;:::i;:::-;8595:63;;8550:118;8056:619;;;;;:::o;8681:329::-;8740:6;8789:2;8777:9;8768:7;8764:23;8760:32;8757:119;;;8795:79;;:::i;:::-;8757:119;8915:1;8940:53;8985:7;8976:6;8965:9;8961:22;8940:53;:::i;:::-;8930:63;;8886:117;8681:329;;;;:::o;9016:116::-;9086:21;9101:5;9086:21;:::i;:::-;9079:5;9076:32;9066:60;;9122:1;9119;9112:12;9066:60;9016:116;:::o;9138:133::-;9181:5;9219:6;9206:20;9197:29;;9235:30;9259:5;9235:30;:::i;:::-;9138:133;;;;:::o;9277:468::-;9342:6;9350;9399:2;9387:9;9378:7;9374:23;9370:32;9367:119;;;9405:79;;:::i;:::-;9367:119;9525:1;9550:53;9595:7;9586:6;9575:9;9571:22;9550:53;:::i;:::-;9540:63;;9496:117;9652:2;9678:50;9720:7;9711:6;9700:9;9696:22;9678:50;:::i;:::-;9668:60;;9623:115;9277:468;;;;;:::o;9751:307::-;9812:4;9902:18;9894:6;9891:30;9888:56;;;9924:18;;:::i;:::-;9888:56;9962:29;9984:6;9962:29;:::i;:::-;9954:37;;10046:4;10040;10036:15;10028:23;;9751:307;;;:::o;10064:410::-;10141:5;10166:65;10182:48;10223:6;10182:48;:::i;:::-;10166:65;:::i;:::-;10157:74;;10254:6;10247:5;10240:21;10292:4;10285:5;10281:16;10330:3;10321:6;10316:3;10312:16;10309:25;10306:112;;;10337:79;;:::i;:::-;10306:112;10427:41;10461:6;10456:3;10451;10427:41;:::i;:::-;10147:327;10064:410;;;;;:::o;10493:338::-;10548:5;10597:3;10590:4;10582:6;10578:17;10574:27;10564:122;;10605:79;;:::i;:::-;10564:122;10722:6;10709:20;10747:78;10821:3;10813:6;10806:4;10798:6;10794:17;10747:78;:::i;:::-;10738:87;;10554:277;10493:338;;;;:::o;10837:943::-;10932:6;10940;10948;10956;11005:3;10993:9;10984:7;10980:23;10976:33;10973:120;;;11012:79;;:::i;:::-;10973:120;11132:1;11157:53;11202:7;11193:6;11182:9;11178:22;11157:53;:::i;:::-;11147:63;;11103:117;11259:2;11285:53;11330:7;11321:6;11310:9;11306:22;11285:53;:::i;:::-;11275:63;;11230:118;11387:2;11413:53;11458:7;11449:6;11438:9;11434:22;11413:53;:::i;:::-;11403:63;;11358:118;11543:2;11532:9;11528:18;11515:32;11574:18;11566:6;11563:30;11560:117;;;11596:79;;:::i;:::-;11560:117;11701:62;11755:7;11746:6;11735:9;11731:22;11701:62;:::i;:::-;11691:72;;11486:287;10837:943;;;;;;;:::o;11786:474::-;11854:6;11862;11911:2;11899:9;11890:7;11886:23;11882:32;11879:119;;;11917:79;;:::i;:::-;11879:119;12037:1;12062:53;12107:7;12098:6;12087:9;12083:22;12062:53;:::i;:::-;12052:63;;12008:117;12164:2;12190:53;12235:7;12226:6;12215:9;12211:22;12190:53;:::i;:::-;12180:63;;12135:118;11786:474;;;;;:::o;12266:509::-;12335:6;12384:2;12372:9;12363:7;12359:23;12355:32;12352:119;;;12390:79;;:::i;:::-;12352:119;12538:1;12527:9;12523:17;12510:31;12568:18;12560:6;12557:30;12554:117;;;12590:79;;:::i;:::-;12554:117;12695:63;12750:7;12741:6;12730:9;12726:22;12695:63;:::i;:::-;12685:73;;12481:287;12266:509;;;;:::o;12781:180::-;12829:77;12826:1;12819:88;12926:4;12923:1;12916:15;12950:4;12947:1;12940:15;12967:320;13011:6;13048:1;13042:4;13038:12;13028:22;;13095:1;13089:4;13085:12;13116:18;13106:81;;13172:4;13164:6;13160:17;13150:27;;13106:81;13234:2;13226:6;13223:14;13203:18;13200:38;13197:84;;;13253:18;;:::i;:::-;13197:84;13018:269;12967:320;;;:::o;13293:231::-;13433:34;13429:1;13421:6;13417:14;13410:58;13502:14;13497:2;13489:6;13485:15;13478:39;13293:231;:::o;13530:366::-;13672:3;13693:67;13757:2;13752:3;13693:67;:::i;:::-;13686:74;;13769:93;13858:3;13769:93;:::i;:::-;13887:2;13882:3;13878:12;13871:19;;13530:366;;;:::o;13902:419::-;14068:4;14106:2;14095:9;14091:18;14083:26;;14155:9;14149:4;14145:20;14141:1;14130:9;14126:17;14119:47;14183:131;14309:4;14183:131;:::i;:::-;14175:139;;13902:419;;;:::o;14327:220::-;14467:34;14463:1;14455:6;14451:14;14444:58;14536:3;14531:2;14523:6;14519:15;14512:28;14327:220;:::o;14553:366::-;14695:3;14716:67;14780:2;14775:3;14716:67;:::i;:::-;14709:74;;14792:93;14881:3;14792:93;:::i;:::-;14910:2;14905:3;14901:12;14894:19;;14553:366;;;:::o;14925:419::-;15091:4;15129:2;15118:9;15114:18;15106:26;;15178:9;15172:4;15168:20;15164:1;15153:9;15149:17;15142:47;15206:131;15332:4;15206:131;:::i;:::-;15198:139;;14925:419;;;:::o;15350:243::-;15490:34;15486:1;15478:6;15474:14;15467:58;15559:26;15554:2;15546:6;15542:15;15535:51;15350:243;:::o;15599:366::-;15741:3;15762:67;15826:2;15821:3;15762:67;:::i;:::-;15755:74;;15838:93;15927:3;15838:93;:::i;:::-;15956:2;15951:3;15947:12;15940:19;;15599:366;;;:::o;15971:419::-;16137:4;16175:2;16164:9;16160:18;16152:26;;16224:9;16218:4;16214:20;16210:1;16199:9;16195:17;16188:47;16252:131;16378:4;16252:131;:::i;:::-;16244:139;;15971:419;;;:::o;16396:236::-;16536:34;16532:1;16524:6;16520:14;16513:58;16605:19;16600:2;16592:6;16588:15;16581:44;16396:236;:::o;16638:366::-;16780:3;16801:67;16865:2;16860:3;16801:67;:::i;:::-;16794:74;;16877:93;16966:3;16877:93;:::i;:::-;16995:2;16990:3;16986:12;16979:19;;16638:366;;;:::o;17010:419::-;17176:4;17214:2;17203:9;17199:18;17191:26;;17263:9;17257:4;17253:20;17249:1;17238:9;17234:17;17227:47;17291:131;17417:4;17291:131;:::i;:::-;17283:139;;17010:419;;;:::o;17435:230::-;17575:34;17571:1;17563:6;17559:14;17552:58;17644:13;17639:2;17631:6;17627:15;17620:38;17435:230;:::o;17671:366::-;17813:3;17834:67;17898:2;17893:3;17834:67;:::i;:::-;17827:74;;17910:93;17999:3;17910:93;:::i;:::-;18028:2;18023:3;18019:12;18012:19;;17671:366;;;:::o;18043:419::-;18209:4;18247:2;18236:9;18232:18;18224:26;;18296:9;18290:4;18286:20;18282:1;18271:9;18267:17;18260:47;18324:131;18450:4;18324:131;:::i;:::-;18316:139;;18043:419;;;:::o;18468:231::-;18608:34;18604:1;18596:6;18592:14;18585:58;18677:14;18672:2;18664:6;18660:15;18653:39;18468:231;:::o;18705:366::-;18847:3;18868:67;18932:2;18927:3;18868:67;:::i;:::-;18861:74;;18944:93;19033:3;18944:93;:::i;:::-;19062:2;19057:3;19053:12;19046:19;;18705:366;;;:::o;19077:419::-;19243:4;19281:2;19270:9;19266:18;19258:26;;19330:9;19324:4;19320:20;19316:1;19305:9;19301:17;19294:47;19358:131;19484:4;19358:131;:::i;:::-;19350:139;;19077:419;;;:::o;19502:180::-;19550:77;19547:1;19540:88;19647:4;19644:1;19637:15;19671:4;19668:1;19661:15;19688:228;19828:34;19824:1;19816:6;19812:14;19805:58;19897:11;19892:2;19884:6;19880:15;19873:36;19688:228;:::o;19922:366::-;20064:3;20085:67;20149:2;20144:3;20085:67;:::i;:::-;20078:74;;20161:93;20250:3;20161:93;:::i;:::-;20279:2;20274:3;20270:12;20263:19;;19922:366;;;:::o;20294:419::-;20460:4;20498:2;20487:9;20483:18;20475:26;;20547:9;20541:4;20537:20;20533:1;20522:9;20518:17;20511:47;20575:131;20701:4;20575:131;:::i;:::-;20567:139;;20294:419;;;:::o;20719:229::-;20859:34;20855:1;20847:6;20843:14;20836:58;20928:12;20923:2;20915:6;20911:15;20904:37;20719:229;:::o;20954:366::-;21096:3;21117:67;21181:2;21176:3;21117:67;:::i;:::-;21110:74;;21193:93;21282:3;21193:93;:::i;:::-;21311:2;21306:3;21302:12;21295:19;;20954:366;;;:::o;21326:419::-;21492:4;21530:2;21519:9;21515:18;21507:26;;21579:9;21573:4;21569:20;21565:1;21554:9;21550:17;21543:47;21607:131;21733:4;21607:131;:::i;:::-;21599:139;;21326:419;;;:::o;21751:182::-;21891:34;21887:1;21879:6;21875:14;21868:58;21751:182;:::o;21939:366::-;22081:3;22102:67;22166:2;22161:3;22102:67;:::i;:::-;22095:74;;22178:93;22267:3;22178:93;:::i;:::-;22296:2;22291:3;22287:12;22280:19;;21939:366;;;:::o;22311:419::-;22477:4;22515:2;22504:9;22500:18;22492:26;;22564:9;22558:4;22554:20;22550:1;22539:9;22535:17;22528:47;22592:131;22718:4;22592:131;:::i;:::-;22584:139;;22311:419;;;:::o;22736:225::-;22876:34;22872:1;22864:6;22860:14;22853:58;22945:8;22940:2;22932:6;22928:15;22921:33;22736:225;:::o;22967:366::-;23109:3;23130:67;23194:2;23189:3;23130:67;:::i;:::-;23123:74;;23206:93;23295:3;23206:93;:::i;:::-;23324:2;23319:3;23315:12;23308:19;;22967:366;;;:::o;23339:419::-;23505:4;23543:2;23532:9;23528:18;23520:26;;23592:9;23586:4;23582:20;23578:1;23567:9;23563:17;23556:47;23620:131;23746:4;23620:131;:::i;:::-;23612:139;;23339:419;;;:::o;23764:182::-;23904:34;23900:1;23892:6;23888:14;23881:58;23764:182;:::o;23952:366::-;24094:3;24115:67;24179:2;24174:3;24115:67;:::i;:::-;24108:74;;24191:93;24280:3;24191:93;:::i;:::-;24309:2;24304:3;24300:12;24293:19;;23952:366;;;:::o;24324:419::-;24490:4;24528:2;24517:9;24513:18;24505:26;;24577:9;24571:4;24567:20;24563:1;24552:9;24548:17;24541:47;24605:131;24731:4;24605:131;:::i;:::-;24597:139;;24324:419;;;:::o;24749:178::-;24889:30;24885:1;24877:6;24873:14;24866:54;24749:178;:::o;24933:366::-;25075:3;25096:67;25160:2;25155:3;25096:67;:::i;:::-;25089:74;;25172:93;25261:3;25172:93;:::i;:::-;25290:2;25285:3;25281:12;25274:19;;24933:366;;;:::o;25305:419::-;25471:4;25509:2;25498:9;25494:18;25486:26;;25558:9;25552:4;25548:20;25544:1;25533:9;25529:17;25522:47;25586:131;25712:4;25586:131;:::i;:::-;25578:139;;25305:419;;;:::o;25730:180::-;25778:77;25775:1;25768:88;25875:4;25872:1;25865:15;25899:4;25896:1;25889:15;25916:305;25956:3;25975:20;25993:1;25975:20;:::i;:::-;25970:25;;26009:20;26027:1;26009:20;:::i;:::-;26004:25;;26163:1;26095:66;26091:74;26088:1;26085:81;26082:107;;;26169:18;;:::i;:::-;26082:107;26213:1;26210;26206:9;26199:16;;25916:305;;;;:::o;26227:233::-;26367:34;26363:1;26355:6;26351:14;26344:58;26436:16;26431:2;26423:6;26419:15;26412:41;26227:233;:::o;26466:366::-;26608:3;26629:67;26693:2;26688:3;26629:67;:::i;:::-;26622:74;;26705:93;26794:3;26705:93;:::i;:::-;26823:2;26818:3;26814:12;26807:19;;26466:366;;;:::o;26838:419::-;27004:4;27042:2;27031:9;27027:18;27019:26;;27091:9;27085:4;27081:20;27077:1;27066:9;27062:17;27055:47;27119:131;27245:4;27119:131;:::i;:::-;27111:139;;26838:419;;;:::o;27263:231::-;27403:34;27399:1;27391:6;27387:14;27380:58;27472:14;27467:2;27459:6;27455:15;27448:39;27263:231;:::o;27500:366::-;27642:3;27663:67;27727:2;27722:3;27663:67;:::i;:::-;27656:74;;27739:93;27828:3;27739:93;:::i;:::-;27857:2;27852:3;27848:12;27841:19;;27500:366;;;:::o;27872:419::-;28038:4;28076:2;28065:9;28061:18;28053:26;;28125:9;28119:4;28115:20;28111:1;28100:9;28096:17;28089:47;28153:131;28279:4;28153:131;:::i;:::-;28145:139;;27872:419;;;:::o;28297:224::-;28437:34;28433:1;28425:6;28421:14;28414:58;28506:7;28501:2;28493:6;28489:15;28482:32;28297:224;:::o;28527:366::-;28669:3;28690:67;28754:2;28749:3;28690:67;:::i;:::-;28683:74;;28766:93;28855:3;28766:93;:::i;:::-;28884:2;28879:3;28875:12;28868:19;;28527:366;;;:::o;28899:419::-;29065:4;29103:2;29092:9;29088:18;29080:26;;29152:9;29146:4;29142:20;29138:1;29127:9;29123:17;29116:47;29180:131;29306:4;29180:131;:::i;:::-;29172:139;;28899:419;;;:::o;29324:223::-;29464:34;29460:1;29452:6;29448:14;29441:58;29533:6;29528:2;29520:6;29516:15;29509:31;29324:223;:::o;29553:366::-;29695:3;29716:67;29780:2;29775:3;29716:67;:::i;:::-;29709:74;;29792:93;29881:3;29792:93;:::i;:::-;29910:2;29905:3;29901:12;29894:19;;29553:366;;;:::o;29925:419::-;30091:4;30129:2;30118:9;30114:18;30106:26;;30178:9;30172:4;30168:20;30164:1;30153:9;30149:17;30142:47;30206:131;30332:4;30206:131;:::i;:::-;30198:139;;29925:419;;;:::o;30350:191::-;30390:4;30410:20;30428:1;30410:20;:::i;:::-;30405:25;;30444:20;30462:1;30444:20;:::i;:::-;30439:25;;30483:1;30480;30477:8;30474:34;;;30488:18;;:::i;:::-;30474:34;30533:1;30530;30526:9;30518:17;;30350:191;;;;:::o;30547:175::-;30687:27;30683:1;30675:6;30671:14;30664:51;30547:175;:::o;30728:366::-;30870:3;30891:67;30955:2;30950:3;30891:67;:::i;:::-;30884:74;;30967:93;31056:3;30967:93;:::i;:::-;31085:2;31080:3;31076:12;31069:19;;30728:366;;;:::o;31100:419::-;31266:4;31304:2;31293:9;31289:18;31281:26;;31353:9;31347:4;31343:20;31339:1;31328:9;31324:17;31317:47;31381:131;31507:4;31381:131;:::i;:::-;31373:139;;31100:419;;;:::o;31525:237::-;31665:34;31661:1;31653:6;31649:14;31642:58;31734:20;31729:2;31721:6;31717:15;31710:45;31525:237;:::o;31768:366::-;31910:3;31931:67;31995:2;31990:3;31931:67;:::i;:::-;31924:74;;32007:93;32096:3;32007:93;:::i;:::-;32125:2;32120:3;32116:12;32109:19;;31768:366;;;:::o;32140:419::-;32306:4;32344:2;32333:9;32329:18;32321:26;;32393:9;32387:4;32383:20;32379:1;32368:9;32364:17;32357:47;32421:131;32547:4;32421:131;:::i;:::-;32413:139;;32140:419;;;:::o;32565:236::-;32705:34;32701:1;32693:6;32689:14;32682:58;32774:19;32769:2;32761:6;32757:15;32750:44;32565:236;:::o;32807:366::-;32949:3;32970:67;33034:2;33029:3;32970:67;:::i;:::-;32963:74;;33046:93;33135:3;33046:93;:::i;:::-;33164:2;33159:3;33155:12;33148:19;;32807:366;;;:::o;33179:419::-;33345:4;33383:2;33372:9;33368:18;33360:26;;33432:9;33426:4;33422:20;33418:1;33407:9;33403:17;33396:47;33460:131;33586:4;33460:131;:::i;:::-;33452:139;;33179:419;;;:::o;33604:148::-;33706:11;33743:3;33728:18;;33604:148;;;;:::o;33758:377::-;33864:3;33892:39;33925:5;33892:39;:::i;:::-;33947:89;34029:6;34024:3;33947:89;:::i;:::-;33940:96;;34045:52;34090:6;34085:3;34078:4;34071:5;34067:16;34045:52;:::i;:::-;34122:6;34117:3;34113:16;34106:23;;33868:267;33758:377;;;;:::o;34141:435::-;34321:3;34343:95;34434:3;34425:6;34343:95;:::i;:::-;34336:102;;34455:95;34546:3;34537:6;34455:95;:::i;:::-;34448:102;;34567:3;34560:10;;34141:435;;;;;:::o;34582:98::-;34633:6;34667:5;34661:12;34651:22;;34582:98;;;:::o;34686:168::-;34769:11;34803:6;34798:3;34791:19;34843:4;34838:3;34834:14;34819:29;;34686:168;;;;:::o;34860:360::-;34946:3;34974:38;35006:5;34974:38;:::i;:::-;35028:70;35091:6;35086:3;35028:70;:::i;:::-;35021:77;;35107:52;35152:6;35147:3;35140:4;35133:5;35129:16;35107:52;:::i;:::-;35184:29;35206:6;35184:29;:::i;:::-;35179:3;35175:39;35168:46;;34950:270;34860:360;;;;:::o;35226:640::-;35421:4;35459:3;35448:9;35444:19;35436:27;;35473:71;35541:1;35530:9;35526:17;35517:6;35473:71;:::i;:::-;35554:72;35622:2;35611:9;35607:18;35598:6;35554:72;:::i;:::-;35636;35704:2;35693:9;35689:18;35680:6;35636:72;:::i;:::-;35755:9;35749:4;35745:20;35740:2;35729:9;35725:18;35718:48;35783:76;35854:4;35845:6;35783:76;:::i;:::-;35775:84;;35226:640;;;;;;;:::o;35872:141::-;35928:5;35959:6;35953:13;35944:22;;35975:32;36001:5;35975:32;:::i;:::-;35872:141;;;;:::o;36019:349::-;36088:6;36137:2;36125:9;36116:7;36112:23;36108:32;36105:119;;;36143:79;;:::i;:::-;36105:119;36263:1;36288:63;36343:7;36334:6;36323:9;36319:22;36288:63;:::i;:::-;36278:73;;36234:127;36019:349;;;;:::o;36374:234::-;36514:34;36510:1;36502:6;36498:14;36491:58;36583:17;36578:2;36570:6;36566:15;36559:42;36374:234;:::o;36614:366::-;36756:3;36777:67;36841:2;36836:3;36777:67;:::i;:::-;36770:74;;36853:93;36942:3;36853:93;:::i;:::-;36971:2;36966:3;36962:12;36955:19;;36614:366;;;:::o;36986:419::-;37152:4;37190:2;37179:9;37175:18;37167:26;;37239:9;37233:4;37229:20;37225:1;37214:9;37210:17;37203:47;37267:131;37393:4;37267:131;:::i;:::-;37259:139;;36986:419;;;:::o;37411:233::-;37450:3;37473:24;37491:5;37473:24;:::i;:::-;37464:33;;37519:66;37512:5;37509:77;37506:103;;;37589:18;;:::i;:::-;37506:103;37636:1;37629:5;37625:13;37618:20;;37411:233;;;:::o;37650:180::-;37698:77;37695:1;37688:88;37795:4;37792:1;37785:15;37819:4;37816:1;37809:15;37836:185;37876:1;37893:20;37911:1;37893:20;:::i;:::-;37888:25;;37927:20;37945:1;37927:20;:::i;:::-;37922:25;;37966:1;37956:35;;37971:18;;:::i;:::-;37956:35;38013:1;38010;38006:9;38001:14;;37836:185;;;;:::o;38027:176::-;38059:1;38076:20;38094:1;38076:20;:::i;:::-;38071:25;;38110:20;38128:1;38110:20;:::i;:::-;38105:25;;38149:1;38139:35;;38154:18;;:::i;:::-;38139:35;38195:1;38192;38188:9;38183:14;;38027:176;;;;:::o;38209:180::-;38257:77;38254:1;38247:88;38354:4;38351:1;38344:15;38378:4;38375:1;38368:15
Swarm Source
ipfs://e75ac2957bb4cbef05ad30869bb8b0fb65b10aa1f4a86b8b9e486605baec9c0d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.