Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
140 OX
Holders
92
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 OXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Oblox
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-16 */ // Sources flattened with hardhat v2.7.1 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (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/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (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/[email protected] // OpenZeppelin Contracts v4.4.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); } /** * @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); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/oblox/Oblox.sol pragma solidity ^0.8.0; contract Oblox is ERC721Enumerable, Ownable { /** * @dev URI base for tokenURI function. Token URI is constructed as _baseTokenURI + tokenId. */ string public baseTokenURI; /** * @dev Time when the drop starts. */ uint256 public dropStart; /** * @dev If sale is paused or not. */ bool public isPaused = false; /** * @dev Amount of reserved tokens. */ uint16 public reserve = 50; /** * @dev Max supply of nfts. */ uint16 public constant MAXSUPPLY = 2999; /** * @dev Max NFTs that you can mint per transaction. */ uint8 public maxQuantityPerTransaction = 10; /** * @dev Price per token. */ uint256 public price = 60000000000000000; // 0.06 ETH /** * @dev Implements ERC721 contract and sets default values. * @param _newBaseURI URI base for tokenURI function. Token URI is constructed as _baseTokenURI + tokenId. */ constructor( string memory _newBaseURI, uint256 _dropStart ) ERC721("Oblox", "OX") { baseTokenURI = _newBaseURI; dropStart = _dropStart; } /** * @dev Sets new price per token. * @param _newPrice New price. */ function setPrice( uint256 _newPrice ) external onlyOwner() { price = _newPrice; } /** * @dev Sets new max quantity per transaction. * @param _quantity New quantity. */ function setMaxQtPerTx( uint8 _quantity ) external onlyOwner { maxQuantityPerTransaction = _quantity; } /** * @dev Changes pause state. */ function flipPauseStatus() external onlyOwner { isPaused = !isPaused; } /** * @dev Sets metadata base uri. */ function setBaseURI( string memory _newBaseURI ) external onlyOwner { baseTokenURI = _newBaseURI; } /** * @dev Overrides _baseURI function so we define the URI base we will be using. */ function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } /** * @dev Mint tokens reserved for owner. * @param _quantity Amount of reserve tokens to mint. * @param _receiver Receiver of the tokens. */ function mintReserve( uint16 _quantity, address _receiver ) external onlyOwner { require(_quantity <= reserve, "The quantity exceeds the reserve."); reserve -= _quantity; for (uint i = 0; i < _quantity; i++) { _safeMint(_receiver, totalSupply()); } } /** * @dev Creates a new NFT. * @param _chosenAmount Amount of tokens to be bougth. */ function mint( uint256 _chosenAmount ) external payable { require(block.timestamp >= dropStart, "Drop not yet available."); require(!isPaused, "Sale is not active at the moment"); require(_chosenAmount > 0, "Number of tokens can not be less than or equal to 0"); require(_chosenAmount <= maxQuantityPerTransaction,"Chosen Amount exceeds maxQuantityPerTransaction"); require(totalSupply() + _chosenAmount + reserve <= MAXSUPPLY, "Purchase would exceed max supply"); require(price * _chosenAmount == msg.value, "Sent value is incorrect"); for (uint i = 0; i < _chosenAmount; i++) { _safeMint(msg.sender, totalSupply()); } } /** * @dev Gets all nftIDs of the owner. */ function tokensOfOwner( address _owner ) external view returns (uint256[] memory) { uint256 count = balanceOf(_owner); uint256[] memory result = new uint256[](count); for (uint256 index = 0; index < count; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } /** * @dev Withdraws eth. */ function withdraw() external onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"},{"internalType":"uint256","name":"_dropStart","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAXSUPPLY","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dropStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantityPerTransaction","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_quantity","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintReserve","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantity","type":"uint8"}],"name":"setMaxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600d60006101000a81548160ff0219169083151502179055506032600d60016101000a81548161ffff021916908361ffff160217905550600a600d60036101000a81548160ff021916908360ff16021790555066d529ae9e860000600e553480156200007157600080fd5b5060405162004c8238038062004c828339818101604052810190620000979190620004d5565b6040518060400160405280600581526020017f4f626c6f780000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4f5800000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011b9291906200024d565b508060019080519060200190620001349291906200024d565b505050620001576200014b6200017f60201b60201c565b6200018760201b60201c565b81600b90805190602001906200016f9291906200024d565b5080600c819055505050620005a0565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025b906200056a565b90600052602060002090601f0160209004810192826200027f5760008555620002cb565b82601f106200029a57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002ca578251825591602001919060010190620002ad565b5b509050620002da9190620002de565b5090565b5b80821115620002f9576000816000905550600101620002df565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000366826200031b565b810181811067ffffffffffffffff821117156200038857620003876200032c565b5b80604052505050565b60006200039d620002fd565b9050620003ab82826200035b565b919050565b600067ffffffffffffffff821115620003ce57620003cd6200032c565b5b620003d9826200031b565b9050602081019050919050565b60005b8381101562000406578082015181840152602081019050620003e9565b8381111562000416576000848401525b50505050565b6000620004336200042d84620003b0565b62000391565b90508281526020810184848401111562000452576200045162000316565b5b6200045f848285620003e6565b509392505050565b600082601f8301126200047f576200047e62000311565b5b8151620004918482602086016200041c565b91505092915050565b6000819050919050565b620004af816200049a565b8114620004bb57600080fd5b50565b600081519050620004cf81620004a4565b92915050565b60008060408385031215620004ef57620004ee62000307565b5b600083015167ffffffffffffffff81111562000510576200050f6200030c565b5b6200051e8582860162000467565b92505060206200053185828601620004be565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058357607f821691505b602082108114156200059a57620005996200053b565b5b50919050565b6146d280620005b06000396000f3fe6080604052600436106101f95760003560e01c80638462151c1161010d578063b187bd26116100a0578063d547cfb71161006f578063d547cfb714610726578063e985e9c514610751578063f2fde38b1461078e578063f6737f9b146107b7578063fa62884c146107e0576101f9565b8063b187bd261461066a578063b88d4fde14610695578063c87b56dd146106be578063cd3293de146106fb576101f9565b806395d89b41116100dc57806395d89b41146105cf578063a035b1fe146105fa578063a0712d6814610625578063a22cb46514610641576101f9565b80638462151c146105135780638da5cb5b146105505780638f99822a1461057b57806391b7f5ed146105a6576101f9565b806342842e0e1161019057806366d0b0901161015f57806366d0b0901461044057806370a0823114610469578063715018a6146104a6578063758b4e86146104bd57806376324597146104e8576101f9565b806342842e0e146103745780634f6ccce71461039d57806355f804b3146103da5780636352211e14610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633ccfd60b1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612d12565b6107f7565b6040516102329190612d5a565b60405180910390f35b34801561024757600080fd5b50610250610871565b60405161025d9190612e0e565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612e66565b610903565b60405161029a9190612ed4565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f1b565b610988565b005b3480156102d857600080fd5b506102e1610aa0565b6040516102ee9190612f6a565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190612f85565b610aad565b005b34801561032c57600080fd5b5061034760048036038101906103429190612f1b565b610b0d565b6040516103549190612f6a565b60405180910390f35b34801561036957600080fd5b50610372610bb2565b005b34801561038057600080fd5b5061039b60048036038101906103969190612f85565b610c7d565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612e66565b610c9d565b6040516103d19190612f6a565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc919061310d565b610d0e565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612e66565b610da4565b6040516104379190612ed4565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613190565b610e56565b005b34801561047557600080fd5b50610490600480360381019061048b91906131d0565b610f9e565b60405161049d9190612f6a565b60405180910390f35b3480156104b257600080fd5b506104bb611056565b005b3480156104c957600080fd5b506104d26110de565b6040516104df919061320c565b60405180910390f35b3480156104f457600080fd5b506104fd6110e4565b60405161050a9190612f6a565b60405180910390f35b34801561051f57600080fd5b5061053a600480360381019061053591906131d0565b6110ea565b60405161054791906132e5565b60405180910390f35b34801561055c57600080fd5b50610565611198565b6040516105729190612ed4565b60405180910390f35b34801561058757600080fd5b506105906111c2565b60405161059d9190613323565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612e66565b6111d5565b005b3480156105db57600080fd5b506105e461125b565b6040516105f19190612e0e565b60405180910390f35b34801561060657600080fd5b5061060f6112ed565b60405161061c9190612f6a565b60405180910390f35b61063f600480360381019061063a9190612e66565b6112f3565b005b34801561064d57600080fd5b506106686004803603810190610663919061336a565b61151c565b005b34801561067657600080fd5b5061067f611532565b60405161068c9190612d5a565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061344b565b611545565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612e66565b6115a7565b6040516106f29190612e0e565b60405180910390f35b34801561070757600080fd5b5061071061164e565b60405161071d919061320c565b60405180910390f35b34801561073257600080fd5b5061073b611662565b6040516107489190612e0e565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906134ce565b6116f0565b6040516107859190612d5a565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b091906131d0565b611784565b005b3480156107c357600080fd5b506107de60048036038101906107d9919061353a565b61187c565b005b3480156107ec57600080fd5b506107f5611916565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086a5750610869826119be565b5b9050919050565b60606000805461088090613596565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90613596565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061090e82611aa0565b61094d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109449061363a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099382610da4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906136cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a23611b0c565b73ffffffffffffffffffffffffffffffffffffffff161480610a525750610a5181610a4c611b0c565b6116f0565b5b610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a889061375e565b60405180910390fd5b610a9b8383611b14565b505050565b6000600880549050905090565b610abe610ab8611b0c565b82611bcd565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906137f0565b60405180910390fd5b610b08838383611cab565b505050565b6000610b1883610f9e565b8210610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090613882565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bba611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610bd8611198565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c25906138ee565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c79573d6000803e3d6000fd5b5050565b610c9883838360405180602001604052806000815250611545565b505050565b6000610ca7610aa0565b8210610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613980565b60405180910390fd5b60088281548110610cfc57610cfb6139a0565b5b90600052602060002001549050919050565b610d16611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610d34611198565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906138ee565b60405180910390fd5b80600b9080519060200190610da0929190612c03565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490613a41565b60405180910390fd5b80915050919050565b610e5e611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610e7c611198565b73ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906138ee565b60405180910390fd5b600d60019054906101000a900461ffff1661ffff168261ffff161115610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613ad3565b60405180910390fd5b81600d60018282829054906101000a900461ffff16610f4c9190613b22565b92506101000a81548161ffff021916908361ffff16021790555060005b8261ffff16811015610f9957610f8682610f81610aa0565b611f07565b8080610f9190613b56565b915050610f69565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690613c11565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105e611b0c565b73ffffffffffffffffffffffffffffffffffffffff1661107c611198565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906138ee565b60405180910390fd5b6110dc6000611f25565b565b610bb781565b600c5481565b606060006110f783610f9e565b905060008167ffffffffffffffff81111561111557611114612fe2565b5b6040519080825280602002602001820160405280156111435781602001602082028036833780820191505090505b50905060005b8281101561118d5761115b8582610b0d565b82828151811061116e5761116d6139a0565b5b602002602001018181525050808061118590613b56565b915050611149565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60039054906101000a900460ff1681565b6111dd611b0c565b73ffffffffffffffffffffffffffffffffffffffff166111fb611198565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611248906138ee565b60405180910390fd5b80600e8190555050565b60606001805461126a90613596565b80601f016020809104026020016040519081016040528092919081815260200182805461129690613596565b80156112e35780601f106112b8576101008083540402835291602001916112e3565b820191906000526020600020905b8154815290600101906020018083116112c657829003601f168201915b5050505050905090565b600e5481565b600c54421015611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613c7d565b60405180910390fd5b600d60009054906101000a900460ff1615611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90613ce9565b60405180910390fd5b600081116113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613d7b565b60405180910390fd5b600d60039054906101000a900460ff1660ff16811115611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613e0d565b60405180910390fd5b610bb761ffff16600d60019054906101000a900461ffff1661ffff1682611445610aa0565b61144f9190613e2d565b6114599190613e2d565b111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190613ecf565b60405180910390fd5b3481600e546114a99190613eef565b146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613f95565b60405180910390fd5b60005b818110156115185761150533611500610aa0565b611f07565b808061151090613b56565b9150506114ec565b5050565b61152e611527611b0c565b8383611feb565b5050565b600d60009054906101000a900460ff1681565b611556611550611b0c565b83611bcd565b611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906137f0565b60405180910390fd5b6115a184848484612158565b50505050565b60606115b282611aa0565b6115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890614027565b60405180910390fd5b60006115fb6121b4565b9050600081511161161b5760405180602001604052806000815250611646565b8061162584612246565b604051602001611636929190614083565b6040516020818303038152906040525b915050919050565b600d60019054906101000a900461ffff1681565b600b805461166f90613596565b80601f016020809104026020016040519081016040528092919081815260200182805461169b90613596565b80156116e85780601f106116bd576101008083540402835291602001916116e8565b820191906000526020600020905b8154815290600101906020018083116116cb57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61178c611b0c565b73ffffffffffffffffffffffffffffffffffffffff166117aa611198565b73ffffffffffffffffffffffffffffffffffffffff1614611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906138ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614119565b60405180910390fd5b61187981611f25565b50565b611884611b0c565b73ffffffffffffffffffffffffffffffffffffffff166118a2611198565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef906138ee565b60405180910390fd5b80600d60036101000a81548160ff021916908360ff16021790555050565b61191e611b0c565b73ffffffffffffffffffffffffffffffffffffffff1661193c611198565b73ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906138ee565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a995750611a98826123a7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8783610da4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd882611aa0565b611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906141ab565b60405180910390fd5b6000611c2283610da4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9157508373ffffffffffffffffffffffffffffffffffffffff16611c7984610903565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca25750611ca181856116f0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ccb82610da4565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d189061423d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906142cf565b60405180910390fd5b611d9c838383612411565b611da7600082611b14565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df791906142ef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4e9190613e2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f21828260405180602001604052806000815250612525565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061436f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161214b9190612d5a565b60405180910390a3505050565b612163848484611cab565b61216f84848484612580565b6121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614401565b60405180910390fd5b50505050565b6060600b80546121c390613596565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90613596565b801561223c5780601f106122115761010080835404028352916020019161223c565b820191906000526020600020905b81548152906001019060200180831161221f57829003601f168201915b5050505050905090565b6060600082141561228e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123a2565b600082905060005b600082146122c05780806122a990613b56565b915050600a826122b99190614450565b9150612296565b60008167ffffffffffffffff8111156122dc576122db612fe2565b5b6040519080825280601f01601f19166020018201604052801561230e5781602001600182028036833780820191505090505b5090505b6000851461239b5760018261232791906142ef565b9150600a856123369190614481565b60306123429190613e2d565b60f81b818381518110612358576123576139a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123949190614450565b9450612312565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61241c838383612717565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561245f5761245a8161271c565b61249e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461249d5761249c8382612765565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e1576124dc816128d2565b612520565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461251f5761251e82826129a3565b5b5b505050565b61252f8383612a22565b61253c6000848484612580565b61257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290614401565b60405180910390fd5b505050565b60006125a18473ffffffffffffffffffffffffffffffffffffffff16612bf0565b1561270a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125ca611b0c565b8786866040518563ffffffff1660e01b81526004016125ec9493929190614507565b602060405180830381600087803b15801561260657600080fd5b505af192505050801561263757506040513d601f19601f820116820180604052508101906126349190614568565b60015b6126ba573d8060008114612667576040519150601f19603f3d011682016040523d82523d6000602084013e61266c565b606091505b506000815114156126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a990614401565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061270f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161277284610f9e565b61277c91906142ef565b9050600060076000848152602001908152602001600020549050818114612861576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128e691906142ef565b9050600060096000848152602001908152602001600020549050600060088381548110612916576129156139a0565b5b906000526020600020015490508060088381548110612938576129376139a0565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061298757612986614595565b5b6001900381819060005260206000200160009055905550505050565b60006129ae83610f9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990614610565b60405180910390fd5b612a9b81611aa0565b15612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29061467c565b60405180910390fd5b612ae760008383612411565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b379190613e2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612c0f90613596565b90600052602060002090601f016020900481019282612c315760008555612c78565b82601f10612c4a57805160ff1916838001178555612c78565b82800160010185558215612c78579182015b82811115612c77578251825591602001919060010190612c5c565b5b509050612c859190612c89565b5090565b5b80821115612ca2576000816000905550600101612c8a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cef81612cba565b8114612cfa57600080fd5b50565b600081359050612d0c81612ce6565b92915050565b600060208284031215612d2857612d27612cb0565b5b6000612d3684828501612cfd565b91505092915050565b60008115159050919050565b612d5481612d3f565b82525050565b6000602082019050612d6f6000830184612d4b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612daf578082015181840152602081019050612d94565b83811115612dbe576000848401525b50505050565b6000601f19601f8301169050919050565b6000612de082612d75565b612dea8185612d80565b9350612dfa818560208601612d91565b612e0381612dc4565b840191505092915050565b60006020820190508181036000830152612e288184612dd5565b905092915050565b6000819050919050565b612e4381612e30565b8114612e4e57600080fd5b50565b600081359050612e6081612e3a565b92915050565b600060208284031215612e7c57612e7b612cb0565b5b6000612e8a84828501612e51565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ebe82612e93565b9050919050565b612ece81612eb3565b82525050565b6000602082019050612ee96000830184612ec5565b92915050565b612ef881612eb3565b8114612f0357600080fd5b50565b600081359050612f1581612eef565b92915050565b60008060408385031215612f3257612f31612cb0565b5b6000612f4085828601612f06565b9250506020612f5185828601612e51565b9150509250929050565b612f6481612e30565b82525050565b6000602082019050612f7f6000830184612f5b565b92915050565b600080600060608486031215612f9e57612f9d612cb0565b5b6000612fac86828701612f06565b9350506020612fbd86828701612f06565b9250506040612fce86828701612e51565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301a82612dc4565b810181811067ffffffffffffffff8211171561303957613038612fe2565b5b80604052505050565b600061304c612ca6565b90506130588282613011565b919050565b600067ffffffffffffffff82111561307857613077612fe2565b5b61308182612dc4565b9050602081019050919050565b82818337600083830152505050565b60006130b06130ab8461305d565b613042565b9050828152602081018484840111156130cc576130cb612fdd565b5b6130d784828561308e565b509392505050565b600082601f8301126130f4576130f3612fd8565b5b813561310484826020860161309d565b91505092915050565b60006020828403121561312357613122612cb0565b5b600082013567ffffffffffffffff81111561314157613140612cb5565b5b61314d848285016130df565b91505092915050565b600061ffff82169050919050565b61316d81613156565b811461317857600080fd5b50565b60008135905061318a81613164565b92915050565b600080604083850312156131a7576131a6612cb0565b5b60006131b58582860161317b565b92505060206131c685828601612f06565b9150509250929050565b6000602082840312156131e6576131e5612cb0565b5b60006131f484828501612f06565b91505092915050565b61320681613156565b82525050565b600060208201905061322160008301846131fd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61325c81612e30565b82525050565b600061326e8383613253565b60208301905092915050565b6000602082019050919050565b600061329282613227565b61329c8185613232565b93506132a783613243565b8060005b838110156132d85781516132bf8882613262565b97506132ca8361327a565b9250506001810190506132ab565b5085935050505092915050565b600060208201905081810360008301526132ff8184613287565b905092915050565b600060ff82169050919050565b61331d81613307565b82525050565b60006020820190506133386000830184613314565b92915050565b61334781612d3f565b811461335257600080fd5b50565b6000813590506133648161333e565b92915050565b6000806040838503121561338157613380612cb0565b5b600061338f85828601612f06565b92505060206133a085828601613355565b9150509250929050565b600067ffffffffffffffff8211156133c5576133c4612fe2565b5b6133ce82612dc4565b9050602081019050919050565b60006133ee6133e9846133aa565b613042565b90508281526020810184848401111561340a57613409612fdd565b5b61341584828561308e565b509392505050565b600082601f83011261343257613431612fd8565b5b81356134428482602086016133db565b91505092915050565b6000806000806080858703121561346557613464612cb0565b5b600061347387828801612f06565b945050602061348487828801612f06565b935050604061349587828801612e51565b925050606085013567ffffffffffffffff8111156134b6576134b5612cb5565b5b6134c28782880161341d565b91505092959194509250565b600080604083850312156134e5576134e4612cb0565b5b60006134f385828601612f06565b925050602061350485828601612f06565b9150509250929050565b61351781613307565b811461352257600080fd5b50565b6000813590506135348161350e565b92915050565b6000602082840312156135505761354f612cb0565b5b600061355e84828501613525565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135ae57607f821691505b602082108114156135c2576135c1613567565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613624602c83612d80565b915061362f826135c8565b604082019050919050565b6000602082019050818103600083015261365381613617565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b6602183612d80565b91506136c18261365a565b604082019050919050565b600060208201905081810360008301526136e5816136a9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613748603883612d80565b9150613753826136ec565b604082019050919050565b600060208201905081810360008301526137778161373b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137da603183612d80565b91506137e58261377e565b604082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061386c602b83612d80565b915061387782613810565b604082019050919050565b6000602082019050818103600083015261389b8161385f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138d8602083612d80565b91506138e3826138a2565b602082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061396a602c83612d80565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a2b602983612d80565b9150613a36826139cf565b604082019050919050565b60006020820190508181036000830152613a5a81613a1e565b9050919050565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613abd602183612d80565b9150613ac882613a61565b604082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2d82613156565b9150613b3883613156565b925082821015613b4b57613b4a613af3565b5b828203905092915050565b6000613b6182612e30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b9457613b93613af3565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bfb602a83612d80565b9150613c0682613b9f565b604082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b7f44726f70206e6f742079657420617661696c61626c652e000000000000000000600082015250565b6000613c67601783612d80565b9150613c7282613c31565b602082019050919050565b60006020820190508181036000830152613c9681613c5a565b9050919050565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6000613cd3602083612d80565b9150613cde82613c9d565b602082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b6000613d65603383612d80565b9150613d7082613d09565b604082019050919050565b60006020820190508181036000830152613d9481613d58565b9050919050565b7f43686f73656e20416d6f756e742065786365656473206d61785175616e74697460008201527f795065725472616e73616374696f6e0000000000000000000000000000000000602082015250565b6000613df7602f83612d80565b9150613e0282613d9b565b604082019050919050565b60006020820190508181036000830152613e2681613dea565b9050919050565b6000613e3882612e30565b9150613e4383612e30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e7857613e77613af3565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000613eb9602083612d80565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b6000613efa82612e30565b9150613f0583612e30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f3e57613f3d613af3565b5b828202905092915050565b7f53656e742076616c756520697320696e636f7272656374000000000000000000600082015250565b6000613f7f601783612d80565b9150613f8a82613f49565b602082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614011602f83612d80565b915061401c82613fb5565b604082019050919050565b6000602082019050818103600083015261404081614004565b9050919050565b600081905092915050565b600061405d82612d75565b6140678185614047565b9350614077818560208601612d91565b80840191505092915050565b600061408f8285614052565b915061409b8284614052565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614103602683612d80565b915061410e826140a7565b604082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614195602c83612d80565b91506141a082614139565b604082019050919050565b600060208201905081810360008301526141c481614188565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614227602983612d80565b9150614232826141cb565b604082019050919050565b600060208201905081810360008301526142568161421a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142b9602483612d80565b91506142c48261425d565b604082019050919050565b600060208201905081810360008301526142e8816142ac565b9050919050565b60006142fa82612e30565b915061430583612e30565b92508282101561431857614317613af3565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614359601983612d80565b915061436482614323565b602082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143eb603283612d80565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061445b82612e30565b915061446683612e30565b92508261447657614475614421565b5b828204905092915050565b600061448c82612e30565b915061449783612e30565b9250826144a7576144a6614421565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006144d9826144b2565b6144e381856144bd565b93506144f3818560208601612d91565b6144fc81612dc4565b840191505092915050565b600060808201905061451c6000830187612ec5565b6145296020830186612ec5565b6145366040830185612f5b565b818103606083015261454881846144ce565b905095945050505050565b60008151905061456281612ce6565b92915050565b60006020828403121561457e5761457d612cb0565b5b600061458c84828501614553565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145fa602083612d80565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614666601c83612d80565b915061467182614630565b602082019050919050565b6000602082019050818103600083015261469581614659565b905091905056fea2646970667358221220c38f94c81ed495377885f19910bd6e7c2b94ce4e8141861588e7f2548775774e64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000061bbafc9000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f6170692e6f626c6f786e66742e636f6d2f746f6b656e732f312f000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80638462151c1161010d578063b187bd26116100a0578063d547cfb71161006f578063d547cfb714610726578063e985e9c514610751578063f2fde38b1461078e578063f6737f9b146107b7578063fa62884c146107e0576101f9565b8063b187bd261461066a578063b88d4fde14610695578063c87b56dd146106be578063cd3293de146106fb576101f9565b806395d89b41116100dc57806395d89b41146105cf578063a035b1fe146105fa578063a0712d6814610625578063a22cb46514610641576101f9565b80638462151c146105135780638da5cb5b146105505780638f99822a1461057b57806391b7f5ed146105a6576101f9565b806342842e0e1161019057806366d0b0901161015f57806366d0b0901461044057806370a0823114610469578063715018a6146104a6578063758b4e86146104bd57806376324597146104e8576101f9565b806342842e0e146103745780634f6ccce71461039d57806355f804b3146103da5780636352211e14610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633ccfd60b1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612d12565b6107f7565b6040516102329190612d5a565b60405180910390f35b34801561024757600080fd5b50610250610871565b60405161025d9190612e0e565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612e66565b610903565b60405161029a9190612ed4565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f1b565b610988565b005b3480156102d857600080fd5b506102e1610aa0565b6040516102ee9190612f6a565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190612f85565b610aad565b005b34801561032c57600080fd5b5061034760048036038101906103429190612f1b565b610b0d565b6040516103549190612f6a565b60405180910390f35b34801561036957600080fd5b50610372610bb2565b005b34801561038057600080fd5b5061039b60048036038101906103969190612f85565b610c7d565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612e66565b610c9d565b6040516103d19190612f6a565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc919061310d565b610d0e565b005b34801561040f57600080fd5b5061042a60048036038101906104259190612e66565b610da4565b6040516104379190612ed4565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613190565b610e56565b005b34801561047557600080fd5b50610490600480360381019061048b91906131d0565b610f9e565b60405161049d9190612f6a565b60405180910390f35b3480156104b257600080fd5b506104bb611056565b005b3480156104c957600080fd5b506104d26110de565b6040516104df919061320c565b60405180910390f35b3480156104f457600080fd5b506104fd6110e4565b60405161050a9190612f6a565b60405180910390f35b34801561051f57600080fd5b5061053a600480360381019061053591906131d0565b6110ea565b60405161054791906132e5565b60405180910390f35b34801561055c57600080fd5b50610565611198565b6040516105729190612ed4565b60405180910390f35b34801561058757600080fd5b506105906111c2565b60405161059d9190613323565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612e66565b6111d5565b005b3480156105db57600080fd5b506105e461125b565b6040516105f19190612e0e565b60405180910390f35b34801561060657600080fd5b5061060f6112ed565b60405161061c9190612f6a565b60405180910390f35b61063f600480360381019061063a9190612e66565b6112f3565b005b34801561064d57600080fd5b506106686004803603810190610663919061336a565b61151c565b005b34801561067657600080fd5b5061067f611532565b60405161068c9190612d5a565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b7919061344b565b611545565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190612e66565b6115a7565b6040516106f29190612e0e565b60405180910390f35b34801561070757600080fd5b5061071061164e565b60405161071d919061320c565b60405180910390f35b34801561073257600080fd5b5061073b611662565b6040516107489190612e0e565b60405180910390f35b34801561075d57600080fd5b50610778600480360381019061077391906134ce565b6116f0565b6040516107859190612d5a565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b091906131d0565b611784565b005b3480156107c357600080fd5b506107de60048036038101906107d9919061353a565b61187c565b005b3480156107ec57600080fd5b506107f5611916565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086a5750610869826119be565b5b9050919050565b60606000805461088090613596565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90613596565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061090e82611aa0565b61094d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109449061363a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099382610da4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb906136cc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a23611b0c565b73ffffffffffffffffffffffffffffffffffffffff161480610a525750610a5181610a4c611b0c565b6116f0565b5b610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a889061375e565b60405180910390fd5b610a9b8383611b14565b505050565b6000600880549050905090565b610abe610ab8611b0c565b82611bcd565b610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af4906137f0565b60405180910390fd5b610b08838383611cab565b505050565b6000610b1883610f9e565b8210610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090613882565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bba611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610bd8611198565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c25906138ee565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c79573d6000803e3d6000fd5b5050565b610c9883838360405180602001604052806000815250611545565b505050565b6000610ca7610aa0565b8210610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613980565b60405180910390fd5b60088281548110610cfc57610cfb6139a0565b5b90600052602060002001549050919050565b610d16611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610d34611198565b73ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906138ee565b60405180910390fd5b80600b9080519060200190610da0929190612c03565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4490613a41565b60405180910390fd5b80915050919050565b610e5e611b0c565b73ffffffffffffffffffffffffffffffffffffffff16610e7c611198565b73ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec9906138ee565b60405180910390fd5b600d60019054906101000a900461ffff1661ffff168261ffff161115610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613ad3565b60405180910390fd5b81600d60018282829054906101000a900461ffff16610f4c9190613b22565b92506101000a81548161ffff021916908361ffff16021790555060005b8261ffff16811015610f9957610f8682610f81610aa0565b611f07565b8080610f9190613b56565b915050610f69565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690613c11565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105e611b0c565b73ffffffffffffffffffffffffffffffffffffffff1661107c611198565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906138ee565b60405180910390fd5b6110dc6000611f25565b565b610bb781565b600c5481565b606060006110f783610f9e565b905060008167ffffffffffffffff81111561111557611114612fe2565b5b6040519080825280602002602001820160405280156111435781602001602082028036833780820191505090505b50905060005b8281101561118d5761115b8582610b0d565b82828151811061116e5761116d6139a0565b5b602002602001018181525050808061118590613b56565b915050611149565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60039054906101000a900460ff1681565b6111dd611b0c565b73ffffffffffffffffffffffffffffffffffffffff166111fb611198565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611248906138ee565b60405180910390fd5b80600e8190555050565b60606001805461126a90613596565b80601f016020809104026020016040519081016040528092919081815260200182805461129690613596565b80156112e35780601f106112b8576101008083540402835291602001916112e3565b820191906000526020600020905b8154815290600101906020018083116112c657829003601f168201915b5050505050905090565b600e5481565b600c54421015611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90613c7d565b60405180910390fd5b600d60009054906101000a900460ff1615611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90613ce9565b60405180910390fd5b600081116113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613d7b565b60405180910390fd5b600d60039054906101000a900460ff1660ff16811115611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613e0d565b60405180910390fd5b610bb761ffff16600d60019054906101000a900461ffff1661ffff1682611445610aa0565b61144f9190613e2d565b6114599190613e2d565b111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190613ecf565b60405180910390fd5b3481600e546114a99190613eef565b146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613f95565b60405180910390fd5b60005b818110156115185761150533611500610aa0565b611f07565b808061151090613b56565b9150506114ec565b5050565b61152e611527611b0c565b8383611feb565b5050565b600d60009054906101000a900460ff1681565b611556611550611b0c565b83611bcd565b611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906137f0565b60405180910390fd5b6115a184848484612158565b50505050565b60606115b282611aa0565b6115f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e890614027565b60405180910390fd5b60006115fb6121b4565b9050600081511161161b5760405180602001604052806000815250611646565b8061162584612246565b604051602001611636929190614083565b6040516020818303038152906040525b915050919050565b600d60019054906101000a900461ffff1681565b600b805461166f90613596565b80601f016020809104026020016040519081016040528092919081815260200182805461169b90613596565b80156116e85780601f106116bd576101008083540402835291602001916116e8565b820191906000526020600020905b8154815290600101906020018083116116cb57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61178c611b0c565b73ffffffffffffffffffffffffffffffffffffffff166117aa611198565b73ffffffffffffffffffffffffffffffffffffffff1614611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f7906138ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614119565b60405180910390fd5b61187981611f25565b50565b611884611b0c565b73ffffffffffffffffffffffffffffffffffffffff166118a2611198565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef906138ee565b60405180910390fd5b80600d60036101000a81548160ff021916908360ff16021790555050565b61191e611b0c565b73ffffffffffffffffffffffffffffffffffffffff1661193c611198565b73ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611989906138ee565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a995750611a98826123a7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8783610da4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd882611aa0565b611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906141ab565b60405180910390fd5b6000611c2283610da4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9157508373ffffffffffffffffffffffffffffffffffffffff16611c7984610903565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca25750611ca181856116f0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ccb82610da4565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d189061423d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d88906142cf565b60405180910390fd5b611d9c838383612411565b611da7600082611b14565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df791906142ef565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4e9190613e2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f21828260405180602001604052806000815250612525565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120519061436f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161214b9190612d5a565b60405180910390a3505050565b612163848484611cab565b61216f84848484612580565b6121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614401565b60405180910390fd5b50505050565b6060600b80546121c390613596565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90613596565b801561223c5780601f106122115761010080835404028352916020019161223c565b820191906000526020600020905b81548152906001019060200180831161221f57829003601f168201915b5050505050905090565b6060600082141561228e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123a2565b600082905060005b600082146122c05780806122a990613b56565b915050600a826122b99190614450565b9150612296565b60008167ffffffffffffffff8111156122dc576122db612fe2565b5b6040519080825280601f01601f19166020018201604052801561230e5781602001600182028036833780820191505090505b5090505b6000851461239b5760018261232791906142ef565b9150600a856123369190614481565b60306123429190613e2d565b60f81b818381518110612358576123576139a0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123949190614450565b9450612312565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61241c838383612717565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561245f5761245a8161271c565b61249e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461249d5761249c8382612765565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e1576124dc816128d2565b612520565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461251f5761251e82826129a3565b5b5b505050565b61252f8383612a22565b61253c6000848484612580565b61257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290614401565b60405180910390fd5b505050565b60006125a18473ffffffffffffffffffffffffffffffffffffffff16612bf0565b1561270a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125ca611b0c565b8786866040518563ffffffff1660e01b81526004016125ec9493929190614507565b602060405180830381600087803b15801561260657600080fd5b505af192505050801561263757506040513d601f19601f820116820180604052508101906126349190614568565b60015b6126ba573d8060008114612667576040519150601f19603f3d011682016040523d82523d6000602084013e61266c565b606091505b506000815114156126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a990614401565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061270f565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161277284610f9e565b61277c91906142ef565b9050600060076000848152602001908152602001600020549050818114612861576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128e691906142ef565b9050600060096000848152602001908152602001600020549050600060088381548110612916576129156139a0565b5b906000526020600020015490508060088381548110612938576129376139a0565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061298757612986614595565b5b6001900381819060005260206000200160009055905550505050565b60006129ae83610f9e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990614610565b60405180910390fd5b612a9b81611aa0565b15612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad29061467c565b60405180910390fd5b612ae760008383612411565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b379190613e2d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612c0f90613596565b90600052602060002090601f016020900481019282612c315760008555612c78565b82601f10612c4a57805160ff1916838001178555612c78565b82800160010185558215612c78579182015b82811115612c77578251825591602001919060010190612c5c565b5b509050612c859190612c89565b5090565b5b80821115612ca2576000816000905550600101612c8a565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cef81612cba565b8114612cfa57600080fd5b50565b600081359050612d0c81612ce6565b92915050565b600060208284031215612d2857612d27612cb0565b5b6000612d3684828501612cfd565b91505092915050565b60008115159050919050565b612d5481612d3f565b82525050565b6000602082019050612d6f6000830184612d4b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612daf578082015181840152602081019050612d94565b83811115612dbe576000848401525b50505050565b6000601f19601f8301169050919050565b6000612de082612d75565b612dea8185612d80565b9350612dfa818560208601612d91565b612e0381612dc4565b840191505092915050565b60006020820190508181036000830152612e288184612dd5565b905092915050565b6000819050919050565b612e4381612e30565b8114612e4e57600080fd5b50565b600081359050612e6081612e3a565b92915050565b600060208284031215612e7c57612e7b612cb0565b5b6000612e8a84828501612e51565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ebe82612e93565b9050919050565b612ece81612eb3565b82525050565b6000602082019050612ee96000830184612ec5565b92915050565b612ef881612eb3565b8114612f0357600080fd5b50565b600081359050612f1581612eef565b92915050565b60008060408385031215612f3257612f31612cb0565b5b6000612f4085828601612f06565b9250506020612f5185828601612e51565b9150509250929050565b612f6481612e30565b82525050565b6000602082019050612f7f6000830184612f5b565b92915050565b600080600060608486031215612f9e57612f9d612cb0565b5b6000612fac86828701612f06565b9350506020612fbd86828701612f06565b9250506040612fce86828701612e51565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301a82612dc4565b810181811067ffffffffffffffff8211171561303957613038612fe2565b5b80604052505050565b600061304c612ca6565b90506130588282613011565b919050565b600067ffffffffffffffff82111561307857613077612fe2565b5b61308182612dc4565b9050602081019050919050565b82818337600083830152505050565b60006130b06130ab8461305d565b613042565b9050828152602081018484840111156130cc576130cb612fdd565b5b6130d784828561308e565b509392505050565b600082601f8301126130f4576130f3612fd8565b5b813561310484826020860161309d565b91505092915050565b60006020828403121561312357613122612cb0565b5b600082013567ffffffffffffffff81111561314157613140612cb5565b5b61314d848285016130df565b91505092915050565b600061ffff82169050919050565b61316d81613156565b811461317857600080fd5b50565b60008135905061318a81613164565b92915050565b600080604083850312156131a7576131a6612cb0565b5b60006131b58582860161317b565b92505060206131c685828601612f06565b9150509250929050565b6000602082840312156131e6576131e5612cb0565b5b60006131f484828501612f06565b91505092915050565b61320681613156565b82525050565b600060208201905061322160008301846131fd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61325c81612e30565b82525050565b600061326e8383613253565b60208301905092915050565b6000602082019050919050565b600061329282613227565b61329c8185613232565b93506132a783613243565b8060005b838110156132d85781516132bf8882613262565b97506132ca8361327a565b9250506001810190506132ab565b5085935050505092915050565b600060208201905081810360008301526132ff8184613287565b905092915050565b600060ff82169050919050565b61331d81613307565b82525050565b60006020820190506133386000830184613314565b92915050565b61334781612d3f565b811461335257600080fd5b50565b6000813590506133648161333e565b92915050565b6000806040838503121561338157613380612cb0565b5b600061338f85828601612f06565b92505060206133a085828601613355565b9150509250929050565b600067ffffffffffffffff8211156133c5576133c4612fe2565b5b6133ce82612dc4565b9050602081019050919050565b60006133ee6133e9846133aa565b613042565b90508281526020810184848401111561340a57613409612fdd565b5b61341584828561308e565b509392505050565b600082601f83011261343257613431612fd8565b5b81356134428482602086016133db565b91505092915050565b6000806000806080858703121561346557613464612cb0565b5b600061347387828801612f06565b945050602061348487828801612f06565b935050604061349587828801612e51565b925050606085013567ffffffffffffffff8111156134b6576134b5612cb5565b5b6134c28782880161341d565b91505092959194509250565b600080604083850312156134e5576134e4612cb0565b5b60006134f385828601612f06565b925050602061350485828601612f06565b9150509250929050565b61351781613307565b811461352257600080fd5b50565b6000813590506135348161350e565b92915050565b6000602082840312156135505761354f612cb0565b5b600061355e84828501613525565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135ae57607f821691505b602082108114156135c2576135c1613567565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613624602c83612d80565b915061362f826135c8565b604082019050919050565b6000602082019050818103600083015261365381613617565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136b6602183612d80565b91506136c18261365a565b604082019050919050565b600060208201905081810360008301526136e5816136a9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613748603883612d80565b9150613753826136ec565b604082019050919050565b600060208201905081810360008301526137778161373b565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137da603183612d80565b91506137e58261377e565b604082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061386c602b83612d80565b915061387782613810565b604082019050919050565b6000602082019050818103600083015261389b8161385f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138d8602083612d80565b91506138e3826138a2565b602082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061396a602c83612d80565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a2b602983612d80565b9150613a36826139cf565b604082019050919050565b60006020820190508181036000830152613a5a81613a1e565b9050919050565b7f546865207175616e74697479206578636565647320746865207265736572766560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613abd602183612d80565b9150613ac882613a61565b604082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b2d82613156565b9150613b3883613156565b925082821015613b4b57613b4a613af3565b5b828203905092915050565b6000613b6182612e30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b9457613b93613af3565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613bfb602a83612d80565b9150613c0682613b9f565b604082019050919050565b60006020820190508181036000830152613c2a81613bee565b9050919050565b7f44726f70206e6f742079657420617661696c61626c652e000000000000000000600082015250565b6000613c67601783612d80565b9150613c7282613c31565b602082019050919050565b60006020820190508181036000830152613c9681613c5a565b9050919050565b7f53616c65206973206e6f742061637469766520617420746865206d6f6d656e74600082015250565b6000613cd3602083612d80565b9150613cde82613c9d565b602082019050919050565b60006020820190508181036000830152613d0281613cc6565b9050919050565b7f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008201527f207468616e206f7220657175616c20746f203000000000000000000000000000602082015250565b6000613d65603383612d80565b9150613d7082613d09565b604082019050919050565b60006020820190508181036000830152613d9481613d58565b9050919050565b7f43686f73656e20416d6f756e742065786365656473206d61785175616e74697460008201527f795065725472616e73616374696f6e0000000000000000000000000000000000602082015250565b6000613df7602f83612d80565b9150613e0282613d9b565b604082019050919050565b60006020820190508181036000830152613e2681613dea565b9050919050565b6000613e3882612e30565b9150613e4383612e30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e7857613e77613af3565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b6000613eb9602083612d80565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b6000613efa82612e30565b9150613f0583612e30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f3e57613f3d613af3565b5b828202905092915050565b7f53656e742076616c756520697320696e636f7272656374000000000000000000600082015250565b6000613f7f601783612d80565b9150613f8a82613f49565b602082019050919050565b60006020820190508181036000830152613fae81613f72565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614011602f83612d80565b915061401c82613fb5565b604082019050919050565b6000602082019050818103600083015261404081614004565b9050919050565b600081905092915050565b600061405d82612d75565b6140678185614047565b9350614077818560208601612d91565b80840191505092915050565b600061408f8285614052565b915061409b8284614052565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614103602683612d80565b915061410e826140a7565b604082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614195602c83612d80565b91506141a082614139565b604082019050919050565b600060208201905081810360008301526141c481614188565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614227602983612d80565b9150614232826141cb565b604082019050919050565b600060208201905081810360008301526142568161421a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142b9602483612d80565b91506142c48261425d565b604082019050919050565b600060208201905081810360008301526142e8816142ac565b9050919050565b60006142fa82612e30565b915061430583612e30565b92508282101561431857614317613af3565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614359601983612d80565b915061436482614323565b602082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143eb603283612d80565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061445b82612e30565b915061446683612e30565b92508261447657614475614421565b5b828204905092915050565b600061448c82612e30565b915061449783612e30565b9250826144a7576144a6614421565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006144d9826144b2565b6144e381856144bd565b93506144f3818560208601612d91565b6144fc81612dc4565b840191505092915050565b600060808201905061451c6000830187612ec5565b6145296020830186612ec5565b6145366040830185612f5b565b818103606083015261454881846144ce565b905095945050505050565b60008151905061456281612ce6565b92915050565b60006020828403121561457e5761457d612cb0565b5b600061458c84828501614553565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145fa602083612d80565b9150614605826145c4565b602082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614666601c83612d80565b915061467182614630565b602082019050919050565b6000602082019050818103600083015261469581614659565b905091905056fea2646970667358221220c38f94c81ed495377885f19910bd6e7c2b94ce4e8141861588e7f2548775774e64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000061bbafc9000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f6170692e6f626c6f786e66742e636f6d2f746f6b656e732f312f000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _newBaseURI (string): https://api.obloxnft.com/tokens/1/
Arg [1] : _dropStart (uint256): 1639690185
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000061bbafc9
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [3] : 68747470733a2f2f6170692e6f626c6f786e66742e636f6d2f746f6b656e732f
Arg [4] : 312f000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44661:4005:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35905:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22314:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23873:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23396:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36545:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24623:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36213:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48518:145;;;;;;;;;;;;;:::i;:::-;;25033:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36735:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46421:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22008:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46954:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21738:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43772:103;;;;;;;;;;;;;:::i;:::-;;45154:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44907:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48124:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43121:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45269:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45872:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22483:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45361:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47369:694;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24166:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44989:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25289:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22658:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45076:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44822;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44030:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46090:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46274:92;;;;;;;;;;;;;:::i;:::-;;35905:224;36007:4;36046:35;36031:50;;;:11;:50;;;;:90;;;;36085:36;36109:11;36085:23;:36::i;:::-;36031:90;36024:97;;35905:224;;;:::o;22314:100::-;22368:13;22401:5;22394:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22314:100;:::o;23873:221::-;23949:7;23977:16;23985:7;23977;:16::i;:::-;23969:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24062:15;:24;24078:7;24062:24;;;;;;;;;;;;;;;;;;;;;24055:31;;23873:221;;;:::o;23396:411::-;23477:13;23493:23;23508:7;23493:14;:23::i;:::-;23477:39;;23541:5;23535:11;;:2;:11;;;;23527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23635:5;23619:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23644:37;23661:5;23668:12;:10;:12::i;:::-;23644:16;:37::i;:::-;23619:62;23597:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:21;23787:2;23791:7;23778:8;:21::i;:::-;23466:341;23396:411;;:::o;36545:113::-;36606:7;36633:10;:17;;;;36626:24;;36545:113;:::o;24623:339::-;24818:41;24837:12;:10;:12::i;:::-;24851:7;24818:18;:41::i;:::-;24810:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24926:28;24936:4;24942:2;24946:7;24926:9;:28::i;:::-;24623:339;;;:::o;36213:256::-;36310:7;36346:23;36363:5;36346:16;:23::i;:::-;36338:5;:31;36330:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36435:12;:19;36448:5;36435:19;;;;;;;;;;;;;;;:26;36455:5;36435:26;;;;;;;;;;;;36428:33;;36213:256;;;;:::o;48518:145::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48577:12:::1;48592:21;48577:36;;48628:10;48620:28;;:37;48649:7;48620:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48570:93;48518:145::o:0;25033:185::-;25171:39;25188:4;25194:2;25198:7;25171:39;;;;;;;;;;;;:16;:39::i;:::-;25033:185;;;:::o;36735:233::-;36810:7;36846:30;:28;:30::i;:::-;36838:5;:38;36830:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36943:10;36954:5;36943:17;;;;;;;;:::i;:::-;;;;;;;;;;36936:24;;36735:233;;;:::o;46421:128::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46532:11:::1;46517:12;:26;;;;;;;;;;;;:::i;:::-;;46421:128:::0;:::o;22008:239::-;22080:7;22100:13;22116:7;:16;22124:7;22116:16;;;;;;;;;;;;;;;;;;;;;22100:32;;22168:1;22151:19;;:5;:19;;;;22143:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22234:5;22227:12;;;22008:239;;;:::o;46954:306::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47087:7:::1;;;;;;;;;;;47074:20;;:9;:20;;;;47066:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47150:9;47139:7;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47171:6;47166:89;47187:9;47183:13;;:1;:13;47166:89;;;47212:35;47222:9;47233:13;:11;:13::i;:::-;47212:9;:35::i;:::-;47198:3;;;;;:::i;:::-;;;;47166:89;;;;46954:306:::0;;:::o;21738:208::-;21810:7;21855:1;21838:19;;:5;:19;;;;21830:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:9;:16;21932:5;21922:16;;;;;;;;;;;;;;;;21915:23;;21738:208;;;:::o;43772:103::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43837:30:::1;43864:1;43837:18;:30::i;:::-;43772:103::o:0;45154:39::-;45189:4;45154:39;:::o;44907:24::-;;;;:::o;48124:348::-;48211:16;48239:13;48255:17;48265:6;48255:9;:17::i;:::-;48239:33;;48279:23;48319:5;48305:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48279:46;;48337:13;48332:115;48364:5;48356;:13;48332:115;;;48405:34;48425:6;48433:5;48405:19;:34::i;:::-;48389:6;48396:5;48389:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;48371:7;;;;;:::i;:::-;;;;48332:115;;;;48460:6;48453:13;;;;48124:348;;;:::o;43121:87::-;43167:7;43194:6;;;;;;;;;;;43187:13;;43121:87;:::o;45269:43::-;;;;;;;;;;;;;:::o;45872:111::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45968:9:::1;45960:5;:17;;;;45872:111:::0;:::o;22483:104::-;22539:13;22572:7;22565:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22483:104;:::o;45361:40::-;;;;:::o;47369:694::-;47480:9;;47461:15;:28;;47453:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47533:8;;;;;;;;;;;47532:9;47524:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;47609:1;47593:13;:17;47585:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;47698:25;;;;;;;;;;;47681:42;;:13;:42;;47673:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;45189:4;47789:52;;47821:7;;;;;;;;;;;47789:39;;47805:13;47789;:11;:13::i;:::-;:29;;;;:::i;:::-;:39;;;;:::i;:::-;:52;;47781:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47918:9;47901:13;47893:5;;:21;;;;:::i;:::-;:34;47885:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47969:6;47964:94;47985:13;47981:1;:17;47964:94;;;48014:36;48024:10;48036:13;:11;:13::i;:::-;48014:9;:36::i;:::-;48000:3;;;;;:::i;:::-;;;;47964:94;;;;47369:694;:::o;24166:155::-;24261:52;24280:12;:10;:12::i;:::-;24294:8;24304;24261:18;:52::i;:::-;24166:155;;:::o;44989:28::-;;;;;;;;;;;;;:::o;25289:328::-;25464:41;25483:12;:10;:12::i;:::-;25497:7;25464:18;:41::i;:::-;25456:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25570:39;25584:4;25590:2;25594:7;25603:5;25570:13;:39::i;:::-;25289:328;;;;:::o;22658:334::-;22731:13;22765:16;22773:7;22765;:16::i;:::-;22757:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22846:21;22870:10;:8;:10::i;:::-;22846:34;;22922:1;22904:7;22898:21;:25;:86;;;;;;;;;;;;;;;;;22950:7;22959:18;:7;:16;:18::i;:::-;22933:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22898:86;22891:93;;;22658:334;;;:::o;45076:26::-;;;;;;;;;;;;;:::o;44822:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24392:164::-;24489:4;24513:18;:25;24532:5;24513:25;;;;;;;;;;;;;;;:35;24539:8;24513:35;;;;;;;;;;;;;;;;;;;;;;;;;24506:42;;24392:164;;;;:::o;44030:201::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44139:1:::1;44119:22;;:8;:22;;;;44111:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44195:28;44214:8;44195:18;:28::i;:::-;44030:201:::0;:::o;46090:132::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46207:9:::1;46179:25;;:37;;;;;;;;;;;;;;;;;;46090:132:::0;:::o;46274:92::-;43352:12;:10;:12::i;:::-;43341:23;;:7;:5;:7::i;:::-;:23;;;43333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46352:8:::1;;;;;;;;;;;46351:9;46340:8;;:20;;;;;;;;;;;;;;;;;;46274:92::o:0;21369:305::-;21471:4;21523:25;21508:40;;;:11;:40;;;;:105;;;;21580:33;21565:48;;;:11;:48;;;;21508:105;:158;;;;21630:36;21654:11;21630:23;:36::i;:::-;21508:158;21488:178;;21369:305;;;:::o;27127:127::-;27192:4;27244:1;27216:30;;:7;:16;27224:7;27216:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27209:37;;27127:127;;;:::o;16590:98::-;16643:7;16670:10;16663:17;;16590:98;:::o;31109:174::-;31211:2;31184:15;:24;31200:7;31184:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31267:7;31263:2;31229:46;;31238:23;31253:7;31238:14;:23::i;:::-;31229:46;;;;;;;;;;;;31109:174;;:::o;27421:348::-;27514:4;27539:16;27547:7;27539;:16::i;:::-;27531:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27615:13;27631:23;27646:7;27631:14;:23::i;:::-;27615:39;;27684:5;27673:16;;:7;:16;;;:51;;;;27717:7;27693:31;;:20;27705:7;27693:11;:20::i;:::-;:31;;;27673:51;:87;;;;27728:32;27745:5;27752:7;27728:16;:32::i;:::-;27673:87;27665:96;;;27421:348;;;;:::o;30413:578::-;30572:4;30545:31;;:23;30560:7;30545:14;:23::i;:::-;:31;;;30537:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:1;30641:16;;:2;:16;;;;30633:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30711:39;30732:4;30738:2;30742:7;30711:20;:39::i;:::-;30815:29;30832:1;30836:7;30815:8;:29::i;:::-;30876:1;30857:9;:15;30867:4;30857:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30905:1;30888:9;:13;30898:2;30888:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30936:2;30917:7;:16;30925:7;30917:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30975:7;30971:2;30956:27;;30965:4;30956:27;;;;;;;;;;;;30413:578;;;:::o;28111:110::-;28187:26;28197:2;28201:7;28187:26;;;;;;;;;;;;:9;:26::i;:::-;28111:110;;:::o;44391:191::-;44465:16;44484:6;;;;;;;;;;;44465:25;;44510:8;44501:6;;:17;;;;;;;;;;;;;;;;;;44565:8;44534:40;;44555:8;44534:40;;;;;;;;;;;;44454:128;44391:191;:::o;31425:315::-;31580:8;31571:17;;:5;:17;;;;31563:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31667:8;31629:18;:25;31648:5;31629:25;;;;;;;;;;;;;;;:35;31655:8;31629:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31713:8;31691:41;;31706:5;31691:41;;;31723:8;31691:41;;;;;;:::i;:::-;;;;;;;;31425:315;;;:::o;26499:::-;26656:28;26666:4;26672:2;26676:7;26656:9;:28::i;:::-;26703:48;26726:4;26732:2;26736:7;26745:5;26703:22;:48::i;:::-;26695:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26499:315;;;;:::o;46652:135::-;46737:13;46769:12;46762:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46652:135;:::o;17177:723::-;17233:13;17463:1;17454:5;:10;17450:53;;;17481:10;;;;;;;;;;;;;;;;;;;;;17450:53;17513:12;17528:5;17513:20;;17544:14;17569:78;17584:1;17576:4;:9;17569:78;;17602:8;;;;;:::i;:::-;;;;17633:2;17625:10;;;;;:::i;:::-;;;17569:78;;;17657:19;17689:6;17679:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17657:39;;17707:154;17723:1;17714:5;:10;17707:154;;17751:1;17741:11;;;;;:::i;:::-;;;17818:2;17810:5;:10;;;;:::i;:::-;17797:2;:24;;;;:::i;:::-;17784:39;;17767:6;17774;17767:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17847:2;17838:11;;;;;:::i;:::-;;;17707:154;;;17885:6;17871:21;;;;;17177:723;;;;:::o;19807:157::-;19892:4;19931:25;19916:40;;;:11;:40;;;;19909:47;;19807:157;;;:::o;37581:589::-;37725:45;37752:4;37758:2;37762:7;37725:26;:45::i;:::-;37803:1;37787:18;;:4;:18;;;37783:187;;;37822:40;37854:7;37822:31;:40::i;:::-;37783:187;;;37892:2;37884:10;;:4;:10;;;37880:90;;37911:47;37944:4;37950:7;37911:32;:47::i;:::-;37880:90;37783:187;37998:1;37984:16;;:2;:16;;;37980:183;;;38017:45;38054:7;38017:36;:45::i;:::-;37980:183;;;38090:4;38084:10;;:2;:10;;;38080:83;;38111:40;38139:2;38143:7;38111:27;:40::i;:::-;38080:83;37980:183;37581:589;;;:::o;28448:321::-;28578:18;28584:2;28588:7;28578:5;:18::i;:::-;28629:54;28660:1;28664:2;28668:7;28677:5;28629:22;:54::i;:::-;28607:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28448:321;;;:::o;32305:799::-;32460:4;32481:15;:2;:13;;;:15::i;:::-;32477:620;;;32533:2;32517:36;;;32554:12;:10;:12::i;:::-;32568:4;32574:7;32583:5;32517:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32513:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32776:1;32759:6;:13;:18;32755:272;;;32802:60;;;;;;;;;;:::i;:::-;;;;;;;;32755:272;32977:6;32971:13;32962:6;32958:2;32954:15;32947:38;32513:529;32650:41;;;32640:51;;;:6;:51;;;;32633:58;;;;;32477:620;33081:4;33074:11;;32305:799;;;;;;;:::o;33676:126::-;;;;:::o;38893:164::-;38997:10;:17;;;;38970:15;:24;38986:7;38970:24;;;;;;;;;;;:44;;;;39025:10;39041:7;39025:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38893:164;:::o;39684:988::-;39950:22;40000:1;39975:22;39992:4;39975:16;:22::i;:::-;:26;;;;:::i;:::-;39950:51;;40012:18;40033:17;:26;40051:7;40033:26;;;;;;;;;;;;40012:47;;40180:14;40166:10;:28;40162:328;;40211:19;40233:12;:18;40246:4;40233:18;;;;;;;;;;;;;;;:34;40252:14;40233:34;;;;;;;;;;;;40211:56;;40317:11;40284:12;:18;40297:4;40284:18;;;;;;;;;;;;;;;:30;40303:10;40284:30;;;;;;;;;;;:44;;;;40434:10;40401:17;:30;40419:11;40401:30;;;;;;;;;;;:43;;;;40196:294;40162:328;40586:17;:26;40604:7;40586:26;;;;;;;;;;;40579:33;;;40630:12;:18;40643:4;40630:18;;;;;;;;;;;;;;;:34;40649:14;40630:34;;;;;;;;;;;40623:41;;;39765:907;;39684:988;;:::o;40967:1079::-;41220:22;41265:1;41245:10;:17;;;;:21;;;;:::i;:::-;41220:46;;41277:18;41298:15;:24;41314:7;41298:24;;;;;;;;;;;;41277:45;;41649:19;41671:10;41682:14;41671:26;;;;;;;;:::i;:::-;;;;;;;;;;41649:48;;41735:11;41710:10;41721;41710:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41846:10;41815:15;:28;41831:11;41815:28;;;;;;;;;;;:41;;;;41987:15;:24;42003:7;41987:24;;;;;;;;;;;41980:31;;;42022:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41038:1008;;;40967:1079;:::o;38471:221::-;38556:14;38573:20;38590:2;38573:16;:20::i;:::-;38556:37;;38631:7;38604:12;:16;38617:2;38604:16;;;;;;;;;;;;;;;:24;38621:6;38604:24;;;;;;;;;;;:34;;;;38678:6;38649:17;:26;38667:7;38649:26;;;;;;;;;;;:35;;;;38545:147;38471:221;;:::o;29105:382::-;29199:1;29185:16;;:2;:16;;;;29177:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29258:16;29266:7;29258;:16::i;:::-;29257:17;29249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29320:45;29349:1;29353:2;29357:7;29320:20;:45::i;:::-;29395:1;29378:9;:13;29388:2;29378:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29426:2;29407:7;:16;29415:7;29407:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29471:7;29467:2;29446:33;;29463:1;29446:33;;;;;;;;;;;;29105:382;;:::o;8572:387::-;8632:4;8840:12;8907:7;8895:20;8887:28;;8950:1;8943:4;:8;8936:15;;;8572:387;;;:::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:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:89::-;8572:7;8612:6;8605:5;8601:18;8590:29;;8536:89;;;:::o;8631:120::-;8703:23;8720:5;8703:23;:::i;:::-;8696:5;8693:34;8683:62;;8741:1;8738;8731:12;8683:62;8631:120;:::o;8757:137::-;8802:5;8840:6;8827:20;8818:29;;8856:32;8882:5;8856:32;:::i;:::-;8757:137;;;;:::o;8900:472::-;8967:6;8975;9024:2;9012:9;9003:7;8999:23;8995:32;8992:119;;;9030:79;;:::i;:::-;8992:119;9150:1;9175:52;9219:7;9210:6;9199:9;9195:22;9175:52;:::i;:::-;9165:62;;9121:116;9276:2;9302:53;9347:7;9338:6;9327:9;9323:22;9302:53;:::i;:::-;9292:63;;9247:118;8900:472;;;;;:::o;9378:329::-;9437:6;9486:2;9474:9;9465:7;9461:23;9457:32;9454:119;;;9492:79;;:::i;:::-;9454:119;9612:1;9637:53;9682:7;9673:6;9662:9;9658:22;9637:53;:::i;:::-;9627:63;;9583:117;9378:329;;;;:::o;9713:115::-;9798:23;9815:5;9798:23;:::i;:::-;9793:3;9786:36;9713:115;;:::o;9834:218::-;9925:4;9963:2;9952:9;9948:18;9940:26;;9976:69;10042:1;10031:9;10027:17;10018:6;9976:69;:::i;:::-;9834:218;;;;:::o;10058:114::-;10125:6;10159:5;10153:12;10143:22;;10058:114;;;:::o;10178:184::-;10277:11;10311:6;10306:3;10299:19;10351:4;10346:3;10342:14;10327:29;;10178:184;;;;:::o;10368:132::-;10435:4;10458:3;10450:11;;10488:4;10483:3;10479:14;10471:22;;10368:132;;;:::o;10506:108::-;10583:24;10601:5;10583:24;:::i;:::-;10578:3;10571:37;10506:108;;:::o;10620:179::-;10689:10;10710:46;10752:3;10744:6;10710:46;:::i;:::-;10788:4;10783:3;10779:14;10765:28;;10620:179;;;;:::o;10805:113::-;10875:4;10907;10902:3;10898:14;10890:22;;10805:113;;;:::o;10954:732::-;11073:3;11102:54;11150:5;11102:54;:::i;:::-;11172:86;11251:6;11246:3;11172:86;:::i;:::-;11165:93;;11282:56;11332:5;11282:56;:::i;:::-;11361:7;11392:1;11377:284;11402:6;11399:1;11396:13;11377:284;;;11478:6;11472:13;11505:63;11564:3;11549:13;11505:63;:::i;:::-;11498:70;;11591:60;11644:6;11591:60;:::i;:::-;11581:70;;11437:224;11424:1;11421;11417:9;11412:14;;11377:284;;;11381:14;11677:3;11670:10;;11078:608;;;10954:732;;;;:::o;11692:373::-;11835:4;11873:2;11862:9;11858:18;11850:26;;11922:9;11916:4;11912:20;11908:1;11897:9;11893:17;11886:47;11950:108;12053:4;12044:6;11950:108;:::i;:::-;11942:116;;11692:373;;;;:::o;12071:86::-;12106:7;12146:4;12139:5;12135:16;12124:27;;12071:86;;;:::o;12163:112::-;12246:22;12262:5;12246:22;:::i;:::-;12241:3;12234:35;12163:112;;:::o;12281:214::-;12370:4;12408:2;12397:9;12393:18;12385:26;;12421:67;12485:1;12474:9;12470:17;12461:6;12421:67;:::i;:::-;12281:214;;;;:::o;12501:116::-;12571:21;12586:5;12571:21;:::i;:::-;12564:5;12561:32;12551:60;;12607:1;12604;12597:12;12551:60;12501:116;:::o;12623:133::-;12666:5;12704:6;12691:20;12682:29;;12720:30;12744:5;12720:30;:::i;:::-;12623:133;;;;:::o;12762:468::-;12827:6;12835;12884:2;12872:9;12863:7;12859:23;12855:32;12852:119;;;12890:79;;:::i;:::-;12852:119;13010:1;13035:53;13080:7;13071:6;13060:9;13056:22;13035:53;:::i;:::-;13025:63;;12981:117;13137:2;13163:50;13205:7;13196:6;13185:9;13181:22;13163:50;:::i;:::-;13153:60;;13108:115;12762:468;;;;;:::o;13236:307::-;13297:4;13387:18;13379:6;13376:30;13373:56;;;13409:18;;:::i;:::-;13373:56;13447:29;13469:6;13447:29;:::i;:::-;13439:37;;13531:4;13525;13521:15;13513:23;;13236:307;;;:::o;13549:410::-;13626:5;13651:65;13667:48;13708:6;13667:48;:::i;:::-;13651:65;:::i;:::-;13642:74;;13739:6;13732:5;13725:21;13777:4;13770:5;13766:16;13815:3;13806:6;13801:3;13797:16;13794:25;13791:112;;;13822:79;;:::i;:::-;13791:112;13912:41;13946:6;13941:3;13936;13912:41;:::i;:::-;13632:327;13549:410;;;;;:::o;13978:338::-;14033:5;14082:3;14075:4;14067:6;14063:17;14059:27;14049:122;;14090:79;;:::i;:::-;14049:122;14207:6;14194:20;14232:78;14306:3;14298:6;14291:4;14283:6;14279:17;14232:78;:::i;:::-;14223:87;;14039:277;13978:338;;;;:::o;14322:943::-;14417:6;14425;14433;14441;14490:3;14478:9;14469:7;14465:23;14461:33;14458:120;;;14497:79;;:::i;:::-;14458:120;14617:1;14642:53;14687:7;14678:6;14667:9;14663:22;14642:53;:::i;:::-;14632:63;;14588:117;14744:2;14770:53;14815:7;14806:6;14795:9;14791:22;14770:53;:::i;:::-;14760:63;;14715:118;14872:2;14898:53;14943:7;14934:6;14923:9;14919:22;14898:53;:::i;:::-;14888:63;;14843:118;15028:2;15017:9;15013:18;15000:32;15059:18;15051:6;15048:30;15045:117;;;15081:79;;:::i;:::-;15045:117;15186:62;15240:7;15231:6;15220:9;15216:22;15186:62;:::i;:::-;15176:72;;14971:287;14322:943;;;;;;;:::o;15271:474::-;15339:6;15347;15396:2;15384:9;15375:7;15371:23;15367:32;15364:119;;;15402:79;;:::i;:::-;15364:119;15522:1;15547:53;15592:7;15583:6;15572:9;15568:22;15547:53;:::i;:::-;15537:63;;15493:117;15649:2;15675:53;15720:7;15711:6;15700:9;15696:22;15675:53;:::i;:::-;15665:63;;15620:118;15271:474;;;;;:::o;15751:118::-;15822:22;15838:5;15822:22;:::i;:::-;15815:5;15812:33;15802:61;;15859:1;15856;15849:12;15802:61;15751:118;:::o;15875:135::-;15919:5;15957:6;15944:20;15935:29;;15973:31;15998:5;15973:31;:::i;:::-;15875:135;;;;:::o;16016:325::-;16073:6;16122:2;16110:9;16101:7;16097:23;16093:32;16090:119;;;16128:79;;:::i;:::-;16090:119;16248:1;16273:51;16316:7;16307:6;16296:9;16292:22;16273:51;:::i;:::-;16263:61;;16219:115;16016:325;;;;:::o;16347:180::-;16395:77;16392:1;16385:88;16492:4;16489:1;16482:15;16516:4;16513:1;16506:15;16533:320;16577:6;16614:1;16608:4;16604:12;16594:22;;16661:1;16655:4;16651:12;16682:18;16672:81;;16738:4;16730:6;16726:17;16716:27;;16672:81;16800:2;16792:6;16789:14;16769:18;16766:38;16763:84;;;16819:18;;:::i;:::-;16763:84;16584:269;16533:320;;;:::o;16859:231::-;16999:34;16995:1;16987:6;16983:14;16976:58;17068:14;17063:2;17055:6;17051:15;17044:39;16859:231;:::o;17096:366::-;17238:3;17259:67;17323:2;17318:3;17259:67;:::i;:::-;17252:74;;17335:93;17424:3;17335:93;:::i;:::-;17453:2;17448:3;17444:12;17437:19;;17096:366;;;:::o;17468:419::-;17634:4;17672:2;17661:9;17657:18;17649:26;;17721:9;17715:4;17711:20;17707:1;17696:9;17692:17;17685:47;17749:131;17875:4;17749:131;:::i;:::-;17741:139;;17468:419;;;:::o;17893:220::-;18033:34;18029:1;18021:6;18017:14;18010:58;18102:3;18097:2;18089:6;18085:15;18078:28;17893:220;:::o;18119:366::-;18261:3;18282:67;18346:2;18341:3;18282:67;:::i;:::-;18275:74;;18358:93;18447:3;18358:93;:::i;:::-;18476:2;18471:3;18467:12;18460:19;;18119:366;;;:::o;18491:419::-;18657:4;18695:2;18684:9;18680:18;18672:26;;18744:9;18738:4;18734:20;18730:1;18719:9;18715:17;18708:47;18772:131;18898:4;18772:131;:::i;:::-;18764:139;;18491:419;;;:::o;18916:243::-;19056:34;19052:1;19044:6;19040:14;19033:58;19125:26;19120:2;19112:6;19108:15;19101:51;18916:243;:::o;19165:366::-;19307:3;19328:67;19392:2;19387:3;19328:67;:::i;:::-;19321:74;;19404:93;19493:3;19404:93;:::i;:::-;19522:2;19517:3;19513:12;19506:19;;19165:366;;;:::o;19537:419::-;19703:4;19741:2;19730:9;19726:18;19718:26;;19790:9;19784:4;19780:20;19776:1;19765:9;19761:17;19754:47;19818:131;19944:4;19818:131;:::i;:::-;19810:139;;19537:419;;;:::o;19962:236::-;20102:34;20098:1;20090:6;20086:14;20079:58;20171:19;20166:2;20158:6;20154:15;20147:44;19962:236;:::o;20204:366::-;20346:3;20367:67;20431:2;20426:3;20367:67;:::i;:::-;20360:74;;20443:93;20532:3;20443:93;:::i;:::-;20561:2;20556:3;20552:12;20545:19;;20204:366;;;:::o;20576:419::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20576:419;;;:::o;21001:230::-;21141:34;21137:1;21129:6;21125:14;21118:58;21210:13;21205:2;21197:6;21193:15;21186:38;21001:230;:::o;21237:366::-;21379:3;21400:67;21464:2;21459:3;21400:67;:::i;:::-;21393:74;;21476:93;21565:3;21476:93;:::i;:::-;21594:2;21589:3;21585:12;21578:19;;21237:366;;;:::o;21609:419::-;21775:4;21813:2;21802:9;21798:18;21790:26;;21862:9;21856:4;21852:20;21848:1;21837:9;21833:17;21826:47;21890:131;22016:4;21890:131;:::i;:::-;21882:139;;21609:419;;;:::o;22034:182::-;22174:34;22170:1;22162:6;22158:14;22151:58;22034:182;:::o;22222:366::-;22364:3;22385:67;22449:2;22444:3;22385:67;:::i;:::-;22378:74;;22461:93;22550:3;22461:93;:::i;:::-;22579:2;22574:3;22570:12;22563:19;;22222:366;;;:::o;22594:419::-;22760:4;22798:2;22787:9;22783:18;22775:26;;22847:9;22841:4;22837:20;22833:1;22822:9;22818:17;22811:47;22875:131;23001:4;22875:131;:::i;:::-;22867:139;;22594:419;;;:::o;23019:231::-;23159:34;23155:1;23147:6;23143:14;23136:58;23228:14;23223:2;23215:6;23211:15;23204:39;23019:231;:::o;23256:366::-;23398:3;23419:67;23483:2;23478:3;23419:67;:::i;:::-;23412:74;;23495:93;23584:3;23495:93;:::i;:::-;23613:2;23608:3;23604:12;23597:19;;23256:366;;;:::o;23628:419::-;23794:4;23832:2;23821:9;23817:18;23809:26;;23881:9;23875:4;23871:20;23867:1;23856:9;23852:17;23845:47;23909:131;24035:4;23909:131;:::i;:::-;23901:139;;23628:419;;;:::o;24053:180::-;24101:77;24098:1;24091:88;24198:4;24195:1;24188:15;24222:4;24219:1;24212:15;24239:228;24379:34;24375:1;24367:6;24363:14;24356:58;24448:11;24443:2;24435:6;24431:15;24424:36;24239:228;:::o;24473:366::-;24615:3;24636:67;24700:2;24695:3;24636:67;:::i;:::-;24629:74;;24712:93;24801:3;24712:93;:::i;:::-;24830:2;24825:3;24821:12;24814:19;;24473:366;;;:::o;24845:419::-;25011:4;25049:2;25038:9;25034:18;25026:26;;25098:9;25092:4;25088:20;25084:1;25073:9;25069:17;25062:47;25126:131;25252:4;25126:131;:::i;:::-;25118:139;;24845:419;;;:::o;25270:220::-;25410:34;25406:1;25398:6;25394:14;25387:58;25479:3;25474:2;25466:6;25462:15;25455:28;25270:220;:::o;25496:366::-;25638:3;25659:67;25723:2;25718:3;25659:67;:::i;:::-;25652:74;;25735:93;25824:3;25735:93;:::i;:::-;25853:2;25848:3;25844:12;25837:19;;25496:366;;;:::o;25868:419::-;26034:4;26072:2;26061:9;26057:18;26049:26;;26121:9;26115:4;26111:20;26107:1;26096:9;26092:17;26085:47;26149:131;26275:4;26149:131;:::i;:::-;26141:139;;25868:419;;;:::o;26293:180::-;26341:77;26338:1;26331:88;26438:4;26435:1;26428:15;26462:4;26459:1;26452:15;26479:188;26518:4;26538:19;26555:1;26538:19;:::i;:::-;26533:24;;26571:19;26588:1;26571:19;:::i;:::-;26566:24;;26609:1;26606;26603:8;26600:34;;;26614:18;;:::i;:::-;26600:34;26659:1;26656;26652:9;26644:17;;26479:188;;;;:::o;26673:233::-;26712:3;26735:24;26753:5;26735:24;:::i;:::-;26726:33;;26781:66;26774:5;26771:77;26768:103;;;26851:18;;:::i;:::-;26768:103;26898:1;26891:5;26887:13;26880:20;;26673:233;;;:::o;26912:229::-;27052:34;27048:1;27040:6;27036:14;27029:58;27121:12;27116:2;27108:6;27104:15;27097:37;26912:229;:::o;27147:366::-;27289:3;27310:67;27374:2;27369:3;27310:67;:::i;:::-;27303:74;;27386:93;27475:3;27386:93;:::i;:::-;27504:2;27499:3;27495:12;27488:19;;27147:366;;;:::o;27519:419::-;27685:4;27723:2;27712:9;27708:18;27700:26;;27772:9;27766:4;27762:20;27758:1;27747:9;27743:17;27736:47;27800:131;27926:4;27800:131;:::i;:::-;27792:139;;27519:419;;;:::o;27944:173::-;28084:25;28080:1;28072:6;28068:14;28061:49;27944:173;:::o;28123:366::-;28265:3;28286:67;28350:2;28345:3;28286:67;:::i;:::-;28279:74;;28362:93;28451:3;28362:93;:::i;:::-;28480:2;28475:3;28471:12;28464:19;;28123:366;;;:::o;28495:419::-;28661:4;28699:2;28688:9;28684:18;28676:26;;28748:9;28742:4;28738:20;28734:1;28723:9;28719:17;28712:47;28776:131;28902:4;28776:131;:::i;:::-;28768:139;;28495:419;;;:::o;28920:182::-;29060:34;29056:1;29048:6;29044:14;29037:58;28920:182;:::o;29108:366::-;29250:3;29271:67;29335:2;29330:3;29271:67;:::i;:::-;29264:74;;29347:93;29436:3;29347:93;:::i;:::-;29465:2;29460:3;29456:12;29449:19;;29108:366;;;:::o;29480:419::-;29646:4;29684:2;29673:9;29669:18;29661:26;;29733:9;29727:4;29723:20;29719:1;29708:9;29704:17;29697:47;29761:131;29887:4;29761:131;:::i;:::-;29753:139;;29480:419;;;:::o;29905:238::-;30045:34;30041:1;30033:6;30029:14;30022:58;30114:21;30109:2;30101:6;30097:15;30090:46;29905:238;:::o;30149:366::-;30291:3;30312:67;30376:2;30371:3;30312:67;:::i;:::-;30305:74;;30388:93;30477:3;30388:93;:::i;:::-;30506:2;30501:3;30497:12;30490:19;;30149:366;;;:::o;30521:419::-;30687:4;30725:2;30714:9;30710:18;30702:26;;30774:9;30768:4;30764:20;30760:1;30749:9;30745:17;30738:47;30802:131;30928:4;30802:131;:::i;:::-;30794:139;;30521:419;;;:::o;30946:234::-;31086:34;31082:1;31074:6;31070:14;31063:58;31155:17;31150:2;31142:6;31138:15;31131:42;30946:234;:::o;31186:366::-;31328:3;31349:67;31413:2;31408:3;31349:67;:::i;:::-;31342:74;;31425:93;31514:3;31425:93;:::i;:::-;31543:2;31538:3;31534:12;31527:19;;31186:366;;;:::o;31558:419::-;31724:4;31762:2;31751:9;31747:18;31739:26;;31811:9;31805:4;31801:20;31797:1;31786:9;31782:17;31775:47;31839:131;31965:4;31839:131;:::i;:::-;31831:139;;31558:419;;;:::o;31983:305::-;32023:3;32042:20;32060:1;32042:20;:::i;:::-;32037:25;;32076:20;32094:1;32076:20;:::i;:::-;32071:25;;32230:1;32162:66;32158:74;32155:1;32152:81;32149:107;;;32236:18;;:::i;:::-;32149:107;32280:1;32277;32273:9;32266:16;;31983:305;;;;:::o;32294:182::-;32434:34;32430:1;32422:6;32418:14;32411:58;32294:182;:::o;32482:366::-;32624:3;32645:67;32709:2;32704:3;32645:67;:::i;:::-;32638:74;;32721:93;32810:3;32721:93;:::i;:::-;32839:2;32834:3;32830:12;32823:19;;32482:366;;;:::o;32854:419::-;33020:4;33058:2;33047:9;33043:18;33035:26;;33107:9;33101:4;33097:20;33093:1;33082:9;33078:17;33071:47;33135:131;33261:4;33135:131;:::i;:::-;33127:139;;32854:419;;;:::o;33279:348::-;33319:7;33342:20;33360:1;33342:20;:::i;:::-;33337:25;;33376:20;33394:1;33376:20;:::i;:::-;33371:25;;33564:1;33496:66;33492:74;33489:1;33486:81;33481:1;33474:9;33467:17;33463:105;33460:131;;;33571:18;;:::i;:::-;33460:131;33619:1;33616;33612:9;33601:20;;33279:348;;;;:::o;33633:173::-;33773:25;33769:1;33761:6;33757:14;33750:49;33633:173;:::o;33812:366::-;33954:3;33975:67;34039:2;34034:3;33975:67;:::i;:::-;33968:74;;34051:93;34140:3;34051:93;:::i;:::-;34169:2;34164:3;34160:12;34153:19;;33812:366;;;:::o;34184:419::-;34350:4;34388:2;34377:9;34373:18;34365:26;;34437:9;34431:4;34427:20;34423:1;34412:9;34408:17;34401:47;34465:131;34591:4;34465:131;:::i;:::-;34457:139;;34184:419;;;:::o;34609:234::-;34749:34;34745:1;34737:6;34733:14;34726:58;34818:17;34813:2;34805:6;34801:15;34794:42;34609:234;:::o;34849:366::-;34991:3;35012:67;35076:2;35071:3;35012:67;:::i;:::-;35005:74;;35088:93;35177:3;35088:93;:::i;:::-;35206:2;35201:3;35197:12;35190:19;;34849:366;;;:::o;35221:419::-;35387:4;35425:2;35414:9;35410:18;35402:26;;35474:9;35468:4;35464:20;35460:1;35449:9;35445:17;35438:47;35502:131;35628:4;35502:131;:::i;:::-;35494:139;;35221:419;;;:::o;35646:148::-;35748:11;35785:3;35770:18;;35646:148;;;;:::o;35800:377::-;35906:3;35934:39;35967:5;35934:39;:::i;:::-;35989:89;36071:6;36066:3;35989:89;:::i;:::-;35982:96;;36087:52;36132:6;36127:3;36120:4;36113:5;36109:16;36087:52;:::i;:::-;36164:6;36159:3;36155:16;36148:23;;35910:267;35800:377;;;;:::o;36183:435::-;36363:3;36385:95;36476:3;36467:6;36385:95;:::i;:::-;36378:102;;36497:95;36588:3;36579:6;36497:95;:::i;:::-;36490:102;;36609:3;36602:10;;36183:435;;;;;:::o;36624:225::-;36764:34;36760:1;36752:6;36748:14;36741:58;36833:8;36828:2;36820:6;36816:15;36809:33;36624:225;:::o;36855:366::-;36997:3;37018:67;37082:2;37077:3;37018:67;:::i;:::-;37011:74;;37094:93;37183:3;37094:93;:::i;:::-;37212:2;37207:3;37203:12;37196:19;;36855:366;;;:::o;37227:419::-;37393:4;37431:2;37420:9;37416:18;37408:26;;37480:9;37474:4;37470:20;37466:1;37455:9;37451:17;37444:47;37508:131;37634:4;37508:131;:::i;:::-;37500:139;;37227:419;;;:::o;37652:231::-;37792:34;37788:1;37780:6;37776:14;37769:58;37861:14;37856:2;37848:6;37844:15;37837:39;37652:231;:::o;37889:366::-;38031:3;38052:67;38116:2;38111:3;38052:67;:::i;:::-;38045:74;;38128:93;38217:3;38128:93;:::i;:::-;38246:2;38241:3;38237:12;38230:19;;37889:366;;;:::o;38261:419::-;38427:4;38465:2;38454:9;38450:18;38442:26;;38514:9;38508:4;38504:20;38500:1;38489:9;38485:17;38478:47;38542:131;38668:4;38542:131;:::i;:::-;38534:139;;38261:419;;;:::o;38686:228::-;38826:34;38822:1;38814:6;38810:14;38803:58;38895:11;38890:2;38882:6;38878:15;38871:36;38686:228;:::o;38920:366::-;39062:3;39083:67;39147:2;39142:3;39083:67;:::i;:::-;39076:74;;39159:93;39248:3;39159:93;:::i;:::-;39277:2;39272:3;39268:12;39261:19;;38920:366;;;:::o;39292:419::-;39458:4;39496:2;39485:9;39481:18;39473:26;;39545:9;39539:4;39535:20;39531:1;39520:9;39516:17;39509:47;39573:131;39699:4;39573:131;:::i;:::-;39565:139;;39292:419;;;:::o;39717:223::-;39857:34;39853:1;39845:6;39841:14;39834:58;39926:6;39921:2;39913:6;39909:15;39902:31;39717:223;:::o;39946:366::-;40088:3;40109:67;40173:2;40168:3;40109:67;:::i;:::-;40102:74;;40185:93;40274:3;40185:93;:::i;:::-;40303:2;40298:3;40294:12;40287:19;;39946:366;;;:::o;40318:419::-;40484:4;40522:2;40511:9;40507:18;40499:26;;40571:9;40565:4;40561:20;40557:1;40546:9;40542:17;40535:47;40599:131;40725:4;40599:131;:::i;:::-;40591:139;;40318:419;;;:::o;40743:191::-;40783:4;40803:20;40821:1;40803:20;:::i;:::-;40798:25;;40837:20;40855:1;40837:20;:::i;:::-;40832:25;;40876:1;40873;40870:8;40867:34;;;40881:18;;:::i;:::-;40867:34;40926:1;40923;40919:9;40911:17;;40743:191;;;;:::o;40940:175::-;41080:27;41076:1;41068:6;41064:14;41057:51;40940:175;:::o;41121:366::-;41263:3;41284:67;41348:2;41343:3;41284:67;:::i;:::-;41277:74;;41360:93;41449:3;41360:93;:::i;:::-;41478:2;41473:3;41469:12;41462:19;;41121:366;;;:::o;41493:419::-;41659:4;41697:2;41686:9;41682:18;41674:26;;41746:9;41740:4;41736:20;41732:1;41721:9;41717:17;41710:47;41774:131;41900:4;41774:131;:::i;:::-;41766:139;;41493:419;;;:::o;41918:237::-;42058:34;42054:1;42046:6;42042:14;42035:58;42127:20;42122:2;42114:6;42110:15;42103:45;41918:237;:::o;42161:366::-;42303:3;42324:67;42388:2;42383:3;42324:67;:::i;:::-;42317:74;;42400:93;42489:3;42400:93;:::i;:::-;42518:2;42513:3;42509:12;42502:19;;42161:366;;;:::o;42533:419::-;42699:4;42737:2;42726:9;42722:18;42714:26;;42786:9;42780:4;42776:20;42772:1;42761:9;42757:17;42750:47;42814:131;42940:4;42814:131;:::i;:::-;42806:139;;42533:419;;;:::o;42958:180::-;43006:77;43003:1;42996:88;43103:4;43100:1;43093:15;43127:4;43124:1;43117:15;43144:185;43184:1;43201:20;43219:1;43201:20;:::i;:::-;43196:25;;43235:20;43253:1;43235:20;:::i;:::-;43230:25;;43274:1;43264:35;;43279:18;;:::i;:::-;43264:35;43321:1;43318;43314:9;43309:14;;43144:185;;;;:::o;43335:176::-;43367:1;43384:20;43402:1;43384:20;:::i;:::-;43379:25;;43418:20;43436:1;43418:20;:::i;:::-;43413:25;;43457:1;43447:35;;43462:18;;:::i;:::-;43447:35;43503:1;43500;43496:9;43491:14;;43335:176;;;;:::o;43517:98::-;43568:6;43602:5;43596:12;43586:22;;43517:98;;;:::o;43621:168::-;43704:11;43738:6;43733:3;43726:19;43778:4;43773:3;43769:14;43754:29;;43621:168;;;;:::o;43795:360::-;43881:3;43909:38;43941:5;43909:38;:::i;:::-;43963:70;44026:6;44021:3;43963:70;:::i;:::-;43956:77;;44042:52;44087:6;44082:3;44075:4;44068:5;44064:16;44042:52;:::i;:::-;44119:29;44141:6;44119:29;:::i;:::-;44114:3;44110:39;44103:46;;43885:270;43795:360;;;;:::o;44161:640::-;44356:4;44394:3;44383:9;44379:19;44371:27;;44408:71;44476:1;44465:9;44461:17;44452:6;44408:71;:::i;:::-;44489:72;44557:2;44546:9;44542:18;44533:6;44489:72;:::i;:::-;44571;44639:2;44628:9;44624:18;44615:6;44571:72;:::i;:::-;44690:9;44684:4;44680:20;44675:2;44664:9;44660:18;44653:48;44718:76;44789:4;44780:6;44718:76;:::i;:::-;44710:84;;44161:640;;;;;;;:::o;44807:141::-;44863:5;44894:6;44888:13;44879:22;;44910:32;44936:5;44910:32;:::i;:::-;44807:141;;;;:::o;44954:349::-;45023:6;45072:2;45060:9;45051:7;45047:23;45043:32;45040:119;;;45078:79;;:::i;:::-;45040:119;45198:1;45223:63;45278:7;45269:6;45258:9;45254:22;45223:63;:::i;:::-;45213:73;;45169:127;44954:349;;;;:::o;45309:180::-;45357:77;45354:1;45347:88;45454:4;45451:1;45444:15;45478:4;45475:1;45468:15;45495:182;45635:34;45631:1;45623:6;45619:14;45612:58;45495:182;:::o;45683:366::-;45825:3;45846:67;45910:2;45905:3;45846:67;:::i;:::-;45839:74;;45922:93;46011:3;45922:93;:::i;:::-;46040:2;46035:3;46031:12;46024:19;;45683:366;;;:::o;46055:419::-;46221:4;46259:2;46248:9;46244:18;46236:26;;46308:9;46302:4;46298:20;46294:1;46283:9;46279:17;46272:47;46336:131;46462:4;46336:131;:::i;:::-;46328:139;;46055:419;;;:::o;46480:178::-;46620:30;46616:1;46608:6;46604:14;46597:54;46480:178;:::o;46664:366::-;46806:3;46827:67;46891:2;46886:3;46827:67;:::i;:::-;46820:74;;46903:93;46992:3;46903:93;:::i;:::-;47021:2;47016:3;47012:12;47005:19;;46664:366;;;:::o;47036:419::-;47202:4;47240:2;47229:9;47225:18;47217:26;;47289:9;47283:4;47279:20;47275:1;47264:9;47260:17;47253:47;47317:131;47443:4;47317:131;:::i;:::-;47309:139;;47036:419;;;:::o
Swarm Source
ipfs://c38f94c81ed495377885f19910bd6e7c2b94ce4e8141861588e7f2548775774e
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.