ERC-721
Overview
Max Total Supply
1,111 AILLDIWTFTOWN
Holders
297
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 AILLDIWTFTOWNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ailldoitwtftown
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-18 */ /** *Submitted for verification at Etherscan.io on 2022-06-04 */ // 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/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/aidoitwtftown.sol pragma solidity ^0.8.7; // _____ .___/\.__ .__ .___ .__ __ // / _ \ | )/| | | | __| _/____ |__|/ |_ // / /_\ \| | | | | | / __ |/ _ \ | \ __\ // / | \ | | |_| |__ / /_/ ( <_> ) | || | // \____|__ /___| |____/____/ \____ |\____/ |__||__| // \/ \/ contract ailldoitwtftown is ERC721A, Ownable { using SafeMath for uint256; using Strings for uint256; uint256 public maxPerTx = 10; uint256 public maxSupply = 1000; uint256 public freeMintMax = 1000; // Free supply uint256 public price = 0.002 ether; uint256 public maxFreePerWallet = 3; string private baseURI = ""; string public constant baseExtension = ".json"; mapping(address => uint256) private _mintedFreeAmount; bool public paused = true; bool public revealed = true; error freeMintIsOver(); constructor() ERC721A("AIlldoitwtftown", "AILLDIWTFTOWN") {} function mint(uint256 count) external payable { uint256 cost = price; bool isFree = ((totalSupply() + count < freeMintMax + 1) && (_mintedFreeAmount[msg.sender] + count <= maxFreePerWallet)); if (isFree) { cost = 0; } require(!paused, "Contract Paused."); require(msg.value >= count * cost, "Please send the exact amount."); require(totalSupply() + count < maxSupply + 1, "No more"); require(count < maxPerTx + 1, "Max per TX reached."); if (isFree) { _mintedFreeAmount[msg.sender] += count; } _safeMint(msg.sender, count); } function devMint(uint256 _number) external onlyOwner { require(totalSupply() + _number <= maxSupply, "Minting would exceed maxSupply"); _safeMint(_msgSender(), _number); } function setMaxFreeMintSupply(uint256 _max) public onlyOwner { freeMintMax = _max; } function setMaxPaidPerTx(uint256 _max) public onlyOwner { maxPerTx = _max; } function setMaxSupply(uint256 _max) public onlyOwner { maxSupply = _max; } function setMaxFreePerWallet(uint256 _max) external onlyOwner { maxFreePerWallet = _max; } function reveal() public onlyOwner { revealed = true; } function _startTokenId() internal override view virtual returns (uint256) { return 1; } function minted(address _owner) public view returns (uint256) { return _numberMinted(_owner); } function _withdraw(address _address, uint256 _amount) external onlyOwner { (bool success, ) = _address.call{value: _amount}(""); require(success, "Failed to withdraw Ether"); } function setPrice(uint256 _price) external onlyOwner { price = _price; } function setPause(bool _state) external onlyOwner { paused = _state; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory baseURI_) external onlyOwner { baseURI = baseURI_; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = super.tokenURI(tokenId); return bytes(_tokenURI).length > 0 ? string(abi.encodePacked(_tokenURI, ".json")) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"inputs":[],"name":"freeMintIsOver","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":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"_withdraw","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreePerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","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":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxFreeMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPaidPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600a6009556103e8600a556103e8600b5566071afd498d0000600c556003600d5560405180602001604052806000815250600e90805190602001906200004c92919062000244565b506001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055503480156200009057600080fd5b506040518060400160405280600f81526020017f41496c6c646f6974777466746f776e00000000000000000000000000000000008152506040518060400160405280600d81526020017f41494c4c4449575446544f574e0000000000000000000000000000000000000081525081600290805190602001906200011592919062000244565b5080600390805190602001906200012e92919062000244565b506200013f6200016d60201b60201c565b6000819055505050620001676200015b6200017660201b60201c565b6200017e60201b60201c565b62000359565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025290620002f4565b90600052602060002090601f016020900481019282620002765760008555620002c2565b82601f106200029157805160ff1916838001178555620002c2565b82800160010185558215620002c2579182015b82811115620002c1578251825591602001919060010190620002a4565b5b509050620002d19190620002d5565b5090565b5b80821115620002f0576000816000905550600101620002d6565b5090565b600060028204905060018216806200030d57607f821691505b602082108114156200032457620003236200032a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61367480620003696000396000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063a7027357116100ab578063c87b56dd1161006f578063c87b56dd14610786578063d5abeb01146107c3578063e985e9c5146107ee578063f2fde38b1461082b578063f968adbe146108545761021a565b8063a7027357146106b5578063b790a77b146106e0578063b88d4fde14610709578063bedb86fb14610732578063c66828621461075b5761021a565b806395d89b41116100f257806395d89b4114610603578063a035b1fe1461062e578063a0712d6814610659578063a22cb46514610675578063a475b5dd1461069e5761021a565b806370a082311461055b578063715018a6146105985780638da5cb5b146105af57806391b7f5ed146105da5761021a565b8063375a069a116101a657806355f804b31161017557806355f804b3146104785780635c975abb146104a15780636352211e146104cc5780636d7c4a4b146105095780636f8b44b0146105325761021a565b8063375a069a146103d057806342842e0e146103f95780634a91d1b814610422578063518302271461044d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806318160ddd146103165780631c3e88f6146103415780631e7269c51461036a57806323b872dd146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c57806307d3636714610287578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612b4e565b61087f565b6040516102539190612f31565b60405180910390f35b34801561026857600080fd5b50610271610911565b60405161027e9190612f4c565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612bf1565b6109a3565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612bf1565b610a29565b6040516102e49190612eca565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612ae1565b610aa5565b005b34801561032257600080fd5b5061032b610c4c565b604051610338919061308e565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612bf1565b610c63565b005b34801561037657600080fd5b50610391600480360381019061038c919061295e565b610ce9565b60405161039e919061308e565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c991906129cb565b610cfb565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612bf1565b610d0b565b005b34801561040557600080fd5b50610420600480360381019061041b91906129cb565b610df2565b005b34801561042e57600080fd5b50610437610e12565b604051610444919061308e565b60405180910390f35b34801561045957600080fd5b50610462610e18565b60405161046f9190612f31565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612ba8565b610e2b565b005b3480156104ad57600080fd5b506104b6610ec1565b6040516104c39190612f31565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190612bf1565b610ed4565b6040516105009190612eca565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190612bf1565b610ee6565b005b34801561053e57600080fd5b5061055960048036038101906105549190612bf1565b610f6c565b005b34801561056757600080fd5b50610582600480360381019061057d919061295e565b610ff2565b60405161058f919061308e565b60405180910390f35b3480156105a457600080fd5b506105ad6110ab565b005b3480156105bb57600080fd5b506105c4611133565b6040516105d19190612eca565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190612bf1565b61115d565b005b34801561060f57600080fd5b506106186111e3565b6040516106259190612f4c565b60405180910390f35b34801561063a57600080fd5b50610643611275565b604051610650919061308e565b60405180910390f35b610673600480360381019061066e9190612bf1565b61127b565b005b34801561068157600080fd5b5061069c60048036038101906106979190612aa1565b6114c8565b005b3480156106aa57600080fd5b506106b3611640565b005b3480156106c157600080fd5b506106ca6116d9565b6040516106d7919061308e565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190612ae1565b6116df565b005b34801561071557600080fd5b50610730600480360381019061072b9190612a1e565b61180c565b005b34801561073e57600080fd5b5061075960048036038101906107549190612b21565b61187f565b005b34801561076757600080fd5b50610770611918565b60405161077d9190612f4c565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190612bf1565b611951565b6040516107ba9190612f4c565b60405180910390f35b3480156107cf57600080fd5b506107d86119ef565b6040516107e5919061308e565b60405180910390f35b3480156107fa57600080fd5b506108156004803603810190610810919061298b565b6119f5565b6040516108229190612f31565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061295e565b611a89565b005b34801561086057600080fd5b50610869611b81565b604051610876919061308e565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090a5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610920906132e4565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906132e4565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b6109ab611b87565b73ffffffffffffffffffffffffffffffffffffffff166109c9611133565b73ffffffffffffffffffffffffffffffffffffffff1614610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690612fee565b60405180910390fd5b8060098190555050565b6000610a3482611b8f565b610a6a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab082611bee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b18576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b37611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610b9a57610b6381610b5e611cbc565b6119f5565b610b99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c56611cc4565b6001546000540303905090565b610c6b611b87565b73ffffffffffffffffffffffffffffffffffffffff16610c89611133565b73ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612fee565b60405180910390fd5b80600b8190555050565b6000610cf482611ccd565b9050919050565b610d06838383611d24565b505050565b610d13611b87565b73ffffffffffffffffffffffffffffffffffffffff16610d31611133565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90612fee565b60405180910390fd5b600a5481610d93610c4c565b610d9d919061317e565b1115610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590612fae565b60405180910390fd5b610def610de9611b87565b826120ce565b50565b610e0d8383836040518060200160405280600081525061180c565b505050565b600b5481565b601060019054906101000a900460ff1681565b610e33611b87565b73ffffffffffffffffffffffffffffffffffffffff16610e51611133565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90612fee565b60405180910390fd5b80600e9080519060200190610ebd929190612772565b5050565b601060009054906101000a900460ff1681565b6000610edf82611bee565b9050919050565b610eee611b87565b73ffffffffffffffffffffffffffffffffffffffff16610f0c611133565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612fee565b60405180910390fd5b80600d8190555050565b610f74611b87565b73ffffffffffffffffffffffffffffffffffffffff16610f92611133565b73ffffffffffffffffffffffffffffffffffffffff1614610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90612fee565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561105a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110b3611b87565b73ffffffffffffffffffffffffffffffffffffffff166110d1611133565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90612fee565b60405180910390fd5b61113160006120ec565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611165611b87565b73ffffffffffffffffffffffffffffffffffffffff16611183611133565b73ffffffffffffffffffffffffffffffffffffffff16146111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090612fee565b60405180910390fd5b80600c8190555050565b6060600380546111f2906132e4565b80601f016020809104026020016040519081016040528092919081815260200182805461121e906132e4565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b5050505050905090565b600c5481565b6000600c54905060006001600b54611293919061317e565b8361129c610c4c565b6112a6919061317e565b1080156112ff5750600d5483600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112fc919061317e565b11155b9050801561130c57600091505b601060009054906101000a900460ff161561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612fce565b60405180910390fd5b818361136891906131d4565b3410156113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a19061304e565b60405180910390fd5b6001600a546113b9919061317e565b836113c2610c4c565b6113cc919061317e565b1061140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612f6e565b60405180910390fd5b600160095461141b919061317e565b831061145c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114539061306e565b60405180910390fd5b80156114b95782600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b1919061317e565b925050819055505b6114c333846120ce565b505050565b6114d0611cbc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611535576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611542611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115ef611cbc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116349190612f31565b60405180910390a35050565b611648611b87565b73ffffffffffffffffffffffffffffffffffffffff16611666611133565b73ffffffffffffffffffffffffffffffffffffffff16146116bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b390612fee565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b600d5481565b6116e7611b87565b73ffffffffffffffffffffffffffffffffffffffff16611705611133565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290612fee565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161178190612eb5565b60006040518083038185875af1925050503d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b5050905080611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061302e565b60405180910390fd5b505050565b611817848484611d24565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461187957611842848484846121b2565b611878576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611887611b87565b73ffffffffffffffffffffffffffffffffffffffff166118a5611133565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290612fee565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061195c82611b8f565b61199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061300e565b60405180910390fd5b60006119a683612312565b905060008151116119c657604051806020016040528060008152506119e7565b806040516020016119d79190612e93565b6040516020818303038152906040525b915050919050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a91611b87565b73ffffffffffffffffffffffffffffffffffffffff16611aaf611133565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90612f8e565b60405180910390fd5b611b7e816120ec565b50565b60095481565b600033905090565b600081611b9a611cc4565b11158015611ba9575060005482105b8015611be7575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611bfd611cc4565b11611c8557600054811015611c845760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611c82575b6000811415611c78576004600083600190039350838152602001908152602001600020549050611c4d565b8092505050611cb7565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6000611d2f82611bee565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d96576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db7611cbc565b73ffffffffffffffffffffffffffffffffffffffff161480611de65750611de585611de0611cbc565b6119f5565b5b80611e2b5750611df4611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611e1384610a29565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e64576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ecb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed885858560016123b1565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611fd5866123b7565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561205f57600060018401905060006004600083815260200190815260200160002054141561205d57600054811461205c578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120c785858560016123c1565b5050505050565b6120e88282604051806020016040528060008152506123c7565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d8611cbc565b8786866040518563ffffffff1660e01b81526004016121fa9493929190612ee5565b602060405180830381600087803b15801561221457600080fd5b505af192505050801561224557506040513d601f19601f820116820180604052508101906122429190612b7b565b60015b6122bf573d8060008114612275576040519150601f19603f3d011682016040523d82523d6000602084013e61227a565b606091505b506000815114156122b7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606061231d82611b8f565b612353576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061235d61267c565b905060008151141561237e57604051806020016040528060008152506123a9565b806123888461270e565b604051602001612399929190612e6f565b6040516020818303038152906040525b915050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612434576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561246f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61247c60008583866123b1565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16124e160018514612768565b901b60a042901b6124f1866123b7565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146125f5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125a560008784806001019550876121b2565b6125db576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125365782600054146125f057600080fd5b612660565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106125f6575b81600081905550505061267660008583866123c1565b50505050565b6060600e805461268b906132e4565b80601f01602080910402602001604051908101604052809291908181526020018280546126b7906132e4565b80156127045780601f106126d957610100808354040283529160200191612704565b820191906000526020600020905b8154815290600101906020018083116126e757829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561275457600183039250600a81066030018353600a81049050612734565b508181036020830392508083525050919050565b6000819050919050565b82805461277e906132e4565b90600052602060002090601f0160209004810192826127a057600085556127e7565b82601f106127b957805160ff19168380011785556127e7565b828001600101855582156127e7579182015b828111156127e65782518255916020019190600101906127cb565b5b5090506127f491906127f8565b5090565b5b808211156128115760008160009055506001016127f9565b5090565b6000612828612823846130ce565b6130a9565b905082815260208101848484011115612844576128436133d9565b5b61284f8482856132a2565b509392505050565b600061286a612865846130ff565b6130a9565b905082815260208101848484011115612886576128856133d9565b5b6128918482856132a2565b509392505050565b6000813590506128a8816135e2565b92915050565b6000813590506128bd816135f9565b92915050565b6000813590506128d281613610565b92915050565b6000815190506128e781613610565b92915050565b600082601f830112612902576129016133d4565b5b8135612912848260208601612815565b91505092915050565b600082601f8301126129305761292f6133d4565b5b8135612940848260208601612857565b91505092915050565b60008135905061295881613627565b92915050565b600060208284031215612974576129736133e3565b5b600061298284828501612899565b91505092915050565b600080604083850312156129a2576129a16133e3565b5b60006129b085828601612899565b92505060206129c185828601612899565b9150509250929050565b6000806000606084860312156129e4576129e36133e3565b5b60006129f286828701612899565b9350506020612a0386828701612899565b9250506040612a1486828701612949565b9150509250925092565b60008060008060808587031215612a3857612a376133e3565b5b6000612a4687828801612899565b9450506020612a5787828801612899565b9350506040612a6887828801612949565b925050606085013567ffffffffffffffff811115612a8957612a886133de565b5b612a95878288016128ed565b91505092959194509250565b60008060408385031215612ab857612ab76133e3565b5b6000612ac685828601612899565b9250506020612ad7858286016128ae565b9150509250929050565b60008060408385031215612af857612af76133e3565b5b6000612b0685828601612899565b9250506020612b1785828601612949565b9150509250929050565b600060208284031215612b3757612b366133e3565b5b6000612b45848285016128ae565b91505092915050565b600060208284031215612b6457612b636133e3565b5b6000612b72848285016128c3565b91505092915050565b600060208284031215612b9157612b906133e3565b5b6000612b9f848285016128d8565b91505092915050565b600060208284031215612bbe57612bbd6133e3565b5b600082013567ffffffffffffffff811115612bdc57612bdb6133de565b5b612be88482850161291b565b91505092915050565b600060208284031215612c0757612c066133e3565b5b6000612c1584828501612949565b91505092915050565b612c278161322e565b82525050565b612c3681613240565b82525050565b6000612c4782613130565b612c518185613146565b9350612c618185602086016132b1565b612c6a816133e8565b840191505092915050565b6000612c808261313b565b612c8a8185613162565b9350612c9a8185602086016132b1565b612ca3816133e8565b840191505092915050565b6000612cb98261313b565b612cc38185613173565b9350612cd38185602086016132b1565b80840191505092915050565b6000612cec600783613162565b9150612cf7826133f9565b602082019050919050565b6000612d0f602683613162565b9150612d1a82613422565b604082019050919050565b6000612d32601e83613162565b9150612d3d82613471565b602082019050919050565b6000612d55601083613162565b9150612d608261349a565b602082019050919050565b6000612d78600583613173565b9150612d83826134c3565b600582019050919050565b6000612d9b602083613162565b9150612da6826134ec565b602082019050919050565b6000612dbe602f83613162565b9150612dc982613515565b604082019050919050565b6000612de1601883613162565b9150612dec82613564565b602082019050919050565b6000612e04601d83613162565b9150612e0f8261358d565b602082019050919050565b6000612e27600083613157565b9150612e32826135b6565b600082019050919050565b6000612e4a601383613162565b9150612e55826135b9565b602082019050919050565b612e6981613298565b82525050565b6000612e7b8285612cae565b9150612e878284612cae565b91508190509392505050565b6000612e9f8284612cae565b9150612eaa82612d6b565b915081905092915050565b6000612ec082612e1a565b9150819050919050565b6000602082019050612edf6000830184612c1e565b92915050565b6000608082019050612efa6000830187612c1e565b612f076020830186612c1e565b612f146040830185612e60565b8181036060830152612f268184612c3c565b905095945050505050565b6000602082019050612f466000830184612c2d565b92915050565b60006020820190508181036000830152612f668184612c75565b905092915050565b60006020820190508181036000830152612f8781612cdf565b9050919050565b60006020820190508181036000830152612fa781612d02565b9050919050565b60006020820190508181036000830152612fc781612d25565b9050919050565b60006020820190508181036000830152612fe781612d48565b9050919050565b6000602082019050818103600083015261300781612d8e565b9050919050565b6000602082019050818103600083015261302781612db1565b9050919050565b6000602082019050818103600083015261304781612dd4565b9050919050565b6000602082019050818103600083015261306781612df7565b9050919050565b6000602082019050818103600083015261308781612e3d565b9050919050565b60006020820190506130a36000830184612e60565b92915050565b60006130b36130c4565b90506130bf8282613316565b919050565b6000604051905090565b600067ffffffffffffffff8211156130e9576130e86133a5565b5b6130f2826133e8565b9050602081019050919050565b600067ffffffffffffffff82111561311a576131196133a5565b5b613123826133e8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061318982613298565b915061319483613298565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c9576131c8613347565b5b828201905092915050565b60006131df82613298565b91506131ea83613298565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322357613222613347565b5b828202905092915050565b600061323982613278565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132cf5780820151818401526020810190506132b4565b838111156132de576000848401525b50505050565b600060028204905060018216806132fc57607f821691505b602082108114156133105761330f613376565b5b50919050565b61331f826133e8565b810181811067ffffffffffffffff8211171561333e5761333d6133a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d6178537570706c790000600082015250565b7f436f6e7472616374205061757365642e00000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b50565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b6135eb8161322e565b81146135f657600080fd5b50565b61360281613240565b811461360d57600080fd5b50565b6136198161324c565b811461362457600080fd5b50565b61363081613298565b811461363b57600080fd5b5056fea2646970667358221220af21dc002bc3f7d0593593bdeeef963a4bc14f62f595ad3f3c91bf9568c80e1564736f6c63430008070033
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806370a0823111610123578063a7027357116100ab578063c87b56dd1161006f578063c87b56dd14610786578063d5abeb01146107c3578063e985e9c5146107ee578063f2fde38b1461082b578063f968adbe146108545761021a565b8063a7027357146106b5578063b790a77b146106e0578063b88d4fde14610709578063bedb86fb14610732578063c66828621461075b5761021a565b806395d89b41116100f257806395d89b4114610603578063a035b1fe1461062e578063a0712d6814610659578063a22cb46514610675578063a475b5dd1461069e5761021a565b806370a082311461055b578063715018a6146105985780638da5cb5b146105af57806391b7f5ed146105da5761021a565b8063375a069a116101a657806355f804b31161017557806355f804b3146104785780635c975abb146104a15780636352211e146104cc5780636d7c4a4b146105095780636f8b44b0146105325761021a565b8063375a069a146103d057806342842e0e146103f95780634a91d1b814610422578063518302271461044d5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806318160ddd146103165780631c3e88f6146103415780631e7269c51461036a57806323b872dd146103a75761021a565b806301ffc9a71461021f57806306fdde031461025c57806307d3636714610287578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612b4e565b61087f565b6040516102539190612f31565b60405180910390f35b34801561026857600080fd5b50610271610911565b60405161027e9190612f4c565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612bf1565b6109a3565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190612bf1565b610a29565b6040516102e49190612eca565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612ae1565b610aa5565b005b34801561032257600080fd5b5061032b610c4c565b604051610338919061308e565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612bf1565b610c63565b005b34801561037657600080fd5b50610391600480360381019061038c919061295e565b610ce9565b60405161039e919061308e565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c991906129cb565b610cfb565b005b3480156103dc57600080fd5b506103f760048036038101906103f29190612bf1565b610d0b565b005b34801561040557600080fd5b50610420600480360381019061041b91906129cb565b610df2565b005b34801561042e57600080fd5b50610437610e12565b604051610444919061308e565b60405180910390f35b34801561045957600080fd5b50610462610e18565b60405161046f9190612f31565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612ba8565b610e2b565b005b3480156104ad57600080fd5b506104b6610ec1565b6040516104c39190612f31565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190612bf1565b610ed4565b6040516105009190612eca565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190612bf1565b610ee6565b005b34801561053e57600080fd5b5061055960048036038101906105549190612bf1565b610f6c565b005b34801561056757600080fd5b50610582600480360381019061057d919061295e565b610ff2565b60405161058f919061308e565b60405180910390f35b3480156105a457600080fd5b506105ad6110ab565b005b3480156105bb57600080fd5b506105c4611133565b6040516105d19190612eca565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190612bf1565b61115d565b005b34801561060f57600080fd5b506106186111e3565b6040516106259190612f4c565b60405180910390f35b34801561063a57600080fd5b50610643611275565b604051610650919061308e565b60405180910390f35b610673600480360381019061066e9190612bf1565b61127b565b005b34801561068157600080fd5b5061069c60048036038101906106979190612aa1565b6114c8565b005b3480156106aa57600080fd5b506106b3611640565b005b3480156106c157600080fd5b506106ca6116d9565b6040516106d7919061308e565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190612ae1565b6116df565b005b34801561071557600080fd5b50610730600480360381019061072b9190612a1e565b61180c565b005b34801561073e57600080fd5b5061075960048036038101906107549190612b21565b61187f565b005b34801561076757600080fd5b50610770611918565b60405161077d9190612f4c565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190612bf1565b611951565b6040516107ba9190612f4c565b60405180910390f35b3480156107cf57600080fd5b506107d86119ef565b6040516107e5919061308e565b60405180910390f35b3480156107fa57600080fd5b506108156004803603810190610810919061298b565b6119f5565b6040516108229190612f31565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061295e565b611a89565b005b34801561086057600080fd5b50610869611b81565b604051610876919061308e565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090a5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610920906132e4565b80601f016020809104026020016040519081016040528092919081815260200182805461094c906132e4565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b6109ab611b87565b73ffffffffffffffffffffffffffffffffffffffff166109c9611133565b73ffffffffffffffffffffffffffffffffffffffff1614610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690612fee565b60405180910390fd5b8060098190555050565b6000610a3482611b8f565b610a6a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab082611bee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b18576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b37611cbc565b73ffffffffffffffffffffffffffffffffffffffff1614610b9a57610b6381610b5e611cbc565b6119f5565b610b99576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c56611cc4565b6001546000540303905090565b610c6b611b87565b73ffffffffffffffffffffffffffffffffffffffff16610c89611133565b73ffffffffffffffffffffffffffffffffffffffff1614610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690612fee565b60405180910390fd5b80600b8190555050565b6000610cf482611ccd565b9050919050565b610d06838383611d24565b505050565b610d13611b87565b73ffffffffffffffffffffffffffffffffffffffff16610d31611133565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90612fee565b60405180910390fd5b600a5481610d93610c4c565b610d9d919061317e565b1115610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590612fae565b60405180910390fd5b610def610de9611b87565b826120ce565b50565b610e0d8383836040518060200160405280600081525061180c565b505050565b600b5481565b601060019054906101000a900460ff1681565b610e33611b87565b73ffffffffffffffffffffffffffffffffffffffff16610e51611133565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90612fee565b60405180910390fd5b80600e9080519060200190610ebd929190612772565b5050565b601060009054906101000a900460ff1681565b6000610edf82611bee565b9050919050565b610eee611b87565b73ffffffffffffffffffffffffffffffffffffffff16610f0c611133565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990612fee565b60405180910390fd5b80600d8190555050565b610f74611b87565b73ffffffffffffffffffffffffffffffffffffffff16610f92611133565b73ffffffffffffffffffffffffffffffffffffffff1614610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90612fee565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561105a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110b3611b87565b73ffffffffffffffffffffffffffffffffffffffff166110d1611133565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90612fee565b60405180910390fd5b61113160006120ec565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611165611b87565b73ffffffffffffffffffffffffffffffffffffffff16611183611133565b73ffffffffffffffffffffffffffffffffffffffff16146111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090612fee565b60405180910390fd5b80600c8190555050565b6060600380546111f2906132e4565b80601f016020809104026020016040519081016040528092919081815260200182805461121e906132e4565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b5050505050905090565b600c5481565b6000600c54905060006001600b54611293919061317e565b8361129c610c4c565b6112a6919061317e565b1080156112ff5750600d5483600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112fc919061317e565b11155b9050801561130c57600091505b601060009054906101000a900460ff161561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612fce565b60405180910390fd5b818361136891906131d4565b3410156113aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a19061304e565b60405180910390fd5b6001600a546113b9919061317e565b836113c2610c4c565b6113cc919061317e565b1061140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390612f6e565b60405180910390fd5b600160095461141b919061317e565b831061145c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114539061306e565b60405180910390fd5b80156114b95782600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b1919061317e565b925050819055505b6114c333846120ce565b505050565b6114d0611cbc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611535576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611542611cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115ef611cbc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116349190612f31565b60405180910390a35050565b611648611b87565b73ffffffffffffffffffffffffffffffffffffffff16611666611133565b73ffffffffffffffffffffffffffffffffffffffff16146116bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b390612fee565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b600d5481565b6116e7611b87565b73ffffffffffffffffffffffffffffffffffffffff16611705611133565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290612fee565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161178190612eb5565b60006040518083038185875af1925050503d80600081146117be576040519150601f19603f3d011682016040523d82523d6000602084013e6117c3565b606091505b5050905080611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061302e565b60405180910390fd5b505050565b611817848484611d24565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461187957611842848484846121b2565b611878576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611887611b87565b73ffffffffffffffffffffffffffffffffffffffff166118a5611133565b73ffffffffffffffffffffffffffffffffffffffff16146118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290612fee565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b606061195c82611b8f565b61199b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119929061300e565b60405180910390fd5b60006119a683612312565b905060008151116119c657604051806020016040528060008152506119e7565b806040516020016119d79190612e93565b6040516020818303038152906040525b915050919050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a91611b87565b73ffffffffffffffffffffffffffffffffffffffff16611aaf611133565b73ffffffffffffffffffffffffffffffffffffffff1614611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc90612fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90612f8e565b60405180910390fd5b611b7e816120ec565b50565b60095481565b600033905090565b600081611b9a611cc4565b11158015611ba9575060005482105b8015611be7575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611bfd611cc4565b11611c8557600054811015611c845760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611c82575b6000811415611c78576004600083600190039350838152602001908152602001600020549050611c4d565b8092505050611cb7565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b6000611d2f82611bee565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d96576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db7611cbc565b73ffffffffffffffffffffffffffffffffffffffff161480611de65750611de585611de0611cbc565b6119f5565b5b80611e2b5750611df4611cbc565b73ffffffffffffffffffffffffffffffffffffffff16611e1384610a29565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e64576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ecb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed885858560016123b1565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b611fd5866123b7565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561205f57600060018401905060006004600083815260200190815260200160002054141561205d57600054811461205c578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120c785858560016123c1565b5050505050565b6120e88282604051806020016040528060008152506123c7565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d8611cbc565b8786866040518563ffffffff1660e01b81526004016121fa9493929190612ee5565b602060405180830381600087803b15801561221457600080fd5b505af192505050801561224557506040513d601f19601f820116820180604052508101906122429190612b7b565b60015b6122bf573d8060008114612275576040519150601f19603f3d011682016040523d82523d6000602084013e61227a565b606091505b506000815114156122b7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606061231d82611b8f565b612353576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061235d61267c565b905060008151141561237e57604051806020016040528060008152506123a9565b806123888461270e565b604051602001612399929190612e6f565b6040516020818303038152906040525b915050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612434576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561246f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61247c60008583866123b1565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16124e160018514612768565b901b60a042901b6124f1866123b7565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146125f5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125a560008784806001019550876121b2565b6125db576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125365782600054146125f057600080fd5b612660565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106125f6575b81600081905550505061267660008583866123c1565b50505050565b6060600e805461268b906132e4565b80601f01602080910402602001604051908101604052809291908181526020018280546126b7906132e4565b80156127045780601f106126d957610100808354040283529160200191612704565b820191906000526020600020905b8154815290600101906020018083116126e757829003601f168201915b5050505050905090565b60606080604051019050806040528082600183039250600a81066030018353600a810490505b801561275457600183039250600a81066030018353600a81049050612734565b508181036020830392508083525050919050565b6000819050919050565b82805461277e906132e4565b90600052602060002090601f0160209004810192826127a057600085556127e7565b82601f106127b957805160ff19168380011785556127e7565b828001600101855582156127e7579182015b828111156127e65782518255916020019190600101906127cb565b5b5090506127f491906127f8565b5090565b5b808211156128115760008160009055506001016127f9565b5090565b6000612828612823846130ce565b6130a9565b905082815260208101848484011115612844576128436133d9565b5b61284f8482856132a2565b509392505050565b600061286a612865846130ff565b6130a9565b905082815260208101848484011115612886576128856133d9565b5b6128918482856132a2565b509392505050565b6000813590506128a8816135e2565b92915050565b6000813590506128bd816135f9565b92915050565b6000813590506128d281613610565b92915050565b6000815190506128e781613610565b92915050565b600082601f830112612902576129016133d4565b5b8135612912848260208601612815565b91505092915050565b600082601f8301126129305761292f6133d4565b5b8135612940848260208601612857565b91505092915050565b60008135905061295881613627565b92915050565b600060208284031215612974576129736133e3565b5b600061298284828501612899565b91505092915050565b600080604083850312156129a2576129a16133e3565b5b60006129b085828601612899565b92505060206129c185828601612899565b9150509250929050565b6000806000606084860312156129e4576129e36133e3565b5b60006129f286828701612899565b9350506020612a0386828701612899565b9250506040612a1486828701612949565b9150509250925092565b60008060008060808587031215612a3857612a376133e3565b5b6000612a4687828801612899565b9450506020612a5787828801612899565b9350506040612a6887828801612949565b925050606085013567ffffffffffffffff811115612a8957612a886133de565b5b612a95878288016128ed565b91505092959194509250565b60008060408385031215612ab857612ab76133e3565b5b6000612ac685828601612899565b9250506020612ad7858286016128ae565b9150509250929050565b60008060408385031215612af857612af76133e3565b5b6000612b0685828601612899565b9250506020612b1785828601612949565b9150509250929050565b600060208284031215612b3757612b366133e3565b5b6000612b45848285016128ae565b91505092915050565b600060208284031215612b6457612b636133e3565b5b6000612b72848285016128c3565b91505092915050565b600060208284031215612b9157612b906133e3565b5b6000612b9f848285016128d8565b91505092915050565b600060208284031215612bbe57612bbd6133e3565b5b600082013567ffffffffffffffff811115612bdc57612bdb6133de565b5b612be88482850161291b565b91505092915050565b600060208284031215612c0757612c066133e3565b5b6000612c1584828501612949565b91505092915050565b612c278161322e565b82525050565b612c3681613240565b82525050565b6000612c4782613130565b612c518185613146565b9350612c618185602086016132b1565b612c6a816133e8565b840191505092915050565b6000612c808261313b565b612c8a8185613162565b9350612c9a8185602086016132b1565b612ca3816133e8565b840191505092915050565b6000612cb98261313b565b612cc38185613173565b9350612cd38185602086016132b1565b80840191505092915050565b6000612cec600783613162565b9150612cf7826133f9565b602082019050919050565b6000612d0f602683613162565b9150612d1a82613422565b604082019050919050565b6000612d32601e83613162565b9150612d3d82613471565b602082019050919050565b6000612d55601083613162565b9150612d608261349a565b602082019050919050565b6000612d78600583613173565b9150612d83826134c3565b600582019050919050565b6000612d9b602083613162565b9150612da6826134ec565b602082019050919050565b6000612dbe602f83613162565b9150612dc982613515565b604082019050919050565b6000612de1601883613162565b9150612dec82613564565b602082019050919050565b6000612e04601d83613162565b9150612e0f8261358d565b602082019050919050565b6000612e27600083613157565b9150612e32826135b6565b600082019050919050565b6000612e4a601383613162565b9150612e55826135b9565b602082019050919050565b612e6981613298565b82525050565b6000612e7b8285612cae565b9150612e878284612cae565b91508190509392505050565b6000612e9f8284612cae565b9150612eaa82612d6b565b915081905092915050565b6000612ec082612e1a565b9150819050919050565b6000602082019050612edf6000830184612c1e565b92915050565b6000608082019050612efa6000830187612c1e565b612f076020830186612c1e565b612f146040830185612e60565b8181036060830152612f268184612c3c565b905095945050505050565b6000602082019050612f466000830184612c2d565b92915050565b60006020820190508181036000830152612f668184612c75565b905092915050565b60006020820190508181036000830152612f8781612cdf565b9050919050565b60006020820190508181036000830152612fa781612d02565b9050919050565b60006020820190508181036000830152612fc781612d25565b9050919050565b60006020820190508181036000830152612fe781612d48565b9050919050565b6000602082019050818103600083015261300781612d8e565b9050919050565b6000602082019050818103600083015261302781612db1565b9050919050565b6000602082019050818103600083015261304781612dd4565b9050919050565b6000602082019050818103600083015261306781612df7565b9050919050565b6000602082019050818103600083015261308781612e3d565b9050919050565b60006020820190506130a36000830184612e60565b92915050565b60006130b36130c4565b90506130bf8282613316565b919050565b6000604051905090565b600067ffffffffffffffff8211156130e9576130e86133a5565b5b6130f2826133e8565b9050602081019050919050565b600067ffffffffffffffff82111561311a576131196133a5565b5b613123826133e8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061318982613298565b915061319483613298565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c9576131c8613347565b5b828201905092915050565b60006131df82613298565b91506131ea83613298565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322357613222613347565b5b828202905092915050565b600061323982613278565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132cf5780820151818401526020810190506132b4565b838111156132de576000848401525b50505050565b600060028204905060018216806132fc57607f821691505b602082108114156133105761330f613376565b5b50919050565b61331f826133e8565b810181811067ffffffffffffffff8211171561333e5761333d6133a5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d6178537570706c790000600082015250565b7f436f6e7472616374205061757365642e00000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b50565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b6135eb8161322e565b81146135f657600080fd5b50565b61360281613240565b811461360d57600080fd5b50565b6136198161324c565b811461362457600080fd5b50565b61363081613298565b811461363b57600080fd5b5056fea2646970667358221220af21dc002bc3f7d0593593bdeeef963a4bc14f62f595ad3f3c91bf9568c80e1564736f6c63430008070033
Deployed Bytecode Sourcemap
51437:3226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13144:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18157:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53080:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20225:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19685:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12198:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52974:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53575:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21111:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52772:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21352:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51629:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51954:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54203:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51922:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17946:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53274:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53178:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13823:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50189:103;;;;;;;;;;;;;:::i;:::-;;49538:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53899:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18326:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51684:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52087:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20501:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53387:69;;;;;;;;;;;;;:::i;:::-;;51725:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53692:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21608:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53993:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51804:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54311:349;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20880:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50447:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51556:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13144:615;13229:4;13544:10;13529:25;;:11;:25;;;;:102;;;;13621:10;13606:25;;:11;:25;;;;13529:102;:179;;;;13698:10;13683:25;;:11;:25;;;;13529:179;13509:199;;13144:615;;;:::o;18157:100::-;18211:13;18244:5;18237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18157:100;:::o;53080:90::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53158:4:::1;53147:8;:15;;;;53080:90:::0;:::o;20225:204::-;20293:7;20318:16;20326:7;20318;:16::i;:::-;20313:64;;20343:34;;;;;;;;;;;;;;20313:64;20397:15;:24;20413:7;20397:24;;;;;;;;;;;;;;;;;;;;;20390:31;;20225:204;;;:::o;19685:474::-;19758:13;19790:27;19809:7;19790:18;:27::i;:::-;19758:61;;19840:5;19834:11;;:2;:11;;;19830:48;;;19854:24;;;;;;;;;;;;;;19830:48;19918:5;19895:28;;:19;:17;:19::i;:::-;:28;;;19891:175;;19943:44;19960:5;19967:19;:17;:19::i;:::-;19943:16;:44::i;:::-;19938:128;;20015:35;;;;;;;;;;;;;;19938:128;19891:175;20105:2;20078:15;:24;20094:7;20078:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20143:7;20139:2;20123:28;;20132:5;20123:28;;;;;;;;;;;;19747:412;19685:474;;:::o;12198:315::-;12251:7;12479:15;:13;:15::i;:::-;12464:12;;12448:13;;:28;:46;12441:53;;12198:315;:::o;52974:98::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53060:4:::1;53046:11;:18;;;;52974:98:::0;:::o;53575:109::-;53628:7;53655:21;53669:6;53655:13;:21::i;:::-;53648:28;;53575:109;;;:::o;21111:170::-;21245:28;21255:4;21261:2;21265:7;21245:9;:28::i;:::-;21111:170;;;:::o;52772:194::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52871:9:::1;;52860:7;52844:13;:11;:13::i;:::-;:23;;;;:::i;:::-;:36;;52836:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52926:32;52936:12;:10;:12::i;:::-;52950:7;52926:9;:32::i;:::-;52772:194:::0;:::o;21352:185::-;21490:39;21507:4;21513:2;21517:7;21490:39;;;;;;;;;;;;:16;:39::i;:::-;21352:185;;;:::o;51629:33::-;;;;:::o;51954:27::-;;;;;;;;;;;;;:::o;54203:100::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54287:8:::1;54277:7;:18;;;;;;;;;;;;:::i;:::-;;54203:100:::0;:::o;51922:25::-;;;;;;;;;;;;;:::o;17946:144::-;18010:7;18053:27;18072:7;18053:18;:27::i;:::-;18030:52;;17946:144;;;:::o;53274:104::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53366:4:::1;53347:16;:23;;;;53274:104:::0;:::o;53178:88::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53254:4:::1;53242:9;:16;;;;53178:88:::0;:::o;13823:224::-;13887:7;13928:1;13911:19;;:5;:19;;;13907:60;;;13939:28;;;;;;;;;;;;;;13907:60;9162:13;13985:18;:25;14004:5;13985:25;;;;;;;;;;;;;;;;:54;13978:61;;13823:224;;;:::o;50189:103::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50254:30:::1;50281:1;50254:18;:30::i;:::-;50189:103::o:0;49538:87::-;49584:7;49611:6;;;;;;;;;;;49604:13;;49538:87;:::o;53899:86::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53971:6:::1;53963:5;:14;;;;53899:86:::0;:::o;18326:104::-;18382:13;18415:7;18408:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18326:104;:::o;51684:34::-;;;;:::o;52087:676::-;52144:12;52159:5;;52144:20;;52175:11;52229:1;52215:11;;:15;;;;:::i;:::-;52207:5;52191:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:39;52190:117;;;;;52290:16;;52281:5;52249:17;:29;52267:10;52249:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:57;;52190:117;52175:133;;52325:6;52321:47;;;52355:1;52348:8;;52321:47;52389:6;;;;;;;;;;;52388:7;52380:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;52456:4;52448:5;:12;;;;:::i;:::-;52435:9;:25;;52427:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52549:1;52537:9;;:13;;;;:::i;:::-;52529:5;52513:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:37;52505:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52600:1;52589:8;;:12;;;;:::i;:::-;52581:5;:20;52573:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;52642:6;52638:77;;;52698:5;52665:17;:29;52683:10;52665:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;52638:77;52727:28;52737:10;52749:5;52727:9;:28::i;:::-;52133:630;;52087:676;:::o;20501:308::-;20612:19;:17;:19::i;:::-;20600:31;;:8;:31;;;20596:61;;;20640:17;;;;;;;;;;;;;;20596:61;20722:8;20670:18;:39;20689:19;:17;:19::i;:::-;20670:39;;;;;;;;;;;;;;;:49;20710:8;20670:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;20782:8;20746:55;;20761:19;:17;:19::i;:::-;20746:55;;;20792:8;20746:55;;;;;;:::i;:::-;;;;;;;;20501:308;;:::o;53387:69::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53444:4:::1;53433:8;;:15;;;;;;;;;;;;;;;;;;53387:69::o:0;51725:35::-;;;;:::o;53692:199::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53777:12:::1;53795:8;:13;;53816:7;53795:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53776:52;;;53847:7;53839:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;53765:126;53692:199:::0;;:::o;21608:396::-;21775:28;21785:4;21791:2;21795:7;21775:9;:28::i;:::-;21836:1;21818:2;:14;;;:19;21814:183;;21857:56;21888:4;21894:2;21898:7;21907:5;21857:30;:56::i;:::-;21852:145;;21941:40;;;;;;;;;;;;;;21852:145;21814:183;21608:396;;;;:::o;53993:84::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54063:6:::1;54054;;:15;;;;;;;;;;;;;;;;;;53993:84:::0;:::o;51804:46::-;;;;;;;;;;;;;;;;;;;:::o;54311:349::-;54384:13;54423:16;54431:7;54423;:16::i;:::-;54415:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54506:23;54532;54547:7;54532:14;:23::i;:::-;54506:49;;54599:1;54579:9;54573:23;:27;:79;;;;;;;;;;;;;;;;;54627:9;54610:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;54573:79;54566:86;;;54311:349;;;:::o;51591:31::-;;;;:::o;20880:164::-;20977:4;21001:18;:25;21020:5;21001:25;;;;;;;;;;;;;;;:35;21027:8;21001:35;;;;;;;;;;;;;;;;;;;;;;;;;20994:42;;20880:164;;;;:::o;50447:201::-;49769:12;:10;:12::i;:::-;49758:23;;:7;:5;:7::i;:::-;:23;;;49750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50556:1:::1;50536:22;;:8;:22;;;;50528:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50612:28;50631:8;50612:18;:28::i;:::-;50447:201:::0;:::o;51556:28::-;;;;:::o;48262:98::-;48315:7;48342:10;48335:17;;48262:98;:::o;22259:273::-;22316:4;22372:7;22353:15;:13;:15::i;:::-;:26;;:66;;;;;22406:13;;22396:7;:23;22353:66;:152;;;;;22504:1;9932:8;22457:17;:26;22475:7;22457:26;;;;;;;;;;;;:43;:48;22353:152;22333:172;;22259:273;;;:::o;15461:1129::-;15528:7;15548:12;15563:7;15548:22;;15631:4;15612:15;:13;:15::i;:::-;:23;15608:915;;15665:13;;15658:4;:20;15654:869;;;15703:14;15720:17;:23;15738:4;15720:23;;;;;;;;;;;;15703:40;;15836:1;9932:8;15809:6;:23;:28;15805:699;;;16328:113;16345:1;16335:6;:11;16328:113;;;16388:17;:25;16406:6;;;;;;;16388:25;;;;;;;;;;;;16379:34;;16328:113;;;16474:6;16467:13;;;;;;15805:699;15680:843;15654:869;15608:915;16551:31;;;;;;;;;;;;;;15461:1129;;;;:::o;36241:105::-;36301:7;36328:10;36321:17;;36241:105;:::o;53466:101::-;53531:7;53558:1;53551:8;;53466:101;:::o;14129:176::-;14190:7;9162:13;9299:2;14218:18;:25;14237:5;14218:25;;;;;;;;;;;;;;;;:49;;14217:80;14210:87;;14129:176;;;:::o;27498:2515::-;27613:27;27643;27662:7;27643:18;:27::i;:::-;27613:57;;27728:4;27687:45;;27703:19;27687:45;;;27683:86;;27741:28;;;;;;;;;;;;;;27683:86;27782:22;27831:4;27808:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;27852:43;27869:4;27875:19;:17;:19::i;:::-;27852:16;:43::i;:::-;27808:87;:147;;;;27936:19;:17;:19::i;:::-;27912:43;;:20;27924:7;27912:11;:20::i;:::-;:43;;;27808:147;27782:174;;27974:17;27969:66;;28000:35;;;;;;;;;;;;;;27969:66;28064:1;28050:16;;:2;:16;;;28046:52;;;28075:23;;;;;;;;;;;;;;28046:52;28111:43;28133:4;28139:2;28143:7;28152:1;28111:21;:43::i;:::-;28227:15;:24;28243:7;28227:24;;;;;;;;;;;;28220:31;;;;;;;;;;;28619:18;:24;28638:4;28619:24;;;;;;;;;;;;;;;;28617:26;;;;;;;;;;;;28688:18;:22;28707:2;28688:22;;;;;;;;;;;;;;;;28686:24;;;;;;;;;;;10214:8;9816:3;29069:15;:41;;29027:21;29045:2;29027:17;:21::i;:::-;:84;:128;28981:17;:26;28999:7;28981:26;;;;;;;;;;;:174;;;;29325:1;10214:8;29275:19;:46;:51;29271:626;;;29347:19;29379:1;29369:7;:11;29347:33;;29536:1;29502:17;:30;29520:11;29502:30;;;;;;;;;;;;:35;29498:384;;;29640:13;;29625:11;:28;29621:242;;29820:19;29787:17;:30;29805:11;29787:30;;;;;;;;;;;:52;;;;29621:242;29498:384;29328:569;29271:626;29944:7;29940:2;29925:27;;29934:4;29925:27;;;;;;;;;;;;29963:42;29984:4;29990:2;29994:7;30003:1;29963:20;:42::i;:::-;27602:2411;;27498:2515;;;:::o;22616:104::-;22685:27;22695:2;22699:8;22685:27;;;;;;;;;;;;:9;:27::i;:::-;22616:104;;:::o;50808:191::-;50882:16;50901:6;;;;;;;;;;;50882:25;;50927:8;50918:6;;:17;;;;;;;;;;;;;;;;;;50982:8;50951:40;;50972:8;50951:40;;;;;;;;;;;;50871:128;50808:191;:::o;33710:716::-;33873:4;33919:2;33894:45;;;33940:19;:17;:19::i;:::-;33961:4;33967:7;33976:5;33894:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33890:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34194:1;34177:6;:13;:18;34173:235;;;34223:40;;;;;;;;;;;;;;34173:235;34366:6;34360:13;34351:6;34347:2;34343:15;34336:38;33890:529;34063:54;;;34053:64;;;:6;:64;;;;34046:71;;;33710:716;;;;;;:::o;18501:318::-;18574:13;18605:16;18613:7;18605;:16::i;:::-;18600:59;;18630:29;;;;;;;;;;;;;;18600:59;18672:21;18696:10;:8;:10::i;:::-;18672:34;;18749:1;18730:7;18724:21;:26;;:87;;;;;;;;;;;;;;;;;18777:7;18786:18;18796:7;18786:9;:18::i;:::-;18760:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18724:87;18717:94;;;18501:318;;;:::o;35074:159::-;;;;;:::o;19246:148::-;19310:14;19371:5;19361:15;;19246:148;;;:::o;35892:158::-;;;;;:::o;23093:2236::-;23216:20;23239:13;;23216:36;;23281:1;23267:16;;:2;:16;;;23263:48;;;23292:19;;;;;;;;;;;;;;23263:48;23338:1;23326:8;:13;23322:44;;;23348:18;;;;;;;;;;;;;;23322:44;23379:61;23409:1;23413:2;23417:12;23431:8;23379:21;:61::i;:::-;23983:1;9299:2;23954:1;:25;;23953:31;23941:8;:44;23915:18;:22;23934:2;23915:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;10079:3;24384:29;24411:1;24399:8;:13;24384:14;:29::i;:::-;:56;;9816:3;24321:15;:41;;24279:21;24297:2;24279:17;:21::i;:::-;:84;:162;24228:17;:31;24246:12;24228:31;;;;;;;;;;;:213;;;;24458:20;24481:12;24458:35;;24508:11;24537:8;24522:12;:23;24508:37;;24584:1;24566:2;:14;;;:19;24562:635;;24606:313;24662:12;24658:2;24637:38;;24654:1;24637:38;;;;;;;;;;;;24703:69;24742:1;24746:2;24750:14;;;;;;24766:5;24703:30;:69::i;:::-;24698:174;;24808:40;;;;;;;;;;;;;;24698:174;24914:3;24899:12;:18;24606:313;;25000:12;24983:13;;:29;24979:43;;25014:8;;;24979:43;24562:635;;;25063:119;25119:14;;;;;;25115:2;25094:40;;25111:1;25094:40;;;;;;;;;;;;25177:3;25162:12;:18;25063:119;;24562:635;25227:12;25211:13;:28;;;;23692:1559;;25261:60;25290:1;25294:2;25298:12;25312:8;25261:20;:60::i;:::-;23205:2124;23093:2236;;;:::o;54085:106::-;54145:13;54176:7;54169:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54085:106;:::o;36452:1959::-;36509:17;36930:3;36923:4;36917:11;36913:21;36906:28;;37021:3;37015:4;37008:17;37127:3;37584:5;37714:1;37709:3;37705:11;37698:18;;37851:2;37845:4;37841:13;37837:2;37833:22;37828:3;37820:36;37892:2;37886:4;37882:13;37874:21;;37475:682;37911:4;37475:682;;;38086:1;38081:3;38077:11;38070:18;;38137:2;38131:4;38127:13;38123:2;38119:22;38114:3;38106:36;38007:2;38001:4;37997:13;37989:21;;37475:682;;;37479:431;38208:3;38203;38199:13;38323:2;38318:3;38314:12;38307:19;;38386:6;38381:3;38374:19;36548:1856;;36452:1959;;;:::o;19481:142::-;19539:14;19600:5;19590:15;;19481:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:365::-;8987:3;9008:66;9072:1;9067:3;9008:66;:::i;:::-;9001:73;;9083:93;9172:3;9083:93;:::i;:::-;9201:2;9196:3;9192:12;9185:19;;8845:365;;;:::o;9216:366::-;9358:3;9379:67;9443:2;9438:3;9379:67;:::i;:::-;9372:74;;9455:93;9544:3;9455:93;:::i;:::-;9573:2;9568:3;9564:12;9557:19;;9216:366;;;:::o;9588:::-;9730:3;9751:67;9815:2;9810:3;9751:67;:::i;:::-;9744:74;;9827:93;9916:3;9827:93;:::i;:::-;9945:2;9940:3;9936:12;9929:19;;9588:366;;;:::o;9960:::-;10102:3;10123:67;10187:2;10182:3;10123:67;:::i;:::-;10116:74;;10199:93;10288:3;10199:93;:::i;:::-;10317:2;10312:3;10308:12;10301:19;;9960:366;;;:::o;10332:400::-;10492:3;10513:84;10595:1;10590:3;10513:84;:::i;:::-;10506:91;;10606:93;10695:3;10606:93;:::i;:::-;10724:1;10719:3;10715:11;10708:18;;10332:400;;;:::o;10738:366::-;10880:3;10901:67;10965:2;10960:3;10901:67;:::i;:::-;10894:74;;10977:93;11066:3;10977:93;:::i;:::-;11095:2;11090:3;11086:12;11079:19;;10738:366;;;:::o;11110:::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11110:366;;;:::o;11482:::-;11624:3;11645:67;11709:2;11704:3;11645:67;:::i;:::-;11638:74;;11721:93;11810:3;11721:93;:::i;:::-;11839:2;11834:3;11830:12;11823:19;;11482:366;;;:::o;11854:::-;11996:3;12017:67;12081:2;12076:3;12017:67;:::i;:::-;12010:74;;12093:93;12182:3;12093:93;:::i;:::-;12211:2;12206:3;12202:12;12195:19;;11854:366;;;:::o;12226:398::-;12385:3;12406:83;12487:1;12482:3;12406:83;:::i;:::-;12399:90;;12498:93;12587:3;12498:93;:::i;:::-;12616:1;12611:3;12607:11;12600:18;;12226:398;;;:::o;12630:366::-;12772:3;12793:67;12857:2;12852:3;12793:67;:::i;:::-;12786:74;;12869:93;12958:3;12869:93;:::i;:::-;12987:2;12982:3;12978:12;12971:19;;12630:366;;;:::o;13002:118::-;13089:24;13107:5;13089:24;:::i;:::-;13084:3;13077:37;13002:118;;:::o;13126:435::-;13306:3;13328:95;13419:3;13410:6;13328:95;:::i;:::-;13321:102;;13440:95;13531:3;13522:6;13440:95;:::i;:::-;13433:102;;13552:3;13545:10;;13126:435;;;;;:::o;13567:541::-;13800:3;13822:95;13913:3;13904:6;13822:95;:::i;:::-;13815:102;;13934:148;14078:3;13934:148;:::i;:::-;13927:155;;14099:3;14092:10;;13567:541;;;;:::o;14114:379::-;14298:3;14320:147;14463:3;14320:147;:::i;:::-;14313:154;;14484:3;14477:10;;14114:379;;;:::o;14499:222::-;14592:4;14630:2;14619:9;14615:18;14607:26;;14643:71;14711:1;14700:9;14696:17;14687:6;14643:71;:::i;:::-;14499:222;;;;:::o;14727:640::-;14922:4;14960:3;14949:9;14945:19;14937:27;;14974:71;15042:1;15031:9;15027:17;15018:6;14974:71;:::i;:::-;15055:72;15123:2;15112:9;15108:18;15099:6;15055:72;:::i;:::-;15137;15205:2;15194:9;15190:18;15181:6;15137:72;:::i;:::-;15256:9;15250:4;15246:20;15241:2;15230:9;15226:18;15219:48;15284:76;15355:4;15346:6;15284:76;:::i;:::-;15276:84;;14727:640;;;;;;;:::o;15373:210::-;15460:4;15498:2;15487:9;15483:18;15475:26;;15511:65;15573:1;15562:9;15558:17;15549:6;15511:65;:::i;:::-;15373:210;;;;:::o;15589:313::-;15702:4;15740:2;15729:9;15725:18;15717:26;;15789:9;15783:4;15779:20;15775:1;15764:9;15760:17;15753:47;15817:78;15890:4;15881:6;15817:78;:::i;:::-;15809:86;;15589:313;;;;:::o;15908:419::-;16074:4;16112:2;16101:9;16097:18;16089:26;;16161:9;16155:4;16151:20;16147:1;16136:9;16132:17;16125:47;16189:131;16315:4;16189:131;:::i;:::-;16181:139;;15908:419;;;:::o;16333:::-;16499:4;16537:2;16526:9;16522:18;16514:26;;16586:9;16580:4;16576:20;16572:1;16561:9;16557:17;16550:47;16614:131;16740:4;16614:131;:::i;:::-;16606:139;;16333:419;;;:::o;16758:::-;16924:4;16962:2;16951:9;16947:18;16939:26;;17011:9;17005:4;17001:20;16997:1;16986:9;16982:17;16975:47;17039:131;17165:4;17039:131;:::i;:::-;17031:139;;16758:419;;;:::o;17183:::-;17349:4;17387:2;17376:9;17372:18;17364:26;;17436:9;17430:4;17426:20;17422:1;17411:9;17407:17;17400:47;17464:131;17590:4;17464:131;:::i;:::-;17456:139;;17183:419;;;:::o;17608:::-;17774:4;17812:2;17801:9;17797:18;17789:26;;17861:9;17855:4;17851:20;17847:1;17836:9;17832:17;17825:47;17889:131;18015:4;17889:131;:::i;:::-;17881:139;;17608:419;;;:::o;18033:::-;18199:4;18237:2;18226:9;18222:18;18214:26;;18286:9;18280:4;18276:20;18272:1;18261:9;18257:17;18250:47;18314:131;18440:4;18314:131;:::i;:::-;18306:139;;18033:419;;;:::o;18458:::-;18624:4;18662:2;18651:9;18647:18;18639:26;;18711:9;18705:4;18701:20;18697:1;18686:9;18682:17;18675:47;18739:131;18865:4;18739:131;:::i;:::-;18731:139;;18458:419;;;:::o;18883:::-;19049:4;19087:2;19076:9;19072:18;19064:26;;19136:9;19130:4;19126:20;19122:1;19111:9;19107:17;19100:47;19164:131;19290:4;19164:131;:::i;:::-;19156:139;;18883:419;;;:::o;19308:::-;19474:4;19512:2;19501:9;19497:18;19489:26;;19561:9;19555:4;19551:20;19547:1;19536:9;19532:17;19525:47;19589:131;19715:4;19589:131;:::i;:::-;19581:139;;19308:419;;;:::o;19733:222::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19877:71;19945:1;19934:9;19930:17;19921:6;19877:71;:::i;:::-;19733:222;;;;:::o;19961:129::-;19995:6;20022:20;;:::i;:::-;20012:30;;20051:33;20079:4;20071:6;20051:33;:::i;:::-;19961:129;;;:::o;20096:75::-;20129:6;20162:2;20156:9;20146:19;;20096:75;:::o;20177:307::-;20238:4;20328:18;20320:6;20317:30;20314:56;;;20350:18;;:::i;:::-;20314:56;20388:29;20410:6;20388:29;:::i;:::-;20380:37;;20472:4;20466;20462:15;20454:23;;20177:307;;;:::o;20490:308::-;20552:4;20642:18;20634:6;20631:30;20628:56;;;20664:18;;:::i;:::-;20628:56;20702:29;20724:6;20702:29;:::i;:::-;20694:37;;20786:4;20780;20776:15;20768:23;;20490:308;;;:::o;20804:98::-;20855:6;20889:5;20883:12;20873:22;;20804:98;;;:::o;20908:99::-;20960:6;20994:5;20988:12;20978:22;;20908:99;;;:::o;21013:168::-;21096:11;21130:6;21125:3;21118:19;21170:4;21165:3;21161:14;21146:29;;21013:168;;;;:::o;21187:147::-;21288:11;21325:3;21310:18;;21187:147;;;;:::o;21340:169::-;21424:11;21458:6;21453:3;21446:19;21498:4;21493:3;21489:14;21474:29;;21340:169;;;;:::o;21515:148::-;21617:11;21654:3;21639:18;;21515:148;;;;:::o;21669:305::-;21709:3;21728:20;21746:1;21728:20;:::i;:::-;21723:25;;21762:20;21780:1;21762:20;:::i;:::-;21757:25;;21916:1;21848:66;21844:74;21841:1;21838:81;21835:107;;;21922:18;;:::i;:::-;21835:107;21966:1;21963;21959:9;21952:16;;21669:305;;;;:::o;21980:348::-;22020:7;22043:20;22061:1;22043:20;:::i;:::-;22038:25;;22077:20;22095:1;22077:20;:::i;:::-;22072:25;;22265:1;22197:66;22193:74;22190:1;22187:81;22182:1;22175:9;22168:17;22164:105;22161:131;;;22272:18;;:::i;:::-;22161:131;22320:1;22317;22313:9;22302:20;;21980:348;;;;:::o;22334:96::-;22371:7;22400:24;22418:5;22400:24;:::i;:::-;22389:35;;22334:96;;;:::o;22436:90::-;22470:7;22513:5;22506:13;22499:21;22488:32;;22436:90;;;:::o;22532:149::-;22568:7;22608:66;22601:5;22597:78;22586:89;;22532:149;;;:::o;22687:126::-;22724:7;22764:42;22757:5;22753:54;22742:65;;22687:126;;;:::o;22819:77::-;22856:7;22885:5;22874:16;;22819:77;;;:::o;22902:154::-;22986:6;22981:3;22976;22963:30;23048:1;23039:6;23034:3;23030:16;23023:27;22902:154;;;:::o;23062:307::-;23130:1;23140:113;23154:6;23151:1;23148:13;23140:113;;;23239:1;23234:3;23230:11;23224:18;23220:1;23215:3;23211:11;23204:39;23176:2;23173:1;23169:10;23164:15;;23140:113;;;23271:6;23268:1;23265:13;23262:101;;;23351:1;23342:6;23337:3;23333:16;23326:27;23262:101;23111:258;23062:307;;;:::o;23375:320::-;23419:6;23456:1;23450:4;23446:12;23436:22;;23503:1;23497:4;23493:12;23524:18;23514:81;;23580:4;23572:6;23568:17;23558:27;;23514:81;23642:2;23634:6;23631:14;23611:18;23608:38;23605:84;;;23661:18;;:::i;:::-;23605:84;23426:269;23375:320;;;:::o;23701:281::-;23784:27;23806:4;23784:27;:::i;:::-;23776:6;23772:40;23914:6;23902:10;23899:22;23878:18;23866:10;23863:34;23860:62;23857:88;;;23925:18;;:::i;:::-;23857:88;23965:10;23961:2;23954:22;23744:238;23701:281;;:::o;23988:180::-;24036:77;24033:1;24026:88;24133:4;24130:1;24123:15;24157:4;24154:1;24147:15;24174:180;24222:77;24219:1;24212:88;24319:4;24316:1;24309:15;24343:4;24340:1;24333:15;24360:180;24408:77;24405:1;24398:88;24505:4;24502:1;24495:15;24529:4;24526:1;24519:15;24546:117;24655:1;24652;24645:12;24669:117;24778:1;24775;24768:12;24792:117;24901:1;24898;24891:12;24915:117;25024:1;25021;25014:12;25038:102;25079:6;25130:2;25126:7;25121:2;25114:5;25110:14;25106:28;25096:38;;25038:102;;;:::o;25146:157::-;25286:9;25282:1;25274:6;25270:14;25263:33;25146:157;:::o;25309:225::-;25449:34;25445:1;25437:6;25433:14;25426:58;25518:8;25513:2;25505:6;25501:15;25494:33;25309:225;:::o;25540:180::-;25680:32;25676:1;25668:6;25664:14;25657:56;25540:180;:::o;25726:166::-;25866:18;25862:1;25854:6;25850:14;25843:42;25726:166;:::o;25898:155::-;26038:7;26034:1;26026:6;26022:14;26015:31;25898:155;:::o;26059:182::-;26199:34;26195:1;26187:6;26183:14;26176:58;26059:182;:::o;26247:234::-;26387:34;26383:1;26375:6;26371:14;26364:58;26456:17;26451:2;26443:6;26439:15;26432:42;26247:234;:::o;26487:174::-;26627:26;26623:1;26615:6;26611:14;26604:50;26487:174;:::o;26667:179::-;26807:31;26803:1;26795:6;26791:14;26784:55;26667:179;:::o;26852:114::-;;:::o;26972:169::-;27112:21;27108:1;27100:6;27096:14;27089:45;26972:169;:::o;27147:122::-;27220:24;27238:5;27220:24;:::i;:::-;27213:5;27210:35;27200:63;;27259:1;27256;27249:12;27200:63;27147:122;:::o;27275:116::-;27345:21;27360:5;27345:21;:::i;:::-;27338:5;27335:32;27325:60;;27381:1;27378;27371:12;27325:60;27275:116;:::o;27397:120::-;27469:23;27486:5;27469:23;:::i;:::-;27462:5;27459:34;27449:62;;27507:1;27504;27497:12;27449:62;27397:120;:::o;27523:122::-;27596:24;27614:5;27596:24;:::i;:::-;27589:5;27586:35;27576:63;;27635:1;27632;27625:12;27576:63;27523:122;:::o
Swarm Source
ipfs://af21dc002bc3f7d0593593bdeeef963a4bc14f62f595ad3f3c91bf9568c80e15
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.