Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
234 gaiyc.wtf
Holders
16
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
19 gaiyc.wtfLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
nftcontract
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-03 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // 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); // ============================== // IERC721 // ============================== /** * @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); // ============================== // IERC721Metadata // ============================== /** * @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: erc721a/contracts/ERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), 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 { _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 { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // 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: contract.sol pragma solidity >=0.8.13 <0.9.0; contract nftcontract is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; // ================== Variables Start ======================= string public uri; string public unrevealed= "https://gaiyc.wtf/tokens/unreveal.json"; uint256 public cost2 = 0.0069 ether; uint256 public supplyLimit = 9999; uint256 public maxMintAmountPerTx = 5; uint256 public maxLimitPerWallet = 20; bool public freesale = false; bool public publicsale = true; bool public revealed = false; string public names= "Goblin AI Yacht Club"; string public symbols= "gaiyc.wtf"; // ================== Variables End ======================= // ================== Constructor Start ======================= constructor( string memory _uri ) ERC721A(names, symbols) { seturi(_uri); } // ================== Constructor End ======================= // ================== Mint Functions Start ======================= function namechange(string memory namme) public onlyOwner { names=namme; } function symbolchange(string memory symbolss) public onlyOwner { symbols=symbolss; } function freemint(uint256 _mintAmount) public payable { //Dynamic Price uint256 supply = totalSupply(); // Normal requirements require(freesale==true, 'Free Sale is paused!'); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, 'Invalid mint amount!'); require(supply + _mintAmount <= 2500, 'Max supply exceeded!'); require(balanceOf(msg.sender) + _mintAmount <= maxLimitPerWallet, 'Max mint per wallet exceeded!'); _safeMint(_msgSender(), _mintAmount); } function publicmint(uint256 _mintAmount) public payable { //Dynamic Price uint256 supply = totalSupply(); // Normal requirements require(publicsale==true, 'The Sale is paused!'); require(_mintAmount > 0 && _mintAmount <= 30, 'Invalid mint amount!'); require(supply + _mintAmount <= supplyLimit, 'Max supply exceeded!'); require(msg.value>=cost2*_mintAmount, "Insufficient ETH sent"); _safeMint(_msgSender(), _mintAmount); } function Airdrop(uint256 _mintAmount, address _receiver) public onlyOwner { require(totalSupply() + _mintAmount <= supplyLimit, 'Max supply exceeded!'); _safeMint(_receiver, _mintAmount); } // ================== Mint Functions End ======================= // ================== Set Functions Start ======================= // reveal function setRevealed(bool _state) public onlyOwner { revealed = _state; } // uri function seturi(string memory _uri) public onlyOwner { uri = _uri; } // sales toggle function setSaleStatus(bool _sale) public onlyOwner { freesale = _sale; } // max per tx function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } // pax per wallet function setmaxLimitPerWallet(uint256 _maxLimitPerWallet) public onlyOwner { maxLimitPerWallet = _maxLimitPerWallet; } // price function setcost2(uint256 _cost2) public onlyOwner { cost2 = _cost2; } // supply limit function setsupplyLimit(uint256 _supplyLimit) public onlyOwner { supplyLimit = _supplyLimit; } // ================== Set Functions End ======================= // ================== Withdraw Function Start ======================= function withdraw() public onlyOwner nonReentrant { //owner withdraw uint256 _85percent = address(this).balance*85/100; uint256 _15percent = address(this).balance*15/100; require(payable(0x175AF7C48304cE664aaBa4ef31d5792813B3838e).send(_15percent)); require(payable(msg.sender).send(_85percent)); } // ================== Withdraw Function End======================= // ================== Read Functions Start ======================= function price() public view returns (uint256 pricee){ if (freesale==true) { pricee= 0; } else if (freesale==false){ pricee=cost2; } } function tokensOfOwner(address owner) external view returns (uint256[] memory) { unchecked { uint256[] memory a = new uint256[](balanceOf(owner)); uint256 end = _nextTokenId(); uint256 tokenIdsIdx; address currOwnershipAddr; for (uint256 i; i < end; i++) { TokenOwnership memory ownership = _ownershipAt(i); if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { a[tokenIdsIdx++] = i; } } return a; } } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function tokenURI(uint256 tokenId) override public view returns (string memory) { if (revealed==true){ return string(abi.encodePacked("https://gaiyc.wtf/tokens/unreveal.json")); } else{ return string(abi.encodePacked(_baseURI(), "", uint256(tokenId).toString(), ".json")); } } function _baseURI() internal view virtual override returns (string memory) { return uri; } // ================== Read Functions End ======================= }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"cost2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"freemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freesale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxLimitPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"namme","type":"string"}],"name":"namechange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"names","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":"price","outputs":[{"internalType":"uint256","name":"pricee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicsale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_sale","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost2","type":"uint256"}],"name":"setcost2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxLimitPerWallet","type":"uint256"}],"name":"setmaxLimitPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supplyLimit","type":"uint256"}],"name":"setsupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"seturi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"string","name":"symbolss","type":"string"}],"name":"symbolchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbols","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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"},{"inputs":[],"name":"unrevealed","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052604051806060016040528060268152602001620048a260269139600b908051906020019062000035929190620004cd565b506618838370f34000600c5561270f600d556005600e556014600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506040518060400160405280601481526020017f476f626c696e20414920596163687420436c756200000000000000000000000081525060119080519060200190620000ef929190620004cd565b506040518060400160405280600981526020017f67616979632e7774660000000000000000000000000000000000000000000000815250601290805190602001906200013d929190620004cd565b503480156200014b57600080fd5b50604051620048c8380380620048c883398181016040528101906200017191906200071a565b6011805462000180906200079a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001ae906200079a565b8015620001ff5780601f10620001d357610100808354040283529160200191620001ff565b820191906000526020600020905b815481529060010190602001808311620001e157829003601f168201915b50505050506012805462000213906200079a565b80601f016020809104026020016040519081016040528092919081815260200182805462000241906200079a565b8015620002925780601f10620002665761010080835404028352916020019162000292565b820191906000526020600020905b8154815290600101906020018083116200027457829003601f168201915b50505050508160029080519060200190620002af929190620004cd565b508060039080519060200190620002c8929190620004cd565b50620002d96200032160201b60201c565b600081905550505062000301620002f56200032a60201b60201c565b6200033260201b60201c565b60016009819055506200031a81620003f860201b60201c565b5062000852565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004086200032a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200042e620004a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000487576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047e9062000830565b60405180910390fd5b80600a90805190602001906200049f929190620004cd565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004db906200079a565b90600052602060002090601f016020900481019282620004ff57600085556200054b565b82601f106200051a57805160ff19168380011785556200054b565b828001600101855582156200054b579182015b828111156200054a5782518255916020019190600101906200052d565b5b5090506200055a91906200055e565b5090565b5b80821115620005795760008160009055506001016200055f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005e6826200059b565b810181811067ffffffffffffffff82111715620006085762000607620005ac565b5b80604052505050565b60006200061d6200057d565b90506200062b8282620005db565b919050565b600067ffffffffffffffff8211156200064e576200064d620005ac565b5b62000659826200059b565b9050602081019050919050565b60005b838110156200068657808201518184015260208101905062000669565b8381111562000696576000848401525b50505050565b6000620006b3620006ad8462000630565b62000611565b905082815260208101848484011115620006d257620006d162000596565b5b620006df84828562000666565b509392505050565b600082601f830112620006ff57620006fe62000591565b5b8151620007118482602086016200069c565b91505092915050565b60006020828403121562000733576200073262000587565b5b600082015167ffffffffffffffff8111156200075457620007536200058c565b5b6200076284828501620006e7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007b357607f821691505b602082108103620007c957620007c86200076b565b5b50919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000818602083620007cf565b91506200082582620007e0565b602082019050919050565b600060208201905081810360008301526200084b8162000809565b9050919050565b61404080620008626000396000f3fe60806040526004361061025b5760003560e01c8063715018a611610144578063b071401b116100b6578063d9f0a6711161007a578063d9f0a671146108a5578063e0a80853146108ce578063e985e9c5146108f7578063eac989f814610934578063f2fde38b1461095f578063f6484980146109885761025b565b8063b071401b146107c2578063b88d4fde146107eb578063b94805a214610814578063c87b56dd1461083f578063d897833e1461087c5761025b565b806394354fd01161010857806394354fd0146106c457806395d89b41146106ef5780639a1b28851461071a578063a035b1fe14610745578063a22cb46514610770578063adec55ad146107995761025b565b8063715018a614610600578063715e6e58146106175780637871e154146106335780638462151c1461065c5780638da5cb5b146106995761025b565b806321a3c248116101dd5780634b1e8566116101a15780634b1e8566146104dc57806351830227146105075780635a0b8b23146105325780636352211e1461055d5780636f3c859f1461059a57806370a08231146105c35761025b565b806321a3c2481461041f57806323b872dd146104485780633ccfd60b1461047157806342842e0e14610488578063494f41a5146104b15761025b565b8063081812fc11610224578063081812fc14610347578063095ea7b3146103845780630fbe4fe2146103ad57806318160ddd146103c957806319d1997a146103f45761025b565b806275770a1461026057806301ffc9a714610289578063056da048146102c657806306fdde03146102f157806307039ff91461031c575b600080fd5b34801561026c57600080fd5b5061028760048036038101906102829190612f9b565b6109b1565b005b34801561029557600080fd5b506102b060048036038101906102ab9190613020565b610a37565b6040516102bd9190613068565b60405180910390f35b3480156102d257600080fd5b506102db610ac9565b6040516102e8919061311c565b60405180910390f35b3480156102fd57600080fd5b50610306610b57565b604051610313919061311c565b60405180910390f35b34801561032857600080fd5b50610331610be9565b60405161033e919061311c565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612f9b565b610c77565b60405161037b919061317f565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906131c6565b610cf3565b005b6103c760048036038101906103c29190612f9b565b610e99565b005b3480156103d557600080fd5b506103de611009565b6040516103eb9190613215565b60405180910390f35b34801561040057600080fd5b50610409611020565b6040516104169190613215565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f9b565b611026565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613230565b6110ac565b005b34801561047d57600080fd5b506104866110bc565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613230565b61125b565b005b3480156104bd57600080fd5b506104c661127b565b6040516104d39190613068565b60405180910390f35b3480156104e857600080fd5b506104f161128e565b6040516104fe919061311c565b60405180910390f35b34801561051357600080fd5b5061051c61131c565b6040516105299190613068565b60405180910390f35b34801561053e57600080fd5b5061054761132f565b6040516105549190613215565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612f9b565b611335565b604051610591919061317f565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906133b8565b611347565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613401565b6113dd565b6040516105f79190613215565b60405180910390f35b34801561060c57600080fd5b50610615611495565b005b610631600480360381019061062c9190612f9b565b61151d565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061342e565b611684565b005b34801561066857600080fd5b50610683600480360381019061067e9190613401565b611765565b604051610690919061352c565b60405180910390f35b3480156106a557600080fd5b506106ae6118a9565b6040516106bb919061317f565b60405180910390f35b3480156106d057600080fd5b506106d96118d3565b6040516106e69190613215565b60405180910390f35b3480156106fb57600080fd5b506107046118d9565b604051610711919061311c565b60405180910390f35b34801561072657600080fd5b5061072f61196b565b60405161073c9190613215565b60405180910390f35b34801561075157600080fd5b5061075a611971565b6040516107679190613215565b60405180910390f35b34801561077c57600080fd5b506107976004803603810190610792919061357a565b6119bc565b005b3480156107a557600080fd5b506107c060048036038101906107bb91906133b8565b611b33565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190612f9b565b611bc9565b005b3480156107f757600080fd5b50610812600480360381019061080d919061365b565b611c4f565b005b34801561082057600080fd5b50610829611cc2565b6040516108369190613068565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612f9b565b611cd5565b604051610873919061311c565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e91906136de565b611d50565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190612f9b565b611de9565b005b3480156108da57600080fd5b506108f560048036038101906108f091906136de565b611e6f565b005b34801561090357600080fd5b5061091e6004803603810190610919919061370b565b611f08565b60405161092b9190613068565b60405180910390f35b34801561094057600080fd5b50610949611f9c565b604051610956919061311c565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613401565b61202a565b005b34801561099457600080fd5b506109af60048036038101906109aa91906133b8565b612121565b005b6109b96121b7565b73ffffffffffffffffffffffffffffffffffffffff166109d76118a9565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613797565b60405180910390fd5b80600d8190555050565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ac25750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60118054610ad6906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b02906137e6565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b505050505081565b606060028054610b66906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b92906137e6565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b60128054610bf6906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c22906137e6565b8015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b505050505081565b6000610c82826121bf565b610cb8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cfe8261221e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d65576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d846122ea565b73ffffffffffffffffffffffffffffffffffffffff1614610de757610db081610dab6122ea565b611f08565b610de6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610ea3611009565b905060011515601060009054906101000a900460ff16151514610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290613863565b60405180910390fd5b600082118015610f0d5750600e548211155b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f43906138cf565b60405180910390fd5b6109c48282610f5b919061391e565b1115610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906139c0565b60405180910390fd5b600f5482610fa9336113dd565b610fb3919061391e565b1115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613a2c565b60405180910390fd5b611005610fff6121b7565b836122f2565b5050565b6000611013612310565b6001546000540303905090565b600d5481565b61102e6121b7565b73ffffffffffffffffffffffffffffffffffffffff1661104c6118a9565b73ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613797565b60405180910390fd5b80600c8190555050565b6110b7838383612319565b505050565b6110c46121b7565b73ffffffffffffffffffffffffffffffffffffffff166110e26118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613797565b60405180910390fd5b60026009540361117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490613a98565b60405180910390fd5b6002600981905550600060646055476111969190613ab8565b6111a09190613b41565b905060006064600f476111b39190613ab8565b6111bd9190613b41565b905073175af7c48304ce664aaba4ef31d5792813b3838e73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061121157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061124f57600080fd5b50506001600981905550565b61127683838360405180602001604052806000815250611c4f565b505050565b601060009054906101000a900460ff1681565b600b805461129b906137e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112c7906137e6565b80156113145780601f106112e957610100808354040283529160200191611314565b820191906000526020600020905b8154815290600101906020018083116112f757829003601f168201915b505050505081565b601060029054906101000a900460ff1681565b600f5481565b60006113408261221e565b9050919050565b61134f6121b7565b73ffffffffffffffffffffffffffffffffffffffff1661136d6118a9565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613797565b60405180910390fd5b80601290805190602001906113d9929190612e6b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611444576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61149d6121b7565b73ffffffffffffffffffffffffffffffffffffffff166114bb6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613797565b60405180910390fd5b61151b60006126c0565b565b6000611527611009565b905060011515601060019054906101000a900460ff1615151461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613bbe565b60405180910390fd5b6000821180156115905750601e8211155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c6906138cf565b60405180910390fd5b600d5482826115de919061391e565b111561161f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611616906139c0565b60405180910390fd5b81600c5461162d9190613ab8565b34101561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613c2a565b60405180910390fd5b61168061167a6121b7565b836122f2565b5050565b61168c6121b7565b73ffffffffffffffffffffffffffffffffffffffff166116aa6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613797565b60405180910390fd5b600d548261170c611009565b611716919061391e565b1115611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906139c0565b60405180910390fd5b61176181836122f2565b5050565b60606000611772836113dd565b67ffffffffffffffff81111561178b5761178a61328d565b5b6040519080825280602002602001820160405280156117b95781602001602082028036833780820191505090505b50905060006117c6612786565b905060008060005b8381101561189c5760006117e18261278f565b90508060400151156117f3575061188f565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461183357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361188d57818685806001019650815181106118805761187f613c4a565b5b6020026020010181815250505b505b80806001019150506117ce565b5083945050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600380546118e8906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611914906137e6565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050905090565b600c5481565b600060011515601060009054906101000a900460ff1615150361199757600090506119b9565b60001515601060009054906101000a900460ff161515036119b857600c5490505b5b90565b6119c46122ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a28576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611a356122ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae26122ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b279190613068565b60405180910390a35050565b611b3b6121b7565b73ffffffffffffffffffffffffffffffffffffffff16611b596118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613797565b60405180910390fd5b8060119080519060200190611bc5929190612e6b565b5050565b611bd16121b7565b73ffffffffffffffffffffffffffffffffffffffff16611bef6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90613797565b60405180910390fd5b80600e8190555050565b611c5a848484612319565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611cbc57611c85848484846127ba565b611cbb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b601060019054906101000a900460ff1681565b606060011515601060029054906101000a900460ff16151503611d1757604051602001611d0190613cf6565b6040516020818303038152906040529050611d4b565b611d1f61290a565b611d288361299c565b604051602001611d39929190613dae565b60405160208183030381529060405290505b919050565b611d586121b7565b73ffffffffffffffffffffffffffffffffffffffff16611d766118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613797565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611df16121b7565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90613797565b60405180910390fd5b80600f8190555050565b611e776121b7565b73ffffffffffffffffffffffffffffffffffffffff16611e956118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613797565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611fa9906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd5906137e6565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b505050505081565b6120326121b7565b73ffffffffffffffffffffffffffffffffffffffff166120506118a9565b73ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613797565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90613e5a565b60405180910390fd5b61211e816126c0565b50565b6121296121b7565b73ffffffffffffffffffffffffffffffffffffffff166121476118a9565b73ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490613797565b60405180910390fd5b80600a90805190602001906121b3929190612e6b565b5050565b600033905090565b6000816121ca612310565b111580156121d9575060005482105b8015612217575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000808290508061222d612310565b116122b3576000548110156122b25760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036122b0575b600081036122a657600460008360019003935083815260200190815260200160002054905061227c565b80925050506122e5565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b61230c828260405180602001604052806000815250612afc565b5050565b60006001905090565b60006123248261221e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461238b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123ac6122ea565b73ffffffffffffffffffffffffffffffffffffffff1614806123db57506123da856123d56122ea565b611f08565b5b8061242057506123e96122ea565b73ffffffffffffffffffffffffffffffffffffffff1661240884610c77565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612459576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124bf576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124cc8585856001612daf565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6125c986612db5565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831603612651576000600184019050600060046000838152602001908152602001600020540361264f57600054811461264e578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126b98585856001612dbf565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008054905090565b612797612ef1565b6127b36004600084815260200190815260200160002054612dc5565b9050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e06122ea565b8786866040518563ffffffff1660e01b81526004016128029493929190613ecf565b6020604051808303816000875af192505050801561283e57506040513d601f19601f8201168201806040525081019061283b9190613f30565b60015b6128b7573d806000811461286e576040519150601f19603f3d011682016040523d82523d6000602084013e612873565b606091505b5060008151036128af576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612919906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612945906137e6565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b5050505050905090565b6060600082036129e3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af7565b600082905060005b60008214612a155780806129fe90613f5d565b915050600a82612a0e9190613b41565b91506129eb565b60008167ffffffffffffffff811115612a3157612a3061328d565b5b6040519080825280601f01601f191660200182016040528015612a635781602001600182028036833780820191505090505b5090505b60008514612af057600182612a7c9190613fa5565b9150600a85612a8b9190613fd9565b6030612a97919061391e565b60f81b818381518110612aad57612aac613c4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae99190613b41565b9450612a67565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b68576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303612ba2576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612baf6000858386612daf565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612c1460018514612e61565b901b60a042901b612c2486612db5565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612d28575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cd860008784806001019550876127ba565b612d0e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c69578260005414612d2357600080fd5b612d93565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612d29575b816000819055505050612da96000858386612dbf565b50505050565b50505050565b6000819050919050565b50505050565b612dcd612ef1565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c010000000000000000000000000000000000000000000000000000000083161415816040019015159081151581525050919050565b6000819050919050565b828054612e77906137e6565b90600052602060002090601f016020900481019282612e995760008555612ee0565b82601f10612eb257805160ff1916838001178555612ee0565b82800160010185558215612ee0579182015b82811115612edf578251825591602001919060010190612ec4565b5b509050612eed9190612f34565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f4d576000816000905550600101612f35565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612f7881612f65565b8114612f8357600080fd5b50565b600081359050612f9581612f6f565b92915050565b600060208284031215612fb157612fb0612f5b565b5b6000612fbf84828501612f86565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ffd81612fc8565b811461300857600080fd5b50565b60008135905061301a81612ff4565b92915050565b60006020828403121561303657613035612f5b565b5b60006130448482850161300b565b91505092915050565b60008115159050919050565b6130628161304d565b82525050565b600060208201905061307d6000830184613059565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130bd5780820151818401526020810190506130a2565b838111156130cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ee82613083565b6130f8818561308e565b935061310881856020860161309f565b613111816130d2565b840191505092915050565b6000602082019050818103600083015261313681846130e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131698261313e565b9050919050565b6131798161315e565b82525050565b60006020820190506131946000830184613170565b92915050565b6131a38161315e565b81146131ae57600080fd5b50565b6000813590506131c08161319a565b92915050565b600080604083850312156131dd576131dc612f5b565b5b60006131eb858286016131b1565b92505060206131fc85828601612f86565b9150509250929050565b61320f81612f65565b82525050565b600060208201905061322a6000830184613206565b92915050565b60008060006060848603121561324957613248612f5b565b5b6000613257868287016131b1565b9350506020613268868287016131b1565b925050604061327986828701612f86565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132c5826130d2565b810181811067ffffffffffffffff821117156132e4576132e361328d565b5b80604052505050565b60006132f7612f51565b905061330382826132bc565b919050565b600067ffffffffffffffff8211156133235761332261328d565b5b61332c826130d2565b9050602081019050919050565b82818337600083830152505050565b600061335b61335684613308565b6132ed565b90508281526020810184848401111561337757613376613288565b5b613382848285613339565b509392505050565b600082601f83011261339f5761339e613283565b5b81356133af848260208601613348565b91505092915050565b6000602082840312156133ce576133cd612f5b565b5b600082013567ffffffffffffffff8111156133ec576133eb612f60565b5b6133f88482850161338a565b91505092915050565b60006020828403121561341757613416612f5b565b5b6000613425848285016131b1565b91505092915050565b6000806040838503121561344557613444612f5b565b5b600061345385828601612f86565b9250506020613464858286016131b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134a381612f65565b82525050565b60006134b5838361349a565b60208301905092915050565b6000602082019050919050565b60006134d98261346e565b6134e38185613479565b93506134ee8361348a565b8060005b8381101561351f57815161350688826134a9565b9750613511836134c1565b9250506001810190506134f2565b5085935050505092915050565b6000602082019050818103600083015261354681846134ce565b905092915050565b6135578161304d565b811461356257600080fd5b50565b6000813590506135748161354e565b92915050565b6000806040838503121561359157613590612f5b565b5b600061359f858286016131b1565b92505060206135b085828601613565565b9150509250929050565b600067ffffffffffffffff8211156135d5576135d461328d565b5b6135de826130d2565b9050602081019050919050565b60006135fe6135f9846135ba565b6132ed565b90508281526020810184848401111561361a57613619613288565b5b613625848285613339565b509392505050565b600082601f83011261364257613641613283565b5b81356136528482602086016135eb565b91505092915050565b6000806000806080858703121561367557613674612f5b565b5b6000613683878288016131b1565b9450506020613694878288016131b1565b93505060406136a587828801612f86565b925050606085013567ffffffffffffffff8111156136c6576136c5612f60565b5b6136d28782880161362d565b91505092959194509250565b6000602082840312156136f4576136f3612f5b565b5b600061370284828501613565565b91505092915050565b6000806040838503121561372257613721612f5b565b5b6000613730858286016131b1565b9250506020613741858286016131b1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061378160208361308e565b915061378c8261374b565b602082019050919050565b600060208201905081810360008301526137b081613774565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137fe57607f821691505b602082108103613811576138106137b7565b5b50919050565b7f467265652053616c652069732070617573656421000000000000000000000000600082015250565b600061384d60148361308e565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006138b960148361308e565b91506138c482613883565b602082019050919050565b600060208201905081810360008301526138e8816138ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392982612f65565b915061393483612f65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613969576139686138ef565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006139aa60148361308e565b91506139b582613974565b602082019050919050565b600060208201905081810360008301526139d98161399d565b9050919050565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b6000613a16601d8361308e565b9150613a21826139e0565b602082019050919050565b60006020820190508181036000830152613a4581613a09565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613a82601f8361308e565b9150613a8d82613a4c565b602082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b6000613ac382612f65565b9150613ace83612f65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b0757613b066138ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b4c82612f65565b9150613b5783612f65565b925082613b6757613b66613b12565b5b828204905092915050565b7f5468652053616c65206973207061757365642100000000000000000000000000600082015250565b6000613ba860138361308e565b9150613bb382613b72565b602082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f496e73756666696369656e74204554482073656e740000000000000000000000600082015250565b6000613c1460158361308e565b9150613c1f82613bde565b602082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f68747470733a2f2f67616979632e7774662f746f6b656e732f756e726576656160008201527f6c2e6a736f6e0000000000000000000000000000000000000000000000000000602082015250565b6000613ce0602683613c79565b9150613ceb82613c84565b602682019050919050565b6000613d0182613cd3565b9150819050919050565b6000613d1682613083565b613d208185613c79565b9350613d3081856020860161309f565b80840191505092915050565b50565b6000613d4c600083613c79565b9150613d5782613d3c565b600082019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613d98600583613c79565b9150613da382613d62565b600582019050919050565b6000613dba8285613d0b565b9150613dc582613d3f565b9150613dd18284613d0b565b9150613ddc82613d8b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e4460268361308e565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ea182613e7a565b613eab8185613e85565b9350613ebb81856020860161309f565b613ec4816130d2565b840191505092915050565b6000608082019050613ee46000830187613170565b613ef16020830186613170565b613efe6040830185613206565b8181036060830152613f108184613e96565b905095945050505050565b600081519050613f2a81612ff4565b92915050565b600060208284031215613f4657613f45612f5b565b5b6000613f5484828501613f1b565b91505092915050565b6000613f6882612f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9a57613f996138ef565b5b600182019050919050565b6000613fb082612f65565b9150613fbb83612f65565b925082821015613fce57613fcd6138ef565b5b828203905092915050565b6000613fe482612f65565b9150613fef83612f65565b925082613fff57613ffe613b12565b5b82820690509291505056fea264697066735822122059d6f8a7dd301d44919a5fc9da1f1b37e199fa3e78b61210b42af80341c76a8164736f6c634300080d003368747470733a2f2f67616979632e7774662f746f6b656e732f756e72657665616c2e6a736f6e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f67616979632e7774662f746f6b656e732f00000000000000
Deployed Bytecode
0x60806040526004361061025b5760003560e01c8063715018a611610144578063b071401b116100b6578063d9f0a6711161007a578063d9f0a671146108a5578063e0a80853146108ce578063e985e9c5146108f7578063eac989f814610934578063f2fde38b1461095f578063f6484980146109885761025b565b8063b071401b146107c2578063b88d4fde146107eb578063b94805a214610814578063c87b56dd1461083f578063d897833e1461087c5761025b565b806394354fd01161010857806394354fd0146106c457806395d89b41146106ef5780639a1b28851461071a578063a035b1fe14610745578063a22cb46514610770578063adec55ad146107995761025b565b8063715018a614610600578063715e6e58146106175780637871e154146106335780638462151c1461065c5780638da5cb5b146106995761025b565b806321a3c248116101dd5780634b1e8566116101a15780634b1e8566146104dc57806351830227146105075780635a0b8b23146105325780636352211e1461055d5780636f3c859f1461059a57806370a08231146105c35761025b565b806321a3c2481461041f57806323b872dd146104485780633ccfd60b1461047157806342842e0e14610488578063494f41a5146104b15761025b565b8063081812fc11610224578063081812fc14610347578063095ea7b3146103845780630fbe4fe2146103ad57806318160ddd146103c957806319d1997a146103f45761025b565b806275770a1461026057806301ffc9a714610289578063056da048146102c657806306fdde03146102f157806307039ff91461031c575b600080fd5b34801561026c57600080fd5b5061028760048036038101906102829190612f9b565b6109b1565b005b34801561029557600080fd5b506102b060048036038101906102ab9190613020565b610a37565b6040516102bd9190613068565b60405180910390f35b3480156102d257600080fd5b506102db610ac9565b6040516102e8919061311c565b60405180910390f35b3480156102fd57600080fd5b50610306610b57565b604051610313919061311c565b60405180910390f35b34801561032857600080fd5b50610331610be9565b60405161033e919061311c565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190612f9b565b610c77565b60405161037b919061317f565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906131c6565b610cf3565b005b6103c760048036038101906103c29190612f9b565b610e99565b005b3480156103d557600080fd5b506103de611009565b6040516103eb9190613215565b60405180910390f35b34801561040057600080fd5b50610409611020565b6040516104169190613215565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f9b565b611026565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613230565b6110ac565b005b34801561047d57600080fd5b506104866110bc565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613230565b61125b565b005b3480156104bd57600080fd5b506104c661127b565b6040516104d39190613068565b60405180910390f35b3480156104e857600080fd5b506104f161128e565b6040516104fe919061311c565b60405180910390f35b34801561051357600080fd5b5061051c61131c565b6040516105299190613068565b60405180910390f35b34801561053e57600080fd5b5061054761132f565b6040516105549190613215565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612f9b565b611335565b604051610591919061317f565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906133b8565b611347565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190613401565b6113dd565b6040516105f79190613215565b60405180910390f35b34801561060c57600080fd5b50610615611495565b005b610631600480360381019061062c9190612f9b565b61151d565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061342e565b611684565b005b34801561066857600080fd5b50610683600480360381019061067e9190613401565b611765565b604051610690919061352c565b60405180910390f35b3480156106a557600080fd5b506106ae6118a9565b6040516106bb919061317f565b60405180910390f35b3480156106d057600080fd5b506106d96118d3565b6040516106e69190613215565b60405180910390f35b3480156106fb57600080fd5b506107046118d9565b604051610711919061311c565b60405180910390f35b34801561072657600080fd5b5061072f61196b565b60405161073c9190613215565b60405180910390f35b34801561075157600080fd5b5061075a611971565b6040516107679190613215565b60405180910390f35b34801561077c57600080fd5b506107976004803603810190610792919061357a565b6119bc565b005b3480156107a557600080fd5b506107c060048036038101906107bb91906133b8565b611b33565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190612f9b565b611bc9565b005b3480156107f757600080fd5b50610812600480360381019061080d919061365b565b611c4f565b005b34801561082057600080fd5b50610829611cc2565b6040516108369190613068565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190612f9b565b611cd5565b604051610873919061311c565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e91906136de565b611d50565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190612f9b565b611de9565b005b3480156108da57600080fd5b506108f560048036038101906108f091906136de565b611e6f565b005b34801561090357600080fd5b5061091e6004803603810190610919919061370b565b611f08565b60405161092b9190613068565b60405180910390f35b34801561094057600080fd5b50610949611f9c565b604051610956919061311c565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613401565b61202a565b005b34801561099457600080fd5b506109af60048036038101906109aa91906133b8565b612121565b005b6109b96121b7565b73ffffffffffffffffffffffffffffffffffffffff166109d76118a9565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613797565b60405180910390fd5b80600d8190555050565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ac25750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60118054610ad6906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b02906137e6565b8015610b4f5780601f10610b2457610100808354040283529160200191610b4f565b820191906000526020600020905b815481529060010190602001808311610b3257829003601f168201915b505050505081565b606060028054610b66906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b92906137e6565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b60128054610bf6906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c22906137e6565b8015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b505050505081565b6000610c82826121bf565b610cb8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cfe8261221e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d65576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d846122ea565b73ffffffffffffffffffffffffffffffffffffffff1614610de757610db081610dab6122ea565b611f08565b610de6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610ea3611009565b905060011515601060009054906101000a900460ff16151514610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290613863565b60405180910390fd5b600082118015610f0d5750600e548211155b610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f43906138cf565b60405180910390fd5b6109c48282610f5b919061391e565b1115610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f93906139c0565b60405180910390fd5b600f5482610fa9336113dd565b610fb3919061391e565b1115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613a2c565b60405180910390fd5b611005610fff6121b7565b836122f2565b5050565b6000611013612310565b6001546000540303905090565b600d5481565b61102e6121b7565b73ffffffffffffffffffffffffffffffffffffffff1661104c6118a9565b73ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613797565b60405180910390fd5b80600c8190555050565b6110b7838383612319565b505050565b6110c46121b7565b73ffffffffffffffffffffffffffffffffffffffff166110e26118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90613797565b60405180910390fd5b60026009540361117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490613a98565b60405180910390fd5b6002600981905550600060646055476111969190613ab8565b6111a09190613b41565b905060006064600f476111b39190613ab8565b6111bd9190613b41565b905073175af7c48304ce664aaba4ef31d5792813b3838e73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061121157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505061124f57600080fd5b50506001600981905550565b61127683838360405180602001604052806000815250611c4f565b505050565b601060009054906101000a900460ff1681565b600b805461129b906137e6565b80601f01602080910402602001604051908101604052809291908181526020018280546112c7906137e6565b80156113145780601f106112e957610100808354040283529160200191611314565b820191906000526020600020905b8154815290600101906020018083116112f757829003601f168201915b505050505081565b601060029054906101000a900460ff1681565b600f5481565b60006113408261221e565b9050919050565b61134f6121b7565b73ffffffffffffffffffffffffffffffffffffffff1661136d6118a9565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613797565b60405180910390fd5b80601290805190602001906113d9929190612e6b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611444576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61149d6121b7565b73ffffffffffffffffffffffffffffffffffffffff166114bb6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613797565b60405180910390fd5b61151b60006126c0565b565b6000611527611009565b905060011515601060019054906101000a900460ff1615151461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613bbe565b60405180910390fd5b6000821180156115905750601e8211155b6115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c6906138cf565b60405180910390fd5b600d5482826115de919061391e565b111561161f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611616906139c0565b60405180910390fd5b81600c5461162d9190613ab8565b34101561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613c2a565b60405180910390fd5b61168061167a6121b7565b836122f2565b5050565b61168c6121b7565b73ffffffffffffffffffffffffffffffffffffffff166116aa6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790613797565b60405180910390fd5b600d548261170c611009565b611716919061391e565b1115611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e906139c0565b60405180910390fd5b61176181836122f2565b5050565b60606000611772836113dd565b67ffffffffffffffff81111561178b5761178a61328d565b5b6040519080825280602002602001820160405280156117b95781602001602082028036833780820191505090505b50905060006117c6612786565b905060008060005b8381101561189c5760006117e18261278f565b90508060400151156117f3575061188f565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461183357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361188d57818685806001019650815181106118805761187f613c4a565b5b6020026020010181815250505b505b80806001019150506117ce565b5083945050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600380546118e8906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611914906137e6565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050905090565b600c5481565b600060011515601060009054906101000a900460ff1615150361199757600090506119b9565b60001515601060009054906101000a900460ff161515036119b857600c5490505b5b90565b6119c46122ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a28576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611a356122ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ae26122ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b279190613068565b60405180910390a35050565b611b3b6121b7565b73ffffffffffffffffffffffffffffffffffffffff16611b596118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba690613797565b60405180910390fd5b8060119080519060200190611bc5929190612e6b565b5050565b611bd16121b7565b73ffffffffffffffffffffffffffffffffffffffff16611bef6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90613797565b60405180910390fd5b80600e8190555050565b611c5a848484612319565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611cbc57611c85848484846127ba565b611cbb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b601060019054906101000a900460ff1681565b606060011515601060029054906101000a900460ff16151503611d1757604051602001611d0190613cf6565b6040516020818303038152906040529050611d4b565b611d1f61290a565b611d288361299c565b604051602001611d39929190613dae565b60405160208183030381529060405290505b919050565b611d586121b7565b73ffffffffffffffffffffffffffffffffffffffff16611d766118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613797565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611df16121b7565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90613797565b60405180910390fd5b80600f8190555050565b611e776121b7565b73ffffffffffffffffffffffffffffffffffffffff16611e956118a9565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613797565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611fa9906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd5906137e6565b80156120225780601f10611ff757610100808354040283529160200191612022565b820191906000526020600020905b81548152906001019060200180831161200557829003601f168201915b505050505081565b6120326121b7565b73ffffffffffffffffffffffffffffffffffffffff166120506118a9565b73ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613797565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c90613e5a565b60405180910390fd5b61211e816126c0565b50565b6121296121b7565b73ffffffffffffffffffffffffffffffffffffffff166121476118a9565b73ffffffffffffffffffffffffffffffffffffffff161461219d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219490613797565b60405180910390fd5b80600a90805190602001906121b3929190612e6b565b5050565b600033905090565b6000816121ca612310565b111580156121d9575060005482105b8015612217575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000808290508061222d612310565b116122b3576000548110156122b25760006004600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036122b0575b600081036122a657600460008360019003935083815260200190815260200160002054905061227c565b80925050506122e5565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b61230c828260405180602001604052806000815250612afc565b5050565b60006001905090565b60006123248261221e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461238b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123ac6122ea565b73ffffffffffffffffffffffffffffffffffffffff1614806123db57506123da856123d56122ea565b611f08565b5b8061242057506123e96122ea565b73ffffffffffffffffffffffffffffffffffffffff1661240884610c77565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612459576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124bf576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124cc8585856001612daf565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6125c986612db5565b1717600460008581526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000831603612651576000600184019050600060046000838152602001908152602001600020540361264f57600054811461264e578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126b98585856001612dbf565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008054905090565b612797612ef1565b6127b36004600084815260200190815260200160002054612dc5565b9050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127e06122ea565b8786866040518563ffffffff1660e01b81526004016128029493929190613ecf565b6020604051808303816000875af192505050801561283e57506040513d601f19601f8201168201806040525081019061283b9190613f30565b60015b6128b7573d806000811461286e576040519150601f19603f3d011682016040523d82523d6000602084013e612873565b606091505b5060008151036128af576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612919906137e6565b80601f0160208091040260200160405190810160405280929190818152602001828054612945906137e6565b80156129925780601f1061296757610100808354040283529160200191612992565b820191906000526020600020905b81548152906001019060200180831161297557829003601f168201915b5050505050905090565b6060600082036129e3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612af7565b600082905060005b60008214612a155780806129fe90613f5d565b915050600a82612a0e9190613b41565b91506129eb565b60008167ffffffffffffffff811115612a3157612a3061328d565b5b6040519080825280601f01601f191660200182016040528015612a635781602001600182028036833780820191505090505b5090505b60008514612af057600182612a7c9190613fa5565b9150600a85612a8b9190613fd9565b6030612a97919061391e565b60f81b818381518110612aad57612aac613c4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ae99190613b41565b9450612a67565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b68576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008303612ba2576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612baf6000858386612daf565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e1612c1460018514612e61565b901b60a042901b612c2486612db5565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612d28575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cd860008784806001019550876127ba565b612d0e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612c69578260005414612d2357600080fd5b612d93565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612d29575b816000819055505050612da96000858386612dbf565b50505050565b50505050565b6000819050919050565b50505050565b612dcd612ef1565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c010000000000000000000000000000000000000000000000000000000083161415816040019015159081151581525050919050565b6000819050919050565b828054612e77906137e6565b90600052602060002090601f016020900481019282612e995760008555612ee0565b82601f10612eb257805160ff1916838001178555612ee0565b82800160010185558215612ee0579182015b82811115612edf578251825591602001919060010190612ec4565b5b509050612eed9190612f34565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612f4d576000816000905550600101612f35565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612f7881612f65565b8114612f8357600080fd5b50565b600081359050612f9581612f6f565b92915050565b600060208284031215612fb157612fb0612f5b565b5b6000612fbf84828501612f86565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ffd81612fc8565b811461300857600080fd5b50565b60008135905061301a81612ff4565b92915050565b60006020828403121561303657613035612f5b565b5b60006130448482850161300b565b91505092915050565b60008115159050919050565b6130628161304d565b82525050565b600060208201905061307d6000830184613059565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130bd5780820151818401526020810190506130a2565b838111156130cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006130ee82613083565b6130f8818561308e565b935061310881856020860161309f565b613111816130d2565b840191505092915050565b6000602082019050818103600083015261313681846130e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131698261313e565b9050919050565b6131798161315e565b82525050565b60006020820190506131946000830184613170565b92915050565b6131a38161315e565b81146131ae57600080fd5b50565b6000813590506131c08161319a565b92915050565b600080604083850312156131dd576131dc612f5b565b5b60006131eb858286016131b1565b92505060206131fc85828601612f86565b9150509250929050565b61320f81612f65565b82525050565b600060208201905061322a6000830184613206565b92915050565b60008060006060848603121561324957613248612f5b565b5b6000613257868287016131b1565b9350506020613268868287016131b1565b925050604061327986828701612f86565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132c5826130d2565b810181811067ffffffffffffffff821117156132e4576132e361328d565b5b80604052505050565b60006132f7612f51565b905061330382826132bc565b919050565b600067ffffffffffffffff8211156133235761332261328d565b5b61332c826130d2565b9050602081019050919050565b82818337600083830152505050565b600061335b61335684613308565b6132ed565b90508281526020810184848401111561337757613376613288565b5b613382848285613339565b509392505050565b600082601f83011261339f5761339e613283565b5b81356133af848260208601613348565b91505092915050565b6000602082840312156133ce576133cd612f5b565b5b600082013567ffffffffffffffff8111156133ec576133eb612f60565b5b6133f88482850161338a565b91505092915050565b60006020828403121561341757613416612f5b565b5b6000613425848285016131b1565b91505092915050565b6000806040838503121561344557613444612f5b565b5b600061345385828601612f86565b9250506020613464858286016131b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6134a381612f65565b82525050565b60006134b5838361349a565b60208301905092915050565b6000602082019050919050565b60006134d98261346e565b6134e38185613479565b93506134ee8361348a565b8060005b8381101561351f57815161350688826134a9565b9750613511836134c1565b9250506001810190506134f2565b5085935050505092915050565b6000602082019050818103600083015261354681846134ce565b905092915050565b6135578161304d565b811461356257600080fd5b50565b6000813590506135748161354e565b92915050565b6000806040838503121561359157613590612f5b565b5b600061359f858286016131b1565b92505060206135b085828601613565565b9150509250929050565b600067ffffffffffffffff8211156135d5576135d461328d565b5b6135de826130d2565b9050602081019050919050565b60006135fe6135f9846135ba565b6132ed565b90508281526020810184848401111561361a57613619613288565b5b613625848285613339565b509392505050565b600082601f83011261364257613641613283565b5b81356136528482602086016135eb565b91505092915050565b6000806000806080858703121561367557613674612f5b565b5b6000613683878288016131b1565b9450506020613694878288016131b1565b93505060406136a587828801612f86565b925050606085013567ffffffffffffffff8111156136c6576136c5612f60565b5b6136d28782880161362d565b91505092959194509250565b6000602082840312156136f4576136f3612f5b565b5b600061370284828501613565565b91505092915050565b6000806040838503121561372257613721612f5b565b5b6000613730858286016131b1565b9250506020613741858286016131b1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061378160208361308e565b915061378c8261374b565b602082019050919050565b600060208201905081810360008301526137b081613774565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137fe57607f821691505b602082108103613811576138106137b7565b5b50919050565b7f467265652053616c652069732070617573656421000000000000000000000000600082015250565b600061384d60148361308e565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006138b960148361308e565b91506138c482613883565b602082019050919050565b600060208201905081810360008301526138e8816138ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061392982612f65565b915061393483612f65565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613969576139686138ef565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006139aa60148361308e565b91506139b582613974565b602082019050919050565b600060208201905081810360008301526139d98161399d565b9050919050565b7f4d6178206d696e74207065722077616c6c657420657863656564656421000000600082015250565b6000613a16601d8361308e565b9150613a21826139e0565b602082019050919050565b60006020820190508181036000830152613a4581613a09565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613a82601f8361308e565b9150613a8d82613a4c565b602082019050919050565b60006020820190508181036000830152613ab181613a75565b9050919050565b6000613ac382612f65565b9150613ace83612f65565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b0757613b066138ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b4c82612f65565b9150613b5783612f65565b925082613b6757613b66613b12565b5b828204905092915050565b7f5468652053616c65206973207061757365642100000000000000000000000000600082015250565b6000613ba860138361308e565b9150613bb382613b72565b602082019050919050565b60006020820190508181036000830152613bd781613b9b565b9050919050565b7f496e73756666696369656e74204554482073656e740000000000000000000000600082015250565b6000613c1460158361308e565b9150613c1f82613bde565b602082019050919050565b60006020820190508181036000830152613c4381613c07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f68747470733a2f2f67616979632e7774662f746f6b656e732f756e726576656160008201527f6c2e6a736f6e0000000000000000000000000000000000000000000000000000602082015250565b6000613ce0602683613c79565b9150613ceb82613c84565b602682019050919050565b6000613d0182613cd3565b9150819050919050565b6000613d1682613083565b613d208185613c79565b9350613d3081856020860161309f565b80840191505092915050565b50565b6000613d4c600083613c79565b9150613d5782613d3c565b600082019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613d98600583613c79565b9150613da382613d62565b600582019050919050565b6000613dba8285613d0b565b9150613dc582613d3f565b9150613dd18284613d0b565b9150613ddc82613d8b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e4460268361308e565b9150613e4f82613de8565b604082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ea182613e7a565b613eab8185613e85565b9350613ebb81856020860161309f565b613ec4816130d2565b840191505092915050565b6000608082019050613ee46000830187613170565b613ef16020830186613170565b613efe6040830185613206565b8181036060830152613f108184613e96565b905095945050505050565b600081519050613f2a81612ff4565b92915050565b600060208284031215613f4657613f45612f5b565b5b6000613f5484828501613f1b565b91505092915050565b6000613f6882612f65565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9a57613f996138ef565b5b600182019050919050565b6000613fb082612f65565b9150613fbb83612f65565b925082821015613fce57613fcd6138ef565b5b828203905092915050565b6000613fe482612f65565b9150613fef83612f65565b925082613fff57613ffe613b12565b5b82820690509291505056fea264697066735822122059d6f8a7dd301d44919a5fc9da1f1b37e199fa3e78b61210b42af80341c76a8164736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f67616979632e7774662f746f6b656e732f00000000000000
-----Decoded View---------------
Arg [0] : _uri (string): https://gaiyc.wtf/tokens/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [2] : 68747470733a2f2f67616979632e7774662f746f6b656e732f00000000000000
Deployed Bytecode Sourcemap
46767:5598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50037:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17991:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47288:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23004:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47336:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25072:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24532:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47962:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17045:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47066:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49934:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25958:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50287:395;;;;;;;;;;;;;:::i;:::-;;26199:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47188:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46955:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47255:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47146:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22793:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47857:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18670:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45871:103;;;;;;;;;;;;;:::i;:::-;;48482:479;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48973:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51036:712;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45220:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47104:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23173:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47026:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50831:201;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25348:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47752:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49633:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26455:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47221:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51860:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49531:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49788:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49331:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25727:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46933:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46129:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49426:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50037:102;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50121:12:::1;50107:11;:26;;;;50037:102:::0;:::o;17991:615::-;18076:4;18391:10;18376:25;;:11;:25;;;;:102;;;;18468:10;18453:25;;:11;:25;;;;18376:102;:179;;;;18545:10;18530:25;;:11;:25;;;;18376:179;18356:199;;17991:615;;;:::o;47288:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23004:100::-;23058:13;23091:5;23084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23004:100;:::o;47336:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25072:204::-;25140:7;25165:16;25173:7;25165;:16::i;:::-;25160:64;;25190:34;;;;;;;;;;;;;;25160:64;25244:15;:24;25260:7;25244:24;;;;;;;;;;;;;;;;;;;;;25237:31;;25072:204;;;:::o;24532:474::-;24605:13;24637:27;24656:7;24637:18;:27::i;:::-;24605:61;;24687:5;24681:11;;:2;:11;;;24677:48;;24701:24;;;;;;;;;;;;;;24677:48;24765:5;24742:28;;:19;:17;:19::i;:::-;:28;;;24738:175;;24790:44;24807:5;24814:19;:17;:19::i;:::-;24790:16;:44::i;:::-;24785:128;;24862:35;;;;;;;;;;;;;;24785:128;24738:175;24952:2;24925:15;:24;24941:7;24925:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24990:7;24986:2;24970:28;;24979:5;24970:28;;;;;;;;;;;;24594:412;24532:474;;:::o;47962:514::-;48044:14;48061:13;:11;:13::i;:::-;48044:30;;48128:4;48118:14;;:8;;;;;;;;;;;:14;;;48110:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48186:1;48172:11;:15;:52;;;;;48206:18;;48191:11;:33;;48172:52;48164:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;48288:4;48273:11;48264:6;:20;;;;:::i;:::-;:28;;48256:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48371:17;;48356:11;48332:21;48342:10;48332:9;:21::i;:::-;:35;;;;:::i;:::-;:56;;48324:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;48434:36;48444:12;:10;:12::i;:::-;48458:11;48434:9;:36::i;:::-;48016:460;47962:514;:::o;17045:315::-;17098:7;17326:15;:13;:15::i;:::-;17311:12;;17295:13;;:28;:46;17288:53;;17045:315;:::o;47066:33::-;;;;:::o;49934:78::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50000:6:::1;49992:5;:14;;;;49934:78:::0;:::o;25958:170::-;26092:28;26102:4;26108:2;26112:7;26092:9;:28::i;:::-;25958:170;;;:::o;50287:395::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1847:1:::1;2445:7;;:19:::0;2437:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1847:1;2578:7;:18;;;;50378::::2;50424:3;50421:2;50399:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;50378:49;;50446:18;50492:3;50489:2;50467:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;50446:49;;50530:42;50522:56;;:68;50579:10;50522:68;;;;;;;;;;;;;;;;;;;;;;;50514:77;;;::::0;::::2;;50630:10;50622:24;;:36;50647:10;50622:36;;;;;;;;;;;;;;;;;;;;;;;50614:45;;;::::0;::::2;;50337:345;;1803:1:::1;2757:7;:22;;;;50287:395::o:0;26199:185::-;26337:39;26354:4;26360:2;26364:7;26337:39;;;;;;;;;;;;:16;:39::i;:::-;26199:185;;;:::o;47188:28::-;;;;;;;;;;;;;:::o;46955:66::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47255:28::-;;;;;;;;;;;;;:::o;47146:37::-;;;;:::o;22793:144::-;22857:7;22900:27;22919:7;22900:18;:27::i;:::-;22877:52;;22793:144;;;:::o;47857:101::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47944:8:::1;47936:7;:16;;;;;;;;;;;;:::i;:::-;;47857:101:::0;:::o;18670:224::-;18734:7;18775:1;18758:19;;:5;:19;;;18754:60;;18786:28;;;;;;;;;;;;;;18754:60;14009:13;18832:18;:25;18851:5;18832:25;;;;;;;;;;;;;;;;:54;18825:61;;18670:224;;;:::o;45871:103::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45936:30:::1;45963:1;45936:18;:30::i;:::-;45871:103::o:0;48482:479::-;48566:14;48583:13;:11;:13::i;:::-;48566:30;;48652:4;48640:16;;:10;;;;;;;;;;;:16;;;48632:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;48709:1;48695:11;:15;:36;;;;;48729:2;48714:11;:17;;48695:36;48687:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;48795:11;;48780;48771:6;:20;;;;:::i;:::-;:35;;48763:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48864:11;48858:5;;:17;;;;:::i;:::-;48847:9;:28;;48839:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48917:36;48927:12;:10;:12::i;:::-;48941:11;48917:9;:36::i;:::-;48538:423;48482:479;:::o;48973:202::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49093:11:::1;;49078;49062:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:42;;49054:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49136:33;49146:9;49157:11;49136:9;:33::i;:::-;48973:202:::0;;:::o;51036:712::-;51097:16;51143:18;51178:16;51188:5;51178:9;:16::i;:::-;51164:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51143:52;;51207:11;51221:14;:12;:14::i;:::-;51207:28;;51246:19;51276:25;51317:9;51312:403;51332:3;51328:1;:7;51312:403;;;51357:31;51391:15;51404:1;51391:12;:15::i;:::-;51357:49;;51425:9;:16;;;51421:65;;;51462:8;;;51421:65;51530:1;51504:28;;:9;:14;;;:28;;;51500:103;;51573:9;:14;;;51553:34;;51500:103;51642:5;51621:26;;:17;:26;;;51617:87;;51687:1;51668;51670:13;;;;;;51668:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;51617:87;51342:373;51312:403;51337:3;;;;;;;51312:403;;;;51732:1;51725:8;;;;;;51036:712;;;:::o;45220:87::-;45266:7;45293:6;;;;;;;;;;;45286:13;;45220:87;:::o;47104:37::-;;;;:::o;23173:104::-;23229:13;23262:7;23255:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23173:104;:::o;47026:35::-;;;;:::o;50831:201::-;50869:14;50910:4;50900:14;;:8;;;;;;;;;;;:14;;;50896:129;;50937:1;50929:9;;50896:129;;;50982:5;50972:15;;:8;;;;;;;;;;;:15;;;50968:57;;51008:5;;51001:12;;50968:57;50896:129;50831:201;:::o;25348:308::-;25459:19;:17;:19::i;:::-;25447:31;;:8;:31;;;25443:61;;25487:17;;;;;;;;;;;;;;25443:61;25569:8;25517:18;:39;25536:19;:17;:19::i;:::-;25517:39;;;;;;;;;;;;;;;:49;25557:8;25517:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25629:8;25593:55;;25608:19;:17;:19::i;:::-;25593:55;;;25639:8;25593:55;;;;;;:::i;:::-;;;;;;;;25348:308;;:::o;47752:91::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47832:5:::1;47826;:11;;;;;;;;;;;;:::i;:::-;;47752:91:::0;:::o;49633:130::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49738:19:::1;49717:18;:40;;;;49633:130:::0;:::o;26455:396::-;26622:28;26632:4;26638:2;26642:7;26622:9;:28::i;:::-;26683:1;26665:2;:14;;;:19;26661:183;;26704:56;26735:4;26741:2;26745:7;26754:5;26704:30;:56::i;:::-;26699:145;;26788:40;;;;;;;;;;;;;;26699:145;26661:183;26455:396;;;;:::o;47221:29::-;;;;;;;;;;;;;:::o;51860:326::-;51925:13;51966:4;51956:14;;:8;;;;;;;;;;;:14;;;51952:227;;51998:58;;;;;;;:::i;:::-;;;;;;;;;;;;;51984:73;;;;51952:227;52117:10;:8;:10::i;:::-;52133:27;52141:7;52133:25;:27::i;:::-;52100:70;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52086:85;;51860:326;;;;:::o;49531:81::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49601:5:::1;49590:8;;:16;;;;;;;;;;;;;;;;;;49531:81:::0;:::o;49788:126::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49890:18:::1;49870:17;:38;;;;49788:126:::0;:::o;49331:81::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49400:6:::1;49389:8;;:17;;;;;;;;;;;;;;;;;;49331:81:::0;:::o;25727:164::-;25824:4;25848:18;:25;25867:5;25848:25;;;;;;;;;;;;;;;:35;25874:8;25848:35;;;;;;;;;;;;;;;;;;;;;;;;;25841:42;;25727:164;;;;:::o;46933:17::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46129:201::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46238:1:::1;46218:22;;:8;:22;;::::0;46210:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46294:28;46313:8;46294:18;:28::i;:::-;46129:201:::0;:::o;49426:76::-;45451:12;:10;:12::i;:::-;45440:23;;:7;:5;:7::i;:::-;:23;;;45432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49492:4:::1;49486:3;:10;;;;;;;;;;;;:::i;:::-;;49426:76:::0;:::o;43944:98::-;43997:7;44024:10;44017:17;;43944:98;:::o;27106:273::-;27163:4;27219:7;27200:15;:13;:15::i;:::-;:26;;:66;;;;;27253:13;;27243:7;:23;27200:66;:152;;;;;27351:1;14779:8;27304:17;:26;27322:7;27304:26;;;;;;;;;;;;:43;:48;27200:152;27180:172;;27106:273;;;:::o;20308:1129::-;20375:7;20395:12;20410:7;20395:22;;20478:4;20459:15;:13;:15::i;:::-;:23;20455:915;;20512:13;;20505:4;:20;20501:869;;;20550:14;20567:17;:23;20585:4;20567:23;;;;;;;;;;;;20550:40;;20683:1;14779:8;20656:6;:23;:28;20652:699;;21175:113;21192:1;21182:6;:11;21175:113;;21235:17;:25;21253:6;;;;;;;21235:25;;;;;;;;;;;;21226:34;;21175:113;;;21321:6;21314:13;;;;;;20652:699;20527:843;20501:869;20455:915;21398:31;;;;;;;;;;;;;;20308:1129;;;;:::o;41088:105::-;41148:7;41175:10;41168:17;;41088:105;:::o;27463:104::-;27532:27;27542:2;27546:8;27532:27;;;;;;;;;;;;:9;:27::i;:::-;27463:104;;:::o;51754:95::-;51819:7;51842:1;51835:8;;51754:95;:::o;32345:2515::-;32460:27;32490;32509:7;32490:18;:27::i;:::-;32460:57;;32575:4;32534:45;;32550:19;32534:45;;;32530:86;;32588:28;;;;;;;;;;;;;;32530:86;32629:22;32678:4;32655:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;32699:43;32716:4;32722:19;:17;:19::i;:::-;32699:16;:43::i;:::-;32655:87;:147;;;;32783:19;:17;:19::i;:::-;32759:43;;:20;32771:7;32759:11;:20::i;:::-;:43;;;32655:147;32629:174;;32821:17;32816:66;;32847:35;;;;;;;;;;;;;;32816:66;32911:1;32897:16;;:2;:16;;;32893:52;;32922:23;;;;;;;;;;;;;;32893:52;32958:43;32980:4;32986:2;32990:7;32999:1;32958:21;:43::i;:::-;33074:15;:24;33090:7;33074:24;;;;;;;;;;;;33067:31;;;;;;;;;;;33466:18;:24;33485:4;33466:24;;;;;;;;;;;;;;;;33464:26;;;;;;;;;;;;33535:18;:22;33554:2;33535:22;;;;;;;;;;;;;;;;33533:24;;;;;;;;;;;15061:8;14663:3;33916:15;:41;;33874:21;33892:2;33874:17;:21::i;:::-;:84;:128;33828:17;:26;33846:7;33828:26;;;;;;;;;;;:174;;;;34172:1;15061:8;34122:19;:46;:51;34118:626;;34194:19;34226:1;34216:7;:11;34194:33;;34383:1;34349:17;:30;34367:11;34349:30;;;;;;;;;;;;:35;34345:384;;34487:13;;34472:11;:28;34468:242;;34667:19;34634:17;:30;34652:11;34634:30;;;;;;;;;;;:52;;;;34468:242;34345:384;34175:569;34118:626;34791:7;34787:2;34772:27;;34781:4;34772:27;;;;;;;;;;;;34810:42;34831:4;34837:2;34841:7;34850:1;34810:20;:42::i;:::-;32449:2411;;32345:2515;;;:::o;46490:191::-;46564:16;46583:6;;;;;;;;;;;46564:25;;46609:8;46600:6;;:17;;;;;;;;;;;;;;;;;;46664:8;46633:40;;46654:8;46633:40;;;;;;;;;;;;46553:128;46490:191;:::o;16739:95::-;16786:7;16813:13;;16806:20;;16739:95;:::o;21917:153::-;21977:21;;:::i;:::-;22018:44;22037:17;:24;22055:5;22037:24;;;;;;;;;;;;22018:18;:44::i;:::-;22011:51;;21917:153;;;:::o;38557:716::-;38720:4;38766:2;38741:45;;;38787:19;:17;:19::i;:::-;38808:4;38814:7;38823:5;38741:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38737:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39041:1;39024:6;:13;:18;39020:235;;39070:40;;;;;;;;;;;;;;39020:235;39213:6;39207:13;39198:6;39194:2;39190:15;39183:38;38737:529;38910:54;;;38900:64;;;:6;:64;;;;38893:71;;;38557:716;;;;;;:::o;52192:98::-;52252:13;52281:3;52274:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52192:98;:::o;3159:723::-;3215:13;3445:1;3436:5;:10;3432:53;;3463:10;;;;;;;;;;;;;;;;;;;;;3432:53;3495:12;3510:5;3495:20;;3526:14;3551:78;3566:1;3558:4;:9;3551:78;;3584:8;;;;;:::i;:::-;;;;3615:2;3607:10;;;;;:::i;:::-;;;3551:78;;;3639:19;3671:6;3661:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3639:39;;3689:154;3705:1;3696:5;:10;3689:154;;3733:1;3723:11;;;;;:::i;:::-;;;3800:2;3792:5;:10;;;;:::i;:::-;3779:2;:24;;;;:::i;:::-;3766:39;;3749:6;3756;3749:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3829:2;3820:11;;;;;:::i;:::-;;;3689:154;;;3867:6;3853:21;;;;;3159:723;;;;:::o;27940:2236::-;28063:20;28086:13;;28063:36;;28128:1;28114:16;;:2;:16;;;28110:48;;28139:19;;;;;;;;;;;;;;28110:48;28185:1;28173:8;:13;28169:44;;28195:18;;;;;;;;;;;;;;28169:44;28226:61;28256:1;28260:2;28264:12;28278:8;28226:21;:61::i;:::-;28830:1;14146:2;28801:1;:25;;28800:31;28788:8;:44;28762:18;:22;28781:2;28762:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;14926:3;29231:29;29258:1;29246:8;:13;29231:14;:29::i;:::-;:56;;14663:3;29168:15;:41;;29126:21;29144:2;29126:17;:21::i;:::-;:84;:162;29075:17;:31;29093:12;29075:31;;;;;;;;;;;:213;;;;29305:20;29328:12;29305:35;;29355:11;29384:8;29369:12;:23;29355:37;;29431:1;29413:2;:14;;;:19;29409:635;;29453:313;29509:12;29505:2;29484:38;;29501:1;29484:38;;;;;;;;;;;;29550:69;29589:1;29593:2;29597:14;;;;;;29613:5;29550:30;:69::i;:::-;29545:174;;29655:40;;;;;;;;;;;;;;29545:174;29761:3;29746:12;:18;29453:313;;29847:12;29830:13;;:29;29826:43;;29861:8;;;29826:43;29409:635;;;29910:119;29966:14;;;;;;29962:2;29941:40;;29958:1;29941:40;;;;;;;;;;;;30024:3;30009:12;:18;29910:119;;29409:635;30074:12;30058:13;:28;;;;28539:1559;;30108:60;30137:1;30141:2;30145:12;30159:8;30108:20;:60::i;:::-;28052:2124;27940:2236;;;:::o;39921:159::-;;;;;:::o;24093:148::-;24157:14;24218:5;24208:15;;24093:148;;;:::o;40739:158::-;;;;;:::o;21531:295::-;21597:31;;:::i;:::-;21674:6;21641:9;:14;;:41;;;;;;;;;;;14663:3;21727:6;:32;;21693:9;:24;;:67;;;;;;;;;;;21817:1;14779:8;21790:6;:23;:28;;21771:9;:16;;:47;;;;;;;;;;;21531:295;;;:::o;24328:142::-;24386:14;24447:5;24437:15;;24328:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:149::-;1061:7;1101:66;1094:5;1090:78;1079:89;;1025:149;;;:::o;1180:120::-;1252:23;1269:5;1252:23;:::i;:::-;1245:5;1242:34;1232:62;;1290:1;1287;1280:12;1232:62;1180:120;:::o;1306:137::-;1351:5;1389:6;1376:20;1367:29;;1405:32;1431:5;1405:32;:::i;:::-;1306:137;;;;:::o;1449:327::-;1507:6;1556:2;1544:9;1535:7;1531:23;1527:32;1524:119;;;1562:79;;:::i;:::-;1524:119;1682:1;1707:52;1751:7;1742:6;1731:9;1727:22;1707:52;:::i;:::-;1697:62;;1653:116;1449:327;;;;:::o;1782:90::-;1816:7;1859:5;1852:13;1845:21;1834:32;;1782:90;;;:::o;1878:109::-;1959:21;1974:5;1959:21;:::i;:::-;1954:3;1947:34;1878:109;;:::o;1993:210::-;2080:4;2118:2;2107:9;2103:18;2095:26;;2131:65;2193:1;2182:9;2178:17;2169:6;2131:65;:::i;:::-;1993:210;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:307::-;2557:1;2567:113;2581:6;2578:1;2575:13;2567:113;;;2666:1;2661:3;2657:11;2651:18;2647:1;2642:3;2638:11;2631:39;2603:2;2600:1;2596:10;2591:15;;2567:113;;;2698:6;2695:1;2692:13;2689:101;;;2778:1;2769:6;2764:3;2760:16;2753:27;2689:101;2538:258;2489:307;;;:::o;2802:102::-;2843:6;2894:2;2890:7;2885:2;2878:5;2874:14;2870:28;2860:38;;2802:102;;;:::o;2910:364::-;2998:3;3026:39;3059:5;3026:39;:::i;:::-;3081:71;3145:6;3140:3;3081:71;:::i;:::-;3074:78;;3161:52;3206:6;3201:3;3194:4;3187:5;3183:16;3161:52;:::i;:::-;3238:29;3260:6;3238:29;:::i;:::-;3233:3;3229:39;3222:46;;3002:272;2910:364;;;;:::o;3280:313::-;3393:4;3431:2;3420:9;3416:18;3408:26;;3480:9;3474:4;3470:20;3466:1;3455:9;3451:17;3444:47;3508:78;3581:4;3572:6;3508:78;:::i;:::-;3500:86;;3280:313;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:474::-;8939:6;8947;8996:2;8984:9;8975:7;8971:23;8967:32;8964:119;;;9002:79;;:::i;:::-;8964:119;9122:1;9147:53;9192:7;9183:6;9172:9;9168:22;9147:53;:::i;:::-;9137:63;;9093:117;9249:2;9275:53;9320:7;9311:6;9300:9;9296:22;9275:53;:::i;:::-;9265:63;;9220:118;8871:474;;;;;:::o;9351:114::-;9418:6;9452:5;9446:12;9436:22;;9351:114;;;:::o;9471:184::-;9570:11;9604:6;9599:3;9592:19;9644:4;9639:3;9635:14;9620:29;;9471:184;;;;:::o;9661:132::-;9728:4;9751:3;9743:11;;9781:4;9776:3;9772:14;9764:22;;9661:132;;;:::o;9799:108::-;9876:24;9894:5;9876:24;:::i;:::-;9871:3;9864:37;9799:108;;:::o;9913:179::-;9982:10;10003:46;10045:3;10037:6;10003:46;:::i;:::-;10081:4;10076:3;10072:14;10058:28;;9913:179;;;;:::o;10098:113::-;10168:4;10200;10195:3;10191:14;10183:22;;10098:113;;;:::o;10247:732::-;10366:3;10395:54;10443:5;10395:54;:::i;:::-;10465:86;10544:6;10539:3;10465:86;:::i;:::-;10458:93;;10575:56;10625:5;10575:56;:::i;:::-;10654:7;10685:1;10670:284;10695:6;10692:1;10689:13;10670:284;;;10771:6;10765:13;10798:63;10857:3;10842:13;10798:63;:::i;:::-;10791:70;;10884:60;10937:6;10884:60;:::i;:::-;10874:70;;10730:224;10717:1;10714;10710:9;10705:14;;10670:284;;;10674:14;10970:3;10963:10;;10371:608;;;10247:732;;;;:::o;10985:373::-;11128:4;11166:2;11155:9;11151:18;11143:26;;11215:9;11209:4;11205:20;11201:1;11190:9;11186:17;11179:47;11243:108;11346:4;11337:6;11243:108;:::i;:::-;11235:116;;10985:373;;;;:::o;11364:116::-;11434:21;11449:5;11434:21;:::i;:::-;11427:5;11424:32;11414:60;;11470:1;11467;11460:12;11414:60;11364:116;:::o;11486:133::-;11529:5;11567:6;11554:20;11545:29;;11583:30;11607:5;11583:30;:::i;:::-;11486:133;;;;:::o;11625:468::-;11690:6;11698;11747:2;11735:9;11726:7;11722:23;11718:32;11715:119;;;11753:79;;:::i;:::-;11715:119;11873:1;11898:53;11943:7;11934:6;11923:9;11919:22;11898:53;:::i;:::-;11888:63;;11844:117;12000:2;12026:50;12068:7;12059:6;12048:9;12044:22;12026:50;:::i;:::-;12016:60;;11971:115;11625:468;;;;;:::o;12099:307::-;12160:4;12250:18;12242:6;12239:30;12236:56;;;12272:18;;:::i;:::-;12236:56;12310:29;12332:6;12310:29;:::i;:::-;12302:37;;12394:4;12388;12384:15;12376:23;;12099:307;;;:::o;12412:410::-;12489:5;12514:65;12530:48;12571:6;12530:48;:::i;:::-;12514:65;:::i;:::-;12505:74;;12602:6;12595:5;12588:21;12640:4;12633:5;12629:16;12678:3;12669:6;12664:3;12660:16;12657:25;12654:112;;;12685:79;;:::i;:::-;12654:112;12775:41;12809:6;12804:3;12799;12775:41;:::i;:::-;12495:327;12412:410;;;;;:::o;12841:338::-;12896:5;12945:3;12938:4;12930:6;12926:17;12922:27;12912:122;;12953:79;;:::i;:::-;12912:122;13070:6;13057:20;13095:78;13169:3;13161:6;13154:4;13146:6;13142:17;13095:78;:::i;:::-;13086:87;;12902:277;12841:338;;;;:::o;13185:943::-;13280:6;13288;13296;13304;13353:3;13341:9;13332:7;13328:23;13324:33;13321:120;;;13360:79;;:::i;:::-;13321:120;13480:1;13505:53;13550:7;13541:6;13530:9;13526:22;13505:53;:::i;:::-;13495:63;;13451:117;13607:2;13633:53;13678:7;13669:6;13658:9;13654:22;13633:53;:::i;:::-;13623:63;;13578:118;13735:2;13761:53;13806:7;13797:6;13786:9;13782:22;13761:53;:::i;:::-;13751:63;;13706:118;13891:2;13880:9;13876:18;13863:32;13922:18;13914:6;13911:30;13908:117;;;13944:79;;:::i;:::-;13908:117;14049:62;14103:7;14094:6;14083:9;14079:22;14049:62;:::i;:::-;14039:72;;13834:287;13185:943;;;;;;;:::o;14134:323::-;14190:6;14239:2;14227:9;14218:7;14214:23;14210:32;14207:119;;;14245:79;;:::i;:::-;14207:119;14365:1;14390:50;14432:7;14423:6;14412:9;14408:22;14390:50;:::i;:::-;14380:60;;14336:114;14134:323;;;;:::o;14463:474::-;14531:6;14539;14588:2;14576:9;14567:7;14563:23;14559:32;14556:119;;;14594:79;;:::i;:::-;14556:119;14714:1;14739:53;14784:7;14775:6;14764:9;14760:22;14739:53;:::i;:::-;14729:63;;14685:117;14841:2;14867:53;14912:7;14903:6;14892:9;14888:22;14867:53;:::i;:::-;14857:63;;14812:118;14463:474;;;;;:::o;14943:182::-;15083:34;15079:1;15071:6;15067:14;15060:58;14943:182;:::o;15131:366::-;15273:3;15294:67;15358:2;15353:3;15294:67;:::i;:::-;15287:74;;15370:93;15459:3;15370:93;:::i;:::-;15488:2;15483:3;15479:12;15472:19;;15131:366;;;:::o;15503:419::-;15669:4;15707:2;15696:9;15692:18;15684:26;;15756:9;15750:4;15746:20;15742:1;15731:9;15727:17;15720:47;15784:131;15910:4;15784:131;:::i;:::-;15776:139;;15503:419;;;:::o;15928:180::-;15976:77;15973:1;15966:88;16073:4;16070:1;16063:15;16097:4;16094:1;16087:15;16114:320;16158:6;16195:1;16189:4;16185:12;16175:22;;16242:1;16236:4;16232:12;16263:18;16253:81;;16319:4;16311:6;16307:17;16297:27;;16253:81;16381:2;16373:6;16370:14;16350:18;16347:38;16344:84;;16400:18;;:::i;:::-;16344:84;16165:269;16114:320;;;:::o;16440:170::-;16580:22;16576:1;16568:6;16564:14;16557:46;16440:170;:::o;16616:366::-;16758:3;16779:67;16843:2;16838:3;16779:67;:::i;:::-;16772:74;;16855:93;16944:3;16855:93;:::i;:::-;16973:2;16968:3;16964:12;16957:19;;16616:366;;;:::o;16988:419::-;17154:4;17192:2;17181:9;17177:18;17169:26;;17241:9;17235:4;17231:20;17227:1;17216:9;17212:17;17205:47;17269:131;17395:4;17269:131;:::i;:::-;17261:139;;16988:419;;;:::o;17413:170::-;17553:22;17549:1;17541:6;17537:14;17530:46;17413:170;:::o;17589:366::-;17731:3;17752:67;17816:2;17811:3;17752:67;:::i;:::-;17745:74;;17828:93;17917:3;17828:93;:::i;:::-;17946:2;17941:3;17937:12;17930:19;;17589:366;;;:::o;17961:419::-;18127:4;18165:2;18154:9;18150:18;18142:26;;18214:9;18208:4;18204:20;18200:1;18189:9;18185:17;18178:47;18242:131;18368:4;18242:131;:::i;:::-;18234:139;;17961:419;;;:::o;18386:180::-;18434:77;18431:1;18424:88;18531:4;18528:1;18521:15;18555:4;18552:1;18545:15;18572:305;18612:3;18631:20;18649:1;18631:20;:::i;:::-;18626:25;;18665:20;18683:1;18665:20;:::i;:::-;18660:25;;18819:1;18751:66;18747:74;18744:1;18741:81;18738:107;;;18825:18;;:::i;:::-;18738:107;18869:1;18866;18862:9;18855:16;;18572:305;;;;:::o;18883:170::-;19023:22;19019:1;19011:6;19007:14;19000:46;18883:170;:::o;19059:366::-;19201:3;19222:67;19286:2;19281:3;19222:67;:::i;:::-;19215:74;;19298:93;19387:3;19298:93;:::i;:::-;19416:2;19411:3;19407:12;19400:19;;19059:366;;;:::o;19431:419::-;19597:4;19635:2;19624:9;19620:18;19612:26;;19684:9;19678:4;19674:20;19670:1;19659:9;19655:17;19648:47;19712:131;19838:4;19712:131;:::i;:::-;19704:139;;19431:419;;;:::o;19856:179::-;19996:31;19992:1;19984:6;19980:14;19973:55;19856:179;:::o;20041:366::-;20183:3;20204:67;20268:2;20263:3;20204:67;:::i;:::-;20197:74;;20280:93;20369:3;20280:93;:::i;:::-;20398:2;20393:3;20389:12;20382:19;;20041:366;;;:::o;20413:419::-;20579:4;20617:2;20606:9;20602:18;20594:26;;20666:9;20660:4;20656:20;20652:1;20641:9;20637:17;20630:47;20694:131;20820:4;20694:131;:::i;:::-;20686:139;;20413:419;;;:::o;20838:181::-;20978:33;20974:1;20966:6;20962:14;20955:57;20838:181;:::o;21025:366::-;21167:3;21188:67;21252:2;21247:3;21188:67;:::i;:::-;21181:74;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21025:366;;;:::o;21397:419::-;21563:4;21601:2;21590:9;21586:18;21578:26;;21650:9;21644:4;21640:20;21636:1;21625:9;21621:17;21614:47;21678:131;21804:4;21678:131;:::i;:::-;21670:139;;21397:419;;;:::o;21822:348::-;21862:7;21885:20;21903:1;21885:20;:::i;:::-;21880:25;;21919:20;21937:1;21919:20;:::i;:::-;21914:25;;22107:1;22039:66;22035:74;22032:1;22029:81;22024:1;22017:9;22010:17;22006:105;22003:131;;;22114:18;;:::i;:::-;22003:131;22162:1;22159;22155:9;22144:20;;21822:348;;;;:::o;22176:180::-;22224:77;22221:1;22214:88;22321:4;22318:1;22311:15;22345:4;22342:1;22335:15;22362:185;22402:1;22419:20;22437:1;22419:20;:::i;:::-;22414:25;;22453:20;22471:1;22453:20;:::i;:::-;22448:25;;22492:1;22482:35;;22497:18;;:::i;:::-;22482:35;22539:1;22536;22532:9;22527:14;;22362:185;;;;:::o;22553:169::-;22693:21;22689:1;22681:6;22677:14;22670:45;22553:169;:::o;22728:366::-;22870:3;22891:67;22955:2;22950:3;22891:67;:::i;:::-;22884:74;;22967:93;23056:3;22967:93;:::i;:::-;23085:2;23080:3;23076:12;23069:19;;22728:366;;;:::o;23100:419::-;23266:4;23304:2;23293:9;23289:18;23281:26;;23353:9;23347:4;23343:20;23339:1;23328:9;23324:17;23317:47;23381:131;23507:4;23381:131;:::i;:::-;23373:139;;23100:419;;;:::o;23525:171::-;23665:23;23661:1;23653:6;23649:14;23642:47;23525:171;:::o;23702:366::-;23844:3;23865:67;23929:2;23924:3;23865:67;:::i;:::-;23858:74;;23941:93;24030:3;23941:93;:::i;:::-;24059:2;24054:3;24050:12;24043:19;;23702:366;;;:::o;24074:419::-;24240:4;24278:2;24267:9;24263:18;24255:26;;24327:9;24321:4;24317:20;24313:1;24302:9;24298:17;24291:47;24355:131;24481:4;24355:131;:::i;:::-;24347:139;;24074:419;;;:::o;24499:180::-;24547:77;24544:1;24537:88;24644:4;24641:1;24634:15;24668:4;24665:1;24658:15;24685:148;24787:11;24824:3;24809:18;;24685:148;;;;:::o;24839:233::-;24979:34;24975:1;24967:6;24963:14;24956:58;25052:8;25047:2;25039:6;25035:15;25028:33;24839:233;:::o;25082:418::-;25242:3;25267:85;25349:2;25344:3;25267:85;:::i;:::-;25260:92;;25365:93;25454:3;25365:93;:::i;:::-;25487:2;25482:3;25478:12;25471:19;;25082:418;;;:::o;25510:393::-;25695:3;25721:148;25865:3;25721:148;:::i;:::-;25714:155;;25890:3;25883:10;;25510:393;;;:::o;25913:397::-;26019:3;26051:39;26084:5;26051:39;:::i;:::-;26110:89;26192:6;26187:3;26110:89;:::i;:::-;26103:96;;26212:52;26257:6;26252:3;26245:4;26238:5;26234:16;26212:52;:::i;:::-;26293:6;26288:3;26284:16;26277:23;;26023:287;25913:397;;;;:::o;26320:118::-;;:::o;26448:416::-;26608:3;26633:84;26715:1;26710:3;26633:84;:::i;:::-;26626:91;;26730:93;26819:3;26730:93;:::i;:::-;26852:1;26847:3;26843:11;26836:18;;26448:416;;;:::o;26874:163::-;27018:7;27014:1;27006:6;27002:14;26995:31;26874:163;:::o;27047:416::-;27207:3;27232:84;27314:1;27309:3;27232:84;:::i;:::-;27225:91;;27329:93;27418:3;27329:93;:::i;:::-;27451:1;27446:3;27442:11;27435:18;;27047:416;;;:::o;27473:991::-;27855:3;27881:95;27972:3;27963:6;27881:95;:::i;:::-;27874:102;;27997:148;28141:3;27997:148;:::i;:::-;27990:155;;28166:95;28257:3;28248:6;28166:95;:::i;:::-;28159:102;;28282:148;28426:3;28282:148;:::i;:::-;28275:155;;28451:3;28444:10;;27473:991;;;;;:::o;28474:237::-;28618:34;28614:1;28606:6;28602:14;28595:58;28691:8;28686:2;28678:6;28674:15;28667:33;28474:237;:::o;28721:382::-;28863:3;28888:67;28952:2;28947:3;28888:67;:::i;:::-;28881:74;;28968:93;29057:3;28968:93;:::i;:::-;29090:2;29085:3;29081:12;29074:19;;28721:382;;;:::o;29113:435::-;29279:4;29321:2;29310:9;29306:18;29298:26;;29374:9;29368:4;29364:20;29360:1;29349:9;29345:17;29338:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29113:435;;;:::o;29558:106::-;29609:6;29647:5;29641:12;29631:22;;29558:106;;;:::o;29674:180::-;29757:11;29795:6;29790:3;29783:19;29839:4;29834:3;29830:14;29815:29;;29674:180;;;;:::o;29864:380::-;29950:3;29982:38;30014:5;29982:38;:::i;:::-;30040:70;30103:6;30098:3;30040:70;:::i;:::-;30033:77;;30123:52;30168:6;30163:3;30156:4;30149:5;30145:16;30123:52;:::i;:::-;30204:29;30226:6;30204:29;:::i;:::-;30199:3;30195:39;30188:46;;29954:290;29864:380;;;;:::o;30254:668::-;30449:4;30491:3;30480:9;30476:19;30468:27;;30509:71;30577:1;30566:9;30562:17;30553:6;30509:71;:::i;:::-;30594:72;30662:2;30651:9;30647:18;30638:6;30594:72;:::i;:::-;30680;30748:2;30737:9;30733:18;30724:6;30680:72;:::i;:::-;30803:9;30797:4;30793:20;30788:2;30777:9;30773:18;30766:48;30835:76;30906:4;30897:6;30835:76;:::i;:::-;30827:84;;30254:668;;;;;;;:::o;30932:153::-;30988:5;31023:6;31017:13;31008:22;;31043:32;31069:5;31043:32;:::i;:::-;30932:153;;;;:::o;31095:373::-;31164:6;31217:2;31205:9;31196:7;31192:23;31188:32;31185:119;;;31223:79;;:::i;:::-;31185:119;31351:1;31380:63;31435:7;31426:6;31415:9;31411:22;31380:63;:::i;:::-;31370:73;;31318:139;31095:373;;;;:::o;31478:249::-;31517:3;31544:24;31562:5;31544:24;:::i;:::-;31535:33;;31594:66;31587:5;31584:77;31581:103;;31664:18;;:::i;:::-;31581:103;31715:1;31708:5;31704:13;31697:20;;31478:249;;;:::o;31737:211::-;31777:4;31801:20;31819:1;31801:20;:::i;:::-;31796:25;;31839:20;31857:1;31839:20;:::i;:::-;31834:25;;31882:1;31879;31876:8;31873:34;;;31887:18;;:::i;:::-;31873:34;31936:1;31933;31929:9;31921:17;;31737:211;;;;:::o;31958:196::-;31990:1;32011:20;32029:1;32011:20;:::i;:::-;32006:25;;32049:20;32067:1;32049:20;:::i;:::-;32044:25;;32092:1;32082:35;;32097:18;;:::i;:::-;32082:35;32142:1;32139;32135:9;32130:14;;31958:196;;;;:::o
Swarm Source
ipfs://59d6f8a7dd301d44919a5fc9da1f1b37e199fa3e78b61210b42af80341c76a81
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.