ERC-721
Overview
Max Total Supply
0 OGCT
Holders
102
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 OGCTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OGCatsNFT
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-28 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/v3/reviewed-kind-of/OGCatsNFTContract.sol pragma solidity 0.8.10; contract OGCatsNFT is ERC721, Ownable { string public _baseTokenURI = "https://api2.ogcats.io/metadata/"; using Strings for uint256; address private _ownerContract; string public _contractURI = "https://api2.ogcats.io/metadata/contract/nft"; constructor(address ownerContractAddress) ERC721("OGCATS", "OGCT") { _ownerContract = ownerContractAddress; } function setOwnerContract(address ownerContractAddress) external onlyOwner { _ownerContract = ownerContractAddress; } function setBaseUri(string calldata baseUri) external onlyOwner { _baseTokenURI = baseUri; } function mint(address to, uint id) external { require(msg.sender == _ownerContract, "Not owner."); _safeMint(to, id); } function burn(uint id) external { require(msg.sender == _ownerContract, "Not owner."); _burn(id); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, _tokenId.toString(), ".json")); } function contractURI() public view returns (string memory) { return _contractURI; } function setContractUri(string calldata newUri) external onlyOwner { _contractURI = newUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ownerContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","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":"id","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":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownerContractAddress","type":"address"}],"name":"setOwnerContract","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280602081526020017f68747470733a2f2f617069322e6f67636174732e696f2f6d657461646174612f81525060079080519060200190620000519291906200028d565b506040518060600160405280602c8152602001620037ed602c913960099080519060200190620000839291906200028d565b503480156200009157600080fd5b5060405162003819380380620038198339818101604052810190620000b79190620003a7565b6040518060400160405280600681526020017f4f474341545300000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f4743540000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013b9291906200028d565b508060019080519060200190620001549291906200028d565b505050620001776200016b620001bf60201b60201c565b620001c760201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200043e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029b9062000408565b90600052602060002090601f016020900481019282620002bf57600085556200030b565b82601f10620002da57805160ff19168380011785556200030b565b828001600101855582156200030b579182015b828111156200030a578251825591602001919060010190620002ed565b5b5090506200031a91906200031e565b5090565b5b80821115620003395760008160009055506001016200031f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200036f8262000342565b9050919050565b620003818162000362565b81146200038d57600080fd5b50565b600081519050620003a18162000376565b92915050565b600060208284031215620003c057620003bf6200033d565b5b6000620003d08482850162000390565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042157607f821691505b60208210811415620004385762000437620003d9565b5b50919050565b61339f806200044e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063c87b56dd1161007c578063c87b56dd1461039b578063ccb4807b146103cb578063cfc86f7b146103e7578063e8a3d48514610405578063e985e9c514610423578063f2fde38b1461045357610158565b80638da5cb5b146102ed57806395d89b411461030b578063a0bcfc7f14610329578063a22cb46514610345578063b88d4fde14610361578063c0e727401461037d57610158565b806342842e0e1161011557806342842e0e1461022f57806342966c681461024b5780636352211e14610267578063706210f71461029757806370a08231146102b3578063715018a6146102e357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806323b872dd146101f757806340c10f1914610213575b600080fd5b610177600480360381019061017291906120b2565b61046f565b60405161018491906120fa565b60405180910390f35b610195610551565b6040516101a291906121ae565b60405180910390f35b6101c560048036038101906101c09190612206565b6105e3565b6040516101d29190612274565b60405180910390f35b6101f560048036038101906101f091906122bb565b610668565b005b610211600480360381019061020c91906122fb565b610780565b005b61022d600480360381019061022891906122bb565b6107e0565b005b610249600480360381019061024491906122fb565b61087e565b005b61026560048036038101906102609190612206565b61089e565b005b610281600480360381019061027c9190612206565b61093a565b60405161028e9190612274565b60405180910390f35b6102b160048036038101906102ac919061234e565b6109ec565b005b6102cd60048036038101906102c8919061234e565b610aac565b6040516102da919061238a565b60405180910390f35b6102eb610b64565b005b6102f5610bec565b6040516103029190612274565b60405180910390f35b610313610c16565b60405161032091906121ae565b60405180910390f35b610343600480360381019061033e919061240a565b610ca8565b005b61035f600480360381019061035a9190612483565b610d3a565b005b61037b600480360381019061037691906125f3565b610d50565b005b610385610db2565b60405161039291906121ae565b60405180910390f35b6103b560048036038101906103b09190612206565b610e40565b6040516103c291906121ae565b60405180910390f35b6103e560048036038101906103e0919061240a565b610e74565b005b6103ef610f06565b6040516103fc91906121ae565b60405180910390f35b61040d610f94565b60405161041a91906121ae565b60405180910390f35b61043d60048036038101906104389190612676565b611026565b60405161044a91906120fa565b60405180910390f35b61046d6004803603810190610468919061234e565b6110ba565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061053a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061054a5750610549826111b2565b5b9050919050565b606060008054610560906126e5565b80601f016020809104026020016040519081016040528092919081815260200182805461058c906126e5565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b5050505050905090565b60006105ee8261121c565b61062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612789565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106738261093a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db9061281b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610703611288565b73ffffffffffffffffffffffffffffffffffffffff16148061073257506107318161072c611288565b611026565b5b610771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610768906128ad565b60405180910390fd5b61077b8383611290565b505050565b61079161078b611288565b82611349565b6107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c79061293f565b60405180910390fd5b6107db838383611427565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610867906129ab565b60405180910390fd5b61087a828261168e565b5050565b61089983838360405180602001604052806000815250610d50565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906129ab565b60405180910390fd5b610937816116ac565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90612a3d565b60405180910390fd5b80915050919050565b6109f4611288565b73ffffffffffffffffffffffffffffffffffffffff16610a12610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90612aa9565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490612b3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b6c611288565b73ffffffffffffffffffffffffffffffffffffffff16610b8a610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790612aa9565b60405180910390fd5b610bea60006117c9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c25906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906126e5565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b5050505050905090565b610cb0611288565b73ffffffffffffffffffffffffffffffffffffffff16610cce610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90612aa9565b60405180910390fd5b818160079190610d35929190611fa3565b505050565b610d4c610d45611288565b838361188f565b5050565b610d61610d5b611288565b83611349565b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d979061293f565b60405180910390fd5b610dac848484846119fc565b50505050565b60098054610dbf906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb906126e5565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b60606007610e4d83611a58565b604051602001610e5e929190612c77565b6040516020818303038152906040529050919050565b610e7c611288565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612aa9565b60405180910390fd5b818160099190610f01929190611fa3565b505050565b60078054610f13906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3f906126e5565b8015610f8c5780601f10610f6157610100808354040283529160200191610f8c565b820191906000526020600020905b815481529060010190602001808311610f6f57829003601f168201915b505050505081565b606060098054610fa3906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcf906126e5565b801561101c5780601f10610ff15761010080835404028352916020019161101c565b820191906000526020600020905b815481529060010190602001808311610fff57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110c2611288565b73ffffffffffffffffffffffffffffffffffffffff166110e0610bec565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90612aa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90612d18565b60405180910390fd5b6111af816117c9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113038361093a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113548261121c565b611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90612daa565b60405180910390fd5b600061139e8361093a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061140d57508373ffffffffffffffffffffffffffffffffffffffff166113f5846105e3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061141e575061141d8185611026565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166114478261093a565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490612e3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612ece565b60405180910390fd5b611518838383611bb9565b611523600082611290565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115739190612f1d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ca9190612f51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611689838383611bbe565b505050565b6116a8828260405180602001604052806000815250611bc3565b5050565b60006116b78261093a565b90506116c581600084611bb9565b6116d0600083611290565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117209190612f1d565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117c581600084611bbe565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590612ff3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ef91906120fa565b60405180910390a3505050565b611a07848484611427565b611a1384848484611c1e565b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613085565b60405180910390fd5b50505050565b60606000821415611aa0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bb4565b600082905060005b60008214611ad2578080611abb906130a5565b915050600a82611acb919061311d565b9150611aa8565b60008167ffffffffffffffff811115611aee57611aed6124c8565b5b6040519080825280601f01601f191660200182016040528015611b205781602001600182028036833780820191505090505b5090505b60008514611bad57600182611b399190612f1d565b9150600a85611b48919061314e565b6030611b549190612f51565b60f81b818381518110611b6a57611b6961317f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba6919061311d565b9450611b24565b8093505050505b919050565b505050565b505050565b611bcd8383611da6565b611bda6000848484611c1e565b611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1090613085565b60405180910390fd5b505050565b6000611c3f8473ffffffffffffffffffffffffffffffffffffffff16611f80565b15611d99578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c68611288565b8786866040518563ffffffff1660e01b8152600401611c8a9493929190613203565b6020604051808303816000875af1925050508015611cc657506040513d601f19601f82011682018060405250810190611cc39190613264565b60015b611d49573d8060008114611cf6576040519150601f19603f3d011682016040523d82523d6000602084013e611cfb565b606091505b50600081511415611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613085565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611d9e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d906132dd565b60405180910390fd5b611e1f8161121c565b15611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613349565b60405180910390fd5b611e6b60008383611bb9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ebb9190612f51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f7c60008383611bbe565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611faf906126e5565b90600052602060002090601f016020900481019282611fd15760008555612018565b82601f10611fea57803560ff1916838001178555612018565b82800160010185558215612018579182015b82811115612017578235825591602001919060010190611ffc565b5b5090506120259190612029565b5090565b5b8082111561204257600081600090555060010161202a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61208f8161205a565b811461209a57600080fd5b50565b6000813590506120ac81612086565b92915050565b6000602082840312156120c8576120c7612050565b5b60006120d68482850161209d565b91505092915050565b60008115159050919050565b6120f4816120df565b82525050565b600060208201905061210f60008301846120eb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561214f578082015181840152602081019050612134565b8381111561215e576000848401525b50505050565b6000601f19601f8301169050919050565b600061218082612115565b61218a8185612120565b935061219a818560208601612131565b6121a381612164565b840191505092915050565b600060208201905081810360008301526121c88184612175565b905092915050565b6000819050919050565b6121e3816121d0565b81146121ee57600080fd5b50565b600081359050612200816121da565b92915050565b60006020828403121561221c5761221b612050565b5b600061222a848285016121f1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061225e82612233565b9050919050565b61226e81612253565b82525050565b60006020820190506122896000830184612265565b92915050565b61229881612253565b81146122a357600080fd5b50565b6000813590506122b58161228f565b92915050565b600080604083850312156122d2576122d1612050565b5b60006122e0858286016122a6565b92505060206122f1858286016121f1565b9150509250929050565b60008060006060848603121561231457612313612050565b5b6000612322868287016122a6565b9350506020612333868287016122a6565b9250506040612344868287016121f1565b9150509250925092565b60006020828403121561236457612363612050565b5b6000612372848285016122a6565b91505092915050565b612384816121d0565b82525050565b600060208201905061239f600083018461237b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123ca576123c96123a5565b5b8235905067ffffffffffffffff8111156123e7576123e66123aa565b5b602083019150836001820283011115612403576124026123af565b5b9250929050565b6000806020838503121561242157612420612050565b5b600083013567ffffffffffffffff81111561243f5761243e612055565b5b61244b858286016123b4565b92509250509250929050565b612460816120df565b811461246b57600080fd5b50565b60008135905061247d81612457565b92915050565b6000806040838503121561249a57612499612050565b5b60006124a8858286016122a6565b92505060206124b98582860161246e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61250082612164565b810181811067ffffffffffffffff8211171561251f5761251e6124c8565b5b80604052505050565b6000612532612046565b905061253e82826124f7565b919050565b600067ffffffffffffffff82111561255e5761255d6124c8565b5b61256782612164565b9050602081019050919050565b82818337600083830152505050565b600061259661259184612543565b612528565b9050828152602081018484840111156125b2576125b16124c3565b5b6125bd848285612574565b509392505050565b600082601f8301126125da576125d96123a5565b5b81356125ea848260208601612583565b91505092915050565b6000806000806080858703121561260d5761260c612050565b5b600061261b878288016122a6565b945050602061262c878288016122a6565b935050604061263d878288016121f1565b925050606085013567ffffffffffffffff81111561265e5761265d612055565b5b61266a878288016125c5565b91505092959194509250565b6000806040838503121561268d5761268c612050565b5b600061269b858286016122a6565b92505060206126ac858286016122a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126fd57607f821691505b60208210811415612711576127106126b6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612773602c83612120565b915061277e82612717565b604082019050919050565b600060208201905081810360008301526127a281612766565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612805602183612120565b9150612810826127a9565b604082019050919050565b60006020820190508181036000830152612834816127f8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612897603883612120565b91506128a28261283b565b604082019050919050565b600060208201905081810360008301526128c68161288a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612929603183612120565b9150612934826128cd565b604082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f4e6f74206f776e65722e00000000000000000000000000000000000000000000600082015250565b6000612995600a83612120565b91506129a08261295f565b602082019050919050565b600060208201905081810360008301526129c481612988565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a27602983612120565b9150612a32826129cb565b604082019050919050565b60006020820190508181036000830152612a5681612a1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a93602083612120565b9150612a9e82612a5d565b602082019050919050565b60006020820190508181036000830152612ac281612a86565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612b25602a83612120565b9150612b3082612ac9565b604082019050919050565b60006020820190508181036000830152612b5481612b18565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612b88816126e5565b612b928186612b5b565b94506001821660008114612bad5760018114612bbe57612bf1565b60ff19831686528186019350612bf1565b612bc785612b66565b60005b83811015612be957815481890152600182019150602081019050612bca565b838801955050505b50505092915050565b6000612c0582612115565b612c0f8185612b5b565b9350612c1f818560208601612131565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612c61600583612b5b565b9150612c6c82612c2b565b600582019050919050565b6000612c838285612b7b565b9150612c8f8284612bfa565b9150612c9a82612c54565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d02602683612120565b9150612d0d82612ca6565b604082019050919050565b60006020820190508181036000830152612d3181612cf5565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d94602c83612120565b9150612d9f82612d38565b604082019050919050565b60006020820190508181036000830152612dc381612d87565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612e26602583612120565b9150612e3182612dca565b604082019050919050565b60006020820190508181036000830152612e5581612e19565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eb8602483612120565b9150612ec382612e5c565b604082019050919050565b60006020820190508181036000830152612ee781612eab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f28826121d0565b9150612f33836121d0565b925082821015612f4657612f45612eee565b5b828203905092915050565b6000612f5c826121d0565b9150612f67836121d0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f9c57612f9b612eee565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612fdd601983612120565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061306f603283612120565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b60006130b0826121d0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130e3576130e2612eee565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613128826121d0565b9150613133836121d0565b925082613143576131426130ee565b5b828204905092915050565b6000613159826121d0565b9150613164836121d0565b925082613174576131736130ee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006131d5826131ae565b6131df81856131b9565b93506131ef818560208601612131565b6131f881612164565b840191505092915050565b60006080820190506132186000830187612265565b6132256020830186612265565b613232604083018561237b565b818103606083015261324481846131ca565b905095945050505050565b60008151905061325e81612086565b92915050565b60006020828403121561327a57613279612050565b5b60006132888482850161324f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006132c7602083612120565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613333601c83612120565b915061333e826132fd565b602082019050919050565b6000602082019050818103600083015261336281613326565b905091905056fea2646970667358221220f5afcf0e0f66d3b890a05c61e47dc5ec5da5262577f979f0469acad674a4afa064736f6c634300080a003368747470733a2f2f617069322e6f67636174732e696f2f6d657461646174612f636f6e74726163742f6e667400000000000000000000000065e7b6cd46de7b0a83bbf8af745ba9eef9e66d67
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063c87b56dd1161007c578063c87b56dd1461039b578063ccb4807b146103cb578063cfc86f7b146103e7578063e8a3d48514610405578063e985e9c514610423578063f2fde38b1461045357610158565b80638da5cb5b146102ed57806395d89b411461030b578063a0bcfc7f14610329578063a22cb46514610345578063b88d4fde14610361578063c0e727401461037d57610158565b806342842e0e1161011557806342842e0e1461022f57806342966c681461024b5780636352211e14610267578063706210f71461029757806370a08231146102b3578063715018a6146102e357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806323b872dd146101f757806340c10f1914610213575b600080fd5b610177600480360381019061017291906120b2565b61046f565b60405161018491906120fa565b60405180910390f35b610195610551565b6040516101a291906121ae565b60405180910390f35b6101c560048036038101906101c09190612206565b6105e3565b6040516101d29190612274565b60405180910390f35b6101f560048036038101906101f091906122bb565b610668565b005b610211600480360381019061020c91906122fb565b610780565b005b61022d600480360381019061022891906122bb565b6107e0565b005b610249600480360381019061024491906122fb565b61087e565b005b61026560048036038101906102609190612206565b61089e565b005b610281600480360381019061027c9190612206565b61093a565b60405161028e9190612274565b60405180910390f35b6102b160048036038101906102ac919061234e565b6109ec565b005b6102cd60048036038101906102c8919061234e565b610aac565b6040516102da919061238a565b60405180910390f35b6102eb610b64565b005b6102f5610bec565b6040516103029190612274565b60405180910390f35b610313610c16565b60405161032091906121ae565b60405180910390f35b610343600480360381019061033e919061240a565b610ca8565b005b61035f600480360381019061035a9190612483565b610d3a565b005b61037b600480360381019061037691906125f3565b610d50565b005b610385610db2565b60405161039291906121ae565b60405180910390f35b6103b560048036038101906103b09190612206565b610e40565b6040516103c291906121ae565b60405180910390f35b6103e560048036038101906103e0919061240a565b610e74565b005b6103ef610f06565b6040516103fc91906121ae565b60405180910390f35b61040d610f94565b60405161041a91906121ae565b60405180910390f35b61043d60048036038101906104389190612676565b611026565b60405161044a91906120fa565b60405180910390f35b61046d6004803603810190610468919061234e565b6110ba565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061053a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061054a5750610549826111b2565b5b9050919050565b606060008054610560906126e5565b80601f016020809104026020016040519081016040528092919081815260200182805461058c906126e5565b80156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b5050505050905090565b60006105ee8261121c565b61062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612789565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106738261093a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db9061281b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610703611288565b73ffffffffffffffffffffffffffffffffffffffff16148061073257506107318161072c611288565b611026565b5b610771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610768906128ad565b60405180910390fd5b61077b8383611290565b505050565b61079161078b611288565b82611349565b6107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c79061293f565b60405180910390fd5b6107db838383611427565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610867906129ab565b60405180910390fd5b61087a828261168e565b5050565b61089983838360405180602001604052806000815250610d50565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906129ab565b60405180910390fd5b610937816116ac565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90612a3d565b60405180910390fd5b80915050919050565b6109f4611288565b73ffffffffffffffffffffffffffffffffffffffff16610a12610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f90612aa9565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490612b3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b6c611288565b73ffffffffffffffffffffffffffffffffffffffff16610b8a610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd790612aa9565b60405180910390fd5b610bea60006117c9565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c25906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906126e5565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b5050505050905090565b610cb0611288565b73ffffffffffffffffffffffffffffffffffffffff16610cce610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90612aa9565b60405180910390fd5b818160079190610d35929190611fa3565b505050565b610d4c610d45611288565b838361188f565b5050565b610d61610d5b611288565b83611349565b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d979061293f565b60405180910390fd5b610dac848484846119fc565b50505050565b60098054610dbf906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb906126e5565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b60606007610e4d83611a58565b604051602001610e5e929190612c77565b6040516020818303038152906040529050919050565b610e7c611288565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610bec565b73ffffffffffffffffffffffffffffffffffffffff1614610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790612aa9565b60405180910390fd5b818160099190610f01929190611fa3565b505050565b60078054610f13906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3f906126e5565b8015610f8c5780601f10610f6157610100808354040283529160200191610f8c565b820191906000526020600020905b815481529060010190602001808311610f6f57829003601f168201915b505050505081565b606060098054610fa3906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcf906126e5565b801561101c5780601f10610ff15761010080835404028352916020019161101c565b820191906000526020600020905b815481529060010190602001808311610fff57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110c2611288565b73ffffffffffffffffffffffffffffffffffffffff166110e0610bec565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90612aa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90612d18565b60405180910390fd5b6111af816117c9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113038361093a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113548261121c565b611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90612daa565b60405180910390fd5b600061139e8361093a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061140d57508373ffffffffffffffffffffffffffffffffffffffff166113f5846105e3565b73ffffffffffffffffffffffffffffffffffffffff16145b8061141e575061141d8185611026565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166114478261093a565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490612e3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612ece565b60405180910390fd5b611518838383611bb9565b611523600082611290565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115739190612f1d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ca9190612f51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611689838383611bbe565b505050565b6116a8828260405180602001604052806000815250611bc3565b5050565b60006116b78261093a565b90506116c581600084611bb9565b6116d0600083611290565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117209190612f1d565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117c581600084611bbe565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590612ff3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ef91906120fa565b60405180910390a3505050565b611a07848484611427565b611a1384848484611c1e565b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613085565b60405180910390fd5b50505050565b60606000821415611aa0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bb4565b600082905060005b60008214611ad2578080611abb906130a5565b915050600a82611acb919061311d565b9150611aa8565b60008167ffffffffffffffff811115611aee57611aed6124c8565b5b6040519080825280601f01601f191660200182016040528015611b205781602001600182028036833780820191505090505b5090505b60008514611bad57600182611b399190612f1d565b9150600a85611b48919061314e565b6030611b549190612f51565b60f81b818381518110611b6a57611b6961317f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ba6919061311d565b9450611b24565b8093505050505b919050565b505050565b505050565b611bcd8383611da6565b611bda6000848484611c1e565b611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1090613085565b60405180910390fd5b505050565b6000611c3f8473ffffffffffffffffffffffffffffffffffffffff16611f80565b15611d99578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c68611288565b8786866040518563ffffffff1660e01b8152600401611c8a9493929190613203565b6020604051808303816000875af1925050508015611cc657506040513d601f19601f82011682018060405250810190611cc39190613264565b60015b611d49573d8060008114611cf6576040519150601f19603f3d011682016040523d82523d6000602084013e611cfb565b606091505b50600081511415611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613085565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611d9e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d906132dd565b60405180910390fd5b611e1f8161121c565b15611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613349565b60405180910390fd5b611e6b60008383611bb9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ebb9190612f51565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f7c60008383611bbe565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611faf906126e5565b90600052602060002090601f016020900481019282611fd15760008555612018565b82601f10611fea57803560ff1916838001178555612018565b82800160010185558215612018579182015b82811115612017578235825591602001919060010190611ffc565b5b5090506120259190612029565b5090565b5b8082111561204257600081600090555060010161202a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61208f8161205a565b811461209a57600080fd5b50565b6000813590506120ac81612086565b92915050565b6000602082840312156120c8576120c7612050565b5b60006120d68482850161209d565b91505092915050565b60008115159050919050565b6120f4816120df565b82525050565b600060208201905061210f60008301846120eb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561214f578082015181840152602081019050612134565b8381111561215e576000848401525b50505050565b6000601f19601f8301169050919050565b600061218082612115565b61218a8185612120565b935061219a818560208601612131565b6121a381612164565b840191505092915050565b600060208201905081810360008301526121c88184612175565b905092915050565b6000819050919050565b6121e3816121d0565b81146121ee57600080fd5b50565b600081359050612200816121da565b92915050565b60006020828403121561221c5761221b612050565b5b600061222a848285016121f1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061225e82612233565b9050919050565b61226e81612253565b82525050565b60006020820190506122896000830184612265565b92915050565b61229881612253565b81146122a357600080fd5b50565b6000813590506122b58161228f565b92915050565b600080604083850312156122d2576122d1612050565b5b60006122e0858286016122a6565b92505060206122f1858286016121f1565b9150509250929050565b60008060006060848603121561231457612313612050565b5b6000612322868287016122a6565b9350506020612333868287016122a6565b9250506040612344868287016121f1565b9150509250925092565b60006020828403121561236457612363612050565b5b6000612372848285016122a6565b91505092915050565b612384816121d0565b82525050565b600060208201905061239f600083018461237b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126123ca576123c96123a5565b5b8235905067ffffffffffffffff8111156123e7576123e66123aa565b5b602083019150836001820283011115612403576124026123af565b5b9250929050565b6000806020838503121561242157612420612050565b5b600083013567ffffffffffffffff81111561243f5761243e612055565b5b61244b858286016123b4565b92509250509250929050565b612460816120df565b811461246b57600080fd5b50565b60008135905061247d81612457565b92915050565b6000806040838503121561249a57612499612050565b5b60006124a8858286016122a6565b92505060206124b98582860161246e565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61250082612164565b810181811067ffffffffffffffff8211171561251f5761251e6124c8565b5b80604052505050565b6000612532612046565b905061253e82826124f7565b919050565b600067ffffffffffffffff82111561255e5761255d6124c8565b5b61256782612164565b9050602081019050919050565b82818337600083830152505050565b600061259661259184612543565b612528565b9050828152602081018484840111156125b2576125b16124c3565b5b6125bd848285612574565b509392505050565b600082601f8301126125da576125d96123a5565b5b81356125ea848260208601612583565b91505092915050565b6000806000806080858703121561260d5761260c612050565b5b600061261b878288016122a6565b945050602061262c878288016122a6565b935050604061263d878288016121f1565b925050606085013567ffffffffffffffff81111561265e5761265d612055565b5b61266a878288016125c5565b91505092959194509250565b6000806040838503121561268d5761268c612050565b5b600061269b858286016122a6565b92505060206126ac858286016122a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126fd57607f821691505b60208210811415612711576127106126b6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612773602c83612120565b915061277e82612717565b604082019050919050565b600060208201905081810360008301526127a281612766565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612805602183612120565b9150612810826127a9565b604082019050919050565b60006020820190508181036000830152612834816127f8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612897603883612120565b91506128a28261283b565b604082019050919050565b600060208201905081810360008301526128c68161288a565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612929603183612120565b9150612934826128cd565b604082019050919050565b600060208201905081810360008301526129588161291c565b9050919050565b7f4e6f74206f776e65722e00000000000000000000000000000000000000000000600082015250565b6000612995600a83612120565b91506129a08261295f565b602082019050919050565b600060208201905081810360008301526129c481612988565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612a27602983612120565b9150612a32826129cb565b604082019050919050565b60006020820190508181036000830152612a5681612a1a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a93602083612120565b9150612a9e82612a5d565b602082019050919050565b60006020820190508181036000830152612ac281612a86565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612b25602a83612120565b9150612b3082612ac9565b604082019050919050565b60006020820190508181036000830152612b5481612b18565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612b88816126e5565b612b928186612b5b565b94506001821660008114612bad5760018114612bbe57612bf1565b60ff19831686528186019350612bf1565b612bc785612b66565b60005b83811015612be957815481890152600182019150602081019050612bca565b838801955050505b50505092915050565b6000612c0582612115565b612c0f8185612b5b565b9350612c1f818560208601612131565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612c61600583612b5b565b9150612c6c82612c2b565b600582019050919050565b6000612c838285612b7b565b9150612c8f8284612bfa565b9150612c9a82612c54565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d02602683612120565b9150612d0d82612ca6565b604082019050919050565b60006020820190508181036000830152612d3181612cf5565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d94602c83612120565b9150612d9f82612d38565b604082019050919050565b60006020820190508181036000830152612dc381612d87565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612e26602583612120565b9150612e3182612dca565b604082019050919050565b60006020820190508181036000830152612e5581612e19565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eb8602483612120565b9150612ec382612e5c565b604082019050919050565b60006020820190508181036000830152612ee781612eab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f28826121d0565b9150612f33836121d0565b925082821015612f4657612f45612eee565b5b828203905092915050565b6000612f5c826121d0565b9150612f67836121d0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f9c57612f9b612eee565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000612fdd601983612120565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061306f603283612120565b915061307a82613013565b604082019050919050565b6000602082019050818103600083015261309e81613062565b9050919050565b60006130b0826121d0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130e3576130e2612eee565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613128826121d0565b9150613133836121d0565b925082613143576131426130ee565b5b828204905092915050565b6000613159826121d0565b9150613164836121d0565b925082613174576131736130ee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006131d5826131ae565b6131df81856131b9565b93506131ef818560208601612131565b6131f881612164565b840191505092915050565b60006080820190506132186000830187612265565b6132256020830186612265565b613232604083018561237b565b818103606083015261324481846131ca565b905095945050505050565b60008151905061325e81612086565b92915050565b60006020828403121561327a57613279612050565b5b60006132888482850161324f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006132c7602083612120565b91506132d282613291565b602082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613333601c83612120565b915061333e826132fd565b602082019050919050565b6000602082019050818103600083015261336281613326565b905091905056fea2646970667358221220f5afcf0e0f66d3b890a05c61e47dc5ec5da5262577f979f0469acad674a4afa064736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000065e7b6cd46de7b0a83bbf8af745ba9eef9e66d67
-----Decoded View---------------
Arg [0] : ownerContractAddress (address): 0x65e7B6CD46dE7b0a83BbF8af745Ba9eef9e66D67
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000065e7b6cd46de7b0a83bbf8af745ba9eef9e66d67
Deployed Bytecode Sourcemap
37320:1325:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24109:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26613:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26136:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27363:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37974:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27773:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38124:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24748:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37721:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24478:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25223:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37860:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26906:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28029:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37505:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38254:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38535:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37365:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38429:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27132:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24109:305;24211:4;24263:25;24248:40;;;:11;:40;;;;:105;;;;24320:33;24305:48;;;:11;:48;;;;24248:105;:158;;;;24370:36;24394:11;24370:23;:36::i;:::-;24248:158;24228:178;;24109:305;;;:::o;25054:100::-;25108:13;25141:5;25134:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25054:100;:::o;26613:221::-;26689:7;26717:16;26725:7;26717;:16::i;:::-;26709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26802:15;:24;26818:7;26802:24;;;;;;;;;;;;;;;;;;;;;26795:31;;26613:221;;;:::o;26136:411::-;26217:13;26233:23;26248:7;26233:14;:23::i;:::-;26217:39;;26281:5;26275:11;;:2;:11;;;;26267:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26375:5;26359:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26384:37;26401:5;26408:12;:10;:12::i;:::-;26384:16;:37::i;:::-;26359:62;26337:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26518:21;26527:2;26531:7;26518:8;:21::i;:::-;26206:341;26136:411;;:::o;27363:339::-;27558:41;27577:12;:10;:12::i;:::-;27591:7;27558:18;:41::i;:::-;27550:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27666:28;27676:4;27682:2;27686:7;27666:9;:28::i;:::-;27363:339;;;:::o;37974:142::-;38051:14;;;;;;;;;;;38037:28;;:10;:28;;;38029:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38091:17;38101:2;38105;38091:9;:17::i;:::-;37974:142;;:::o;27773:185::-;27911:39;27928:4;27934:2;27938:7;27911:39;;;;;;;;;;;;:16;:39::i;:::-;27773:185;;;:::o;38124:122::-;38189:14;;;;;;;;;;;38175:28;;:10;:28;;;38167:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38229:9;38235:2;38229:5;:9::i;:::-;38124:122;:::o;24748:239::-;24820:7;24840:13;24856:7;:16;24864:7;24856:16;;;;;;;;;;;;;;;;;;;;;24840:32;;24908:1;24891:19;;:5;:19;;;;24883:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24974:5;24967:12;;;24748:239;;;:::o;37721:131::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37824:20:::1;37807:14;;:37;;;;;;;;;;;;;;;;;;37721:131:::0;:::o;24478:208::-;24550:7;24595:1;24578:19;;:5;:19;;;;24570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24662:9;:16;24672:5;24662:16;;;;;;;;;;;;;;;;24655:23;;24478:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25223:104::-;25279:13;25312:7;25305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25223:104;:::o;37860:106::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37951:7:::1;;37935:13;:23;;;;;;;:::i;:::-;;37860:106:::0;;:::o;26906:155::-;27001:52;27020:12;:10;:12::i;:::-;27034:8;27044;27001:18;:52::i;:::-;26906:155;;:::o;28029:328::-;28204:41;28223:12;:10;:12::i;:::-;28237:7;28204:18;:41::i;:::-;28196:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28310:39;28324:4;28330:2;28334:7;28343:5;28310:13;:39::i;:::-;28029:328;;;;:::o;37505:75::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38254:167::-;38320:13;38371;38386:19;:8;:17;:19::i;:::-;38354:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38340:76;;38254:167;;;:::o;38535:107::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38628:6:::1;;38613:12;:21;;;;;;;:::i;:::-;;38535:107:::0;;:::o;37365:64::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38429:97::-;38473:13;38506:12;38499:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38429:97;:::o;27132:164::-;27229:4;27253:18;:25;27272:5;27253:25;;;;;;;;;;;;;;;:35;27279:8;27253:35;;;;;;;;;;;;;;;;;;;;;;;;;27246:42;;27132:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;29867:127::-;29932:4;29984:1;29956:30;;:7;:16;29964:7;29956:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29949:37;;29867:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34013:174::-;34115:2;34088:15;:24;34104:7;34088:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34171:7;34167:2;34133:46;;34142:23;34157:7;34142:14;:23::i;:::-;34133:46;;;;;;;;;;;;34013:174;;:::o;30161:348::-;30254:4;30279:16;30287:7;30279;:16::i;:::-;30271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30355:13;30371:23;30386:7;30371:14;:23::i;:::-;30355:39;;30424:5;30413:16;;:7;:16;;;:51;;;;30457:7;30433:31;;:20;30445:7;30433:11;:20::i;:::-;:31;;;30413:51;:87;;;;30468:32;30485:5;30492:7;30468:16;:32::i;:::-;30413:87;30405:96;;;30161:348;;;;:::o;33270:625::-;33429:4;33402:31;;:23;33417:7;33402:14;:23::i;:::-;:31;;;33394:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33508:1;33494:16;;:2;:16;;;;33486:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:39;33585:4;33591:2;33595:7;33564:20;:39::i;:::-;33668:29;33685:1;33689:7;33668:8;:29::i;:::-;33729:1;33710:9;:15;33720:4;33710:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33758:1;33741:9;:13;33751:2;33741:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33789:2;33770:7;:16;33778:7;33770:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33828:7;33824:2;33809:27;;33818:4;33809:27;;;;;;;;;;;;33849:38;33869:4;33875:2;33879:7;33849:19;:38::i;:::-;33270:625;;;:::o;30851:110::-;30927:26;30937:2;30941:7;30927:26;;;;;;;;;;;;:9;:26::i;:::-;30851:110;;:::o;32513:420::-;32573:13;32589:23;32604:7;32589:14;:23::i;:::-;32573:39;;32625:48;32646:5;32661:1;32665:7;32625:20;:48::i;:::-;32714:29;32731:1;32735:7;32714:8;:29::i;:::-;32776:1;32756:9;:16;32766:5;32756:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32795:7;:16;32803:7;32795:16;;;;;;;;;;;;32788:23;;;;;;;;;;;32857:7;32853:1;32829:36;;32838:5;32829:36;;;;;;;;;;;;32878:47;32898:5;32913:1;32917:7;32878:19;:47::i;:::-;32562:371;32513:420;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;34329:315::-;34484:8;34475:17;;:5;:17;;;;34467:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34571:8;34533:18;:25;34552:5;34533:25;;;;;;;;;;;;;;;:35;34559:8;34533:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34617:8;34595:41;;34610:5;34595:41;;;34627:8;34595:41;;;;;;:::i;:::-;;;;;;;;34329:315;;;:::o;29239:::-;29396:28;29406:4;29412:2;29416:7;29396:9;:28::i;:::-;29443:48;29466:4;29472:2;29476:7;29485:5;29443:22;:48::i;:::-;29435:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29239:315;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;36580:126::-;;;;:::o;37091:125::-;;;;:::o;31188:321::-;31318:18;31324:2;31328:7;31318:5;:18::i;:::-;31369:54;31400:1;31404:2;31408:7;31417:5;31369:22;:54::i;:::-;31347:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31188:321;;;:::o;35209:799::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:620;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35680:1;35663:6;:13;:18;35659:272;;;35706:60;;;;;;;;;;:::i;:::-;;;;;;;;35659:272;35881:6;35875:13;35866:6;35862:2;35858:15;35851:38;35417:529;35554:41;;;35544:51;;;:6;:51;;;;35537:58;;;;;35381:620;35985:4;35978:11;;35209:799;;;;;;;:::o;31845:439::-;31939:1;31925:16;;:2;:16;;;;31917:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31998:16;32006:7;31998;:16::i;:::-;31997:17;31989:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:45;32089:1;32093:2;32097:7;32060:20;:45::i;:::-;32135:1;32118:9;:13;32128:2;32118:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32166:2;32147:7;:16;32155:7;32147:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32211:7;32207:2;32186:33;;32203:1;32186:33;;;;;;;;;;;;32232:44;32260:1;32264:2;32268:7;32232:19;:44::i;:::-;31845:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:329::-;5622:6;5671:2;5659:9;5650:7;5646:23;5642:32;5639:119;;;5677:79;;:::i;:::-;5639:119;5797:1;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5768:117;5563:329;;;;:::o;5898:118::-;5985:24;6003:5;5985:24;:::i;:::-;5980:3;5973:37;5898:118;;:::o;6022:222::-;6115:4;6153:2;6142:9;6138:18;6130:26;;6166:71;6234:1;6223:9;6219:17;6210:6;6166:71;:::i;:::-;6022:222;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:117;6605:1;6602;6595:12;6633:553;6691:8;6701:6;6751:3;6744:4;6736:6;6732:17;6728:27;6718:122;;6759:79;;:::i;:::-;6718:122;6872:6;6859:20;6849:30;;6902:18;6894:6;6891:30;6888:117;;;6924:79;;:::i;:::-;6888:117;7038:4;7030:6;7026:17;7014:29;;7092:3;7084:4;7076:6;7072:17;7062:8;7058:32;7055:41;7052:128;;;7099:79;;:::i;:::-;7052:128;6633:553;;;;;:::o;7192:529::-;7263:6;7271;7320:2;7308:9;7299:7;7295:23;7291:32;7288:119;;;7326:79;;:::i;:::-;7288:119;7474:1;7463:9;7459:17;7446:31;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:65;7696:7;7687:6;7676:9;7672:22;7639:65;:::i;:::-;7621:83;;;;7417:297;7192:529;;;;;:::o;7727:116::-;7797:21;7812:5;7797:21;:::i;:::-;7790:5;7787:32;7777:60;;7833:1;7830;7823:12;7777:60;7727:116;:::o;7849:133::-;7892:5;7930:6;7917:20;7908:29;;7946:30;7970:5;7946:30;:::i;:::-;7849:133;;;;:::o;7988:468::-;8053:6;8061;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8236:1;8261:53;8306:7;8297:6;8286:9;8282:22;8261:53;:::i;:::-;8251:63;;8207:117;8363:2;8389:50;8431:7;8422:6;8411:9;8407:22;8389:50;:::i;:::-;8379:60;;8334:115;7988:468;;;;;:::o;8462:117::-;8571:1;8568;8561:12;8585:180;8633:77;8630:1;8623:88;8730:4;8727:1;8720:15;8754:4;8751:1;8744:15;8771:281;8854:27;8876:4;8854:27;:::i;:::-;8846:6;8842:40;8984:6;8972:10;8969:22;8948:18;8936:10;8933:34;8930:62;8927:88;;;8995:18;;:::i;:::-;8927:88;9035:10;9031:2;9024:22;8814:238;8771:281;;:::o;9058:129::-;9092:6;9119:20;;:::i;:::-;9109:30;;9148:33;9176:4;9168:6;9148:33;:::i;:::-;9058:129;;;:::o;9193:307::-;9254:4;9344:18;9336:6;9333:30;9330:56;;;9366:18;;:::i;:::-;9330:56;9404:29;9426:6;9404:29;:::i;:::-;9396:37;;9488:4;9482;9478:15;9470:23;;9193:307;;;:::o;9506:154::-;9590:6;9585:3;9580;9567:30;9652:1;9643:6;9638:3;9634:16;9627:27;9506:154;;;:::o;9666:410::-;9743:5;9768:65;9784:48;9825:6;9784:48;:::i;:::-;9768:65;:::i;:::-;9759:74;;9856:6;9849:5;9842:21;9894:4;9887:5;9883:16;9932:3;9923:6;9918:3;9914:16;9911:25;9908:112;;;9939:79;;:::i;:::-;9908:112;10029:41;10063:6;10058:3;10053;10029:41;:::i;:::-;9749:327;9666:410;;;;;:::o;10095:338::-;10150:5;10199:3;10192:4;10184:6;10180:17;10176:27;10166:122;;10207:79;;:::i;:::-;10166:122;10324:6;10311:20;10349:78;10423:3;10415:6;10408:4;10400:6;10396:17;10349:78;:::i;:::-;10340:87;;10156:277;10095:338;;;;:::o;10439:943::-;10534:6;10542;10550;10558;10607:3;10595:9;10586:7;10582:23;10578:33;10575:120;;;10614:79;;:::i;:::-;10575:120;10734:1;10759:53;10804:7;10795:6;10784:9;10780:22;10759:53;:::i;:::-;10749:63;;10705:117;10861:2;10887:53;10932:7;10923:6;10912:9;10908:22;10887:53;:::i;:::-;10877:63;;10832:118;10989:2;11015:53;11060:7;11051:6;11040:9;11036:22;11015:53;:::i;:::-;11005:63;;10960:118;11145:2;11134:9;11130:18;11117:32;11176:18;11168:6;11165:30;11162:117;;;11198:79;;:::i;:::-;11162:117;11303:62;11357:7;11348:6;11337:9;11333:22;11303:62;:::i;:::-;11293:72;;11088:287;10439:943;;;;;;;:::o;11388:474::-;11456:6;11464;11513:2;11501:9;11492:7;11488:23;11484:32;11481:119;;;11519:79;;:::i;:::-;11481:119;11639:1;11664:53;11709:7;11700:6;11689:9;11685:22;11664:53;:::i;:::-;11654:63;;11610:117;11766:2;11792:53;11837:7;11828:6;11817:9;11813:22;11792:53;:::i;:::-;11782:63;;11737:118;11388:474;;;;;:::o;11868:180::-;11916:77;11913:1;11906:88;12013:4;12010:1;12003:15;12037:4;12034:1;12027:15;12054:320;12098:6;12135:1;12129:4;12125:12;12115:22;;12182:1;12176:4;12172:12;12203:18;12193:81;;12259:4;12251:6;12247:17;12237:27;;12193:81;12321:2;12313:6;12310:14;12290:18;12287:38;12284:84;;;12340:18;;:::i;:::-;12284:84;12105:269;12054:320;;;:::o;12380:231::-;12520:34;12516:1;12508:6;12504:14;12497:58;12589:14;12584:2;12576:6;12572:15;12565:39;12380:231;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12617:366;;;:::o;12989:419::-;13155:4;13193:2;13182:9;13178:18;13170:26;;13242:9;13236:4;13232:20;13228:1;13217:9;13213:17;13206:47;13270:131;13396:4;13270:131;:::i;:::-;13262:139;;12989:419;;;:::o;13414:220::-;13554:34;13550:1;13542:6;13538:14;13531:58;13623:3;13618:2;13610:6;13606:15;13599:28;13414:220;:::o;13640:366::-;13782:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13879:93;13968:3;13879:93;:::i;:::-;13997:2;13992:3;13988:12;13981:19;;13640:366;;;:::o;14012:419::-;14178:4;14216:2;14205:9;14201:18;14193:26;;14265:9;14259:4;14255:20;14251:1;14240:9;14236:17;14229:47;14293:131;14419:4;14293:131;:::i;:::-;14285:139;;14012:419;;;:::o;14437:243::-;14577:34;14573:1;14565:6;14561:14;14554:58;14646:26;14641:2;14633:6;14629:15;14622:51;14437:243;:::o;14686:366::-;14828:3;14849:67;14913:2;14908:3;14849:67;:::i;:::-;14842:74;;14925:93;15014:3;14925:93;:::i;:::-;15043:2;15038:3;15034:12;15027:19;;14686:366;;;:::o;15058:419::-;15224:4;15262:2;15251:9;15247:18;15239:26;;15311:9;15305:4;15301:20;15297:1;15286:9;15282:17;15275:47;15339:131;15465:4;15339:131;:::i;:::-;15331:139;;15058:419;;;:::o;15483:236::-;15623:34;15619:1;15611:6;15607:14;15600:58;15692:19;15687:2;15679:6;15675:15;15668:44;15483:236;:::o;15725:366::-;15867:3;15888:67;15952:2;15947:3;15888:67;:::i;:::-;15881:74;;15964:93;16053:3;15964:93;:::i;:::-;16082:2;16077:3;16073:12;16066:19;;15725:366;;;:::o;16097:419::-;16263:4;16301:2;16290:9;16286:18;16278:26;;16350:9;16344:4;16340:20;16336:1;16325:9;16321:17;16314:47;16378:131;16504:4;16378:131;:::i;:::-;16370:139;;16097:419;;;:::o;16522:160::-;16662:12;16658:1;16650:6;16646:14;16639:36;16522:160;:::o;16688:366::-;16830:3;16851:67;16915:2;16910:3;16851:67;:::i;:::-;16844:74;;16927:93;17016:3;16927:93;:::i;:::-;17045:2;17040:3;17036:12;17029:19;;16688:366;;;:::o;17060:419::-;17226:4;17264:2;17253:9;17249:18;17241:26;;17313:9;17307:4;17303:20;17299:1;17288:9;17284:17;17277:47;17341:131;17467:4;17341:131;:::i;:::-;17333:139;;17060:419;;;:::o;17485:228::-;17625:34;17621:1;17613:6;17609:14;17602:58;17694:11;17689:2;17681:6;17677:15;17670:36;17485:228;:::o;17719:366::-;17861:3;17882:67;17946:2;17941:3;17882:67;:::i;:::-;17875:74;;17958:93;18047:3;17958:93;:::i;:::-;18076:2;18071:3;18067:12;18060:19;;17719:366;;;:::o;18091:419::-;18257:4;18295:2;18284:9;18280:18;18272:26;;18344:9;18338:4;18334:20;18330:1;18319:9;18315:17;18308:47;18372:131;18498:4;18372:131;:::i;:::-;18364:139;;18091:419;;;:::o;18516:182::-;18656:34;18652:1;18644:6;18640:14;18633:58;18516:182;:::o;18704:366::-;18846:3;18867:67;18931:2;18926:3;18867:67;:::i;:::-;18860:74;;18943:93;19032:3;18943:93;:::i;:::-;19061:2;19056:3;19052:12;19045:19;;18704:366;;;:::o;19076:419::-;19242:4;19280:2;19269:9;19265:18;19257:26;;19329:9;19323:4;19319:20;19315:1;19304:9;19300:17;19293:47;19357:131;19483:4;19357:131;:::i;:::-;19349:139;;19076:419;;;:::o;19501:229::-;19641:34;19637:1;19629:6;19625:14;19618:58;19710:12;19705:2;19697:6;19693:15;19686:37;19501:229;:::o;19736:366::-;19878:3;19899:67;19963:2;19958:3;19899:67;:::i;:::-;19892:74;;19975:93;20064:3;19975:93;:::i;:::-;20093:2;20088:3;20084:12;20077:19;;19736:366;;;:::o;20108:419::-;20274:4;20312:2;20301:9;20297:18;20289:26;;20361:9;20355:4;20351:20;20347:1;20336:9;20332:17;20325:47;20389:131;20515:4;20389:131;:::i;:::-;20381:139;;20108:419;;;:::o;20533:148::-;20635:11;20672:3;20657:18;;20533:148;;;;:::o;20687:141::-;20736:4;20759:3;20751:11;;20782:3;20779:1;20772:14;20816:4;20813:1;20803:18;20795:26;;20687:141;;;:::o;20858:845::-;20961:3;20998:5;20992:12;21027:36;21053:9;21027:36;:::i;:::-;21079:89;21161:6;21156:3;21079:89;:::i;:::-;21072:96;;21199:1;21188:9;21184:17;21215:1;21210:137;;;;21361:1;21356:341;;;;21177:520;;21210:137;21294:4;21290:9;21279;21275:25;21270:3;21263:38;21330:6;21325:3;21321:16;21314:23;;21210:137;;21356:341;21423:38;21455:5;21423:38;:::i;:::-;21483:1;21497:154;21511:6;21508:1;21505:13;21497:154;;;21585:7;21579:14;21575:1;21570:3;21566:11;21559:35;21635:1;21626:7;21622:15;21611:26;;21533:4;21530:1;21526:12;21521:17;;21497:154;;;21680:6;21675:3;21671:16;21664:23;;21363:334;;21177:520;;20965:738;;20858:845;;;;:::o;21709:377::-;21815:3;21843:39;21876:5;21843:39;:::i;:::-;21898:89;21980:6;21975:3;21898:89;:::i;:::-;21891:96;;21996:52;22041:6;22036:3;22029:4;22022:5;22018:16;21996:52;:::i;:::-;22073:6;22068:3;22064:16;22057:23;;21819:267;21709:377;;;;:::o;22092:155::-;22232:7;22228:1;22220:6;22216:14;22209:31;22092:155;:::o;22253:400::-;22413:3;22434:84;22516:1;22511:3;22434:84;:::i;:::-;22427:91;;22527:93;22616:3;22527:93;:::i;:::-;22645:1;22640:3;22636:11;22629:18;;22253:400;;;:::o;22659:695::-;22937:3;22959:92;23047:3;23038:6;22959:92;:::i;:::-;22952:99;;23068:95;23159:3;23150:6;23068:95;:::i;:::-;23061:102;;23180:148;23324:3;23180:148;:::i;:::-;23173:155;;23345:3;23338:10;;22659:695;;;;;:::o;23360:225::-;23500:34;23496:1;23488:6;23484:14;23477:58;23569:8;23564:2;23556:6;23552:15;23545:33;23360:225;:::o;23591:366::-;23733:3;23754:67;23818:2;23813:3;23754:67;:::i;:::-;23747:74;;23830:93;23919:3;23830:93;:::i;:::-;23948:2;23943:3;23939:12;23932:19;;23591:366;;;:::o;23963:419::-;24129:4;24167:2;24156:9;24152:18;24144:26;;24216:9;24210:4;24206:20;24202:1;24191:9;24187:17;24180:47;24244:131;24370:4;24244:131;:::i;:::-;24236:139;;23963:419;;;:::o;24388:231::-;24528:34;24524:1;24516:6;24512:14;24505:58;24597:14;24592:2;24584:6;24580:15;24573:39;24388:231;:::o;24625:366::-;24767:3;24788:67;24852:2;24847:3;24788:67;:::i;:::-;24781:74;;24864:93;24953:3;24864:93;:::i;:::-;24982:2;24977:3;24973:12;24966:19;;24625:366;;;:::o;24997:419::-;25163:4;25201:2;25190:9;25186:18;25178:26;;25250:9;25244:4;25240:20;25236:1;25225:9;25221:17;25214:47;25278:131;25404:4;25278:131;:::i;:::-;25270:139;;24997:419;;;:::o;25422:224::-;25562:34;25558:1;25550:6;25546:14;25539:58;25631:7;25626:2;25618:6;25614:15;25607:32;25422:224;:::o;25652:366::-;25794:3;25815:67;25879:2;25874:3;25815:67;:::i;:::-;25808:74;;25891:93;25980:3;25891:93;:::i;:::-;26009:2;26004:3;26000:12;25993:19;;25652:366;;;:::o;26024:419::-;26190:4;26228:2;26217:9;26213:18;26205:26;;26277:9;26271:4;26267:20;26263:1;26252:9;26248:17;26241:47;26305:131;26431:4;26305:131;:::i;:::-;26297:139;;26024:419;;;:::o;26449:223::-;26589:34;26585:1;26577:6;26573:14;26566:58;26658:6;26653:2;26645:6;26641:15;26634:31;26449:223;:::o;26678:366::-;26820:3;26841:67;26905:2;26900:3;26841:67;:::i;:::-;26834:74;;26917:93;27006:3;26917:93;:::i;:::-;27035:2;27030:3;27026:12;27019:19;;26678:366;;;:::o;27050:419::-;27216:4;27254:2;27243:9;27239:18;27231:26;;27303:9;27297:4;27293:20;27289:1;27278:9;27274:17;27267:47;27331:131;27457:4;27331:131;:::i;:::-;27323:139;;27050:419;;;:::o;27475:180::-;27523:77;27520:1;27513:88;27620:4;27617:1;27610:15;27644:4;27641:1;27634:15;27661:191;27701:4;27721:20;27739:1;27721:20;:::i;:::-;27716:25;;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27794:1;27791;27788:8;27785:34;;;27799:18;;:::i;:::-;27785:34;27844:1;27841;27837:9;27829:17;;27661:191;;;;:::o;27858:305::-;27898:3;27917:20;27935:1;27917:20;:::i;:::-;27912:25;;27951:20;27969:1;27951:20;:::i;:::-;27946:25;;28105:1;28037:66;28033:74;28030:1;28027:81;28024:107;;;28111:18;;:::i;:::-;28024:107;28155:1;28152;28148:9;28141:16;;27858:305;;;;:::o;28169:175::-;28309:27;28305:1;28297:6;28293:14;28286:51;28169:175;:::o;28350:366::-;28492:3;28513:67;28577:2;28572:3;28513:67;:::i;:::-;28506:74;;28589:93;28678:3;28589:93;:::i;:::-;28707:2;28702:3;28698:12;28691:19;;28350:366;;;:::o;28722:419::-;28888:4;28926:2;28915:9;28911:18;28903:26;;28975:9;28969:4;28965:20;28961:1;28950:9;28946:17;28939:47;29003:131;29129:4;29003:131;:::i;:::-;28995:139;;28722:419;;;:::o;29147:237::-;29287:34;29283:1;29275:6;29271:14;29264:58;29356:20;29351:2;29343:6;29339:15;29332:45;29147:237;:::o;29390:366::-;29532:3;29553:67;29617:2;29612:3;29553:67;:::i;:::-;29546:74;;29629:93;29718:3;29629:93;:::i;:::-;29747:2;29742:3;29738:12;29731:19;;29390:366;;;:::o;29762:419::-;29928:4;29966:2;29955:9;29951:18;29943:26;;30015:9;30009:4;30005:20;30001:1;29990:9;29986:17;29979:47;30043:131;30169:4;30043:131;:::i;:::-;30035:139;;29762:419;;;:::o;30187:233::-;30226:3;30249:24;30267:5;30249:24;:::i;:::-;30240:33;;30295:66;30288:5;30285:77;30282:103;;;30365:18;;:::i;:::-;30282:103;30412:1;30405:5;30401:13;30394:20;;30187:233;;;:::o;30426:180::-;30474:77;30471:1;30464:88;30571:4;30568:1;30561:15;30595:4;30592:1;30585:15;30612:185;30652:1;30669:20;30687:1;30669:20;:::i;:::-;30664:25;;30703:20;30721:1;30703:20;:::i;:::-;30698:25;;30742:1;30732:35;;30747:18;;:::i;:::-;30732:35;30789:1;30786;30782:9;30777:14;;30612:185;;;;:::o;30803:176::-;30835:1;30852:20;30870:1;30852:20;:::i;:::-;30847:25;;30886:20;30904:1;30886:20;:::i;:::-;30881:25;;30925:1;30915:35;;30930:18;;:::i;:::-;30915:35;30971:1;30968;30964:9;30959:14;;30803:176;;;;:::o;30985:180::-;31033:77;31030:1;31023:88;31130:4;31127:1;31120:15;31154:4;31151:1;31144:15;31171:98;31222:6;31256:5;31250:12;31240:22;;31171:98;;;:::o;31275:168::-;31358:11;31392:6;31387:3;31380:19;31432:4;31427:3;31423:14;31408:29;;31275:168;;;;:::o;31449:360::-;31535:3;31563:38;31595:5;31563:38;:::i;:::-;31617:70;31680:6;31675:3;31617:70;:::i;:::-;31610:77;;31696:52;31741:6;31736:3;31729:4;31722:5;31718:16;31696:52;:::i;:::-;31773:29;31795:6;31773:29;:::i;:::-;31768:3;31764:39;31757:46;;31539:270;31449:360;;;;:::o;31815:640::-;32010:4;32048:3;32037:9;32033:19;32025:27;;32062:71;32130:1;32119:9;32115:17;32106:6;32062:71;:::i;:::-;32143:72;32211:2;32200:9;32196:18;32187:6;32143:72;:::i;:::-;32225;32293:2;32282:9;32278:18;32269:6;32225:72;:::i;:::-;32344:9;32338:4;32334:20;32329:2;32318:9;32314:18;32307:48;32372:76;32443:4;32434:6;32372:76;:::i;:::-;32364:84;;31815:640;;;;;;;:::o;32461:141::-;32517:5;32548:6;32542:13;32533:22;;32564:32;32590:5;32564:32;:::i;:::-;32461:141;;;;:::o;32608:349::-;32677:6;32726:2;32714:9;32705:7;32701:23;32697:32;32694:119;;;32732:79;;:::i;:::-;32694:119;32852:1;32877:63;32932:7;32923:6;32912:9;32908:22;32877:63;:::i;:::-;32867:73;;32823:127;32608:349;;;;:::o;32963:182::-;33103:34;33099:1;33091:6;33087:14;33080:58;32963:182;:::o;33151:366::-;33293:3;33314:67;33378:2;33373:3;33314:67;:::i;:::-;33307:74;;33390:93;33479:3;33390:93;:::i;:::-;33508:2;33503:3;33499:12;33492:19;;33151:366;;;:::o;33523:419::-;33689:4;33727:2;33716:9;33712:18;33704:26;;33776:9;33770:4;33766:20;33762:1;33751:9;33747:17;33740:47;33804:131;33930:4;33804:131;:::i;:::-;33796:139;;33523:419;;;:::o;33948:178::-;34088:30;34084:1;34076:6;34072:14;34065:54;33948:178;:::o;34132:366::-;34274:3;34295:67;34359:2;34354:3;34295:67;:::i;:::-;34288:74;;34371:93;34460:3;34371:93;:::i;:::-;34489:2;34484:3;34480:12;34473:19;;34132:366;;;:::o;34504:419::-;34670:4;34708:2;34697:9;34693:18;34685:26;;34757:9;34751:4;34747:20;34743:1;34732:9;34728:17;34721:47;34785:131;34911:4;34785:131;:::i;:::-;34777:139;;34504:419;;;:::o
Swarm Source
ipfs://f5afcf0e0f66d3b890a05c61e47dc5ec5da5262577f979f0469acad674a4afa0
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.