ERC-721
Overview
Max Total Supply
3,000 PASS
Holders
874
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 PASSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTAlertsApp
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-08 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * 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(); // Compiler will pack this into a single 256bit word. 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; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @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); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @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 Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _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 _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ 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(); } } /** * 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 See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].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 { _addressData[owner].aux = aux; } /** * 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) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // 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. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @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 == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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.isContract()) 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 && !_ownerships[tokenId].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 { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { 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 { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); 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 { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } 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 { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } 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 Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @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 IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == 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 {} } // File: contracts/4_NFTAlertsAPP.sol pragma solidity ^0.8.4; contract NFTAlertsApp is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public PRICE; uint256 public MAX_SUPPLY; string private BASE_URI; uint256 public MAX_MINT_AMOUNT_PER_TX; bool public IS_SALE_ACTIVE; constructor( uint256 price, uint256 maxSupply, string memory baseUri, uint256 maxMintPerTx, bool isSaleActive ) ERC721A("Nft Alerts Lifetime Pass", "PASS") { PRICE = price; MAX_SUPPLY = maxSupply; BASE_URI = baseUri; MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; IS_SALE_ACTIVE = isSaleActive; } /** GETTERS **/ function _baseURI() internal view virtual override returns (string memory) { return BASE_URI; } /** SETTERS **/ function setPrice(uint256 customPrice) external onlyOwner { PRICE = customPrice; } function setBaseURI(string memory customBaseURI_) external onlyOwner { BASE_URI = customBaseURI_; } function setMaxMintPerTx(uint256 maxMintPerTx) external onlyOwner { MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; } function setSaleActive(bool saleIsActive) external onlyOwner { IS_SALE_ACTIVE = saleIsActive; } /** MINT **/ modifier mintCompliance(uint256 _mintAmount) { require( _mintAmount > 0 && _mintAmount <= MAX_MINT_AMOUNT_PER_TX, "Invalid mint amount!" ); require( _currentIndex + _mintAmount <= MAX_SUPPLY, "Max supply exceeded!" ); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(IS_SALE_ACTIVE, "Sale is not active!"); uint256 price = PRICE * _mintAmount; require(msg.value >= price, "Insufficient funds!"); _safeMint(msg.sender, _mintAmount); } /** PAYOUT **/ function withdraw() public onlyOwner nonReentrant { uint256 balance = address(this).balance; Address.sendValue( payable(0x9D5381BB321508CE6dce9dFE3d5B9849ED7a9b6c), balance ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"customPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive","type":"bool"}],"name":"setSaleActive","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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003c7f38038062003c7f833981810160405281019062000037919062000397565b6040518060400160405280601881526020017f4e667420416c65727473204c69666574696d65205061737300000000000000008152506040518060400160405280600481526020017f50415353000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb9291906200023b565b508060039080519060200190620000d49291906200023b565b50620000e56200016860201b60201c565b60008190555050506200010d620001016200016d60201b60201c565b6200017560201b60201c565b600160098190555084600a8190555083600b8190555082600c90805190602001906200013b9291906200023b565b5081600d8190555080600e60006101000a81548160ff02191690831515021790555050505050506200060c565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024990620004e9565b90600052602060002090601f0160209004810192826200026d5760008555620002b9565b82601f106200028857805160ff1916838001178555620002b9565b82800160010185558215620002b9579182015b82811115620002b85782518255916020019190600101906200029b565b5b509050620002c89190620002cc565b5090565b5b80821115620002e7576000816000905550600101620002cd565b5090565b600062000302620002fc8462000467565b6200043e565b905082815260208101848484011115620003215762000320620005b8565b5b6200032e848285620004b3565b509392505050565b6000815190506200034781620005d8565b92915050565b600082601f830112620003655762000364620005b3565b5b815162000377848260208601620002eb565b91505092915050565b6000815190506200039181620005f2565b92915050565b600080600080600060a08688031215620003b657620003b5620005c2565b5b6000620003c68882890162000380565b9550506020620003d98882890162000380565b945050604086015167ffffffffffffffff811115620003fd57620003fc620005bd565b5b6200040b888289016200034d565b93505060606200041e8882890162000380565b9250506080620004318882890162000336565b9150509295509295909350565b60006200044a6200045d565b90506200045882826200051f565b919050565b6000604051905090565b600067ffffffffffffffff82111562000485576200048462000584565b5b6200049082620005c7565b9050602081019050919050565b60008115159050919050565b6000819050919050565b60005b83811015620004d3578082015181840152602081019050620004b6565b83811115620004e3576000848401525b50505050565b600060028204905060018216806200050257607f821691505b6020821081141562000519576200051862000555565b5b50919050565b6200052a82620005c7565b810181811067ffffffffffffffff821117156200054c576200054b62000584565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005e3816200049d565b8114620005ef57600080fd5b50565b620005fd81620004a9565b81146200060957600080fd5b50565b613663806200061c6000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec57806395d89b411161008a578063b88d4fde11610064578063b88d4fde1461057f578063c87b56dd146105a8578063e985e9c5146105e5578063f2fde38b146106225761019c565b806395d89b411461050f578063a0712d681461053a578063a22cb465146105565761019c565b8063841718a6116100c6578063841718a6146104675780638d859f3e146104905780638da5cb5b146104bb57806391b7f5ed146104e65761019c565b806370a08231146103e8578063715018a61461042557806376d02b711461043c5761019c565b806323b872dd1161015957806342842e0e1161013357806342842e0e1461033057806355f804b314610359578063616cdb1e146103825780636352211e146103ab5761019c565b806323b872dd146102c557806332cb6b0c146102ee5780633ccfd60b146103195761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806309ef65271461026f57806318160ddd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612a6e565b61064b565b6040516101d59190612e0c565b60405180910390f35b3480156101ea57600080fd5b506101f361072d565b6040516102009190612e27565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612b11565b6107bf565b60405161023d9190612da5565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612a01565b61083b565b005b34801561027b57600080fd5b50610284610940565b6040516102919190612f69565b60405180910390f35b3480156102a657600080fd5b506102af610946565b6040516102bc9190612f69565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906128eb565b61095d565b005b3480156102fa57600080fd5b5061030361096d565b6040516103109190612f69565b60405180910390f35b34801561032557600080fd5b5061032e610973565b005b34801561033c57600080fd5b50610357600480360381019061035291906128eb565b610a6b565b005b34801561036557600080fd5b50610380600480360381019061037b9190612ac8565b610a8b565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612b11565b610b21565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612b11565b610ba7565b6040516103df9190612da5565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061287e565b610bbd565b60405161041c9190612f69565b60405180910390f35b34801561043157600080fd5b5061043a610c8d565b005b34801561044857600080fd5b50610451610d15565b60405161045e9190612e0c565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190612a41565b610d28565b005b34801561049c57600080fd5b506104a5610dc1565b6040516104b29190612f69565b60405180910390f35b3480156104c757600080fd5b506104d0610dc7565b6040516104dd9190612da5565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190612b11565b610df1565b005b34801561051b57600080fd5b50610524610e77565b6040516105319190612e27565b60405180910390f35b610554600480360381019061054f9190612b11565b610f09565b005b34801561056257600080fd5b5061057d600480360381019061057891906129c1565b611060565b005b34801561058b57600080fd5b506105a660048036038101906105a1919061293e565b6111d8565b005b3480156105b457600080fd5b506105cf60048036038101906105ca9190612b11565b611250565b6040516105dc9190612e27565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906128ab565b6112ef565b6040516106199190612e0c565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061287e565b611383565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072657506107258261147b565b5b9050919050565b60606002805461073c90613224565b80601f016020809104026020016040519081016040528092919081815260200182805461076890613224565b80156107b55780601f1061078a576101008083540402835291602001916107b5565b820191906000526020600020905b81548152906001019060200180831161079857829003601f168201915b5050505050905090565b60006107ca826114e5565b610800576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061084682610ba7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ae576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108cd611533565b73ffffffffffffffffffffffffffffffffffffffff1614610930576108f9816108f4611533565b6112ef565b61092f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61093b83838361153b565b505050565b600d5481565b60006109506115ed565b6001546000540303905090565b6109688383836115f2565b505050565b600b5481565b61097b611533565b73ffffffffffffffffffffffffffffffffffffffff16610999610dc7565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e690612ec9565b60405180910390fd5b60026009541415610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90612f29565b60405180910390fd5b60026009819055506000479050610a60739d5381bb321508ce6dce9dfe3d5b9849ed7a9b6c82611aa8565b506001600981905550565b610a86838383604051806020016040528060008152506111d8565b505050565b610a93611533565b73ffffffffffffffffffffffffffffffffffffffff16610ab1610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612ec9565b60405180910390fd5b80600c9080519060200190610b1d92919061264f565b5050565b610b29611533565b73ffffffffffffffffffffffffffffffffffffffff16610b47610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490612ec9565b60405180910390fd5b80600d8190555050565b6000610bb282611b9c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610c95611533565b73ffffffffffffffffffffffffffffffffffffffff16610cb3610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612ec9565b60405180910390fd5b610d136000611e27565b565b600e60009054906101000a900460ff1681565b610d30611533565b73ffffffffffffffffffffffffffffffffffffffff16610d4e610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612ec9565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600a5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df9611533565b73ffffffffffffffffffffffffffffffffffffffff16610e17610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490612ec9565b60405180910390fd5b80600a8190555050565b606060038054610e8690613224565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290613224565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b80600081118015610f1c5750600d548111155b610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290612e69565b60405180910390fd5b600b5481600054610f6c9190613059565b1115610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490612f09565b60405180910390fd5b600e60009054906101000a900460ff16610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390612ee9565b60405180910390fd5b600082600a5461100c91906130e0565b905080341015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890612f49565b60405180910390fd5b61105b3384611eed565b505050565b611068611533565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110cd576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006110da611533565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611187611533565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111cc9190612e0c565b60405180910390a35050565b6111e38484846115f2565b6112028373ffffffffffffffffffffffffffffffffffffffff16611f0b565b1561124a5761121384848484611f2e565b611249576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606061125b826114e5565b611291576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061129b61208e565b90506000815114156112bc57604051806020016040528060008152506112e7565b806112c684612120565b6040516020016112d7929190612d6c565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61138b611533565b73ffffffffffffffffffffffffffffffffffffffff166113a9610dc7565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612ec9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612e49565b60405180910390fd5b61147881611e27565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816114f06115ed565b111580156114ff575060005482105b801561152c575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006115fd82611b9c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611668576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611689611533565b73ffffffffffffffffffffffffffffffffffffffff1614806116b857506116b7856116b2611533565b6112ef565b5b806116fd57506116c6611533565b73ffffffffffffffffffffffffffffffffffffffff166116e5846107bf565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611736576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561179d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117aa8585856001612281565b6117b66000848761153b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a36576000548214611a3557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611aa18585856001612287565b5050505050565b80471015611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290612ea9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611b1190612d90565b60006040518083038185875af1925050503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5050905080611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90612e89565b60405180910390fd5b505050565b611ba46126d5565b600082905080611bb26115ed565b11611df057600054811015611def576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611ded57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cd1578092505050611e22565b5b600115611dec57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611de7578092505050611e22565b611cd2565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f0782826040518060200160405280600081525061228d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f54611533565b8786866040518563ffffffff1660e01b8152600401611f769493929190612dc0565b602060405180830381600087803b158015611f9057600080fd5b505af1925050508015611fc157506040513d601f19601f82011682018060405250810190611fbe9190612a9b565b60015b61203b573d8060008114611ff1576040519150601f19603f3d011682016040523d82523d6000602084013e611ff6565b606091505b50600081511415612033576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461209d90613224565b80601f01602080910402602001604051908101604052809291908181526020018280546120c990613224565b80156121165780601f106120eb57610100808354040283529160200191612116565b820191906000526020600020905b8154815290600101906020018083116120f957829003601f168201915b5050505050905090565b60606000821415612168576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061227c565b600082905060005b6000821461219a57808061218390613287565b915050600a8261219391906130af565b9150612170565b60008167ffffffffffffffff8111156121b6576121b56133bd565b5b6040519080825280601f01601f1916602001820160405280156121e85781602001600182028036833780820191505090505b5090505b6000851461227557600182612201919061313a565b9150600a8561221091906132d0565b603061221c9190613059565b60f81b8183815181106122325761223161338e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561226e91906130af565b94506121ec565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122fa576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612335576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123426000858386612281565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506125038673ffffffffffffffffffffffffffffffffffffffff16611f0b565b156125c8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125786000878480600101955087611f2e565b6125ae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125095782600054146125c357600080fd5b612633565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106125c9575b8160008190555050506126496000858386612287565b50505050565b82805461265b90613224565b90600052602060002090601f01602090048101928261267d57600085556126c4565b82601f1061269657805160ff19168380011785556126c4565b828001600101855582156126c4579182015b828111156126c35782518255916020019190600101906126a8565b5b5090506126d19190612718565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612731576000816000905550600101612719565b5090565b600061274861274384612fa9565b612f84565b905082815260208101848484011115612764576127636133f1565b5b61276f8482856131e2565b509392505050565b600061278a61278584612fda565b612f84565b9050828152602081018484840111156127a6576127a56133f1565b5b6127b18482856131e2565b509392505050565b6000813590506127c8816135d1565b92915050565b6000813590506127dd816135e8565b92915050565b6000813590506127f2816135ff565b92915050565b600081519050612807816135ff565b92915050565b600082601f830112612822576128216133ec565b5b8135612832848260208601612735565b91505092915050565b600082601f8301126128505761284f6133ec565b5b8135612860848260208601612777565b91505092915050565b60008135905061287881613616565b92915050565b600060208284031215612894576128936133fb565b5b60006128a2848285016127b9565b91505092915050565b600080604083850312156128c2576128c16133fb565b5b60006128d0858286016127b9565b92505060206128e1858286016127b9565b9150509250929050565b600080600060608486031215612904576129036133fb565b5b6000612912868287016127b9565b9350506020612923868287016127b9565b925050604061293486828701612869565b9150509250925092565b60008060008060808587031215612958576129576133fb565b5b6000612966878288016127b9565b9450506020612977878288016127b9565b935050604061298887828801612869565b925050606085013567ffffffffffffffff8111156129a9576129a86133f6565b5b6129b58782880161280d565b91505092959194509250565b600080604083850312156129d8576129d76133fb565b5b60006129e6858286016127b9565b92505060206129f7858286016127ce565b9150509250929050565b60008060408385031215612a1857612a176133fb565b5b6000612a26858286016127b9565b9250506020612a3785828601612869565b9150509250929050565b600060208284031215612a5757612a566133fb565b5b6000612a65848285016127ce565b91505092915050565b600060208284031215612a8457612a836133fb565b5b6000612a92848285016127e3565b91505092915050565b600060208284031215612ab157612ab06133fb565b5b6000612abf848285016127f8565b91505092915050565b600060208284031215612ade57612add6133fb565b5b600082013567ffffffffffffffff811115612afc57612afb6133f6565b5b612b088482850161283b565b91505092915050565b600060208284031215612b2757612b266133fb565b5b6000612b3584828501612869565b91505092915050565b612b478161316e565b82525050565b612b5681613180565b82525050565b6000612b678261300b565b612b718185613021565b9350612b818185602086016131f1565b612b8a81613400565b840191505092915050565b6000612ba082613016565b612baa818561303d565b9350612bba8185602086016131f1565b612bc381613400565b840191505092915050565b6000612bd982613016565b612be3818561304e565b9350612bf38185602086016131f1565b80840191505092915050565b6000612c0c60268361303d565b9150612c1782613411565b604082019050919050565b6000612c2f60148361303d565b9150612c3a82613460565b602082019050919050565b6000612c52603a8361303d565b9150612c5d82613489565b604082019050919050565b6000612c75601d8361303d565b9150612c80826134d8565b602082019050919050565b6000612c9860208361303d565b9150612ca382613501565b602082019050919050565b6000612cbb60138361303d565b9150612cc68261352a565b602082019050919050565b6000612cde600083613032565b9150612ce982613553565b600082019050919050565b6000612d0160148361303d565b9150612d0c82613556565b602082019050919050565b6000612d24601f8361303d565b9150612d2f8261357f565b602082019050919050565b6000612d4760138361303d565b9150612d52826135a8565b602082019050919050565b612d66816131d8565b82525050565b6000612d788285612bce565b9150612d848284612bce565b91508190509392505050565b6000612d9b82612cd1565b9150819050919050565b6000602082019050612dba6000830184612b3e565b92915050565b6000608082019050612dd56000830187612b3e565b612de26020830186612b3e565b612def6040830185612d5d565b8181036060830152612e018184612b5c565b905095945050505050565b6000602082019050612e216000830184612b4d565b92915050565b60006020820190508181036000830152612e418184612b95565b905092915050565b60006020820190508181036000830152612e6281612bff565b9050919050565b60006020820190508181036000830152612e8281612c22565b9050919050565b60006020820190508181036000830152612ea281612c45565b9050919050565b60006020820190508181036000830152612ec281612c68565b9050919050565b60006020820190508181036000830152612ee281612c8b565b9050919050565b60006020820190508181036000830152612f0281612cae565b9050919050565b60006020820190508181036000830152612f2281612cf4565b9050919050565b60006020820190508181036000830152612f4281612d17565b9050919050565b60006020820190508181036000830152612f6281612d3a565b9050919050565b6000602082019050612f7e6000830184612d5d565b92915050565b6000612f8e612f9f565b9050612f9a8282613256565b919050565b6000604051905090565b600067ffffffffffffffff821115612fc457612fc36133bd565b5b612fcd82613400565b9050602081019050919050565b600067ffffffffffffffff821115612ff557612ff46133bd565b5b612ffe82613400565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613064826131d8565b915061306f836131d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a4576130a3613301565b5b828201905092915050565b60006130ba826131d8565b91506130c5836131d8565b9250826130d5576130d4613330565b5b828204905092915050565b60006130eb826131d8565b91506130f6836131d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561312f5761312e613301565b5b828202905092915050565b6000613145826131d8565b9150613150836131d8565b92508282101561316357613162613301565b5b828203905092915050565b6000613179826131b8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000600282049050600182168061323c57607f821691505b602082108114156132505761324f61335f565b5b50919050565b61325f82613400565b810181811067ffffffffffffffff8211171561327e5761327d6133bd565b5b80604052505050565b6000613292826131d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132c5576132c4613301565b5b600182019050919050565b60006132db826131d8565b91506132e6836131d8565b9250826132f6576132f5613330565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6135da8161316e565b81146135e557600080fd5b50565b6135f181613180565b81146135fc57600080fd5b50565b6136088161318c565b811461361357600080fd5b50565b61361f816131d8565b811461362a57600080fd5b5056fea2646970667358221220efb1c771070aaa4ea8af1ca75513f9635a2e69e43e1043aa5b4340df3d9ac54d64736f6c6343000807003300000000000000000000000000000000000000000000000000071afd498d00000000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f7777772e6e6674616c657274732e6170702f6d6574612f00
Deployed Bytecode
0x60806040526004361061019c5760003560e01c806370a08231116100ec57806395d89b411161008a578063b88d4fde11610064578063b88d4fde1461057f578063c87b56dd146105a8578063e985e9c5146105e5578063f2fde38b146106225761019c565b806395d89b411461050f578063a0712d681461053a578063a22cb465146105565761019c565b8063841718a6116100c6578063841718a6146104675780638d859f3e146104905780638da5cb5b146104bb57806391b7f5ed146104e65761019c565b806370a08231146103e8578063715018a61461042557806376d02b711461043c5761019c565b806323b872dd1161015957806342842e0e1161013357806342842e0e1461033057806355f804b314610359578063616cdb1e146103825780636352211e146103ab5761019c565b806323b872dd146102c557806332cb6b0c146102ee5780633ccfd60b146103195761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806309ef65271461026f57806318160ddd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612a6e565b61064b565b6040516101d59190612e0c565b60405180910390f35b3480156101ea57600080fd5b506101f361072d565b6040516102009190612e27565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612b11565b6107bf565b60405161023d9190612da5565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612a01565b61083b565b005b34801561027b57600080fd5b50610284610940565b6040516102919190612f69565b60405180910390f35b3480156102a657600080fd5b506102af610946565b6040516102bc9190612f69565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906128eb565b61095d565b005b3480156102fa57600080fd5b5061030361096d565b6040516103109190612f69565b60405180910390f35b34801561032557600080fd5b5061032e610973565b005b34801561033c57600080fd5b50610357600480360381019061035291906128eb565b610a6b565b005b34801561036557600080fd5b50610380600480360381019061037b9190612ac8565b610a8b565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612b11565b610b21565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612b11565b610ba7565b6040516103df9190612da5565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061287e565b610bbd565b60405161041c9190612f69565b60405180910390f35b34801561043157600080fd5b5061043a610c8d565b005b34801561044857600080fd5b50610451610d15565b60405161045e9190612e0c565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190612a41565b610d28565b005b34801561049c57600080fd5b506104a5610dc1565b6040516104b29190612f69565b60405180910390f35b3480156104c757600080fd5b506104d0610dc7565b6040516104dd9190612da5565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190612b11565b610df1565b005b34801561051b57600080fd5b50610524610e77565b6040516105319190612e27565b60405180910390f35b610554600480360381019061054f9190612b11565b610f09565b005b34801561056257600080fd5b5061057d600480360381019061057891906129c1565b611060565b005b34801561058b57600080fd5b506105a660048036038101906105a1919061293e565b6111d8565b005b3480156105b457600080fd5b506105cf60048036038101906105ca9190612b11565b611250565b6040516105dc9190612e27565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906128ab565b6112ef565b6040516106199190612e0c565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061287e565b611383565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072657506107258261147b565b5b9050919050565b60606002805461073c90613224565b80601f016020809104026020016040519081016040528092919081815260200182805461076890613224565b80156107b55780601f1061078a576101008083540402835291602001916107b5565b820191906000526020600020905b81548152906001019060200180831161079857829003601f168201915b5050505050905090565b60006107ca826114e5565b610800576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061084682610ba7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108ae576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108cd611533565b73ffffffffffffffffffffffffffffffffffffffff1614610930576108f9816108f4611533565b6112ef565b61092f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b61093b83838361153b565b505050565b600d5481565b60006109506115ed565b6001546000540303905090565b6109688383836115f2565b505050565b600b5481565b61097b611533565b73ffffffffffffffffffffffffffffffffffffffff16610999610dc7565b73ffffffffffffffffffffffffffffffffffffffff16146109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e690612ec9565b60405180910390fd5b60026009541415610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90612f29565b60405180910390fd5b60026009819055506000479050610a60739d5381bb321508ce6dce9dfe3d5b9849ed7a9b6c82611aa8565b506001600981905550565b610a86838383604051806020016040528060008152506111d8565b505050565b610a93611533565b73ffffffffffffffffffffffffffffffffffffffff16610ab1610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612ec9565b60405180910390fd5b80600c9080519060200190610b1d92919061264f565b5050565b610b29611533565b73ffffffffffffffffffffffffffffffffffffffff16610b47610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490612ec9565b60405180910390fd5b80600d8190555050565b6000610bb282611b9c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610c95611533565b73ffffffffffffffffffffffffffffffffffffffff16610cb3610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612ec9565b60405180910390fd5b610d136000611e27565b565b600e60009054906101000a900460ff1681565b610d30611533565b73ffffffffffffffffffffffffffffffffffffffff16610d4e610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90612ec9565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600a5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df9611533565b73ffffffffffffffffffffffffffffffffffffffff16610e17610dc7565b73ffffffffffffffffffffffffffffffffffffffff1614610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490612ec9565b60405180910390fd5b80600a8190555050565b606060038054610e8690613224565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290613224565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b80600081118015610f1c5750600d548111155b610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290612e69565b60405180910390fd5b600b5481600054610f6c9190613059565b1115610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490612f09565b60405180910390fd5b600e60009054906101000a900460ff16610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390612ee9565b60405180910390fd5b600082600a5461100c91906130e0565b905080341015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890612f49565b60405180910390fd5b61105b3384611eed565b505050565b611068611533565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110cd576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006110da611533565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611187611533565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111cc9190612e0c565b60405180910390a35050565b6111e38484846115f2565b6112028373ffffffffffffffffffffffffffffffffffffffff16611f0b565b1561124a5761121384848484611f2e565b611249576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606061125b826114e5565b611291576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061129b61208e565b90506000815114156112bc57604051806020016040528060008152506112e7565b806112c684612120565b6040516020016112d7929190612d6c565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61138b611533565b73ffffffffffffffffffffffffffffffffffffffff166113a9610dc7565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612ec9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612e49565b60405180910390fd5b61147881611e27565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816114f06115ed565b111580156114ff575060005482105b801561152c575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006115fd82611b9c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611668576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611689611533565b73ffffffffffffffffffffffffffffffffffffffff1614806116b857506116b7856116b2611533565b6112ef565b5b806116fd57506116c6611533565b73ffffffffffffffffffffffffffffffffffffffff166116e5846107bf565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611736576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561179d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117aa8585856001612281565b6117b66000848761153b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a36576000548214611a3557878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611aa18585856001612287565b5050505050565b80471015611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290612ea9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611b1190612d90565b60006040518083038185875af1925050503d8060008114611b4e576040519150601f19603f3d011682016040523d82523d6000602084013e611b53565b606091505b5050905080611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90612e89565b60405180910390fd5b505050565b611ba46126d5565b600082905080611bb26115ed565b11611df057600054811015611def576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611ded57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611cd1578092505050611e22565b5b600115611dec57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611de7578092505050611e22565b611cd2565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f0782826040518060200160405280600081525061228d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f54611533565b8786866040518563ffffffff1660e01b8152600401611f769493929190612dc0565b602060405180830381600087803b158015611f9057600080fd5b505af1925050508015611fc157506040513d601f19601f82011682018060405250810190611fbe9190612a9b565b60015b61203b573d8060008114611ff1576040519150601f19603f3d011682016040523d82523d6000602084013e611ff6565b606091505b50600081511415612033576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461209d90613224565b80601f01602080910402602001604051908101604052809291908181526020018280546120c990613224565b80156121165780601f106120eb57610100808354040283529160200191612116565b820191906000526020600020905b8154815290600101906020018083116120f957829003601f168201915b5050505050905090565b60606000821415612168576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061227c565b600082905060005b6000821461219a57808061218390613287565b915050600a8261219391906130af565b9150612170565b60008167ffffffffffffffff8111156121b6576121b56133bd565b5b6040519080825280601f01601f1916602001820160405280156121e85781602001600182028036833780820191505090505b5090505b6000851461227557600182612201919061313a565b9150600a8561221091906132d0565b603061221c9190613059565b60f81b8183815181106122325761223161338e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561226e91906130af565b94506121ec565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122fa576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415612335576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123426000858386612281565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506125038673ffffffffffffffffffffffffffffffffffffffff16611f0b565b156125c8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125786000878480600101955087611f2e565b6125ae576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125095782600054146125c357600080fd5b612633565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106125c9575b8160008190555050506126496000858386612287565b50505050565b82805461265b90613224565b90600052602060002090601f01602090048101928261267d57600085556126c4565b82601f1061269657805160ff19168380011785556126c4565b828001600101855582156126c4579182015b828111156126c35782518255916020019190600101906126a8565b5b5090506126d19190612718565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612731576000816000905550600101612719565b5090565b600061274861274384612fa9565b612f84565b905082815260208101848484011115612764576127636133f1565b5b61276f8482856131e2565b509392505050565b600061278a61278584612fda565b612f84565b9050828152602081018484840111156127a6576127a56133f1565b5b6127b18482856131e2565b509392505050565b6000813590506127c8816135d1565b92915050565b6000813590506127dd816135e8565b92915050565b6000813590506127f2816135ff565b92915050565b600081519050612807816135ff565b92915050565b600082601f830112612822576128216133ec565b5b8135612832848260208601612735565b91505092915050565b600082601f8301126128505761284f6133ec565b5b8135612860848260208601612777565b91505092915050565b60008135905061287881613616565b92915050565b600060208284031215612894576128936133fb565b5b60006128a2848285016127b9565b91505092915050565b600080604083850312156128c2576128c16133fb565b5b60006128d0858286016127b9565b92505060206128e1858286016127b9565b9150509250929050565b600080600060608486031215612904576129036133fb565b5b6000612912868287016127b9565b9350506020612923868287016127b9565b925050604061293486828701612869565b9150509250925092565b60008060008060808587031215612958576129576133fb565b5b6000612966878288016127b9565b9450506020612977878288016127b9565b935050604061298887828801612869565b925050606085013567ffffffffffffffff8111156129a9576129a86133f6565b5b6129b58782880161280d565b91505092959194509250565b600080604083850312156129d8576129d76133fb565b5b60006129e6858286016127b9565b92505060206129f7858286016127ce565b9150509250929050565b60008060408385031215612a1857612a176133fb565b5b6000612a26858286016127b9565b9250506020612a3785828601612869565b9150509250929050565b600060208284031215612a5757612a566133fb565b5b6000612a65848285016127ce565b91505092915050565b600060208284031215612a8457612a836133fb565b5b6000612a92848285016127e3565b91505092915050565b600060208284031215612ab157612ab06133fb565b5b6000612abf848285016127f8565b91505092915050565b600060208284031215612ade57612add6133fb565b5b600082013567ffffffffffffffff811115612afc57612afb6133f6565b5b612b088482850161283b565b91505092915050565b600060208284031215612b2757612b266133fb565b5b6000612b3584828501612869565b91505092915050565b612b478161316e565b82525050565b612b5681613180565b82525050565b6000612b678261300b565b612b718185613021565b9350612b818185602086016131f1565b612b8a81613400565b840191505092915050565b6000612ba082613016565b612baa818561303d565b9350612bba8185602086016131f1565b612bc381613400565b840191505092915050565b6000612bd982613016565b612be3818561304e565b9350612bf38185602086016131f1565b80840191505092915050565b6000612c0c60268361303d565b9150612c1782613411565b604082019050919050565b6000612c2f60148361303d565b9150612c3a82613460565b602082019050919050565b6000612c52603a8361303d565b9150612c5d82613489565b604082019050919050565b6000612c75601d8361303d565b9150612c80826134d8565b602082019050919050565b6000612c9860208361303d565b9150612ca382613501565b602082019050919050565b6000612cbb60138361303d565b9150612cc68261352a565b602082019050919050565b6000612cde600083613032565b9150612ce982613553565b600082019050919050565b6000612d0160148361303d565b9150612d0c82613556565b602082019050919050565b6000612d24601f8361303d565b9150612d2f8261357f565b602082019050919050565b6000612d4760138361303d565b9150612d52826135a8565b602082019050919050565b612d66816131d8565b82525050565b6000612d788285612bce565b9150612d848284612bce565b91508190509392505050565b6000612d9b82612cd1565b9150819050919050565b6000602082019050612dba6000830184612b3e565b92915050565b6000608082019050612dd56000830187612b3e565b612de26020830186612b3e565b612def6040830185612d5d565b8181036060830152612e018184612b5c565b905095945050505050565b6000602082019050612e216000830184612b4d565b92915050565b60006020820190508181036000830152612e418184612b95565b905092915050565b60006020820190508181036000830152612e6281612bff565b9050919050565b60006020820190508181036000830152612e8281612c22565b9050919050565b60006020820190508181036000830152612ea281612c45565b9050919050565b60006020820190508181036000830152612ec281612c68565b9050919050565b60006020820190508181036000830152612ee281612c8b565b9050919050565b60006020820190508181036000830152612f0281612cae565b9050919050565b60006020820190508181036000830152612f2281612cf4565b9050919050565b60006020820190508181036000830152612f4281612d17565b9050919050565b60006020820190508181036000830152612f6281612d3a565b9050919050565b6000602082019050612f7e6000830184612d5d565b92915050565b6000612f8e612f9f565b9050612f9a8282613256565b919050565b6000604051905090565b600067ffffffffffffffff821115612fc457612fc36133bd565b5b612fcd82613400565b9050602081019050919050565b600067ffffffffffffffff821115612ff557612ff46133bd565b5b612ffe82613400565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613064826131d8565b915061306f836131d8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a4576130a3613301565b5b828201905092915050565b60006130ba826131d8565b91506130c5836131d8565b9250826130d5576130d4613330565b5b828204905092915050565b60006130eb826131d8565b91506130f6836131d8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561312f5761312e613301565b5b828202905092915050565b6000613145826131d8565b9150613150836131d8565b92508282101561316357613162613301565b5b828203905092915050565b6000613179826131b8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561320f5780820151818401526020810190506131f4565b8381111561321e576000848401525b50505050565b6000600282049050600182168061323c57607f821691505b602082108114156132505761324f61335f565b5b50919050565b61325f82613400565b810181811067ffffffffffffffff8211171561327e5761327d6133bd565b5b80604052505050565b6000613292826131d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132c5576132c4613301565b5b600182019050919050565b60006132db826131d8565b91506132e6836131d8565b9250826132f6576132f5613330565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6135da8161316e565b81146135e557600080fd5b50565b6135f181613180565b81146135fc57600080fd5b50565b6136088161318c565b811461361357600080fd5b50565b61361f816131d8565b811461362a57600080fd5b5056fea2646970667358221220efb1c771070aaa4ea8af1ca75513f9635a2e69e43e1043aa5b4340df3d9ac54d64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000071afd498d00000000000000000000000000000000000000000000000000000000000000000bb800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f7777772e6e6674616c657274732e6170702f6d6574612f00
-----Decoded View---------------
Arg [0] : price (uint256): 2000000000000000
Arg [1] : maxSupply (uint256): 3000
Arg [2] : baseUri (string): https://www.nftalerts.app/meta/
Arg [3] : maxMintPerTx (uint256): 50
Arg [4] : isSaleActive (bool): True
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000071afd498d0000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [6] : 68747470733a2f2f7777772e6e6674616c657274732e6170702f6d6574612f00
Deployed Bytecode Sourcemap
50229:2262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31337:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35956:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35518:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50418:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50356:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52251:237;;;;;;;;;;;;;:::i;:::-;;37062:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51164:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51287:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34260:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31706:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;50462:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51417:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50329:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51058:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34621:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51886:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36232:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37318:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34796:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36590:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31337:305;31439:4;31491:25;31476:40;;;:11;:40;;;;:105;;;;31548:33;31533:48;;;:11;:48;;;;31476:105;:158;;;;31598:36;31622:11;31598:23;:36::i;:::-;31476:158;31456:178;;31337:305;;;:::o;34452:100::-;34506:13;34539:5;34532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:100;:::o;35956:204::-;36024:7;36049:16;36057:7;36049;:16::i;:::-;36044:64;;36074:34;;;;;;;;;;;;;;36044:64;36128:15;:24;36144:7;36128:24;;;;;;;;;;;;;;;;;;;;;36121:31;;35956:204;;;:::o;35518:372::-;35591:13;35607:24;35623:7;35607:15;:24::i;:::-;35591:40;;35652:5;35646:11;;:2;:11;;;35642:48;;;35666:24;;;;;;;;;;;;;;35642:48;35723:5;35707:21;;:12;:10;:12::i;:::-;:21;;;35703:139;;35734:37;35751:5;35758:12;:10;:12::i;:::-;35734:16;:37::i;:::-;35730:112;;35795:35;;;;;;;;;;;;;;35730:112;35703:139;35854:28;35863:2;35867:7;35876:5;35854:8;:28::i;:::-;35580:310;35518:372;;:::o;50418:37::-;;;;:::o;30577:312::-;30630:7;30855:15;:13;:15::i;:::-;30840:12;;30824:13;;:28;:46;30817:53;;30577:312;:::o;36821:170::-;36955:28;36965:4;36971:2;36975:7;36955:9;:28::i;:::-;36821:170;;;:::o;50356:25::-;;;;:::o;52251:237::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;52312:15:::2;52330:21;52312:39;;52364:116;52404:42;52462:7;52364:17;:116::i;:::-;52301:187;1801:1:::1;2755:7;:22;;;;52251:237::o:0;37062:185::-;37200:39;37217:4;37223:2;37227:7;37200:39;;;;;;;;;;;;:16;:39::i;:::-;37062:185;;;:::o;51164:113::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51255:14:::1;51244:8;:25;;;;;;;;;;;;:::i;:::-;;51164:113:::0;:::o;51287:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51389:12:::1;51364:22;:37;;;;51287:122:::0;:::o;34260:125::-;34324:7;34351:21;34364:7;34351:12;:21::i;:::-;:26;;;34344:33;;34260:125;;;:::o;31706:206::-;31770:7;31811:1;31794:19;;:5;:19;;;31790:60;;;31822:28;;;;;;;;;;;;;;31790:60;31876:12;:19;31889:5;31876:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31868:36;;31861:43;;31706:206;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;50462:26::-;;;;;;;;;;;;;:::o;51417:109::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51506:12:::1;51489:14;;:29;;;;;;;;;;;;;;;;;;51417:109:::0;:::o;50329:20::-;;;;:::o;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;51058:96::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51135:11:::1;51127:5;:19;;;;51058:96:::0;:::o;34621:104::-;34677:13;34710:7;34703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34621:104;:::o;51886:333::-;51978:11;51646:1;51632:11;:15;:56;;;;;51666:22;;51651:11;:37;;51632:56;51610:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;51800:10;;51785:11;51769:13;;:27;;;;:::i;:::-;:41;;51747:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;52015:14:::1;;;;;;;;;;;52007:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52066:13;52090:11;52082:5;;:19;;;;:::i;:::-;52066:35;;52135:5;52122:9;:18;;52114:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52177:34;52187:10;52199:11;52177:9;:34::i;:::-;51996:223;51886:333:::0;;:::o;36232:287::-;36343:12;:10;:12::i;:::-;36331:24;;:8;:24;;;36327:54;;;36364:17;;;;;;;;;;;;;;36327:54;36439:8;36394:18;:32;36413:12;:10;:12::i;:::-;36394:32;;;;;;;;;;;;;;;:42;36427:8;36394:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36492:8;36463:48;;36478:12;:10;:12::i;:::-;36463:48;;;36502:8;36463:48;;;;;;:::i;:::-;;;;;;;;36232:287;;:::o;37318:370::-;37485:28;37495:4;37501:2;37505:7;37485:9;:28::i;:::-;37528:15;:2;:13;;;:15::i;:::-;37524:157;;;37549:56;37580:4;37586:2;37590:7;37599:5;37549:30;:56::i;:::-;37545:136;;37629:40;;;;;;;;;;;;;;37545:136;37524:157;37318:370;;;;:::o;34796:318::-;34869:13;34900:16;34908:7;34900;:16::i;:::-;34895:59;;34925:29;;;;;;;;;;;;;;34895:59;34967:21;34991:10;:8;:10::i;:::-;34967:34;;35044:1;35025:7;35019:21;:26;;:87;;;;;;;;;;;;;;;;;35072:7;35081:18;:7;:16;:18::i;:::-;35055:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35019:87;35012:94;;;34796:318;;;:::o;36590:164::-;36687:4;36711:18;:25;36730:5;36711:25;;;;;;;;;;;;;;;:35;36737:8;36711:35;;;;;;;;;;;;;;;;;;;;;;;;;36704:42;;36590:164;;;;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;;;7861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;19678:157::-;19763:4;19802:25;19787:40;;;:11;:40;;;;19780:47;;19678:157;;;:::o;37943:174::-;38000:4;38043:7;38024:15;:13;:15::i;:::-;:26;;:53;;;;;38064:13;;38054:7;:23;38024:53;:85;;;;;38082:11;:20;38094:7;38082:20;;;;;;;;;;;:27;;;;;;;;;;;;38081:28;38024:85;38017:92;;37943:174;;;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;47165:196::-;47307:2;47280:15;:24;47296:7;47280:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47345:7;47341:2;47325:28;;47334:5;47325:28;;;;;;;;;;;;47165:196;;;:::o;30351:92::-;30407:7;30351:92;:::o;42113:2130::-;42228:35;42266:21;42279:7;42266:12;:21::i;:::-;42228:59;;42326:4;42304:26;;:13;:18;;;:26;;;42300:67;;42339:28;;;;;;;;;;;;;;42300:67;42380:22;42422:4;42406:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42443:36;42460:4;42466:12;:10;:12::i;:::-;42443:16;:36::i;:::-;42406:73;:126;;;;42520:12;:10;:12::i;:::-;42496:36;;:20;42508:7;42496:11;:20::i;:::-;:36;;;42406:126;42380:153;;42551:17;42546:66;;42577:35;;;;;;;;;;;;;;42546:66;42641:1;42627:16;;:2;:16;;;42623:52;;;42652:23;;;;;;;;;;;;;;42623:52;42688:43;42710:4;42716:2;42720:7;42729:1;42688:21;:43::i;:::-;42796:35;42813:1;42817:7;42826:4;42796:8;:35::i;:::-;43157:1;43127:12;:18;43140:4;43127:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43201:1;43173:12;:16;43186:2;43173:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43219:31;43253:11;:20;43265:7;43253:20;;;;;;;;;;;43219:54;;43304:2;43288:8;:13;;;:18;;;;;;;;;;;;;;;;;;43354:15;43321:8;:23;;;:49;;;;;;;;;;;;;;;;;;43622:19;43654:1;43644:7;:11;43622:33;;43670:31;43704:11;:24;43716:11;43704:24;;;;;;;;;;;43670:58;;43772:1;43747:27;;:8;:13;;;;;;;;;;;;:27;;;43743:384;;;43957:13;;43942:11;:28;43938:174;;44011:4;43995:8;:13;;;:20;;;;;;;;;;;;;;;;;;44064:13;:28;;;44038:8;:23;;;:54;;;;;;;;;;;;;;;;;;43938:174;43743:384;43102:1036;;;44174:7;44170:2;44155:27;;44164:4;44155:27;;;;;;;;;;;;44193:42;44214:4;44220:2;44224:7;44233:1;44193:20;:42::i;:::-;42217:2026;;42113:2130;;;:::o;10833:317::-;10948:6;10923:21;:31;;10915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11002:12;11020:9;:14;;11042:6;11020:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11001:52;;;11072:7;11064:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10904:246;10833:317;;:::o;33087:1111::-;33149:21;;:::i;:::-;33183:12;33198:7;33183:22;;33266:4;33247:15;:13;:15::i;:::-;:23;33243:888;;33283:13;;33276:4;:20;33272:859;;;33317:31;33351:11;:17;33363:4;33351:17;;;;;;;;;;;33317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33392:9;:16;;;33387:729;;33463:1;33437:28;;:9;:14;;;:28;;;33433:101;;33501:9;33494:16;;;;;;33433:101;33836:261;33843:4;33836:261;;;33876:6;;;;;;;;33921:11;:17;33933:4;33921:17;;;;;;;;;;;33909:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33995:1;33969:28;;:9;:14;;;:28;;;33965:109;;34037:9;34030:16;;;;;;33965:109;33836:261;;;33387:729;33298:833;33272:859;33243:888;34159:31;;;;;;;;;;;;;;33087:1111;;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;38201:104::-;38270:27;38280:2;38284:8;38270:27;;;;;;;;;;;;:9;:27::i;:::-;38201:104;;:::o;9572:326::-;9632:4;9889:1;9867:7;:19;;;:23;9860:30;;9572:326;;;:::o;47853:667::-;48016:4;48053:2;48037:36;;;48074:12;:10;:12::i;:::-;48088:4;48094:7;48103:5;48037:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48033:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48288:1;48271:6;:13;:18;48267:235;;;48317:40;;;;;;;;;;;;;;48267:235;48460:6;48454:13;48445:6;48441:2;48437:15;48430:38;48033:480;48166:45;;;48156:55;;;:6;:55;;;;48149:62;;;47853:667;;;;;;:::o;50918:109::-;50978:13;51011:8;51004:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50918:109;:::o;3157:723::-;3213:13;3443:1;3434:5;:10;3430:53;;;3461:10;;;;;;;;;;;;;;;;;;;;;3430:53;3493:12;3508:5;3493:20;;3524:14;3549:78;3564:1;3556:4;:9;3549:78;;3582:8;;;;;:::i;:::-;;;;3613:2;3605:10;;;;;:::i;:::-;;;3549:78;;;3637:19;3669:6;3659:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:39;;3687:154;3703:1;3694:5;:10;3687:154;;3731:1;3721:11;;;;;:::i;:::-;;;3798:2;3790:5;:10;;;;:::i;:::-;3777:2;:24;;;;:::i;:::-;3764:39;;3747:6;3754;3747:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3827:2;3818:11;;;;;:::i;:::-;;;3687:154;;;3865:6;3851:21;;;;;3157:723;;;;:::o;49168:159::-;;;;;:::o;49986:158::-;;;;;:::o;38678:1749::-;38801:20;38824:13;;38801:36;;38866:1;38852:16;;:2;:16;;;38848:48;;;38877:19;;;;;;;;;;;;;;38848:48;38923:1;38911:8;:13;38907:44;;;38933:18;;;;;;;;;;;;;;38907:44;38964:61;38994:1;38998:2;39002:12;39016:8;38964:21;:61::i;:::-;39337:8;39302:12;:16;39315:2;39302:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39401:8;39361:12;:16;39374:2;39361:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39460:2;39427:11;:25;39439:12;39427:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39527:15;39477:11;:25;39489:12;39477:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39560:20;39583:12;39560:35;;39610:11;39639:8;39624:12;:23;39610:37;;39668:15;:2;:13;;;:15::i;:::-;39664:631;;;39704:313;39760:12;39756:2;39735:38;;39752:1;39735:38;;;;;;;;;;;;39801:69;39840:1;39844:2;39848:14;;;;;;39864:5;39801:30;:69::i;:::-;39796:174;;39906:40;;;;;;;;;;;;;;39796:174;40012:3;39997:12;:18;39704:313;;40098:12;40081:13;;:29;40077:43;;40112:8;;;40077:43;39664:631;;;40161:119;40217:14;;;;;;40213:2;40192:40;;40209:1;40192:40;;;;;;;;;;;;40275:3;40260:12;:18;40161:119;;39664:631;40325:12;40309:13;:28;;;;39277:1072;;40359:60;40388:1;40392:2;40396:12;40410:8;40359:20;:60::i;:::-;38790:1637;38678:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:398::-;11236:3;11257:83;11338:1;11333:3;11257:83;:::i;:::-;11250:90;;11349:93;11438:3;11349:93;:::i;:::-;11467:1;11462:3;11458:11;11451:18;;11077:398;;;:::o;11481:366::-;11623:3;11644:67;11708:2;11703:3;11644:67;:::i;:::-;11637:74;;11720:93;11809:3;11720:93;:::i;:::-;11838:2;11833:3;11829:12;11822:19;;11481:366;;;:::o;11853:::-;11995:3;12016:67;12080:2;12075:3;12016:67;:::i;:::-;12009:74;;12092:93;12181:3;12092:93;:::i;:::-;12210:2;12205:3;12201:12;12194:19;;11853:366;;;:::o;12225:::-;12367:3;12388:67;12452:2;12447:3;12388:67;:::i;:::-;12381:74;;12464:93;12553:3;12464:93;:::i;:::-;12582:2;12577:3;12573:12;12566:19;;12225:366;;;:::o;12597:118::-;12684:24;12702:5;12684:24;:::i;:::-;12679:3;12672:37;12597:118;;:::o;12721:435::-;12901:3;12923:95;13014:3;13005:6;12923:95;:::i;:::-;12916:102;;13035:95;13126:3;13117:6;13035:95;:::i;:::-;13028:102;;13147:3;13140:10;;12721:435;;;;;:::o;13162:379::-;13346:3;13368:147;13511:3;13368:147;:::i;:::-;13361:154;;13532:3;13525:10;;13162:379;;;:::o;13547:222::-;13640:4;13678:2;13667:9;13663:18;13655:26;;13691:71;13759:1;13748:9;13744:17;13735:6;13691:71;:::i;:::-;13547:222;;;;:::o;13775:640::-;13970:4;14008:3;13997:9;13993:19;13985:27;;14022:71;14090:1;14079:9;14075:17;14066:6;14022:71;:::i;:::-;14103:72;14171:2;14160:9;14156:18;14147:6;14103:72;:::i;:::-;14185;14253:2;14242:9;14238:18;14229:6;14185:72;:::i;:::-;14304:9;14298:4;14294:20;14289:2;14278:9;14274:18;14267:48;14332:76;14403:4;14394:6;14332:76;:::i;:::-;14324:84;;13775:640;;;;;;;:::o;14421:210::-;14508:4;14546:2;14535:9;14531:18;14523:26;;14559:65;14621:1;14610:9;14606:17;14597:6;14559:65;:::i;:::-;14421:210;;;;:::o;14637:313::-;14750:4;14788:2;14777:9;14773:18;14765:26;;14837:9;14831:4;14827:20;14823:1;14812:9;14808:17;14801:47;14865:78;14938:4;14929:6;14865:78;:::i;:::-;14857:86;;14637:313;;;;:::o;14956:419::-;15122:4;15160:2;15149:9;15145:18;15137:26;;15209:9;15203:4;15199:20;15195:1;15184:9;15180:17;15173:47;15237:131;15363:4;15237:131;:::i;:::-;15229:139;;14956:419;;;:::o;15381:::-;15547:4;15585:2;15574:9;15570:18;15562:26;;15634:9;15628:4;15624:20;15620:1;15609:9;15605:17;15598:47;15662:131;15788:4;15662:131;:::i;:::-;15654:139;;15381:419;;;:::o;15806:::-;15972:4;16010:2;15999:9;15995:18;15987:26;;16059:9;16053:4;16049:20;16045:1;16034:9;16030:17;16023:47;16087:131;16213:4;16087:131;:::i;:::-;16079:139;;15806:419;;;:::o;16231:::-;16397:4;16435:2;16424:9;16420:18;16412:26;;16484:9;16478:4;16474:20;16470:1;16459:9;16455:17;16448:47;16512:131;16638:4;16512:131;:::i;:::-;16504:139;;16231:419;;;:::o;16656:::-;16822:4;16860:2;16849:9;16845:18;16837:26;;16909:9;16903:4;16899:20;16895:1;16884:9;16880:17;16873:47;16937:131;17063:4;16937:131;:::i;:::-;16929:139;;16656:419;;;:::o;17081:::-;17247:4;17285:2;17274:9;17270:18;17262:26;;17334:9;17328:4;17324:20;17320:1;17309:9;17305:17;17298:47;17362:131;17488:4;17362:131;:::i;:::-;17354:139;;17081:419;;;:::o;17506:::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17759:9;17753:4;17749:20;17745:1;17734:9;17730:17;17723:47;17787:131;17913:4;17787:131;:::i;:::-;17779:139;;17506:419;;;:::o;17931:::-;18097:4;18135:2;18124:9;18120:18;18112:26;;18184:9;18178:4;18174:20;18170:1;18159:9;18155:17;18148:47;18212:131;18338:4;18212:131;:::i;:::-;18204:139;;17931:419;;;:::o;18356:::-;18522:4;18560:2;18549:9;18545:18;18537:26;;18609:9;18603:4;18599:20;18595:1;18584:9;18580:17;18573:47;18637:131;18763:4;18637:131;:::i;:::-;18629:139;;18356:419;;;:::o;18781:222::-;18874:4;18912:2;18901:9;18897:18;18889:26;;18925:71;18993:1;18982:9;18978:17;18969:6;18925:71;:::i;:::-;18781:222;;;;:::o;19009:129::-;19043:6;19070:20;;:::i;:::-;19060:30;;19099:33;19127:4;19119:6;19099:33;:::i;:::-;19009:129;;;:::o;19144:75::-;19177:6;19210:2;19204:9;19194:19;;19144:75;:::o;19225:307::-;19286:4;19376:18;19368:6;19365:30;19362:56;;;19398:18;;:::i;:::-;19362:56;19436:29;19458:6;19436:29;:::i;:::-;19428:37;;19520:4;19514;19510:15;19502:23;;19225:307;;;:::o;19538:308::-;19600:4;19690:18;19682:6;19679:30;19676:56;;;19712:18;;:::i;:::-;19676:56;19750:29;19772:6;19750:29;:::i;:::-;19742:37;;19834:4;19828;19824:15;19816:23;;19538:308;;;:::o;19852:98::-;19903:6;19937:5;19931:12;19921:22;;19852:98;;;:::o;19956:99::-;20008:6;20042:5;20036:12;20026:22;;19956:99;;;:::o;20061:168::-;20144:11;20178:6;20173:3;20166:19;20218:4;20213:3;20209:14;20194:29;;20061:168;;;;:::o;20235:147::-;20336:11;20373:3;20358:18;;20235:147;;;;:::o;20388:169::-;20472:11;20506:6;20501:3;20494:19;20546:4;20541:3;20537:14;20522:29;;20388:169;;;;:::o;20563:148::-;20665:11;20702:3;20687:18;;20563:148;;;;:::o;20717:305::-;20757:3;20776:20;20794:1;20776:20;:::i;:::-;20771:25;;20810:20;20828:1;20810:20;:::i;:::-;20805:25;;20964:1;20896:66;20892:74;20889:1;20886:81;20883:107;;;20970:18;;:::i;:::-;20883:107;21014:1;21011;21007:9;21000:16;;20717:305;;;;:::o;21028:185::-;21068:1;21085:20;21103:1;21085:20;:::i;:::-;21080:25;;21119:20;21137:1;21119:20;:::i;:::-;21114:25;;21158:1;21148:35;;21163:18;;:::i;:::-;21148:35;21205:1;21202;21198:9;21193:14;;21028:185;;;;:::o;21219:348::-;21259:7;21282:20;21300:1;21282:20;:::i;:::-;21277:25;;21316:20;21334:1;21316:20;:::i;:::-;21311:25;;21504:1;21436:66;21432:74;21429:1;21426:81;21421:1;21414:9;21407:17;21403:105;21400:131;;;21511:18;;:::i;:::-;21400:131;21559:1;21556;21552:9;21541:20;;21219:348;;;;:::o;21573:191::-;21613:4;21633:20;21651:1;21633:20;:::i;:::-;21628:25;;21667:20;21685:1;21667:20;:::i;:::-;21662:25;;21706:1;21703;21700:8;21697:34;;;21711:18;;:::i;:::-;21697:34;21756:1;21753;21749:9;21741:17;;21573:191;;;;:::o;21770:96::-;21807:7;21836:24;21854:5;21836:24;:::i;:::-;21825:35;;21770:96;;;:::o;21872:90::-;21906:7;21949:5;21942:13;21935:21;21924:32;;21872:90;;;:::o;21968:149::-;22004:7;22044:66;22037:5;22033:78;22022:89;;21968:149;;;:::o;22123:126::-;22160:7;22200:42;22193:5;22189:54;22178:65;;22123:126;;;:::o;22255:77::-;22292:7;22321:5;22310:16;;22255:77;;;:::o;22338:154::-;22422:6;22417:3;22412;22399:30;22484:1;22475:6;22470:3;22466:16;22459:27;22338:154;;;:::o;22498:307::-;22566:1;22576:113;22590:6;22587:1;22584:13;22576:113;;;22675:1;22670:3;22666:11;22660:18;22656:1;22651:3;22647:11;22640:39;22612:2;22609:1;22605:10;22600:15;;22576:113;;;22707:6;22704:1;22701:13;22698:101;;;22787:1;22778:6;22773:3;22769:16;22762:27;22698:101;22547:258;22498:307;;;:::o;22811:320::-;22855:6;22892:1;22886:4;22882:12;22872:22;;22939:1;22933:4;22929:12;22960:18;22950:81;;23016:4;23008:6;23004:17;22994:27;;22950:81;23078:2;23070:6;23067:14;23047:18;23044:38;23041:84;;;23097:18;;:::i;:::-;23041:84;22862:269;22811:320;;;:::o;23137:281::-;23220:27;23242:4;23220:27;:::i;:::-;23212:6;23208:40;23350:6;23338:10;23335:22;23314:18;23302:10;23299:34;23296:62;23293:88;;;23361:18;;:::i;:::-;23293:88;23401:10;23397:2;23390:22;23180:238;23137:281;;:::o;23424:233::-;23463:3;23486:24;23504:5;23486:24;:::i;:::-;23477:33;;23532:66;23525:5;23522:77;23519:103;;;23602:18;;:::i;:::-;23519:103;23649:1;23642:5;23638:13;23631:20;;23424:233;;;:::o;23663:176::-;23695:1;23712:20;23730:1;23712:20;:::i;:::-;23707:25;;23746:20;23764:1;23746:20;:::i;:::-;23741:25;;23785:1;23775:35;;23790:18;;:::i;:::-;23775:35;23831:1;23828;23824:9;23819:14;;23663:176;;;;:::o;23845:180::-;23893:77;23890:1;23883:88;23990:4;23987:1;23980:15;24014:4;24011:1;24004:15;24031:180;24079:77;24076:1;24069:88;24176:4;24173:1;24166:15;24200:4;24197:1;24190:15;24217:180;24265:77;24262:1;24255:88;24362:4;24359:1;24352:15;24386:4;24383:1;24376:15;24403:180;24451:77;24448:1;24441:88;24548:4;24545:1;24538:15;24572:4;24569:1;24562:15;24589:180;24637:77;24634:1;24627:88;24734:4;24731:1;24724:15;24758:4;24755:1;24748:15;24775:117;24884:1;24881;24874:12;24898:117;25007:1;25004;24997:12;25021:117;25130:1;25127;25120:12;25144:117;25253:1;25250;25243:12;25267:102;25308:6;25359:2;25355:7;25350:2;25343:5;25339:14;25335:28;25325:38;;25267:102;;;:::o;25375:225::-;25515:34;25511:1;25503:6;25499:14;25492:58;25584:8;25579:2;25571:6;25567:15;25560:33;25375:225;:::o;25606:170::-;25746:22;25742:1;25734:6;25730:14;25723:46;25606:170;:::o;25782:245::-;25922:34;25918:1;25910:6;25906:14;25899:58;25991:28;25986:2;25978:6;25974:15;25967:53;25782:245;:::o;26033:179::-;26173:31;26169:1;26161:6;26157:14;26150:55;26033:179;:::o;26218:182::-;26358:34;26354:1;26346:6;26342:14;26335:58;26218:182;:::o;26406:169::-;26546:21;26542:1;26534:6;26530:14;26523:45;26406:169;:::o;26581:114::-;;:::o;26701:170::-;26841:22;26837:1;26829:6;26825:14;26818:46;26701:170;:::o;26877:181::-;27017:33;27013:1;27005:6;27001:14;26994:57;26877:181;:::o;27064:169::-;27204:21;27200:1;27192:6;27188:14;27181:45;27064:169;:::o;27239:122::-;27312:24;27330:5;27312:24;:::i;:::-;27305:5;27302:35;27292:63;;27351:1;27348;27341:12;27292:63;27239:122;:::o;27367:116::-;27437:21;27452:5;27437:21;:::i;:::-;27430:5;27427:32;27417:60;;27473:1;27470;27463:12;27417:60;27367:116;:::o;27489:120::-;27561:23;27578:5;27561:23;:::i;:::-;27554:5;27551:34;27541:62;;27599:1;27596;27589:12;27541:62;27489:120;:::o;27615:122::-;27688:24;27706:5;27688:24;:::i;:::-;27681:5;27678:35;27668:63;;27727:1;27724;27717:12;27668:63;27615:122;:::o
Swarm Source
ipfs://efb1c771070aaa4ea8af1ca75513f9635a2e69e43e1043aa5b4340df3d9ac54d
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.