ERC-721
Overview
Max Total Supply
3,000 Bear
Holders
3
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 BearLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NotOkayBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-19 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) /** * @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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) /** * @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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) /** * @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); } } } } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @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); } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) /** * @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; } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ /* library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } */ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ) ++count; } return count; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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 { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner or approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to/* , uint256 tokenId */) internal virtual { _safeMint(to, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, /* uint256 tokenId, */ bytes memory _data ) internal virtual { _mint(to/* , tokenId */); require( _checkOnERC721Received(address(0), to, _owners.length - 1, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to) internal virtual { /* require(to != address(0), "ERC721: mint to the zero address"); */ /* require(!_exists(tokenId), "ERC721: token already minted"); */ /* _beforeTokenTransfer(address(0), to, tokenId); */ _owners.push(to); emit Transfer(address(0), to, _owners.length - 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) /** * @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); } } contract NotOkayBears is ERC721, Ownable { using Strings for uint256; uint256 private maxTokens; mapping(uint256 => string) private customTokensURIs; bool private _saleEnabled = false; bool private _freeMintEnabled = false; uint256 private _maxMintForUser; uint256 private _maxFreeMints; uint256 private _currentFreeMints; string private _contractURI; string private _baseTokenURI; address private serverAddress = address(0); mapping(bytes => bool) private signatureUsed; uint256 price = 1 ether; mapping (address => uint256) freeMints; constructor(uint256 maxTokens_, bool saleEnabled_, bool freeMintEnabled_, string memory baseURI_, uint256 maxMintForUser_, uint256 maxFreeMints_, uint256 price_) ERC721("NotOkayBears","Bear") { maxTokens = maxTokens_; _saleEnabled = saleEnabled_; _freeMintEnabled = freeMintEnabled_; _baseTokenURI = baseURI_; _maxMintForUser = maxMintForUser_; _maxFreeMints = maxFreeMints_; price = price_; } function setServerAddress(address target) external onlyOwner { serverAddress = target; } function setMaxTokens(uint256 _maxTokens) external onlyOwner { maxTokens = _maxTokens; } function setMaxMintForUser(uint256 maxMintForUser_) external onlyOwner { _maxMintForUser = maxMintForUser_; } function setMaxFreeMints(uint256 maxFreeMints_) external onlyOwner { _maxFreeMints = maxFreeMints_; } function getMaxTokens() external view returns(uint256) { return maxTokens; } function hasFreeMint(address target) public view returns(bool){ return _freeMintEnabled && freeMints[target] < _maxMintForUser && _currentFreeMints < _maxFreeMints; } function freeMintEnabled() external view returns(bool){ return _freeMintEnabled; } function freeMintOn() external onlyOwner{ _freeMintEnabled = true; } function freeMintOff() external onlyOwner{ _freeMintEnabled = false; } function saleEnabled() external view returns(bool){ return _saleEnabled; } function saleOn() external onlyOwner{ _saleEnabled = true; } function saleOff() external onlyOwner{ _saleEnabled = false; } function totalSupply() public view returns(uint256) { return maxTokens; } function setPrice(uint256 price_) external onlyOwner { price = price_; } function mintAdmin(address _to, uint256 count) external onlyOwner { require(tokensAvailable() >= count, "Max tokens reached"); for (uint256 i; i < count; i++) { _mint(_to); } } function mint(uint256 count) external payable { require(_saleEnabled, "Sale off"); require(msg.value >= count*price, "Insufficient value to mint"); require(tokensAvailable() >= count, "Max tokens reached"); for (uint256 i; i < count; i++) { _mint(msg.sender); } } function freeMint(uint256 count) external { require(_freeMintEnabled, "Free mint off"); require(freeMints[msg.sender] + count <= _maxMintForUser, "You have max tokens"); require(_currentFreeMints + count <= _maxFreeMints, "You have max tokens"); for (uint256 i; i < count; i++) { _mint(msg.sender); freeMints[msg.sender]++; _currentFreeMints++; } } function mintServer(uint256 count, string memory salt, bytes memory signature) external payable { bytes32 message = prefixed(keccak256(abi.encodePacked(msg.value, msg.sender, count, salt))); require(recoverSigner(message, signature) == serverAddress, "Error"); signatureUsed[signature] = true; for (uint256 i; i < count; i++) { _mint(msg.sender); } } function mintServer(uint256 count, string memory uri, string memory salt, bytes memory signature) external payable { bytes32 message = prefixed(keccak256(abi.encodePacked(msg.value, msg.sender, count, uri, salt))); require(recoverSigner(message, signature) == serverAddress, "Error"); signatureUsed[signature] = true; for (uint256 i; i < count; i++) { _mint(msg.sender); customTokensURIs[_owners.length - 1] = uri; } } function burn(uint256 tokenId) external { require(ownerOf(tokenId) == msg.sender || msg.sender == owner(), "You dont have this token"); _burn(tokenId); } function splitSignature(bytes memory sig) internal pure returns (uint8 v, bytes32 r, bytes32 s) { require(sig.length == 65); assembly { // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } return (v, r, s); } function recoverSigner(bytes32 message, bytes memory sig) internal pure returns (address) { (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig); return ecrecover(message, v, r, s); } function prefixed(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } function setTokenURI(uint256 token, string memory uri) external onlyOwner { customTokensURIs[token] = uri; } function contractURI() public view returns (string memory) { return _contractURI; } function withdraw() external onlyOwner { Address.sendValue(payable(msg.sender), address(this).balance); } function tokensAvailable() public view returns (uint256) { return maxTokens - _owners.length; } function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory uri) external onlyOwner { _baseTokenURI = uri; } function setContractURI(string memory uri) external onlyOwner { _contractURI = uri; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if(bytes(customTokensURIs[tokenId]).length != 0) return customTokensURIs[tokenId]; string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } function URI(uint256 tokenId) external view virtual returns (string memory) { return tokenURI(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxTokens_","type":"uint256"},{"internalType":"bool","name":"saleEnabled_","type":"bool"},{"internalType":"bool","name":"freeMintEnabled_","type":"bool"},{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"uint256","name":"maxMintForUser_","type":"uint256"},{"internalType":"uint256","name":"maxFreeMints_","type":"uint256"},{"internalType":"uint256","name":"price_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"hasFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mintAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"string","name":"salt","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintServer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"salt","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintServer","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":[],"name":"saleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxFreeMints_","type":"uint256"}],"name":"setMaxFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintForUser_","type":"uint256"}],"name":"setMaxMintForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokens","type":"uint256"}],"name":"setMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setServerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenURI","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":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526008805461ffff19169055600e80546001600160a01b0319169055670de0b6b3a76400006010553480156200003857600080fd5b5060405162002cda38038062002cda8339810160408190526200005b916200023e565b604080518082018252600c81526b4e6f744f6b6179426561727360a01b6020808301918252835180850190945260048452632132b0b960e11b908401528151919291620000ab9160009162000182565b508051620000c190600190602084019062000182565b505050620000de620000d86200012c60201b60201c565b62000130565b60068790556008805461ffff191687151561ff001916176101008715150217905583516200011490600d90602087019062000182565b50600992909255600a5560105550620003bc92505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001909062000369565b90600052602060002090601f016020900481019282620001b45760008555620001ff565b82601f10620001cf57805160ff1916838001178555620001ff565b82800160010185558215620001ff579182015b82811115620001ff578251825591602001919060010190620001e2565b506200020d92915062000211565b5090565b5b808211156200020d576000815560010162000212565b805180151581146200023957600080fd5b919050565b600080600080600080600060e0888a0312156200025a57600080fd5b8751965060206200026d818a0162000228565b96506200027d60408a0162000228565b60608a01519096506001600160401b03808211156200029b57600080fd5b818b0191508b601f830112620002b057600080fd5b815181811115620002c557620002c5620003a6565b604051601f8201601f19908116603f01168101908382118183101715620002f057620002f0620003a6565b816040528281528e868487010111156200030957600080fd5b600093505b828410156200032d57848401860151818501870152928501926200030e565b828411156200033f5760008684830101525b8099505050505050506080880151925060a0880151915060c0880151905092959891949750929550565b600181811c908216806200037e57607f821691505b60208210811415620003a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61290e80620003cc6000396000f3fe60806040526004361061025c5760003560e01c806370a0823111610144578063a22cb465116100b6578063d5cde1f21161007a578063d5cde1f21461069f578063dc8edabf146106bf578063deac290e146106d2578063e8a3d485146106e5578063e985e9c5146106fa578063f2fde38b1461074357600080fd5b8063a22cb4651461060a578063b88d4fde1461062a578063c3a719991461064a578063c87b56dd1461066a578063d28021bb1461068a57600080fd5b80638da5cb5b116101085780638da5cb5b14610564578063901e1c011461058257806391b7f5ed146105a2578063938e3d7b146105c257806395d89b41146105e2578063a0712d68146105f757600080fd5b806370a08231146104e2578063715018a61461050257806371b9b64614610517578063773ef1cf1461052f5780637c928fe91461054457600080fd5b80633ccfd60b116101dd57806355f804b3116101a157806355f804b31461045057806360659a921461047057806362ad68aa146104855780636352211e146104a257806366b9442e146104c25780636abcded11461035257600080fd5b80633ccfd60b146103bb578063407043fc146103d057806342842e0e146103f057806342966c681461041057806347b64eb01461043057600080fd5b8063162094c411610224578063162094c41461033257806318160ddd1461035257806323b872dd146103715780633103356814610391578063397ea5d7146103a657600080fd5b806301ffc9a71461026157806306fdde0314610296578063081812fc146102b8578063095ea7b3146102f057806311e776fe14610312575b600080fd5b34801561026d57600080fd5b5061028161027c3660046123b0565b610763565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102ab6107b5565b60405161028d91906126d8565b3480156102c457600080fd5b506102d86102d336600461241f565b610847565b6040516001600160a01b03909116815260200161028d565b3480156102fc57600080fd5b5061031061030b366004612386565b6108d4565b005b34801561031e57600080fd5b5061031061032d36600461241f565b6109ea565b34801561033e57600080fd5b5061031061034d366004612438565b610a19565b34801561035e57600080fd5b506006545b60405190815260200161028d565b34801561037d57600080fd5b5061031061038c3660046122a6565b610a62565b34801561039d57600080fd5b50610310610adc565b3480156103b257600080fd5b50610310610b13565b3480156103c757600080fd5b50610310610b4e565b3480156103dc57600080fd5b506103106103eb36600461241f565b610b84565b3480156103fc57600080fd5b5061031061040b3660046122a6565b610bb3565b34801561041c57600080fd5b5061031061042b36600461241f565b610bce565b34801561043c57600080fd5b5061031061044b366004612258565b610c4f565b34801561045c57600080fd5b5061031061046b3660046123ea565b610c9b565b34801561047c57600080fd5b50610363610cdc565b34801561049157600080fd5b50600854610100900460ff16610281565b3480156104ae57600080fd5b506102d86104bd36600461241f565b610cf3565b3480156104ce57600080fd5b506103106104dd36600461241f565b610d7f565b3480156104ee57600080fd5b506103636104fd366004612258565b610dae565b34801561050e57600080fd5b50610310610e7c565b34801561052357600080fd5b5060085460ff16610281565b34801561053b57600080fd5b50610310610eb0565b34801561055057600080fd5b5061031061055f36600461241f565b610ee9565b34801561057057600080fd5b506005546001600160a01b03166102d8565b34801561058e57600080fd5b506102ab61059d36600461241f565b611043565b3480156105ae57600080fd5b506103106105bd36600461241f565b61104e565b3480156105ce57600080fd5b506103106105dd3660046123ea565b61107d565b3480156105ee57600080fd5b506102ab6110ba565b61031061060536600461241f565b6110c9565b34801561061657600080fd5b5061031061062536600461234a565b6111d4565b34801561063657600080fd5b506103106106453660046122e2565b611299565b34801561065657600080fd5b50610310610665366004612386565b61131b565b34801561067657600080fd5b506102ab61068536600461241f565b6113b7565b34801561069657600080fd5b50610310611540565b3480156106ab57600080fd5b506102816106ba366004612258565b611576565b6103106106cd36600461247f565b6115bd565b6103106106e03660046124ec565b6116ef565b3480156106f157600080fd5b506102ab6117fd565b34801561070657600080fd5b50610281610715366004612273565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b5061031061075e366004612258565b61180c565b60006001600160e01b031982166380ac58cd60e01b148061079457506001600160e01b03198216635b5e139f60e01b145b806107af57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107c490612800565b80601f01602080910402602001604051908101604052809291908181526020018280546107f090612800565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b6000610852826118a4565b6108b85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006108df82610cf3565b9050806001600160a01b0316836001600160a01b0316141561094d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108af565b336001600160a01b038216148061096957506109698133610715565b6109db5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108af565b6109e583836118ee565b505050565b6005546001600160a01b03163314610a145760405162461bcd60e51b81526004016108af9061273d565b600655565b6005546001600160a01b03163314610a435760405162461bcd60e51b81526004016108af9061273d565b600082815260076020908152604090912082516109e592840190612116565b610a6c338261195c565b610ad15760405162461bcd60e51b815260206004820152603060248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201526f1ddb995c881bdc88185c1c1c9bdd995960821b60648201526084016108af565b6109e5838383611a46565b6005546001600160a01b03163314610b065760405162461bcd60e51b81526004016108af9061273d565b6008805461ff0019169055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b81526004016108af9061273d565b6008805461ff001916610100179055565b6005546001600160a01b03163314610b785760405162461bcd60e51b81526004016108af9061273d565b610b823347611b9c565b565b6005546001600160a01b03163314610bae5760405162461bcd60e51b81526004016108af9061273d565b600a55565b6109e583838360405180602001604052806000815250611299565b33610bd882610cf3565b6001600160a01b03161480610bf757506005546001600160a01b031633145b610c435760405162461bcd60e51b815260206004820152601860248201527f596f7520646f6e742068617665207468697320746f6b656e000000000000000060448201526064016108af565b610c4c81611cb5565b50565b6005546001600160a01b03163314610c795760405162461bcd60e51b81526004016108af9061273d565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cc55760405162461bcd60e51b81526004016108af9061273d565b8051610cd890600d906020840190612116565b5050565b600254600654600091610cee916127bd565b905090565b60008060028381548110610d0957610d09612896565b6000918252602090912001546001600160a01b03169050806107af5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108af565b6005546001600160a01b03163314610da95760405162461bcd60e51b81526004016108af9061273d565b600955565b60006001600160a01b038216610e195760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108af565b6000805b600254811015610e755760028181548110610e3a57610e3a612896565b6000918252602090912001546001600160a01b0385811691161415610e6557610e628261283b565b91505b610e6e8161283b565b9050610e1d565b5092915050565b6005546001600160a01b03163314610ea65760405162461bcd60e51b81526004016108af9061273d565b610b826000611d37565b6005546001600160a01b03163314610eda5760405162461bcd60e51b81526004016108af9061273d565b6008805460ff19166001179055565b600854610100900460ff16610f305760405162461bcd60e51b815260206004820152600d60248201526c233932b29036b4b73a1037b33360991b60448201526064016108af565b60095433600090815260116020526040902054610f4e908390612772565b1115610f925760405162461bcd60e51b8152602060048201526013602482015272596f752068617665206d617820746f6b656e7360681b60448201526064016108af565b600a5481600b54610fa39190612772565b1115610fe75760405162461bcd60e51b8152602060048201526013602482015272596f752068617665206d617820746f6b656e7360681b60448201526064016108af565b60005b81811015610cd857610ffb33611d89565b3360009081526011602052604081208054916110168361283b565b9091555050600b805490600061102b8361283b565b9190505550808061103b9061283b565b915050610fea565b60606107af826113b7565b6005546001600160a01b031633146110785760405162461bcd60e51b81526004016108af9061273d565b601055565b6005546001600160a01b031633146110a75760405162461bcd60e51b81526004016108af9061273d565b8051610cd890600c906020840190612116565b6060600180546107c490612800565b60085460ff166111065760405162461bcd60e51b815260206004820152600860248201526729b0b6329037b33360c11b60448201526064016108af565b601054611113908261279e565b3410156111625760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e7400000000000060448201526064016108af565b8061116b610cdc565b10156111ae5760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108af565b60005b81811015610cd8576111c233611d89565b806111cc8161283b565b9150506111b1565b6001600160a01b03821633141561122d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108af565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112a3338361195c565b6113095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108af565b61131584848484611e1b565b50505050565b6005546001600160a01b031633146113455760405162461bcd60e51b81526004016108af9061273d565b8061134e610cdc565b10156113915760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108af565b60005b818110156109e5576113a583611d89565b806113af8161283b565b915050611394565b60606113c2826118a4565b6114265760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108af565b6000828152600760205260409020805461143f90612800565b1590506114e4576000828152600760205260409020805461145f90612800565b80601f016020809104026020016040519081016040528092919081815260200182805461148b90612800565b80156114d85780601f106114ad576101008083540402835291602001916114d8565b820191906000526020600020905b8154815290600101906020018083116114bb57829003601f168201915b50505050509050919050565b60006114ee611e4e565b9050600081511161150e5760405180602001604052806000815250611539565b8061151884611e5d565b6040516020016115299291906125ba565b6040516020818303038152906040525b9392505050565b6005546001600160a01b0316331461156a5760405162461bcd60e51b81526004016108af9061273d565b6008805460ff19169055565b600854600090610100900460ff1680156115a957506009546001600160a01b038316600090815260116020526040902054105b80156107af5750600a54600b541092915050565b6000611639343386866040516020016115d994939291906125f9565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b600e549091506001600160a01b03166116528284611f5b565b6001600160a01b0316146116905760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016108af565b6001600f836040516116a2919061259e565b908152604051908190036020019020805491151560ff1990921691909117905560005b848110156116e8576116d633611d89565b806116e08161283b565b9150506116c5565b5050505050565b600061170d34338787876040516020016115d995949392919061263f565b600e549091506001600160a01b03166117268284611f5b565b6001600160a01b0316146117645760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016108af565b6001600f83604051611776919061259e565b908152604051908190036020019020805491151560ff1990921691909117905560005b858110156117f5576117aa33611d89565b846007600060016002805490506117c191906127bd565b815260200190815260200160002090805190602001906117e2929190612116565b50806117ed8161283b565b915050611799565b505050505050565b6060600c80546107c490612800565b6005546001600160a01b031633146118365760405162461bcd60e51b81526004016108af9061273d565b6001600160a01b03811661189b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108af565b610c4c81611d37565b600254600090821080156107af575060006001600160a01b0316600283815481106118d1576118d1612896565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061192382610cf3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611967826118a4565b6119c85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108af565b60006119d383610cf3565b9050806001600160a01b0316846001600160a01b03161480611a0e5750836001600160a01b0316611a0384610847565b6001600160a01b0316145b80611a3e57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a5982610cf3565b6001600160a01b031614611ac15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108af565b6001600160a01b038216611b235760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108af565b611b2e6000826118ee565b8160028281548110611b4257611b42612896565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b80471015611bec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108af565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c39576040519150601f19603f3d011682016040523d82523d6000602084013e611c3e565b606091505b50509050806109e55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108af565b6000611cc082610cf3565b9050611ccd6000836118ee565b600060028381548110611ce257611ce2612896565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600280546001808201835560008390527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b0319166001600160a01b0385161790559054611de291906127bd565b6040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450565b611e26848484611a46565b611e3284848484611fda565b6113155760405162461bcd60e51b81526004016108af906126eb565b6060600d80546107c490612800565b606081611e815750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611eab5780611e958161283b565b9150611ea49050600a8361278a565b9150611e85565b60008167ffffffffffffffff811115611ec657611ec66128ac565b6040519080825280601f01601f191660200182016040528015611ef0576020820181803683370190505b5090505b8415611a3e57611f056001836127bd565b9150611f12600a86612856565b611f1d906030612772565b60f81b818381518110611f3257611f32612896565b60200101906001600160f81b031916908160001a905350611f54600a8661278a565b9450611ef4565b600080600080611f6a856120e7565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015611fc5573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b156120dc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061201e90339089908890889060040161269b565b602060405180830381600087803b15801561203857600080fd5b505af1925050508015612068575060408051601f3d908101601f19168201909252612065918101906123cd565b60015b6120c2573d808015612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5080516120ba5760405162461bcd60e51b81526004016108af906126eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a3e565b506001949350505050565b600080600083516041146120fa57600080fd5b5050506020810151604082015160609092015160001a92909190565b82805461212290612800565b90600052602060002090601f016020900481019282612144576000855561218a565b82601f1061215d57805160ff191683800117855561218a565b8280016001018555821561218a579182015b8281111561218a57825182559160200191906001019061216f565b5061219692915061219a565b5090565b5b80821115612196576000815560010161219b565b80356001600160a01b03811681146121c657600080fd5b919050565b600082601f8301126121dc57600080fd5b813567ffffffffffffffff808211156121f7576121f76128ac565b604051601f8301601f19908116603f0116810190828211818310171561221f5761221f6128ac565b8160405283815286602085880101111561223857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561226a57600080fd5b611539826121af565b6000806040838503121561228657600080fd5b61228f836121af565b915061229d602084016121af565b90509250929050565b6000806000606084860312156122bb57600080fd5b6122c4846121af565b92506122d2602085016121af565b9150604084013590509250925092565b600080600080608085870312156122f857600080fd5b612301856121af565b935061230f602086016121af565b925060408501359150606085013567ffffffffffffffff81111561233257600080fd5b61233e878288016121cb565b91505092959194509250565b6000806040838503121561235d57600080fd5b612366836121af565b91506020830135801515811461237b57600080fd5b809150509250929050565b6000806040838503121561239957600080fd5b6123a2836121af565b946020939093013593505050565b6000602082840312156123c257600080fd5b8135611539816128c2565b6000602082840312156123df57600080fd5b8151611539816128c2565b6000602082840312156123fc57600080fd5b813567ffffffffffffffff81111561241357600080fd5b611a3e848285016121cb565b60006020828403121561243157600080fd5b5035919050565b6000806040838503121561244b57600080fd5b82359150602083013567ffffffffffffffff81111561246957600080fd5b612475858286016121cb565b9150509250929050565b60008060006060848603121561249457600080fd5b83359250602084013567ffffffffffffffff808211156124b357600080fd5b6124bf878388016121cb565b935060408601359150808211156124d557600080fd5b506124e2868287016121cb565b9150509250925092565b6000806000806080858703121561250257600080fd5b84359350602085013567ffffffffffffffff8082111561252157600080fd5b61252d888389016121cb565b9450604087013591508082111561254357600080fd5b61254f888389016121cb565b9350606087013591508082111561256557600080fd5b5061233e878288016121cb565b6000815180845261258a8160208601602086016127d4565b601f01601f19169290920160200192915050565b600082516125b08184602087016127d4565b9190910192915050565b600083516125cc8184602088016127d4565b8351908301906125e08183602088016127d4565b64173539b7b760d91b9101908152600501949350505050565b8481526bffffffffffffffffffffffff198460601b1660208201528260348201526000825161262f8160548501602087016127d4565b9190910160540195945050505050565b8581526bffffffffffffffffffffffff198560601b166020820152836034820152600083516126758160548501602088016127d4565b83519083019061268c8160548401602088016127d4565b01605401979650505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126ce90830184612572565b9695505050505050565b6020815260006115396020830184612572565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156127855761278561286a565b500190565b60008261279957612799612880565b500490565b60008160001904831182151516156127b8576127b861286a565b500290565b6000828210156127cf576127cf61286a565b500390565b60005b838110156127ef5781810151838201526020016127d7565b838111156113155750506000910152565b600181811c9082168061281457607f821691505b6020821081141561283557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561284f5761284f61286a565b5060010190565b60008261286557612865612880565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c4c57600080fdfea2646970667358221220b2d98232080313cd3d29951b41acd20643eddb473ec548c70f16c7a5d2b66e3264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d643766466f443454736d766538677479727268597a59796b4e796344367a6b4370784d344d514d33723532512f00000000000000000000
Deployed Bytecode
0x60806040526004361061025c5760003560e01c806370a0823111610144578063a22cb465116100b6578063d5cde1f21161007a578063d5cde1f21461069f578063dc8edabf146106bf578063deac290e146106d2578063e8a3d485146106e5578063e985e9c5146106fa578063f2fde38b1461074357600080fd5b8063a22cb4651461060a578063b88d4fde1461062a578063c3a719991461064a578063c87b56dd1461066a578063d28021bb1461068a57600080fd5b80638da5cb5b116101085780638da5cb5b14610564578063901e1c011461058257806391b7f5ed146105a2578063938e3d7b146105c257806395d89b41146105e2578063a0712d68146105f757600080fd5b806370a08231146104e2578063715018a61461050257806371b9b64614610517578063773ef1cf1461052f5780637c928fe91461054457600080fd5b80633ccfd60b116101dd57806355f804b3116101a157806355f804b31461045057806360659a921461047057806362ad68aa146104855780636352211e146104a257806366b9442e146104c25780636abcded11461035257600080fd5b80633ccfd60b146103bb578063407043fc146103d057806342842e0e146103f057806342966c681461041057806347b64eb01461043057600080fd5b8063162094c411610224578063162094c41461033257806318160ddd1461035257806323b872dd146103715780633103356814610391578063397ea5d7146103a657600080fd5b806301ffc9a71461026157806306fdde0314610296578063081812fc146102b8578063095ea7b3146102f057806311e776fe14610312575b600080fd5b34801561026d57600080fd5b5061028161027c3660046123b0565b610763565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102ab6107b5565b60405161028d91906126d8565b3480156102c457600080fd5b506102d86102d336600461241f565b610847565b6040516001600160a01b03909116815260200161028d565b3480156102fc57600080fd5b5061031061030b366004612386565b6108d4565b005b34801561031e57600080fd5b5061031061032d36600461241f565b6109ea565b34801561033e57600080fd5b5061031061034d366004612438565b610a19565b34801561035e57600080fd5b506006545b60405190815260200161028d565b34801561037d57600080fd5b5061031061038c3660046122a6565b610a62565b34801561039d57600080fd5b50610310610adc565b3480156103b257600080fd5b50610310610b13565b3480156103c757600080fd5b50610310610b4e565b3480156103dc57600080fd5b506103106103eb36600461241f565b610b84565b3480156103fc57600080fd5b5061031061040b3660046122a6565b610bb3565b34801561041c57600080fd5b5061031061042b36600461241f565b610bce565b34801561043c57600080fd5b5061031061044b366004612258565b610c4f565b34801561045c57600080fd5b5061031061046b3660046123ea565b610c9b565b34801561047c57600080fd5b50610363610cdc565b34801561049157600080fd5b50600854610100900460ff16610281565b3480156104ae57600080fd5b506102d86104bd36600461241f565b610cf3565b3480156104ce57600080fd5b506103106104dd36600461241f565b610d7f565b3480156104ee57600080fd5b506103636104fd366004612258565b610dae565b34801561050e57600080fd5b50610310610e7c565b34801561052357600080fd5b5060085460ff16610281565b34801561053b57600080fd5b50610310610eb0565b34801561055057600080fd5b5061031061055f36600461241f565b610ee9565b34801561057057600080fd5b506005546001600160a01b03166102d8565b34801561058e57600080fd5b506102ab61059d36600461241f565b611043565b3480156105ae57600080fd5b506103106105bd36600461241f565b61104e565b3480156105ce57600080fd5b506103106105dd3660046123ea565b61107d565b3480156105ee57600080fd5b506102ab6110ba565b61031061060536600461241f565b6110c9565b34801561061657600080fd5b5061031061062536600461234a565b6111d4565b34801561063657600080fd5b506103106106453660046122e2565b611299565b34801561065657600080fd5b50610310610665366004612386565b61131b565b34801561067657600080fd5b506102ab61068536600461241f565b6113b7565b34801561069657600080fd5b50610310611540565b3480156106ab57600080fd5b506102816106ba366004612258565b611576565b6103106106cd36600461247f565b6115bd565b6103106106e03660046124ec565b6116ef565b3480156106f157600080fd5b506102ab6117fd565b34801561070657600080fd5b50610281610715366004612273565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b34801561074f57600080fd5b5061031061075e366004612258565b61180c565b60006001600160e01b031982166380ac58cd60e01b148061079457506001600160e01b03198216635b5e139f60e01b145b806107af57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107c490612800565b80601f01602080910402602001604051908101604052809291908181526020018280546107f090612800565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b5050505050905090565b6000610852826118a4565b6108b85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006108df82610cf3565b9050806001600160a01b0316836001600160a01b0316141561094d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108af565b336001600160a01b038216148061096957506109698133610715565b6109db5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108af565b6109e583836118ee565b505050565b6005546001600160a01b03163314610a145760405162461bcd60e51b81526004016108af9061273d565b600655565b6005546001600160a01b03163314610a435760405162461bcd60e51b81526004016108af9061273d565b600082815260076020908152604090912082516109e592840190612116565b610a6c338261195c565b610ad15760405162461bcd60e51b815260206004820152603060248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201526f1ddb995c881bdc88185c1c1c9bdd995960821b60648201526084016108af565b6109e5838383611a46565b6005546001600160a01b03163314610b065760405162461bcd60e51b81526004016108af9061273d565b6008805461ff0019169055565b6005546001600160a01b03163314610b3d5760405162461bcd60e51b81526004016108af9061273d565b6008805461ff001916610100179055565b6005546001600160a01b03163314610b785760405162461bcd60e51b81526004016108af9061273d565b610b823347611b9c565b565b6005546001600160a01b03163314610bae5760405162461bcd60e51b81526004016108af9061273d565b600a55565b6109e583838360405180602001604052806000815250611299565b33610bd882610cf3565b6001600160a01b03161480610bf757506005546001600160a01b031633145b610c435760405162461bcd60e51b815260206004820152601860248201527f596f7520646f6e742068617665207468697320746f6b656e000000000000000060448201526064016108af565b610c4c81611cb5565b50565b6005546001600160a01b03163314610c795760405162461bcd60e51b81526004016108af9061273d565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cc55760405162461bcd60e51b81526004016108af9061273d565b8051610cd890600d906020840190612116565b5050565b600254600654600091610cee916127bd565b905090565b60008060028381548110610d0957610d09612896565b6000918252602090912001546001600160a01b03169050806107af5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108af565b6005546001600160a01b03163314610da95760405162461bcd60e51b81526004016108af9061273d565b600955565b60006001600160a01b038216610e195760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108af565b6000805b600254811015610e755760028181548110610e3a57610e3a612896565b6000918252602090912001546001600160a01b0385811691161415610e6557610e628261283b565b91505b610e6e8161283b565b9050610e1d565b5092915050565b6005546001600160a01b03163314610ea65760405162461bcd60e51b81526004016108af9061273d565b610b826000611d37565b6005546001600160a01b03163314610eda5760405162461bcd60e51b81526004016108af9061273d565b6008805460ff19166001179055565b600854610100900460ff16610f305760405162461bcd60e51b815260206004820152600d60248201526c233932b29036b4b73a1037b33360991b60448201526064016108af565b60095433600090815260116020526040902054610f4e908390612772565b1115610f925760405162461bcd60e51b8152602060048201526013602482015272596f752068617665206d617820746f6b656e7360681b60448201526064016108af565b600a5481600b54610fa39190612772565b1115610fe75760405162461bcd60e51b8152602060048201526013602482015272596f752068617665206d617820746f6b656e7360681b60448201526064016108af565b60005b81811015610cd857610ffb33611d89565b3360009081526011602052604081208054916110168361283b565b9091555050600b805490600061102b8361283b565b9190505550808061103b9061283b565b915050610fea565b60606107af826113b7565b6005546001600160a01b031633146110785760405162461bcd60e51b81526004016108af9061273d565b601055565b6005546001600160a01b031633146110a75760405162461bcd60e51b81526004016108af9061273d565b8051610cd890600c906020840190612116565b6060600180546107c490612800565b60085460ff166111065760405162461bcd60e51b815260206004820152600860248201526729b0b6329037b33360c11b60448201526064016108af565b601054611113908261279e565b3410156111625760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742076616c756520746f206d696e7400000000000060448201526064016108af565b8061116b610cdc565b10156111ae5760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108af565b60005b81811015610cd8576111c233611d89565b806111cc8161283b565b9150506111b1565b6001600160a01b03821633141561122d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108af565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112a3338361195c565b6113095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108af565b61131584848484611e1b565b50505050565b6005546001600160a01b031633146113455760405162461bcd60e51b81526004016108af9061273d565b8061134e610cdc565b10156113915760405162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b60448201526064016108af565b60005b818110156109e5576113a583611d89565b806113af8161283b565b915050611394565b60606113c2826118a4565b6114265760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108af565b6000828152600760205260409020805461143f90612800565b1590506114e4576000828152600760205260409020805461145f90612800565b80601f016020809104026020016040519081016040528092919081815260200182805461148b90612800565b80156114d85780601f106114ad576101008083540402835291602001916114d8565b820191906000526020600020905b8154815290600101906020018083116114bb57829003601f168201915b50505050509050919050565b60006114ee611e4e565b9050600081511161150e5760405180602001604052806000815250611539565b8061151884611e5d565b6040516020016115299291906125ba565b6040516020818303038152906040525b9392505050565b6005546001600160a01b0316331461156a5760405162461bcd60e51b81526004016108af9061273d565b6008805460ff19169055565b600854600090610100900460ff1680156115a957506009546001600160a01b038316600090815260116020526040902054105b80156107af5750600a54600b541092915050565b6000611639343386866040516020016115d994939291906125f9565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b600e549091506001600160a01b03166116528284611f5b565b6001600160a01b0316146116905760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016108af565b6001600f836040516116a2919061259e565b908152604051908190036020019020805491151560ff1990921691909117905560005b848110156116e8576116d633611d89565b806116e08161283b565b9150506116c5565b5050505050565b600061170d34338787876040516020016115d995949392919061263f565b600e549091506001600160a01b03166117268284611f5b565b6001600160a01b0316146117645760405162461bcd60e51b815260206004820152600560248201526422b93937b960d91b60448201526064016108af565b6001600f83604051611776919061259e565b908152604051908190036020019020805491151560ff1990921691909117905560005b858110156117f5576117aa33611d89565b846007600060016002805490506117c191906127bd565b815260200190815260200160002090805190602001906117e2929190612116565b50806117ed8161283b565b915050611799565b505050505050565b6060600c80546107c490612800565b6005546001600160a01b031633146118365760405162461bcd60e51b81526004016108af9061273d565b6001600160a01b03811661189b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108af565b610c4c81611d37565b600254600090821080156107af575060006001600160a01b0316600283815481106118d1576118d1612896565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b038416908117909155819061192382610cf3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611967826118a4565b6119c85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108af565b60006119d383610cf3565b9050806001600160a01b0316846001600160a01b03161480611a0e5750836001600160a01b0316611a0384610847565b6001600160a01b0316145b80611a3e57506001600160a01b0380821660009081526004602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a5982610cf3565b6001600160a01b031614611ac15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108af565b6001600160a01b038216611b235760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108af565b611b2e6000826118ee565b8160028281548110611b4257611b42612896565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b80471015611bec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108af565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c39576040519150601f19603f3d011682016040523d82523d6000602084013e611c3e565b606091505b50509050806109e55760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108af565b6000611cc082610cf3565b9050611ccd6000836118ee565b600060028381548110611ce257611ce2612896565b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600280546001808201835560008390527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b0319166001600160a01b0385161790559054611de291906127bd565b6040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450565b611e26848484611a46565b611e3284848484611fda565b6113155760405162461bcd60e51b81526004016108af906126eb565b6060600d80546107c490612800565b606081611e815750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611eab5780611e958161283b565b9150611ea49050600a8361278a565b9150611e85565b60008167ffffffffffffffff811115611ec657611ec66128ac565b6040519080825280601f01601f191660200182016040528015611ef0576020820181803683370190505b5090505b8415611a3e57611f056001836127bd565b9150611f12600a86612856565b611f1d906030612772565b60f81b818381518110611f3257611f32612896565b60200101906001600160f81b031916908160001a905350611f54600a8661278a565b9450611ef4565b600080600080611f6a856120e7565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015611fc5573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60006001600160a01b0384163b156120dc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061201e90339089908890889060040161269b565b602060405180830381600087803b15801561203857600080fd5b505af1925050508015612068575060408051601f3d908101601f19168201909252612065918101906123cd565b60015b6120c2573d808015612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b5080516120ba5760405162461bcd60e51b81526004016108af906126eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a3e565b506001949350505050565b600080600083516041146120fa57600080fd5b5050506020810151604082015160609092015160001a92909190565b82805461212290612800565b90600052602060002090601f016020900481019282612144576000855561218a565b82601f1061215d57805160ff191683800117855561218a565b8280016001018555821561218a579182015b8281111561218a57825182559160200191906001019061216f565b5061219692915061219a565b5090565b5b80821115612196576000815560010161219b565b80356001600160a01b03811681146121c657600080fd5b919050565b600082601f8301126121dc57600080fd5b813567ffffffffffffffff808211156121f7576121f76128ac565b604051601f8301601f19908116603f0116810190828211818310171561221f5761221f6128ac565b8160405283815286602085880101111561223857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561226a57600080fd5b611539826121af565b6000806040838503121561228657600080fd5b61228f836121af565b915061229d602084016121af565b90509250929050565b6000806000606084860312156122bb57600080fd5b6122c4846121af565b92506122d2602085016121af565b9150604084013590509250925092565b600080600080608085870312156122f857600080fd5b612301856121af565b935061230f602086016121af565b925060408501359150606085013567ffffffffffffffff81111561233257600080fd5b61233e878288016121cb565b91505092959194509250565b6000806040838503121561235d57600080fd5b612366836121af565b91506020830135801515811461237b57600080fd5b809150509250929050565b6000806040838503121561239957600080fd5b6123a2836121af565b946020939093013593505050565b6000602082840312156123c257600080fd5b8135611539816128c2565b6000602082840312156123df57600080fd5b8151611539816128c2565b6000602082840312156123fc57600080fd5b813567ffffffffffffffff81111561241357600080fd5b611a3e848285016121cb565b60006020828403121561243157600080fd5b5035919050565b6000806040838503121561244b57600080fd5b82359150602083013567ffffffffffffffff81111561246957600080fd5b612475858286016121cb565b9150509250929050565b60008060006060848603121561249457600080fd5b83359250602084013567ffffffffffffffff808211156124b357600080fd5b6124bf878388016121cb565b935060408601359150808211156124d557600080fd5b506124e2868287016121cb565b9150509250925092565b6000806000806080858703121561250257600080fd5b84359350602085013567ffffffffffffffff8082111561252157600080fd5b61252d888389016121cb565b9450604087013591508082111561254357600080fd5b61254f888389016121cb565b9350606087013591508082111561256557600080fd5b5061233e878288016121cb565b6000815180845261258a8160208601602086016127d4565b601f01601f19169290920160200192915050565b600082516125b08184602087016127d4565b9190910192915050565b600083516125cc8184602088016127d4565b8351908301906125e08183602088016127d4565b64173539b7b760d91b9101908152600501949350505050565b8481526bffffffffffffffffffffffff198460601b1660208201528260348201526000825161262f8160548501602087016127d4565b9190910160540195945050505050565b8581526bffffffffffffffffffffffff198560601b166020820152836034820152600083516126758160548501602088016127d4565b83519083019061268c8160548401602088016127d4565b01605401979650505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906126ce90830184612572565b9695505050505050565b6020815260006115396020830184612572565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156127855761278561286a565b500190565b60008261279957612799612880565b500490565b60008160001904831182151516156127b8576127b861286a565b500290565b6000828210156127cf576127cf61286a565b500390565b60005b838110156127ef5781810151838201526020016127d7565b838111156113155750506000910152565b600181811c9082168061281457607f821691505b6020821081141561283557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561284f5761284f61286a565b5060010190565b60008261286557612865612880565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c4c57600080fdfea2646970667358221220b2d98232080313cd3d29951b41acd20643eddb473ec548c70f16c7a5d2b66e3264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d643766466f443454736d766538677479727268597a59796b4e796344367a6b4370784d344d514d33723532512f00000000000000000000
-----Decoded View---------------
Arg [0] : maxTokens_ (uint256): 10000
Arg [1] : saleEnabled_ (bool): True
Arg [2] : freeMintEnabled_ (bool): True
Arg [3] : baseURI_ (string): ipfs://Qmd7fFoD4Tsmve8gtyrrhYzYykNycD6zkCpxM4MQM3r52Q/
Arg [4] : maxMintForUser_ (uint256): 20
Arg [5] : maxFreeMints_ (uint256): 1000
Arg [6] : price_ (uint256): 10000000000000000
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [6] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d643766466f443454736d766538677479727268597a5979
Arg [9] : 6b4e796344367a6b4370784d344d514d33723532512f00000000000000000000
Deployed Bytecode Sourcemap
36680:7047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20744:355;;;;;;;;;;-1:-1:-1;20744:355:0;;;;;:::i;:::-;;:::i;:::-;;;9588:14:1;;9581:22;9563:41;;9551:2;9536:18;20744:355:0;;;;;;;;22010:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23570:308::-;;;;;;;;;;-1:-1:-1;23570:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8886:32:1;;;8868:51;;8856:2;8841:18;23570:308:0;8722:203:1;23093:411:0;;;;;;;;;;-1:-1:-1;23093:411:0;;;;;:::i;:::-;;:::i;:::-;;37924:102;;;;;;;;;;-1:-1:-1;37924:102:0;;;;;:::i;:::-;;:::i;42345:122::-;;;;;;;;;;-1:-1:-1;42345:122:0;;;;;:::i;:::-;;:::i;39151:87::-;;;;;;;;;;-1:-1:-1;39221:9:0;;39151:87;;;19668:25:1;;;19656:2;19641:18;39151:87:0;19522:177:1;24629:375:0;;;;;;;;;;-1:-1:-1;24629:375:0;;;;;:::i;:::-;;:::i;38785:84::-;;;;;;;;;;;;;:::i;38691:82::-;;;;;;;;;;;;;:::i;42581:124::-;;;;;;;;;;;;;:::i;38165:115::-;;;;;;;;;;-1:-1:-1;38165:115:0;;;;;:::i;:::-;;:::i;25075:185::-;;;;;;;;;;-1:-1:-1;25075:185:0;;;;;:::i;:::-;;:::i;41293:176::-;;;;;;;;;;-1:-1:-1;41293:176:0;;;;;:::i;:::-;;:::i;37814:102::-;;;;;;;;;;-1:-1:-1;37814:102:0;;;;;:::i;:::-;;:::i;42945:96::-;;;;;;;;;;-1:-1:-1;42945:96:0;;;;;:::i;:::-;;:::i;42713:109::-;;;;;;;;;;;;;:::i;38583:96::-;;;;;;;;;;-1:-1:-1;38655:16:0;;;;;;;38583:96;;21617:326;;;;;;;;;;-1:-1:-1;21617:326:0;;;;;:::i;:::-;;:::i;38034:123::-;;;;;;;;;;-1:-1:-1;38034:123:0;;;;;:::i;:::-;;:::i;21163:392::-;;;;;;;;;;-1:-1:-1;21163:392:0;;;;;:::i;:::-;;:::i;35861:103::-;;;;;;;;;;;;;:::i;38881:88::-;;;;;;;;;;-1:-1:-1;38949:12:0;;;;38881:88;;38981:74;;;;;;;;;;;;;:::i;39917:437::-;;;;;;;;;;-1:-1:-1;39917:437:0;;;;;:::i;:::-;;:::i;35210:87::-;;;;;;;;;;-1:-1:-1;35283:6:0;;-1:-1:-1;;;;;35283:6:0;35210:87;;43605:119;;;;;;;;;;-1:-1:-1;43605:119:0;;;;;:::i;:::-;;:::i;39250:86::-;;;;;;;;;;-1:-1:-1;39250:86:0;;;;;:::i;:::-;;:::i;43053:99::-;;;;;;;;;;-1:-1:-1;43053:99:0;;;;;:::i;:::-;;:::i;22179:104::-;;;;;;;;;;;;;:::i;39581:326::-;;;;;;:::i;:::-;;:::i;23950:327::-;;;;;;;;;;-1:-1:-1;23950:327:0;;;;;:::i;:::-;;:::i;25331:365::-;;;;;;;;;;-1:-1:-1;25331:365:0;;;;;:::i;:::-;;:::i;39346:221::-;;;;;;;;;;-1:-1:-1;39346:221:0;;;;;:::i;:::-;;:::i;43164:433::-;;;;;;;;;;-1:-1:-1;43164:433:0;;;;;:::i;:::-;;:::i;39067:76::-;;;;;;;;;;;;;:::i;38391:180::-;;;;;;;;;;-1:-1:-1;38391:180:0;;;;;:::i;:::-;;:::i;40368:413::-;;;;;;:::i;:::-;;:::i;40789:494::-;;;;;;:::i;:::-;;:::i;42475:94::-;;;;;;;;;;;;;:::i;24348:214::-;;;;;;;;;;-1:-1:-1;24348:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;24519:25:0;;;24490:4;24519:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24348:214;36119:201;;;;;;;;;;-1:-1:-1;36119:201:0;;;;;:::i;:::-;;:::i;20744:355::-;20891:4;-1:-1:-1;;;;;;20933:40:0;;-1:-1:-1;;;20933:40:0;;:105;;-1:-1:-1;;;;;;;20990:48:0;;-1:-1:-1;;;20990:48:0;20933:105;:158;;;-1:-1:-1;;;;;;;;;;19419:40:0;;;21055:36;20913:178;20744:355;-1:-1:-1;;20744:355:0:o;22010:100::-;22064:13;22097:5;22090:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22010:100;:::o;23570:308::-;23691:7;23738:16;23746:7;23738;:16::i;:::-;23716:110;;;;-1:-1:-1;;;23716:110:0;;15865:2:1;23716:110:0;;;15847:21:1;15904:2;15884:18;;;15877:30;15943:34;15923:18;;;15916:62;-1:-1:-1;;;15994:18:1;;;15987:42;16046:19;;23716:110:0;;;;;;;;;-1:-1:-1;23846:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23846:24:0;;23570:308::o;23093:411::-;23174:13;23190:23;23205:7;23190:14;:23::i;:::-;23174:39;;23238:5;-1:-1:-1;;;;;23232:11:0;:2;-1:-1:-1;;;;;23232:11:0;;;23224:57;;;;-1:-1:-1;;;23224:57:0;;17465:2:1;23224:57:0;;;17447:21:1;17504:2;17484:18;;;17477:30;17543:34;17523:18;;;17516:62;-1:-1:-1;;;17594:18:1;;;17587:31;17635:19;;23224:57:0;17263:397:1;23224:57:0;16368:10;-1:-1:-1;;;;;23316:21:0;;;;:62;;-1:-1:-1;23341:37:0;23358:5;16368:10;24348:214;:::i;23341:37::-;23294:168;;;;-1:-1:-1;;;23294:168:0;;14619:2:1;23294:168:0;;;14601:21:1;14658:2;14638:18;;;14631:30;14697:34;14677:18;;;14670:62;14768:26;14748:18;;;14741:54;14812:19;;23294:168:0;14417:420:1;23294:168:0;23475:21;23484:2;23488:7;23475:8;:21::i;:::-;23163:341;23093:411;;:::o;37924:102::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;37996:9:::1;:22:::0;37924:102::o;42345:122::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;42430:23:::1;::::0;;;:16:::1;:23;::::0;;;;;;;:29;;::::1;::::0;;::::1;::::0;::::1;:::i;24629:375::-:0;24838:41;16368:10;24871:7;24838:18;:41::i;:::-;24816:139;;;;-1:-1:-1;;;24816:139:0;;19307:2:1;24816:139:0;;;19289:21:1;19346:2;19326:18;;;19319:30;19385:34;19365:18;;;19358:62;-1:-1:-1;;;19436:18:1;;;19429:46;19492:19;;24816:139:0;19105:412:1;24816:139:0;24968:28;24978:4;24984:2;24988:7;24968:9;:28::i;38785:84::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;38837:16:::1;:24:::0;;-1:-1:-1;;38837:24:0::1;::::0;;38785:84::o;38691:82::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;38742:16:::1;:23:::0;;-1:-1:-1;;38742:23:0::1;;;::::0;;38691:82::o;42581:124::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;42636:61:::1;42662:10;42675:21;42636:17;:61::i;:::-;42581:124::o:0;38165:115::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;38243:13:::1;:29:::0;38165:115::o;25075:185::-;25213:39;25230:4;25236:2;25240:7;25213:39;;;;;;;;;;;;:16;:39::i;41293:176::-;41372:10;41352:16;41360:7;41352;:16::i;:::-;-1:-1:-1;;;;;41352:30:0;;:55;;;-1:-1:-1;35283:6:0;;-1:-1:-1;;;;;35283:6:0;41386:10;:21;41352:55;41344:92;;;;-1:-1:-1;;;41344:92:0;;18621:2:1;41344:92:0;;;18603:21:1;18660:2;18640:18;;;18633:30;18699:26;18679:18;;;18672:54;18743:18;;41344:92:0;18419:348:1;41344:92:0;41447:14;41453:7;41447:5;:14::i;:::-;41293:176;:::o;37814:102::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;37886:13:::1;:22:::0;;-1:-1:-1;;;;;;37886:22:0::1;-1:-1:-1::0;;;;;37886:22:0;;;::::1;::::0;;;::::1;::::0;;37814:102::o;42945:96::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;43014:19;;::::1;::::0;:13:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;:::-;;42945:96:::0;:::o;42713:109::-;42800:7;:14;42788:9;;42761:7;;42788:26;;;:::i;:::-;42781:33;;42713:109;:::o;21617:326::-;21734:7;21759:13;21775:7;21783;21775:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21775:16:0;;-1:-1:-1;21824:19:0;21802:110;;;;-1:-1:-1;;;21802:110:0;;15455:2:1;21802:110:0;;;15437:21:1;15494:2;15474:18;;;15467:30;15533:34;15513:18;;;15506:62;-1:-1:-1;;;15584:18:1;;;15577:39;15633:19;;21802:110:0;15253:405:1;38034:123:0;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;38116:15:::1;:33:::0;38034:123::o;21163:392::-;21285:4;-1:-1:-1;;;;;21316:19:0;;21308:74;;;;-1:-1:-1;;;21308:74:0;;15044:2:1;21308:74:0;;;15026:21:1;15083:2;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;-1:-1:-1;;;15173:18:1;;;15166:40;15223:19;;21308:74:0;14842:406:1;21308:74:0;21395:10;21421:6;21416:109;21433:7;:14;21429:18;;21416:109;;;21480:7;21488:1;21480:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21471:19:0;;;21480:10;;21471:19;21467:46;;;21506:7;;;:::i;:::-;;;21467:46;21449:3;;;:::i;:::-;;;21416:109;;;-1:-1:-1;21542:5:0;21163:392;-1:-1:-1;;21163:392:0:o;35861:103::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;35926:30:::1;35953:1;35926:18;:30::i;38981:74::-:0;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;39028:12:::1;:19:::0;;-1:-1:-1;;39028:19:0::1;39043:4;39028:19;::::0;;38981:74::o;39917:437::-;39978:16;;;;;;;39970:42;;;;-1:-1:-1;;;39970:42:0;;13864:2:1;39970:42:0;;;13846:21:1;13903:2;13883:18;;;13876:30;-1:-1:-1;;;13922:18:1;;;13915:43;13975:18;;39970:42:0;13662:337:1;39970:42:0;40064:15;;40041:10;40031:21;;;;:9;:21;;;;;;:29;;40055:5;;40031:29;:::i;:::-;:48;;40023:80;;;;-1:-1:-1;;;40023:80:0;;12731:2:1;40023:80:0;;;12713:21:1;12770:2;12750:18;;;12743:30;-1:-1:-1;;;12789:18:1;;;12782:49;12848:18;;40023:80:0;12529:343:1;40023:80:0;40151:13;;40142:5;40122:17;;:25;;;;:::i;:::-;:42;;40114:74;;;;-1:-1:-1;;;40114:74:0;;12731:2:1;40114:74:0;;;12713:21:1;12770:2;12750:18;;;12743:30;-1:-1:-1;;;12789:18:1;;;12782:49;12848:18;;40114:74:0;12529:343:1;40114:74:0;40204:9;40199:148;40219:5;40215:1;:9;40199:148;;;40246:17;40252:10;40246:5;:17::i;:::-;40288:10;40278:21;;;;:9;:21;;;;;:23;;;;;;:::i;:::-;;;;-1:-1:-1;;40316:17:0;:19;;;:17;:19;;;:::i;:::-;;;;;;40226:3;;;;;:::i;:::-;;;;40199:148;;43605:119;43666:13;43699:17;43708:7;43699:8;:17::i;39250:86::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;39314:5:::1;:14:::0;39250:86::o;43053:99::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;43126:18;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;22179:104::-:0;22235:13;22268:7;22261:14;;;;;:::i;39581:326::-;39646:12;;;;39638:33;;;;-1:-1:-1;;;39638:33:0;;18285:2:1;39638:33:0;;;18267:21:1;18324:1;18304:18;;;18297:29;-1:-1:-1;;;18342:18:1;;;18335:38;18390:18;;39638:33:0;18083:331:1;39638:33:0;39709:5;;39703:11;;:5;:11;:::i;:::-;39690:9;:24;;39682:63;;;;-1:-1:-1;;;39682:63:0;;11617:2:1;39682:63:0;;;11599:21:1;11656:2;11636:18;;;11629:30;11695:28;11675:18;;;11668:56;11741:18;;39682:63:0;11415:350:1;39682:63:0;39785:5;39764:17;:15;:17::i;:::-;:26;;39756:57;;;;-1:-1:-1;;;39756:57:0;;10444:2:1;39756:57:0;;;10426:21:1;10483:2;10463:18;;;10456:30;-1:-1:-1;;;10502:18:1;;;10495:48;10560:18;;39756:57:0;10242:342:1;39756:57:0;39829:9;39824:76;39844:5;39840:1;:9;39824:76;;;39871:17;39877:10;39871:5;:17::i;:::-;39851:3;;;;:::i;:::-;;;;39824:76;;23950:327;-1:-1:-1;;;;;24085:24:0;;16368:10;24085:24;;24077:62;;;;-1:-1:-1;;;24077:62:0;;12377:2:1;24077:62:0;;;12359:21:1;12416:2;12396:18;;;12389:30;12455:27;12435:18;;;12428:55;12500:18;;24077:62:0;12175:349:1;24077:62:0;16368:10;24152:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24152:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24152:53:0;;;;;;;;;;24221:48;;9563:41:1;;;24152:42:0;;16368:10;24221:48;;9536:18:1;24221:48:0;;;;;;;23950:327;;:::o;25331:365::-;25520:41;16368:10;25553:7;25520:18;:41::i;:::-;25498:140;;;;-1:-1:-1;;;25498:140:0;;17867:2:1;25498:140:0;;;17849:21:1;17906:2;17886:18;;;17879:30;17945:34;17925:18;;;17918:62;-1:-1:-1;;;17996:18:1;;;17989:47;18053:19;;25498:140:0;17665:413:1;25498:140:0;25649:39;25663:4;25669:2;25673:7;25682:5;25649:13;:39::i;:::-;25331:365;;;;:::o;39346:221::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;39452:5:::1;39431:17;:15;:17::i;:::-;:26;;39423:57;;;::::0;-1:-1:-1;;;39423:57:0;;10444:2:1;39423:57:0::1;::::0;::::1;10426:21:1::0;10483:2;10463:18;;;10456:30;-1:-1:-1;;;10502:18:1;;;10495:48;10560:18;;39423:57:0::1;10242:342:1::0;39423:57:0::1;39496:9;39491:69;39511:5;39507:1;:9;39491:69;;;39538:10;39544:3;39538:5;:10::i;:::-;39518:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39491:69;;43164:433:::0;43237:13;43271:16;43279:7;43271;:16::i;:::-;43263:76;;;;-1:-1:-1;;;43263:76:0;;17049:2:1;43263:76:0;;;17031:21:1;17088:2;17068:18;;;17061:30;17127:34;17107:18;;;17100:62;-1:-1:-1;;;17178:18:1;;;17171:45;17233:19;;43263:76:0;16847:411:1;43263:76:0;43359:25;;;;:16;:25;;;;;43353:39;;;;;:::i;:::-;:44;;-1:-1:-1;43350:81:0;;43406:25;;;;:16;:25;;;;;43399:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43164:433;;;:::o;43350:81::-;43442:21;43466:10;:8;:10::i;:::-;43442:34;;43518:1;43500:7;43494:21;:25;:95;;;;;;;;;;;;;;;;;43546:7;43555:18;:7;:16;:18::i;:::-;43529:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43494:95;43487:102;43164:433;-1:-1:-1;;;43164:433:0:o;39067:76::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;39115:12:::1;:20:::0;;-1:-1:-1;;39115:20:0::1;::::0;;39067:76::o;38391:180::-;38471:16;;38448:4;;38471:16;;;;;:55;;;;-1:-1:-1;38511:15:0;;-1:-1:-1;;;;;38491:17:0;;;;;;:9;:17;;;;;;:35;38471:55;:92;;;;;38550:13;;38530:17;;:33;38464:99;38391:180;-1:-1:-1;;38391:180:0:o;40368:413::-;40475:15;40493:73;40529:9;40540:10;40552:5;40559:4;40512:52;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;40512:52:0;;;;;;;;;40502:63;;40512:52;40502:63;;;;7117:66:1;42270:58:0;;;7105:79:1;7200:12;;;;7193:28;;;;42270:58:0;;;;;;;;;;7237:12:1;;;;42270:58:0;;;42260:69;;;;;;42178:159;40493:73;40622:13;;40475:91;;-1:-1:-1;;;;;;40622:13:0;40585:33;40475:91;40608:9;40585:13;:33::i;:::-;-1:-1:-1;;;;;40585:50:0;;40577:68;;;;-1:-1:-1;;;40577:68:0;;18974:2:1;40577:68:0;;;18956:21:1;19013:1;18993:18;;;18986:29;-1:-1:-1;;;19031:18:1;;;19024:35;19076:18;;40577:68:0;18772:328:1;40577:68:0;40683:4;40656:13;40670:9;40656:24;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;;;;;-1:-1:-1;;40656:31:0;;;;;;;;;:24;40698:76;40718:5;40714:1;:9;40698:76;;;40745:17;40751:10;40745:5;:17::i;:::-;40725:3;;;;:::i;:::-;;;;40698:76;;;;40464:317;40368:413;;;:::o;40789:494::-;40915:15;40933:78;40969:9;40980:10;40992:5;40999:3;41004:4;40952:57;;;;;;;;;;;;:::i;40933:78::-;41067:13;;40915:96;;-1:-1:-1;;;;;;41067:13:0;41030:33;40915:96;41053:9;41030:13;:33::i;:::-;-1:-1:-1;;;;;41030:50:0;;41022:68;;;;-1:-1:-1;;;41022:68:0;;18974:2:1;41022:68:0;;;18956:21:1;19013:1;18993:18;;;18986:29;-1:-1:-1;;;19031:18:1;;;19024:35;19076:18;;41022:68:0;18772:328:1;41022:68:0;41128:4;41101:13;41115:9;41101:24;;;;;;:::i;:::-;;;;;;;;;;;;;;:31;;;;;-1:-1:-1;;41101:31:0;;;;;;;;;:24;41143:133;41163:5;41159:1;:9;41143:133;;;41190:17;41196:10;41190:5;:17::i;:::-;41261:3;41222:16;:36;41256:1;41239:7;:14;;;;:18;;;;:::i;:::-;41222:36;;;;;;;;;;;:42;;;;;;;;;;;;:::i;:::-;-1:-1:-1;41170:3:0;;;;:::i;:::-;;;;41143:133;;;;40904:379;40789:494;;;;:::o;42475:94::-;42519:13;42549:12;42542:19;;;;;:::i;36119:201::-;35283:6;;-1:-1:-1;;;;;35283:6:0;16368:10;35430:23;35422:68;;;;-1:-1:-1;;;35422:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36208:22:0;::::1;36200:73;;;::::0;-1:-1:-1;;;36200:73:0;;11210:2:1;36200:73:0::1;::::0;::::1;11192:21:1::0;11249:2;11229:18;;;11222:30;11288:34;11268:18;;;11261:62;-1:-1:-1;;;11339:18:1;;;11332:36;11385:19;;36200:73:0::1;11008:402:1::0;36200:73:0::1;36284:28;36303:8;36284:18;:28::i;27243:155::-:0;27342:7;:14;27308:4;;27332:24;;:58;;;;;27388:1;-1:-1:-1;;;;;27360:30:0;:7;27368;27360:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;27360:16:0;:30;;27325:65;27243:155;-1:-1:-1;;27243:155:0:o;31300:174::-;31375:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31375:29:0;-1:-1:-1;;;;;31375:29:0;;;;;;;;:24;;31429:23;31375:24;31429:14;:23::i;:::-;-1:-1:-1;;;;;31420:46:0;;;;;;;;;;;31300:174;;:::o;27565:452::-;27694:4;27738:16;27746:7;27738;:16::i;:::-;27716:110;;;;-1:-1:-1;;;27716:110:0;;14206:2:1;27716:110:0;;;14188:21:1;14245:2;14225:18;;;14218:30;14284:34;14264:18;;;14257:62;-1:-1:-1;;;14335:18:1;;;14328:42;14387:19;;27716:110:0;14004:408:1;27716:110:0;27837:13;27853:23;27868:7;27853:14;:23::i;:::-;27837:39;;27906:5;-1:-1:-1;;;;;27895:16:0;:7;-1:-1:-1;;;;;27895:16:0;;:64;;;;27952:7;-1:-1:-1;;;;;27928:31:0;:20;27940:7;27928:11;:20::i;:::-;-1:-1:-1;;;;;27928:31:0;;27895:64;:113;;;-1:-1:-1;;;;;;24519:25:0;;;24490:4;24519:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27976:32;27887:122;27565:452;-1:-1:-1;;;;27565:452:0:o;30629:553::-;30802:4;-1:-1:-1;;;;;30775:31:0;:23;30790:7;30775:14;:23::i;:::-;-1:-1:-1;;;;;30775:31:0;;30753:122;;;;-1:-1:-1;;;30753:122:0;;16639:2:1;30753:122:0;;;16621:21:1;16678:2;16658:18;;;16651:30;16717:34;16697:18;;;16690:62;-1:-1:-1;;;16768:18:1;;;16761:39;16817:19;;30753:122:0;16437:405:1;30753:122:0;-1:-1:-1;;;;;30894:16:0;;30886:65;;;;-1:-1:-1;;;30886:65:0;;11972:2:1;30886:65:0;;;11954:21:1;12011:2;11991:18;;;11984:30;12050:34;12030:18;;;12023:62;-1:-1:-1;;;12101:18:1;;;12094:34;12145:19;;30886:65:0;11770:400:1;30886:65:0;31068:29;31085:1;31089:7;31068:8;:29::i;:::-;31127:2;31108:7;31116;31108:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;31108:21:0;-1:-1:-1;;;;;31108:21:0;;;;;;31147:27;;31166:7;;31147:27;;;;;;;;;;31108:16;31147:27;30629:553;;;:::o;9683:317::-;9798:6;9773:21;:31;;9765:73;;;;-1:-1:-1;;;9765:73:0;;13506:2:1;9765:73:0;;;13488:21:1;13545:2;13525:18;;;13518:30;13584:31;13564:18;;;13557:59;13633:18;;9765:73:0;13304:353:1;9765:73:0;9852:12;9870:9;-1:-1:-1;;;;;9870:14:0;9892:6;9870:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9851:52;;;9922:7;9914:78;;;;-1:-1:-1;;;9914:78:0;;13079:2:1;9914:78:0;;;13061:21:1;13118:2;13098:18;;;13091:30;13157:34;13137:18;;;13130:62;13228:28;13208:18;;;13201:56;13274:19;;9914:78:0;12877:422:1;29960:332:0;30020:13;30036:23;30051:7;30036:14;:23::i;:::-;30020:39;;30161:29;30178:1;30182:7;30161:8;:29::i;:::-;30228:1;30201:7;30209;30201:16;;;;;;;;:::i;:::-;;;;;;;;;:29;;-1:-1:-1;;;;;;30201:29:0;-1:-1:-1;;;;;30201:29:0;;;;;;30248:36;;30276:7;;30248:36;;;;;30201:16;;30248:36;30009:283;29960:332;:::o;36480:191::-;36573:6;;;-1:-1:-1;;;;;36590:17:0;;;-1:-1:-1;;;;;;36590:17:0;;;;;;;36623:40;;36573:6;;;36590:17;36573:6;;36623:40;;36554:16;;36623:40;36543:128;36480:191;:::o;29373:358::-;29645:7;:16;;;;;;;;-1:-1:-1;29645:16:0;;;;;;;;;-1:-1:-1;;;;;;29645:16:0;-1:-1:-1;;;;;29645:16:0;;;;;29704:14;;:18;;29645:16;29704:18;:::i;:::-;29679:44;;-1:-1:-1;;;;;29679:44:0;;;29696:1;;29679:44;;29696:1;;29679:44;29373:358;:::o;26578:352::-;26735:28;26745:4;26751:2;26755:7;26735:9;:28::i;:::-;26796:48;26819:4;26825:2;26829:7;26838:5;26796:22;:48::i;:::-;26774:148;;;;-1:-1:-1;;;26774:148:0;;;;;;;:::i;42830:107::-;42883:13;42916;42909:20;;;;;:::i;16784:723::-;16840:13;17061:10;17057:53;;-1:-1:-1;;17088:10:0;;;;;;;;;;;;-1:-1:-1;;;17088:10:0;;;;;16784:723::o;17057:53::-;17135:5;17120:12;17176:78;17183:9;;17176:78;;17209:8;;;;:::i;:::-;;-1:-1:-1;17232:10:0;;-1:-1:-1;17240:2:0;17232:10;;:::i;:::-;;;17176:78;;;17264:19;17296:6;17286:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17286:17:0;;17264:39;;17314:154;17321:10;;17314:154;;17348:11;17358:1;17348:11;;:::i;:::-;;-1:-1:-1;17417:10:0;17425:2;17417:5;:10;:::i;:::-;17404:24;;:2;:24;:::i;:::-;17391:39;;17374:6;17381;17374:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17374:56:0;;;;;;;;-1:-1:-1;17445:11:0;17454:2;17445:11;;:::i;:::-;;;17314:154;;41959:207;42040:7;42061;42070:9;42081;42094:19;42109:3;42094:14;:19::i;:::-;42131:27;;;;;;;;;;;;9842:25:1;;;9915:4;9903:17;;9883:18;;;9876:45;;;;9937:18;;;9930:34;;;9980:18;;;9973:34;;;42060:53:0;;-1:-1:-1;42060:53:0;;-1:-1:-1;42060:53:0;-1:-1:-1;42131:27:0;;9814:19:1;;42131:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42131:27:0;;-1:-1:-1;;42131:27:0;;;41959:207;-1:-1:-1;;;;;;;41959:207:0:o;32039:980::-;32194:4;-1:-1:-1;;;;;32215:13:0;;8717:19;:23;32211:801;;32268:175;;-1:-1:-1;;;32268:175:0;;-1:-1:-1;;;;;32268:36:0;;;;;:175;;16368:10;;32362:4;;32389:7;;32419:5;;32268:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32268:175:0;;;;;;;;-1:-1:-1;;32268:175:0;;;;;;;;;;;;:::i;:::-;;;32247:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32626:13:0;;32622:320;;32669:108;;-1:-1:-1;;;32669:108:0;;;;;;;:::i;32622:320::-;32892:6;32886:13;32877:6;32873:2;32869:15;32862:38;32247:710;-1:-1:-1;;;;;;32507:51:0;-1:-1:-1;;;32507:51:0;;-1:-1:-1;32500:58:0;;32211:801;-1:-1:-1;32996:4:0;32039:980;;;;;;:::o;41479:470::-;41544:7;41553:9;41564;41594:3;:10;41608:2;41594:16;41586:25;;;;;;-1:-1:-1;;;41722:2:0;41713:12;;41707:19;41792:2;41783:12;;41777:19;41899:2;41890:12;;;41884:19;41881:1;41876:28;;41707:19;;41777;41479:470::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:718::-;234:5;287:3;280:4;272:6;268:17;264:27;254:55;;305:1;302;295:12;254:55;341:6;328:20;367:18;404:2;400;397:10;394:36;;;410:18;;:::i;:::-;485:2;479:9;453:2;539:13;;-1:-1:-1;;535:22:1;;;559:2;531:31;527:40;515:53;;;583:18;;;603:22;;;580:46;577:72;;;629:18;;:::i;:::-;669:10;665:2;658:22;704:2;696:6;689:18;750:3;743:4;738:2;730:6;726:15;722:26;719:35;716:55;;;767:1;764;757:12;716:55;831:2;824:4;816:6;812:17;805:4;797:6;793:17;780:54;878:1;871:4;866:2;858:6;854:15;850:26;843:37;898:6;889:15;;;;;;192:718;;;;:::o;915:186::-;974:6;1027:2;1015:9;1006:7;1002:23;998:32;995:52;;;1043:1;1040;1033:12;995:52;1066:29;1085:9;1066:29;:::i;1106:260::-;1174:6;1182;1235:2;1223:9;1214:7;1210:23;1206:32;1203:52;;;1251:1;1248;1241:12;1203:52;1274:29;1293:9;1274:29;:::i;:::-;1264:39;;1322:38;1356:2;1345:9;1341:18;1322:38;:::i;:::-;1312:48;;1106:260;;;;;:::o;1371:328::-;1448:6;1456;1464;1517:2;1505:9;1496:7;1492:23;1488:32;1485:52;;;1533:1;1530;1523:12;1485:52;1556:29;1575:9;1556:29;:::i;:::-;1546:39;;1604:38;1638:2;1627:9;1623:18;1604:38;:::i;:::-;1594:48;;1689:2;1678:9;1674:18;1661:32;1651:42;;1371:328;;;;;:::o;1704:537::-;1799:6;1807;1815;1823;1876:3;1864:9;1855:7;1851:23;1847:33;1844:53;;;1893:1;1890;1883:12;1844:53;1916:29;1935:9;1916:29;:::i;:::-;1906:39;;1964:38;1998:2;1987:9;1983:18;1964:38;:::i;:::-;1954:48;;2049:2;2038:9;2034:18;2021:32;2011:42;;2104:2;2093:9;2089:18;2076:32;2131:18;2123:6;2120:30;2117:50;;;2163:1;2160;2153:12;2117:50;2186:49;2227:7;2218:6;2207:9;2203:22;2186:49;:::i;:::-;2176:59;;;1704:537;;;;;;;:::o;2246:347::-;2311:6;2319;2372:2;2360:9;2351:7;2347:23;2343:32;2340:52;;;2388:1;2385;2378:12;2340:52;2411:29;2430:9;2411:29;:::i;:::-;2401:39;;2490:2;2479:9;2475:18;2462:32;2537:5;2530:13;2523:21;2516:5;2513:32;2503:60;;2559:1;2556;2549:12;2503:60;2582:5;2572:15;;;2246:347;;;;;:::o;2598:254::-;2666:6;2674;2727:2;2715:9;2706:7;2702:23;2698:32;2695:52;;;2743:1;2740;2733:12;2695:52;2766:29;2785:9;2766:29;:::i;:::-;2756:39;2842:2;2827:18;;;;2814:32;;-1:-1:-1;;;2598:254:1:o;2857:245::-;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;3023:9;3010:23;3042:30;3066:5;3042:30;:::i;3107:249::-;3176:6;3229:2;3217:9;3208:7;3204:23;3200:32;3197:52;;;3245:1;3242;3235:12;3197:52;3277:9;3271:16;3296:30;3320:5;3296:30;:::i;3361:321::-;3430:6;3483:2;3471:9;3462:7;3458:23;3454:32;3451:52;;;3499:1;3496;3489:12;3451:52;3539:9;3526:23;3572:18;3564:6;3561:30;3558:50;;;3604:1;3601;3594:12;3558:50;3627:49;3668:7;3659:6;3648:9;3644:22;3627:49;:::i;3687:180::-;3746:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:52;;;3815:1;3812;3805:12;3767:52;-1:-1:-1;3838:23:1;;3687:180;-1:-1:-1;3687:180:1:o;3872:389::-;3950:6;3958;4011:2;3999:9;3990:7;3986:23;3982:32;3979:52;;;4027:1;4024;4017:12;3979:52;4063:9;4050:23;4040:33;;4124:2;4113:9;4109:18;4096:32;4151:18;4143:6;4140:30;4137:50;;;4183:1;4180;4173:12;4137:50;4206:49;4247:7;4238:6;4227:9;4223:22;4206:49;:::i;:::-;4196:59;;;3872:389;;;;;:::o;4266:608::-;4362:6;4370;4378;4431:2;4419:9;4410:7;4406:23;4402:32;4399:52;;;4447:1;4444;4437:12;4399:52;4483:9;4470:23;4460:33;;4544:2;4533:9;4529:18;4516:32;4567:18;4608:2;4600:6;4597:14;4594:34;;;4624:1;4621;4614:12;4594:34;4647:49;4688:7;4679:6;4668:9;4664:22;4647:49;:::i;:::-;4637:59;;4749:2;4738:9;4734:18;4721:32;4705:48;;4778:2;4768:8;4765:16;4762:36;;;4794:1;4791;4784:12;4762:36;;4817:51;4860:7;4849:8;4838:9;4834:24;4817:51;:::i;:::-;4807:61;;;4266:608;;;;;:::o;4879:808::-;4994:6;5002;5010;5018;5071:3;5059:9;5050:7;5046:23;5042:33;5039:53;;;5088:1;5085;5078:12;5039:53;5124:9;5111:23;5101:33;;5185:2;5174:9;5170:18;5157:32;5208:18;5249:2;5241:6;5238:14;5235:34;;;5265:1;5262;5255:12;5235:34;5288:49;5329:7;5320:6;5309:9;5305:22;5288:49;:::i;:::-;5278:59;;5390:2;5379:9;5375:18;5362:32;5346:48;;5419:2;5409:8;5406:16;5403:36;;;5435:1;5432;5425:12;5403:36;5458:51;5501:7;5490:8;5479:9;5475:24;5458:51;:::i;:::-;5448:61;;5562:2;5551:9;5547:18;5534:32;5518:48;;5591:2;5581:8;5578:16;5575:36;;;5607:1;5604;5597:12;5575:36;;5630:51;5673:7;5662:8;5651:9;5647:24;5630:51;:::i;5692:257::-;5733:3;5771:5;5765:12;5798:6;5793:3;5786:19;5814:63;5870:6;5863:4;5858:3;5854:14;5847:4;5840:5;5836:16;5814:63;:::i;:::-;5931:2;5910:15;-1:-1:-1;;5906:29:1;5897:39;;;;5938:4;5893:50;;5692:257;-1:-1:-1;;5692:257:1:o;5954:274::-;6083:3;6121:6;6115:13;6137:53;6183:6;6178:3;6171:4;6163:6;6159:17;6137:53;:::i;:::-;6206:16;;;;;5954:274;-1:-1:-1;;5954:274:1:o;6233:637::-;6513:3;6551:6;6545:13;6567:53;6613:6;6608:3;6601:4;6593:6;6589:17;6567:53;:::i;:::-;6683:13;;6642:16;;;;6705:57;6683:13;6642:16;6739:4;6727:17;;6705:57;:::i;:::-;-1:-1:-1;;;6784:20:1;;6813:22;;;6862:1;6851:13;;6233:637;-1:-1:-1;;;;6233:637:1:o;7470:525::-;7715:6;7710:3;7703:19;7777:26;7773:31;7764:6;7760:2;7756:15;7752:53;7747:2;7742:3;7738:12;7731:75;7836:6;7831:2;7826:3;7822:12;7815:28;7685:3;7872:6;7866:13;7888:60;7941:6;7936:2;7931:3;7927:12;7922:2;7914:6;7910:15;7888:60;:::i;:::-;7968:16;;;;7986:2;7964:25;;7470:525;-1:-1:-1;;;;;7470:525:1:o;8000:717::-;8293:6;8288:3;8281:19;8355:26;8351:31;8342:6;8338:2;8334:15;8330:53;8325:2;8320:3;8316:12;8309:75;8414:6;8409:2;8404:3;8400:12;8393:28;8263:3;8450:6;8444:13;8466:60;8519:6;8514:2;8509:3;8505:12;8500:2;8492:6;8488:15;8466:60;:::i;:::-;8586:13;;8545:16;;;;8608:61;8586:13;8655:2;8647:11;;8642:2;8630:15;;8608:61;:::i;:::-;8689:17;8708:2;8685:26;;8000:717;-1:-1:-1;;;;;;;8000:717:1:o;8930:488::-;-1:-1:-1;;;;;9199:15:1;;;9181:34;;9251:15;;9246:2;9231:18;;9224:43;9298:2;9283:18;;9276:34;;;9346:3;9341:2;9326:18;;9319:31;;;9124:4;;9367:45;;9392:19;;9384:6;9367:45;:::i;:::-;9359:53;8930:488;-1:-1:-1;;;;;;8930:488:1:o;10018:219::-;10167:2;10156:9;10149:21;10130:4;10187:44;10227:2;10216:9;10212:18;10204:6;10187:44;:::i;10589:414::-;10791:2;10773:21;;;10830:2;10810:18;;;10803:30;10869:34;10864:2;10849:18;;10842:62;-1:-1:-1;;;10935:2:1;10920:18;;10913:48;10993:3;10978:19;;10589:414::o;16076:356::-;16278:2;16260:21;;;16297:18;;;16290:30;16356:34;16351:2;16336:18;;16329:62;16423:2;16408:18;;16076:356::o;19704:128::-;19744:3;19775:1;19771:6;19768:1;19765:13;19762:39;;;19781:18;;:::i;:::-;-1:-1:-1;19817:9:1;;19704:128::o;19837:120::-;19877:1;19903;19893:35;;19908:18;;:::i;:::-;-1:-1:-1;19942:9:1;;19837:120::o;19962:168::-;20002:7;20068:1;20064;20060:6;20056:14;20053:1;20050:21;20045:1;20038:9;20031:17;20027:45;20024:71;;;20075:18;;:::i;:::-;-1:-1:-1;20115:9:1;;19962:168::o;20135:125::-;20175:4;20203:1;20200;20197:8;20194:34;;;20208:18;;:::i;:::-;-1:-1:-1;20245:9:1;;20135:125::o;20265:258::-;20337:1;20347:113;20361:6;20358:1;20355:13;20347:113;;;20437:11;;;20431:18;20418:11;;;20411:39;20383:2;20376:10;20347:113;;;20478:6;20475:1;20472:13;20469:48;;;-1:-1:-1;;20513:1:1;20495:16;;20488:27;20265:258::o;20528:380::-;20607:1;20603:12;;;;20650;;;20671:61;;20725:4;20717:6;20713:17;20703:27;;20671:61;20778:2;20770:6;20767:14;20747:18;20744:38;20741:161;;;20824:10;20819:3;20815:20;20812:1;20805:31;20859:4;20856:1;20849:15;20887:4;20884:1;20877:15;20741:161;;20528:380;;;:::o;20913:135::-;20952:3;-1:-1:-1;;20973:17:1;;20970:43;;;20993:18;;:::i;:::-;-1:-1:-1;21040:1:1;21029:13;;20913:135::o;21053:112::-;21085:1;21111;21101:35;;21116:18;;:::i;:::-;-1:-1:-1;21150:9:1;;21053:112::o;21170:127::-;21231:10;21226:3;21222:20;21219:1;21212:31;21262:4;21259:1;21252:15;21286:4;21283:1;21276:15;21302:127;21363:10;21358:3;21354:20;21351:1;21344:31;21394:4;21391:1;21384:15;21418:4;21415:1;21408:15;21434:127;21495:10;21490:3;21486:20;21483:1;21476:31;21526:4;21523:1;21516:15;21550:4;21547:1;21540:15;21566:127;21627:10;21622:3;21618:20;21615:1;21608:31;21658:4;21655:1;21648:15;21682:4;21679:1;21672:15;21698:131;-1:-1:-1;;;;;;21772:32:1;;21762:43;;21752:71;;21819:1;21816;21809:12
Swarm Source
ipfs://b2d98232080313cd3d29951b41acd20643eddb473ec548c70f16c7a5d2b66e32
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.