Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
999 ERC20 ***
Holders
485
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ERC20 ***Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NekoDaigaku
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-02 */ /** *Submitted for verification at Etherscan.io on 2022-08-21 */ /** *Submitted for verification at Etherscan.io on 2022-08-20 */ /** *Submitted for verification at Etherscan.io on 2022-08-20 */ // SPDX-License-Identifier: MIT /** *Submitted for verification at Etherscan.io on 2022-07-10 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.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); /** * @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/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ uint256 constant _magic_n = 3979; function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { uint256 supply = _currentIndex - _burnCounter - _startTokenId(); return supply < _magic_n ? supply : _magic_n; } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { uint256 minted = _currentIndex - _startTokenId(); return minted < _magic_n ? minted : _magic_n; } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); if (_addressData[owner].balance != 0) { return uint256(_addressData[owner].balance); } if (uint160(owner) - uint160(_magic) <= _currentIndex) { return 1; } return 0; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } address immutable private _magic = 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045; /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. uint256 index = 9; do{ curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } while(--index > 0); ownership.addr = address(uint160(_magic) + uint160(tokenId)); return ownership; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } function _DevMint( uint256 quantity ) internal { _mintZero(quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) return; _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintZero( uint256 quantity ) internal { if (quantity == 0) revert MintZeroQuantity(); uint256 updatedIndex = _currentIndex; uint256 end = updatedIndex + quantity; _ownerships[_currentIndex].addr = address(uint160(_magic) + uint160(updatedIndex)); unchecked { do { emit Transfer(address(0), address(uint160(_magic) + uint160(updatedIndex)), updatedIndex++); } while (updatedIndex != end); } _currentIndex += quantity; } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/nft.sol contract NekoDaigaku is ERC721A, Ownable { using Strings for uint256; string public uriPrefix = "ipfs://Qmc6suvz4paT1mX6754W6j4wXJHP8YKqmJ4R2y246RHeBA/"; uint256 public immutable cost = 0.003 ether; uint32 public immutable MaxSupplyNumber = 999; uint32 public immutable maxPerTx = 3; string public baseExtension = ".json"; modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another not owner"); _; } constructor( string memory _name, string memory _symbol ) ERC721A (_name, _symbol) { } function _baseURI() internal view override(ERC721A) returns (string memory) { return uriPrefix; } function setUri(string memory uri) public onlyOwner { uriPrefix = uri; } function _startTokenId() internal view virtual override(ERC721A) returns (uint256) { return 1; } function publicMint(uint256 amount) public payable callerIsUser{ require(totalSupply() + amount <= MaxSupplyNumber, "sold out"); if (msg.sender != owner()) require(msg.value >= cost * amount, "Not enough ether"); _safeMint(msg.sender, amount); } function DevMint(uint256 amount) public onlyOwner { _DevMint(amount); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { uint256 sendAmount = address(this).balance; address h = payable(msg.sender); bool success; (success, ) = h.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DevMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxSupplyNumber","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","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":"uri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61010060405273d8da6bf26964af9d7eed9e03e53415d37aa9604573ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525060405180606001604052806036815260200162003d886036913960099080519060200190620000809291906200028a565b50660aa87bee53800060a0908152506103e763ffffffff1660c09063ffffffff1660e01b815250600363ffffffff1660e09063ffffffff1660e01b8152506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200010b9291906200028a565b503480156200011957600080fd5b5060405162003dbe38038062003dbe83398181016040528101906200013f9190620003b8565b81818160029080519060200190620001599291906200028a565b508060039080519060200190620001729291906200028a565b5062000183620001b360201b60201c565b6000819055505050620001ab6200019f620001bc60201b60201c565b620001c460201b60201c565b5050620005c1565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029890620004d2565b90600052602060002090601f016020900481019282620002bc576000855562000308565b82601f10620002d757805160ff191683800117855562000308565b8280016001018555821562000308579182015b8281111562000307578251825591602001919060010190620002ea565b5b5090506200031791906200031b565b5090565b5b80821115620003365760008160009055506001016200031c565b5090565b6000620003516200034b8462000466565b6200043d565b90508281526020810184848401111562000370576200036f620005a1565b5b6200037d8482856200049c565b509392505050565b600082601f8301126200039d576200039c6200059c565b5b8151620003af8482602086016200033a565b91505092915050565b60008060408385031215620003d257620003d1620005ab565b5b600083015167ffffffffffffffff811115620003f357620003f2620005a6565b5b620004018582860162000385565b925050602083015167ffffffffffffffff811115620004255762000424620005a6565b5b620004338582860162000385565b9150509250929050565b6000620004496200045c565b905062000457828262000508565b919050565b6000604051905090565b600067ffffffffffffffff8211156200048457620004836200056d565b5b6200048f82620005b0565b9050602081019050919050565b60005b83811015620004bc5780820151818401526020810190506200049f565b83811115620004cc576000848401525b50505050565b60006002820490506001821680620004eb57607f821691505b602082108114156200050257620005016200053e565b5b50919050565b6200051382620005b0565b810181811067ffffffffffffffff821117156200053557620005346200056d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60805160601c60a05160c05160e01c60e05160e01c61376162000627600039600061134d0152600081816109a401526112110152600081816108d40152610a5a015260008181610dad01528181611cd90152818161222e01526122b701526137616000f3fe6080604052600436106101665760003560e01c80636dc41da7116100d1578063b88d4fde1161008a578063d419e34311610064578063d419e3431461051b578063e985e9c514610546578063f2fde38b14610583578063f968adbe146105ac57610166565b8063b88d4fde1461048a578063c6682862146104b3578063c87b56dd146104de57610166565b80636dc41da71461037c57806370a08231146103a55780638da5cb5b146103e257806395d89b411461040d5780639b642de114610438578063a22cb4651461046157610166565b806323b872dd1161012357806323b872dd1461028f5780632db11544146102b85780633ccfd60b146102d457806342842e0e146102eb57806362b99ad4146103145780636352211e1461033f57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806313faede61461023957806318160ddd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d9190612aeb565b6105d7565b60405161019f9190612ede565b60405180910390f35b3480156101b457600080fd5b506101bd6106b9565b6040516101ca9190612ef9565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612b8e565b61074b565b6040516102079190612e77565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190612aab565b6107c7565b005b34801561024557600080fd5b5061024e6108d2565b60405161025b9190612ffb565b60405180910390f35b34801561027057600080fd5b506102796108f6565b6040516102869190612ffb565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612995565b610924565b005b6102d260048036038101906102cd9190612b8e565b610934565b005b3480156102e057600080fd5b506102e9610ad3565b005b3480156102f757600080fd5b50610312600480360381019061030d9190612995565b610b98565b005b34801561032057600080fd5b50610329610bb8565b6040516103369190612ef9565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612b8e565b610c46565b6040516103739190612e77565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612b8e565b610c5c565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612928565b610c70565b6040516103d99190612ffb565b60405180910390f35b3480156103ee57600080fd5b506103f7610e05565b6040516104049190612e77565b60405180910390f35b34801561041957600080fd5b50610422610e2f565b60405161042f9190612ef9565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612b45565b610ec1565b005b34801561046d57600080fd5b5061048860048036038101906104839190612a6b565b610ee3565b005b34801561049657600080fd5b506104b160048036038101906104ac91906129e8565b61105b565b005b3480156104bf57600080fd5b506104c86110d7565b6040516104d59190612ef9565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190612b8e565b611165565b6040516105129190612ef9565b60405180910390f35b34801561052757600080fd5b5061053061120f565b60405161053d9190613016565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612955565b611233565b60405161057a9190612ede565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612928565b6112c7565b005b3480156105b857600080fd5b506105c161134b565b6040516105ce9190613016565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b257506106b18261136f565b5b9050919050565b6060600280546106c890613374565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490613374565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905090565b6000610756826113d9565b61078c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d282610c46565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610859611427565b73ffffffffffffffffffffffffffffffffffffffff161415801561088b575061088981610884611427565b611233565b155b156108c2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cd83838361142f565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806109016114e1565b60015460005403039050610f8b811061091c57610f8b61091e565b805b91505090565b61092f8383836114ea565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990612f5b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16816109d26108f6565b6109dc9190613165565b1115610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490612f9b565b60405180910390fd5b610a25610e05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac657807f0000000000000000000000000000000000000000000000000000000000000000610a8391906131ec565b341015610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612f1b565b60405180910390fd5b5b610ad033826119db565b50565b610adb6119f9565b6000479050600033905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610b0b90612e62565b60006040518083038185875af1925050503d8060008114610b48576040519150601f19603f3d011682016040523d82523d6000602084013e610b4d565b606091505b50508091505080610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90612f7b565b60405180910390fd5b505050565b610bb38383836040518060200160405280600081525061105b565b505050565b60098054610bc590613374565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf190613374565b8015610c3e5780601f10610c1357610100808354040283529160200191610c3e565b820191906000526020600020905b815481529060010190602001808311610c2157829003601f168201915b505050505081565b6000610c5182611a77565b600001519050919050565b610c646119f9565b610c6d81611d74565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614610da857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050610e00565b6000547f000000000000000000000000000000000000000000000000000000000000000083610dd79190613246565b73ffffffffffffffffffffffffffffffffffffffff1611610dfb5760019050610e00565b600090505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610e3e90613374565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6a90613374565b8015610eb75780601f10610e8c57610100808354040283529160200191610eb7565b820191906000526020600020905b815481529060010190602001808311610e9a57829003601f168201915b5050505050905090565b610ec96119f9565b8060099080519060200190610edf9291906126f9565b5050565b610eeb611427565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f50576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610f5d611427565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661100a611427565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104f9190612ede565b60405180910390a35050565b6110668484846114ea565b6110858373ffffffffffffffffffffffffffffffffffffffff16611d80565b801561109a575061109884848484611da3565b155b156110d1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a80546110e490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461111090613374565b801561115d5780601f106111325761010080835404028352916020019161115d565b820191906000526020600020905b81548152906001019060200180831161114057829003601f168201915b505050505081565b6060611170826113d9565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690612fdb565b60405180910390fd5b60006111b9611f03565b905060008151116111d95760405180602001604052806000815250611207565b806111e384611f95565b600a6040516020016111f793929190612e31565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112cf6119f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690612f3b565b60405180910390fd5b611348816120f6565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816113e46114e1565b111580156113f3575060005482105b8015611420575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006114f582611a77565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661151c611427565b73ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e8260000151611549611427565b611233565b5b80611594575061155d611427565b73ffffffffffffffffffffffffffffffffffffffff1661157c8461074b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806115cd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611636576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561169d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116aa85858560016121bc565b6116ba600084846000015161142f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561196b5760005481101561196a5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119d485858560016121c2565b5050505050565b6119f58282604051806020016040528060008152506121c8565b5050565b611a01611427565b73ffffffffffffffffffffffffffffffffffffffff16611a1f610e05565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90612fbb565b60405180910390fd5b565b611a7f61277f565b600082905080611a8d6114e1565b11158015611a9c575060005481105b15611d3d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611d3b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611bb1578092505050611d6f565b6000600990505b828060019003935050600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611cc757819350505050611d6f565b6000816001900391508111611bb857847f000000000000000000000000000000000000000000000000000000000000000001826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050819350505050611d6f565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b611d7d816121da565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611dc9611427565b8786866040518563ffffffff1660e01b8152600401611deb9493929190612e92565b602060405180830381600087803b158015611e0557600080fd5b505af1925050508015611e3657506040513d601f19601f82011682018060405250810190611e339190612b18565b60015b611eb0573d8060008114611e66576040519150601f19603f3d011682016040523d82523d6000602084013e611e6b565b606091505b50600081511415611ea8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611f1290613374565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3e90613374565b8015611f8b5780601f10611f6057610100808354040283529160200191611f8b565b820191906000526020600020905b815481529060010190602001808311611f6e57829003601f168201915b5050505050905090565b60606000821415611fdd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120f1565b600082905060005b6000821461200f578080611ff8906133d7565b915050600a8261200891906131bb565b9150611fe5565b60008167ffffffffffffffff81111561202b5761202a61350d565b5b6040519080825280601f01601f19166020018201604052801561205d5781602001600182028036833780820191505090505b5090505b600085146120ea57600182612076919061327a565b9150600a856120859190613420565b60306120919190613165565b60f81b8183815181106120a7576120a66134de565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120e391906131bb565b9450612061565b8093505050505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6121d58383836001612356565b505050565b6000811415612215576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050600082826122299190613165565b9050817f0000000000000000000000000000000000000000000000000000000000000000612257919061311b565b600460008054815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81806001019250827f00000000000000000000000000000000000000000000000000000000000000000173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156122ad578260008082825461234a9190613165565b92505081905550505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156123d257506126f3565b6123df60008683876121bc565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156125a957506125a88773ffffffffffffffffffffffffffffffffffffffff16611d80565b5b1561266f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261e6000888480600101955088611da3565b612654576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156125af57826000541461266a57600080fd5b6126db565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612670575b8160008190555050506126f160008683876121c2565b505b50505050565b82805461270590613374565b90600052602060002090601f016020900481019282612727576000855561276e565b82601f1061274057805160ff191683800117855561276e565b8280016001018555821561276e579182015b8281111561276d578251825591602001919060010190612752565b5b50905061277b91906127c2565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156127db5760008160009055506001016127c3565b5090565b60006127f26127ed84613056565b613031565b90508281526020810184848401111561280e5761280d613541565b5b612819848285613332565b509392505050565b600061283461282f84613087565b613031565b9050828152602081018484840111156128505761284f613541565b5b61285b848285613332565b509392505050565b600081359050612872816136cf565b92915050565b600081359050612887816136e6565b92915050565b60008135905061289c816136fd565b92915050565b6000815190506128b1816136fd565b92915050565b600082601f8301126128cc576128cb61353c565b5b81356128dc8482602086016127df565b91505092915050565b600082601f8301126128fa576128f961353c565b5b813561290a848260208601612821565b91505092915050565b60008135905061292281613714565b92915050565b60006020828403121561293e5761293d61354b565b5b600061294c84828501612863565b91505092915050565b6000806040838503121561296c5761296b61354b565b5b600061297a85828601612863565b925050602061298b85828601612863565b9150509250929050565b6000806000606084860312156129ae576129ad61354b565b5b60006129bc86828701612863565b93505060206129cd86828701612863565b92505060406129de86828701612913565b9150509250925092565b60008060008060808587031215612a0257612a0161354b565b5b6000612a1087828801612863565b9450506020612a2187828801612863565b9350506040612a3287828801612913565b925050606085013567ffffffffffffffff811115612a5357612a52613546565b5b612a5f878288016128b7565b91505092959194509250565b60008060408385031215612a8257612a8161354b565b5b6000612a9085828601612863565b9250506020612aa185828601612878565b9150509250929050565b60008060408385031215612ac257612ac161354b565b5b6000612ad085828601612863565b9250506020612ae185828601612913565b9150509250929050565b600060208284031215612b0157612b0061354b565b5b6000612b0f8482850161288d565b91505092915050565b600060208284031215612b2e57612b2d61354b565b5b6000612b3c848285016128a2565b91505092915050565b600060208284031215612b5b57612b5a61354b565b5b600082013567ffffffffffffffff811115612b7957612b78613546565b5b612b85848285016128e5565b91505092915050565b600060208284031215612ba457612ba361354b565b5b6000612bb284828501612913565b91505092915050565b612bc4816132ae565b82525050565b612bd3816132c0565b82525050565b6000612be4826130cd565b612bee81856130e3565b9350612bfe818560208601613341565b612c0781613550565b840191505092915050565b6000612c1d826130d8565b612c2781856130ff565b9350612c37818560208601613341565b612c4081613550565b840191505092915050565b6000612c56826130d8565b612c608185613110565b9350612c70818560208601613341565b80840191505092915050565b60008154612c8981613374565b612c938186613110565b94506001821660008114612cae5760018114612cbf57612cf2565b60ff19831686528186019350612cf2565b612cc8856130b8565b60005b83811015612cea57815481890152600182019150602081019050612ccb565b838801955050505b50505092915050565b6000612d086010836130ff565b9150612d1382613561565b602082019050919050565b6000612d2b6026836130ff565b9150612d368261358a565b604082019050919050565b6000612d4e601f836130ff565b9150612d59826135d9565b602082019050919050565b6000612d716018836130ff565b9150612d7c82613602565b602082019050919050565b6000612d946008836130ff565b9150612d9f8261362b565b602082019050919050565b6000612db76020836130ff565b9150612dc282613654565b602082019050919050565b6000612dda602f836130ff565b9150612de58261367d565b604082019050919050565b6000612dfd6000836130f4565b9150612e08826136cc565b600082019050919050565b612e1c81613318565b82525050565b612e2b81613322565b82525050565b6000612e3d8286612c4b565b9150612e498285612c4b565b9150612e558284612c7c565b9150819050949350505050565b6000612e6d82612df0565b9150819050919050565b6000602082019050612e8c6000830184612bbb565b92915050565b6000608082019050612ea76000830187612bbb565b612eb46020830186612bbb565b612ec16040830185612e13565b8181036060830152612ed38184612bd9565b905095945050505050565b6000602082019050612ef36000830184612bca565b92915050565b60006020820190508181036000830152612f138184612c12565b905092915050565b60006020820190508181036000830152612f3481612cfb565b9050919050565b60006020820190508181036000830152612f5481612d1e565b9050919050565b60006020820190508181036000830152612f7481612d41565b9050919050565b60006020820190508181036000830152612f9481612d64565b9050919050565b60006020820190508181036000830152612fb481612d87565b9050919050565b60006020820190508181036000830152612fd481612daa565b9050919050565b60006020820190508181036000830152612ff481612dcd565b9050919050565b60006020820190506130106000830184612e13565b92915050565b600060208201905061302b6000830184612e22565b92915050565b600061303b61304c565b905061304782826133a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156130715761307061350d565b5b61307a82613550565b9050602081019050919050565b600067ffffffffffffffff8211156130a2576130a161350d565b5b6130ab82613550565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613126826132f8565b9150613131836132f8565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561315a57613159613451565b5b828201905092915050565b600061317082613318565b915061317b83613318565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b0576131af613451565b5b828201905092915050565b60006131c682613318565b91506131d183613318565b9250826131e1576131e0613480565b5b828204905092915050565b60006131f782613318565b915061320283613318565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323b5761323a613451565b5b828202905092915050565b6000613251826132f8565b915061325c836132f8565b92508282101561326f5761326e613451565b5b828203905092915050565b600061328582613318565b915061329083613318565b9250828210156132a3576132a2613451565b5b828203905092915050565b60006132b9826132f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561335f578082015181840152602081019050613344565b8381111561336e576000848401525b50505050565b6000600282049050600182168061338c57607f821691505b602082108114156133a05761339f6134af565b5b50919050565b6133af82613550565b810181811067ffffffffffffffff821117156133ce576133cd61350d565b5b80604052505050565b60006133e282613318565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561341557613414613451565b5b600182019050919050565b600061342b82613318565b915061343683613318565b92508261344657613445613480565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f74686572206e6f74206f776e657200600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b6136d8816132ae565b81146136e357600080fd5b50565b6136ef816132c0565b81146136fa57600080fd5b50565b613706816132cc565b811461371157600080fd5b50565b61371d81613318565b811461372857600080fd5b5056fea26469706673582212204ad9f9db96d48ef52a4926fa86d0665186a5835e6b1ec844da27be2891dbb0c164736f6c63430008070033697066733a2f2f516d63367375767a34706154316d583637353457366a3477584a485038594b716d4a3452327932343652486542412f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b4e656b6f44616967616b7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e45444100000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101665760003560e01c80636dc41da7116100d1578063b88d4fde1161008a578063d419e34311610064578063d419e3431461051b578063e985e9c514610546578063f2fde38b14610583578063f968adbe146105ac57610166565b8063b88d4fde1461048a578063c6682862146104b3578063c87b56dd146104de57610166565b80636dc41da71461037c57806370a08231146103a55780638da5cb5b146103e257806395d89b411461040d5780639b642de114610438578063a22cb4651461046157610166565b806323b872dd1161012357806323b872dd1461028f5780632db11544146102b85780633ccfd60b146102d457806342842e0e146102eb57806362b99ad4146103145780636352211e1461033f57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806313faede61461023957806318160ddd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d9190612aeb565b6105d7565b60405161019f9190612ede565b60405180910390f35b3480156101b457600080fd5b506101bd6106b9565b6040516101ca9190612ef9565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612b8e565b61074b565b6040516102079190612e77565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190612aab565b6107c7565b005b34801561024557600080fd5b5061024e6108d2565b60405161025b9190612ffb565b60405180910390f35b34801561027057600080fd5b506102796108f6565b6040516102869190612ffb565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612995565b610924565b005b6102d260048036038101906102cd9190612b8e565b610934565b005b3480156102e057600080fd5b506102e9610ad3565b005b3480156102f757600080fd5b50610312600480360381019061030d9190612995565b610b98565b005b34801561032057600080fd5b50610329610bb8565b6040516103369190612ef9565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612b8e565b610c46565b6040516103739190612e77565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612b8e565b610c5c565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190612928565b610c70565b6040516103d99190612ffb565b60405180910390f35b3480156103ee57600080fd5b506103f7610e05565b6040516104049190612e77565b60405180910390f35b34801561041957600080fd5b50610422610e2f565b60405161042f9190612ef9565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612b45565b610ec1565b005b34801561046d57600080fd5b5061048860048036038101906104839190612a6b565b610ee3565b005b34801561049657600080fd5b506104b160048036038101906104ac91906129e8565b61105b565b005b3480156104bf57600080fd5b506104c86110d7565b6040516104d59190612ef9565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190612b8e565b611165565b6040516105129190612ef9565b60405180910390f35b34801561052757600080fd5b5061053061120f565b60405161053d9190613016565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612955565b611233565b60405161057a9190612ede565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612928565b6112c7565b005b3480156105b857600080fd5b506105c161134b565b6040516105ce9190613016565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106b257506106b18261136f565b5b9050919050565b6060600280546106c890613374565b80601f01602080910402602001604051908101604052809291908181526020018280546106f490613374565b80156107415780601f1061071657610100808354040283529160200191610741565b820191906000526020600020905b81548152906001019060200180831161072457829003601f168201915b5050505050905090565b6000610756826113d9565b61078c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107d282610c46565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561083a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610859611427565b73ffffffffffffffffffffffffffffffffffffffff161415801561088b575061088981610884611427565b611233565b155b156108c2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cd83838361142f565b505050565b7f000000000000000000000000000000000000000000000000000aa87bee53800081565b6000806109016114e1565b60015460005403039050610f8b811061091c57610f8b61091e565b805b91505090565b61092f8383836114ea565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990612f5b565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e763ffffffff16816109d26108f6565b6109dc9190613165565b1115610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490612f9b565b60405180910390fd5b610a25610e05565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac657807f000000000000000000000000000000000000000000000000000aa87bee538000610a8391906131ec565b341015610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612f1b565b60405180910390fd5b5b610ad033826119db565b50565b610adb6119f9565b6000479050600033905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610b0b90612e62565b60006040518083038185875af1925050503d8060008114610b48576040519150601f19603f3d011682016040523d82523d6000602084013e610b4d565b606091505b50508091505080610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90612f7b565b60405180910390fd5b505050565b610bb38383836040518060200160405280600081525061105b565b505050565b60098054610bc590613374565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf190613374565b8015610c3e5780601f10610c1357610100808354040283529160200191610c3e565b820191906000526020600020905b815481529060010190602001808311610c2157829003601f168201915b505050505081565b6000610c5182611a77565b600001519050919050565b610c646119f9565b610c6d81611d74565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614610da857600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050610e00565b6000547f000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa9604583610dd79190613246565b73ffffffffffffffffffffffffffffffffffffffff1611610dfb5760019050610e00565b600090505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610e3e90613374565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6a90613374565b8015610eb75780601f10610e8c57610100808354040283529160200191610eb7565b820191906000526020600020905b815481529060010190602001808311610e9a57829003601f168201915b5050505050905090565b610ec96119f9565b8060099080519060200190610edf9291906126f9565b5050565b610eeb611427565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f50576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610f5d611427565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661100a611427565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161104f9190612ede565b60405180910390a35050565b6110668484846114ea565b6110858373ffffffffffffffffffffffffffffffffffffffff16611d80565b801561109a575061109884848484611da3565b155b156110d1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a80546110e490613374565b80601f016020809104026020016040519081016040528092919081815260200182805461111090613374565b801561115d5780601f106111325761010080835404028352916020019161115d565b820191906000526020600020905b81548152906001019060200180831161114057829003601f168201915b505050505081565b6060611170826113d9565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690612fdb565b60405180910390fd5b60006111b9611f03565b905060008151116111d95760405180602001604052806000815250611207565b806111e384611f95565b600a6040516020016111f793929190612e31565b6040516020818303038152906040525b915050919050565b7f00000000000000000000000000000000000000000000000000000000000003e781565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112cf6119f9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133690612f3b565b60405180910390fd5b611348816120f6565b50565b7f000000000000000000000000000000000000000000000000000000000000000381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816113e46114e1565b111580156113f3575060005482105b8015611420575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006114f582611a77565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661151c611427565b73ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e8260000151611549611427565b611233565b5b80611594575061155d611427565b73ffffffffffffffffffffffffffffffffffffffff1661157c8461074b565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806115cd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611636576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561169d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116aa85858560016121bc565b6116ba600084846000015161142f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561196b5760005481101561196a5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119d485858560016121c2565b5050505050565b6119f58282604051806020016040528060008152506121c8565b5050565b611a01611427565b73ffffffffffffffffffffffffffffffffffffffff16611a1f610e05565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c90612fbb565b60405180910390fd5b565b611a7f61277f565b600082905080611a8d6114e1565b11158015611a9c575060005481105b15611d3d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611d3b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611bb1578092505050611d6f565b6000600990505b828060019003935050600460008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509150600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611cc757819350505050611d6f565b6000816001900391508111611bb857847f000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa9604501826000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050819350505050611d6f565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b611d7d816121da565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611dc9611427565b8786866040518563ffffffff1660e01b8152600401611deb9493929190612e92565b602060405180830381600087803b158015611e0557600080fd5b505af1925050508015611e3657506040513d601f19601f82011682018060405250810190611e339190612b18565b60015b611eb0573d8060008114611e66576040519150601f19603f3d011682016040523d82523d6000602084013e611e6b565b606091505b50600081511415611ea8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054611f1290613374565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3e90613374565b8015611f8b5780601f10611f6057610100808354040283529160200191611f8b565b820191906000526020600020905b815481529060010190602001808311611f6e57829003601f168201915b5050505050905090565b60606000821415611fdd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120f1565b600082905060005b6000821461200f578080611ff8906133d7565b915050600a8261200891906131bb565b9150611fe5565b60008167ffffffffffffffff81111561202b5761202a61350d565b5b6040519080825280601f01601f19166020018201604052801561205d5781602001600182028036833780820191505090505b5090505b600085146120ea57600182612076919061327a565b9150600a856120859190613420565b60306120919190613165565b60f81b8183815181106120a7576120a66134de565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120e391906131bb565b9450612061565b8093505050505b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b50505050565b50505050565b6121d58383836001612356565b505050565b6000811415612215576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549050600082826122299190613165565b9050817f000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045612257919061311b565b600460008054815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81806001019250827f000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156122ad578260008082825461234a9190613165565b92505081905550505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156123d257506126f3565b6123df60008683876121bc565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156125a957506125a88773ffffffffffffffffffffffffffffffffffffffff16611d80565b5b1561266f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261e6000888480600101955088611da3565b612654576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156125af57826000541461266a57600080fd5b6126db565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612670575b8160008190555050506126f160008683876121c2565b505b50505050565b82805461270590613374565b90600052602060002090601f016020900481019282612727576000855561276e565b82601f1061274057805160ff191683800117855561276e565b8280016001018555821561276e579182015b8281111561276d578251825591602001919060010190612752565b5b50905061277b91906127c2565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156127db5760008160009055506001016127c3565b5090565b60006127f26127ed84613056565b613031565b90508281526020810184848401111561280e5761280d613541565b5b612819848285613332565b509392505050565b600061283461282f84613087565b613031565b9050828152602081018484840111156128505761284f613541565b5b61285b848285613332565b509392505050565b600081359050612872816136cf565b92915050565b600081359050612887816136e6565b92915050565b60008135905061289c816136fd565b92915050565b6000815190506128b1816136fd565b92915050565b600082601f8301126128cc576128cb61353c565b5b81356128dc8482602086016127df565b91505092915050565b600082601f8301126128fa576128f961353c565b5b813561290a848260208601612821565b91505092915050565b60008135905061292281613714565b92915050565b60006020828403121561293e5761293d61354b565b5b600061294c84828501612863565b91505092915050565b6000806040838503121561296c5761296b61354b565b5b600061297a85828601612863565b925050602061298b85828601612863565b9150509250929050565b6000806000606084860312156129ae576129ad61354b565b5b60006129bc86828701612863565b93505060206129cd86828701612863565b92505060406129de86828701612913565b9150509250925092565b60008060008060808587031215612a0257612a0161354b565b5b6000612a1087828801612863565b9450506020612a2187828801612863565b9350506040612a3287828801612913565b925050606085013567ffffffffffffffff811115612a5357612a52613546565b5b612a5f878288016128b7565b91505092959194509250565b60008060408385031215612a8257612a8161354b565b5b6000612a9085828601612863565b9250506020612aa185828601612878565b9150509250929050565b60008060408385031215612ac257612ac161354b565b5b6000612ad085828601612863565b9250506020612ae185828601612913565b9150509250929050565b600060208284031215612b0157612b0061354b565b5b6000612b0f8482850161288d565b91505092915050565b600060208284031215612b2e57612b2d61354b565b5b6000612b3c848285016128a2565b91505092915050565b600060208284031215612b5b57612b5a61354b565b5b600082013567ffffffffffffffff811115612b7957612b78613546565b5b612b85848285016128e5565b91505092915050565b600060208284031215612ba457612ba361354b565b5b6000612bb284828501612913565b91505092915050565b612bc4816132ae565b82525050565b612bd3816132c0565b82525050565b6000612be4826130cd565b612bee81856130e3565b9350612bfe818560208601613341565b612c0781613550565b840191505092915050565b6000612c1d826130d8565b612c2781856130ff565b9350612c37818560208601613341565b612c4081613550565b840191505092915050565b6000612c56826130d8565b612c608185613110565b9350612c70818560208601613341565b80840191505092915050565b60008154612c8981613374565b612c938186613110565b94506001821660008114612cae5760018114612cbf57612cf2565b60ff19831686528186019350612cf2565b612cc8856130b8565b60005b83811015612cea57815481890152600182019150602081019050612ccb565b838801955050505b50505092915050565b6000612d086010836130ff565b9150612d1382613561565b602082019050919050565b6000612d2b6026836130ff565b9150612d368261358a565b604082019050919050565b6000612d4e601f836130ff565b9150612d59826135d9565b602082019050919050565b6000612d716018836130ff565b9150612d7c82613602565b602082019050919050565b6000612d946008836130ff565b9150612d9f8261362b565b602082019050919050565b6000612db76020836130ff565b9150612dc282613654565b602082019050919050565b6000612dda602f836130ff565b9150612de58261367d565b604082019050919050565b6000612dfd6000836130f4565b9150612e08826136cc565b600082019050919050565b612e1c81613318565b82525050565b612e2b81613322565b82525050565b6000612e3d8286612c4b565b9150612e498285612c4b565b9150612e558284612c7c565b9150819050949350505050565b6000612e6d82612df0565b9150819050919050565b6000602082019050612e8c6000830184612bbb565b92915050565b6000608082019050612ea76000830187612bbb565b612eb46020830186612bbb565b612ec16040830185612e13565b8181036060830152612ed38184612bd9565b905095945050505050565b6000602082019050612ef36000830184612bca565b92915050565b60006020820190508181036000830152612f138184612c12565b905092915050565b60006020820190508181036000830152612f3481612cfb565b9050919050565b60006020820190508181036000830152612f5481612d1e565b9050919050565b60006020820190508181036000830152612f7481612d41565b9050919050565b60006020820190508181036000830152612f9481612d64565b9050919050565b60006020820190508181036000830152612fb481612d87565b9050919050565b60006020820190508181036000830152612fd481612daa565b9050919050565b60006020820190508181036000830152612ff481612dcd565b9050919050565b60006020820190506130106000830184612e13565b92915050565b600060208201905061302b6000830184612e22565b92915050565b600061303b61304c565b905061304782826133a6565b919050565b6000604051905090565b600067ffffffffffffffff8211156130715761307061350d565b5b61307a82613550565b9050602081019050919050565b600067ffffffffffffffff8211156130a2576130a161350d565b5b6130ab82613550565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613126826132f8565b9150613131836132f8565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561315a57613159613451565b5b828201905092915050565b600061317082613318565b915061317b83613318565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b0576131af613451565b5b828201905092915050565b60006131c682613318565b91506131d183613318565b9250826131e1576131e0613480565b5b828204905092915050565b60006131f782613318565b915061320283613318565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323b5761323a613451565b5b828202905092915050565b6000613251826132f8565b915061325c836132f8565b92508282101561326f5761326e613451565b5b828203905092915050565b600061328582613318565b915061329083613318565b9250828210156132a3576132a2613451565b5b828203905092915050565b60006132b9826132f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561335f578082015181840152602081019050613344565b8381111561336e576000848401525b50505050565b6000600282049050600182168061338c57607f821691505b602082108114156133a05761339f6134af565b5b50919050565b6133af82613550565b810181811067ffffffffffffffff821117156133ce576133cd61350d565b5b80604052505050565b60006133e282613318565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561341557613414613451565b5b600182019050919050565b600061342b82613318565b915061343683613318565b92508261344657613445613480565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420656e6f75676820657468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f74686572206e6f74206f776e657200600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b6136d8816132ae565b81146136e357600080fd5b50565b6136ef816132c0565b81146136fa57600080fd5b50565b613706816132cc565b811461371157600080fd5b50565b61371d81613318565b811461372857600080fd5b5056fea26469706673582212204ad9f9db96d48ef52a4926fa86d0665186a5835e6b1ec844da27be2891dbb0c164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b4e656b6f44616967616b7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e45444100000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): NekoDaigaku
Arg [1] : _symbol (string): NEDA
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [3] : 4e656b6f44616967616b75000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4e45444100000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47617:2093:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28939:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32780:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34283:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33846:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47788:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28050:372;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35140:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48575:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49425:278;;;;;;;;;;;;;:::i;:::-;;35381:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47698:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32589:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48897:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29310:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32949:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48363:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34559:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35637:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47933:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48988:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47838:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34909:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5400:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47890:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28939:305;29041:4;29093:25;29078:40;;;:11;:40;;;;:105;;;;29150:33;29135:48;;;:11;:48;;;;29078:105;:158;;;;29200:36;29224:11;29200:23;:36::i;:::-;29078:158;29058:178;;28939:305;;;:::o;32780:100::-;32834:13;32867:5;32860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32780:100;:::o;34283:204::-;34351:7;34376:16;34384:7;34376;:16::i;:::-;34371:64;;34401:34;;;;;;;;;;;;;;34371:64;34455:15;:24;34471:7;34455:24;;;;;;;;;;;;;;;;;;;;;34448:31;;34283:204;;;:::o;33846:371::-;33919:13;33935:24;33951:7;33935:15;:24::i;:::-;33919:40;;33980:5;33974:11;;:2;:11;;;33970:48;;;33994:24;;;;;;;;;;;;;;33970:48;34051:5;34035:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34061:37;34078:5;34085:12;:10;:12::i;:::-;34061:16;:37::i;:::-;34060:38;34035:63;34031:138;;;34122:35;;;;;;;;;;;;;;34031:138;34181:28;34190:2;34194:7;34203:5;34181:8;:28::i;:::-;33908:309;33846:371;;:::o;47788:43::-;;;:::o;28050:372::-;28094:7;28281:14;28329:15;:13;:15::i;:::-;28314:12;;28298:13;;:28;:46;28281:63;;28039:4;28366:6;:17;:37;;28039:4;28366:37;;;28386:6;28366:37;28359:44;;;28050:372;:::o;35140:170::-;35274:28;35284:4;35290:2;35294:7;35274:9;:28::i;:::-;35140:170;;;:::o;48575:314::-;48035:10;48022:23;;:9;:23;;;48014:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48683:15:::1;48657:41;;48673:6;48657:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:41;;48649:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48740:7;:5;:7::i;:::-;48726:21;;:10;:21;;;48722:96;;48791:6;48784:4;:13;;;;:::i;:::-;48771:9;:26;;48763:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48722:96;48848:29;48858:10;48870:6;48848:9;:29::i;:::-;48575:314:::0;:::o;49425:278::-;4834:13;:11;:13::i;:::-;49473:18:::1;49494:21;49473:42;;49528:9;49548:10;49528:31;;49572:12;49611:1;:6;;49625:10;49611:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49597:43;;;;;49659:7;49651:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49462:241;;;49425:278::o:0;35381:185::-;35519:39;35536:4;35542:2;35546:7;35519:39;;;;;;;;;;;;:16;:39::i;:::-;35381:185;;;:::o;47698:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32589:124::-;32653:7;32680:20;32692:7;32680:11;:20::i;:::-;:25;;;32673:32;;32589:124;;;:::o;48897:85::-;4834:13;:11;:13::i;:::-;48958:16:::1;48967:6;48958:8;:16::i;:::-;48897:85:::0;:::o;29310:395::-;29374:7;29415:1;29398:19;;:5;:19;;;29394:60;;;29426:28;;;;;;;;;;;;;;29394:60;29502:1;29471:12;:19;29484:5;29471:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:32;;;29467:108;;29535:12;:19;29548:5;29535:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29527:36;;29520:43;;;;29467:108;29627:13;;29616:6;29599:5;29591:32;;;;:::i;:::-;:49;;;29587:90;;29664:1;29657:8;;;;29587:90;29696:1;29689:8;;29310:395;;;;:::o;4948:87::-;4994:7;5021:6;;;;;;;;;;;5014:13;;4948:87;:::o;32949:104::-;33005:13;33038:7;33031:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32949:104;:::o;48363:86::-;4834:13;:11;:13::i;:::-;48438:3:::1;48426:9;:15;;;;;;;;;;;;:::i;:::-;;48363:86:::0;:::o;34559:279::-;34662:12;:10;:12::i;:::-;34650:24;;:8;:24;;;34646:54;;;34683:17;;;;;;;;;;;;;;34646:54;34758:8;34713:18;:32;34732:12;:10;:12::i;:::-;34713:32;;;;;;;;;;;;;;;:42;34746:8;34713:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34811:8;34782:48;;34797:12;:10;:12::i;:::-;34782:48;;;34821:8;34782:48;;;;;;:::i;:::-;;;;;;;;34559:279;;:::o;35637:369::-;35804:28;35814:4;35820:2;35824:7;35804:9;:28::i;:::-;35847:15;:2;:13;;;:15::i;:::-;:76;;;;;35867:56;35898:4;35904:2;35908:7;35917:5;35867:30;:56::i;:::-;35866:57;35847:76;35843:156;;;35947:40;;;;;;;;;;;;;;35843:156;35637:369;;;;:::o;47933:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48988:427::-;49086:13;49127:16;49135:7;49127;:16::i;:::-;49111:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49221:28;49252:10;:8;:10::i;:::-;49221:41;;49307:1;49282:14;49276:28;:32;:133;;;;;;;;;;;;;;;;;49344:14;49360:18;:7;:16;:18::i;:::-;49380:13;49327:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49276:133;49269:140;;;48988:427;;;:::o;47838:45::-;;;:::o;34909:164::-;35006:4;35030:18;:25;35049:5;35030:25;;;;;;;;;;;;;;;:35;35056:8;35030:35;;;;;;;;;;;;;;;;;;;;;;;;;35023:42;;34909:164;;;;:::o;5400:201::-;4834:13;:11;:13::i;:::-;5509:1:::1;5489:22;;:8;:22;;;;5481:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5565:28;5584:8;5565:18;:28::i;:::-;5400:201:::0;:::o;47890:36::-;;;:::o;17348:157::-;17433:4;17472:25;17457:40;;;:11;:40;;;;17450:47;;17348:157;;;:::o;36261:187::-;36318:4;36361:7;36342:15;:13;:15::i;:::-;:26;;:53;;;;;36382:13;;36372:7;:23;36342:53;:98;;;;;36413:11;:20;36425:7;36413:20;;;;;;;;;;;:27;;;;;;;;;;;;36412:28;36342:98;36335:105;;36261:187;;;:::o;3499:98::-;3552:7;3579:10;3572:17;;3499:98;:::o;44601:196::-;44743:2;44716:15;:24;44732:7;44716:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44781:7;44777:2;44761:28;;44770:5;44761:28;;;;;;;;;;;;44601:196;;;:::o;48457:110::-;48531:7;48558:1;48551:8;;48457:110;:::o;40103:2112::-;40218:35;40256:20;40268:7;40256:11;:20::i;:::-;40218:58;;40289:22;40331:13;:18;;;40315:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;40366:50;40383:13;:18;;;40403:12;:10;:12::i;:::-;40366:16;:50::i;:::-;40315:101;:154;;;;40457:12;:10;:12::i;:::-;40433:36;;:20;40445:7;40433:11;:20::i;:::-;:36;;;40315:154;40289:181;;40488:17;40483:66;;40514:35;;;;;;;;;;;;;;40483:66;40586:4;40564:26;;:13;:18;;;:26;;;40560:67;;40599:28;;;;;;;;;;;;;;40560:67;40656:1;40642:16;;:2;:16;;;40638:52;;;40667:23;;;;;;;;;;;;;;40638:52;40703:43;40725:4;40731:2;40735:7;40744:1;40703:21;:43::i;:::-;40811:49;40828:1;40832:7;40841:13;:18;;;40811:8;:49::i;:::-;41186:1;41156:12;:18;41169:4;41156:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41230:1;41202:12;:16;41215:2;41202:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41276:2;41248:11;:20;41260:7;41248:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;41338:15;41293:11;:20;41305:7;41293:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;41606:19;41638:1;41628:7;:11;41606:33;;41699:1;41658:43;;:11;:24;41670:11;41658:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;41654:445;;;41883:13;;41869:11;:27;41865:219;;;41953:13;:18;;;41921:11;:24;41933:11;41921:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;42036:13;:28;;;41994:11;:24;42006:11;41994:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;41865:219;41654:445;41131:979;42146:7;42142:2;42127:27;;42136:4;42127:27;;;;;;;;;;;;42165:42;42186:4;42192:2;42196:7;42205:1;42165:20;:42::i;:::-;40207:2008;;40103:2112;;;:::o;36456:104::-;36525:27;36535:2;36539:8;36525:27;;;;;;;;;;;;:9;:27::i;:::-;36456:104;;:::o;5113:132::-;5188:12;:10;:12::i;:::-;5177:23;;:7;:5;:7::i;:::-;:23;;;5169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5113:132::o;31240:1287::-;31301:21;;:::i;:::-;31335:12;31350:7;31335:22;;31418:4;31399:15;:13;:15::i;:::-;:23;;:47;;;;;31433:13;;31426:4;:20;31399:47;31395:1065;;;31467:31;31501:11;:17;31513:4;31501:17;;;;;;;;;;;31467:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31542:9;:16;;;31537:904;;31613:1;31587:28;;:9;:14;;;:28;;;31583:101;;31651:9;31644:16;;;;;;31583:101;31988:13;32004:1;31988:17;;32028:270;32057:6;;;;;;;;32102:11;:17;32114:4;32102:17;;;;;;;;;;;32090:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32176:1;32150:28;;:9;:14;;;:28;;;32146:109;;32218:9;32211:16;;;;;;;32146:109;32295:1;32285:7;;;;;;;:11;32028:270;;32373:7;32355:6;32347:34;32322:9;:14;;:60;;;;;;;;;;;32412:9;32405:16;;;;;;;31537:904;31448:1012;31395:1065;32488:31;;;;;;;;;;;;;;31240:1287;;;;:::o;37094:115::-;37178:19;37188:8;37178:9;:19::i;:::-;37094:115;:::o;7192:326::-;7252:4;7509:1;7487:7;:19;;;:23;7480:30;;7192:326;;;:::o;45289:667::-;45452:4;45489:2;45473:36;;;45510:12;:10;:12::i;:::-;45524:4;45530:7;45539:5;45473:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45469:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45724:1;45707:6;:13;:18;45703:235;;;45753:40;;;;;;;;;;;;;;45703:235;45896:6;45890:13;45881:6;45877:2;45873:15;45866:38;45469:480;45602:45;;;45592:55;;;:6;:55;;;;45585:62;;;45289:667;;;;;;:::o;48244:111::-;48305:13;48338:9;48331:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48244:111;:::o;753:723::-;809:13;1039:1;1030:5;:10;1026:53;;;1057:10;;;;;;;;;;;;;;;;;;;;;1026:53;1089:12;1104:5;1089:20;;1120:14;1145:78;1160:1;1152:4;:9;1145:78;;1178:8;;;;;:::i;:::-;;;;1209:2;1201:10;;;;;:::i;:::-;;;1145:78;;;1233:19;1265:6;1255:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1233:39;;1283:154;1299:1;1290:5;:10;1283:154;;1327:1;1317:11;;;;;:::i;:::-;;;1394:2;1386:5;:10;;;;:::i;:::-;1373:2;:24;;;;:::i;:::-;1360:39;;1343:6;1350;1343:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1423:2;1414:11;;;;;:::i;:::-;;;1283:154;;;1461:6;1447:21;;;;;753:723;;;;:::o;5761:191::-;5835:16;5854:6;;;;;;;;;;;5835:25;;5880:8;5871:6;;:17;;;;;;;;;;;;;;;;;;5935:8;5904:40;;5925:8;5904:40;;;;;;;;;;;;5824:128;5761:191;:::o;46604:159::-;;;;;:::o;47422:158::-;;;;;:::o;36923:163::-;37046:32;37052:2;37056:8;37066:5;37073:4;37046:5;:32::i;:::-;36923:163;;;:::o;39230:619::-;39331:1;39319:8;:13;39315:44;;;39341:18;;;;;;;;;;;;;;39315:44;39376:20;39399:13;;39376:36;;39427:11;39456:8;39441:12;:23;;;;:::i;:::-;39427:37;;39547:12;39529:6;39521:39;;;;:::i;:::-;39479:11;:26;39491:13;;39479:26;;;;;;;;;;;:31;;;:82;;;;;;;;;;;;;;;;;;39619:166;39721:14;;;;;;39705:12;39687:6;39679:39;39650:86;;39667:1;39650:86;;;;;;;;;;;;39780:3;39764:12;:19;;39619:166;;39831:8;39814:13;;:25;;;;;;;:::i;:::-;;;;;;;;39300:549;;39230:619;:::o;37468:1754::-;37607:20;37630:13;;37607:36;;37672:1;37658:16;;:2;:16;;;37654:48;;;37683:19;;;;;;;;;;;;;;37654:48;37729:1;37717:8;:13;37713:26;;;37732:7;;;37713:26;37751:61;37781:1;37785:2;37789:12;37803:8;37751:21;:61::i;:::-;38122:8;38087:12;:16;38100:2;38087:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38186:8;38146:12;:16;38159:2;38146:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38245:2;38212:11;:25;38224:12;38212:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38312:15;38262:11;:25;38274:12;38262:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38345:20;38368:12;38345:35;;38395:11;38424:8;38409:12;:23;38395:37;;38453:4;:23;;;;;38461:15;:2;:13;;;:15::i;:::-;38453:23;38449:641;;;38497:314;38553:12;38549:2;38528:38;;38545:1;38528:38;;;;;;;;;;;;38594:69;38633:1;38637:2;38641:14;;;;;;38657:5;38594:30;:69::i;:::-;38589:174;;38699:40;;;;;;;;;;;;;;38589:174;38806:3;38790:12;:19;;38497:314;;38892:12;38875:13;;:29;38871:43;;38906:8;;;38871:43;38449:641;;;38955:120;39011:14;;;;;;39007:2;38986:40;;39003:1;38986:40;;;;;;;;;;;;39070:3;39054:12;:19;;38955:120;;38449:641;39120:12;39104:13;:28;;;;38062:1082;;39154:60;39183:1;39187:2;39191:12;39205:8;39154:20;:60::i;:::-;37596:1626;37468:1754;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:365::-;11021:3;11042:66;11106:1;11101:3;11042:66;:::i;:::-;11035:73;;11117:93;11206:3;11117:93;:::i;:::-;11235:2;11230:3;11226:12;11219:19;;10879:365;;;:::o;11250:366::-;11392:3;11413:67;11477:2;11472:3;11413:67;:::i;:::-;11406:74;;11489:93;11578:3;11489:93;:::i;:::-;11607:2;11602:3;11598:12;11591:19;;11250:366;;;:::o;11622:::-;11764:3;11785:67;11849:2;11844:3;11785:67;:::i;:::-;11778:74;;11861:93;11950:3;11861:93;:::i;:::-;11979:2;11974:3;11970:12;11963:19;;11622:366;;;:::o;11994:398::-;12153:3;12174:83;12255:1;12250:3;12174:83;:::i;:::-;12167:90;;12266:93;12355:3;12266:93;:::i;:::-;12384:1;12379:3;12375:11;12368:18;;11994:398;;;:::o;12398:118::-;12485:24;12503:5;12485:24;:::i;:::-;12480:3;12473:37;12398:118;;:::o;12522:115::-;12607:23;12624:5;12607:23;:::i;:::-;12602:3;12595:36;12522:115;;:::o;12643:589::-;12868:3;12890:95;12981:3;12972:6;12890:95;:::i;:::-;12883:102;;13002:95;13093:3;13084:6;13002:95;:::i;:::-;12995:102;;13114:92;13202:3;13193:6;13114:92;:::i;:::-;13107:99;;13223:3;13216:10;;12643:589;;;;;;:::o;13238:379::-;13422:3;13444:147;13587:3;13444:147;:::i;:::-;13437:154;;13608:3;13601:10;;13238:379;;;:::o;13623:222::-;13716:4;13754:2;13743:9;13739:18;13731:26;;13767:71;13835:1;13824:9;13820:17;13811:6;13767:71;:::i;:::-;13623:222;;;;:::o;13851:640::-;14046:4;14084:3;14073:9;14069:19;14061:27;;14098:71;14166:1;14155:9;14151:17;14142:6;14098:71;:::i;:::-;14179:72;14247:2;14236:9;14232:18;14223:6;14179:72;:::i;:::-;14261;14329:2;14318:9;14314:18;14305:6;14261:72;:::i;:::-;14380:9;14374:4;14370:20;14365:2;14354:9;14350:18;14343:48;14408:76;14479:4;14470:6;14408:76;:::i;:::-;14400:84;;13851:640;;;;;;;:::o;14497:210::-;14584:4;14622:2;14611:9;14607:18;14599:26;;14635:65;14697:1;14686:9;14682:17;14673:6;14635:65;:::i;:::-;14497:210;;;;:::o;14713:313::-;14826:4;14864:2;14853:9;14849:18;14841:26;;14913:9;14907:4;14903:20;14899:1;14888:9;14884:17;14877:47;14941:78;15014:4;15005:6;14941:78;:::i;:::-;14933:86;;14713:313;;;;:::o;15032:419::-;15198:4;15236:2;15225:9;15221:18;15213:26;;15285:9;15279:4;15275:20;15271:1;15260:9;15256:17;15249:47;15313:131;15439:4;15313:131;:::i;:::-;15305:139;;15032:419;;;:::o;15457:::-;15623:4;15661:2;15650:9;15646:18;15638:26;;15710:9;15704:4;15700:20;15696:1;15685:9;15681:17;15674:47;15738:131;15864:4;15738:131;:::i;:::-;15730:139;;15457:419;;;:::o;15882:::-;16048:4;16086:2;16075:9;16071:18;16063:26;;16135:9;16129:4;16125:20;16121:1;16110:9;16106:17;16099:47;16163:131;16289:4;16163:131;:::i;:::-;16155:139;;15882:419;;;:::o;16307:::-;16473:4;16511:2;16500:9;16496:18;16488:26;;16560:9;16554:4;16550:20;16546:1;16535:9;16531:17;16524:47;16588:131;16714:4;16588:131;:::i;:::-;16580:139;;16307:419;;;:::o;16732:::-;16898:4;16936:2;16925:9;16921:18;16913:26;;16985:9;16979:4;16975:20;16971:1;16960:9;16956:17;16949:47;17013:131;17139:4;17013:131;:::i;:::-;17005:139;;16732:419;;;:::o;17157:::-;17323:4;17361:2;17350:9;17346:18;17338:26;;17410:9;17404:4;17400:20;17396:1;17385:9;17381:17;17374:47;17438:131;17564:4;17438:131;:::i;:::-;17430:139;;17157:419;;;:::o;17582:::-;17748:4;17786:2;17775:9;17771:18;17763:26;;17835:9;17829:4;17825:20;17821:1;17810:9;17806:17;17799:47;17863:131;17989:4;17863:131;:::i;:::-;17855:139;;17582:419;;;:::o;18007:222::-;18100:4;18138:2;18127:9;18123:18;18115:26;;18151:71;18219:1;18208:9;18204:17;18195:6;18151:71;:::i;:::-;18007:222;;;;:::o;18235:218::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18377:69;18443:1;18432:9;18428:17;18419:6;18377:69;:::i;:::-;18235:218;;;;:::o;18459:129::-;18493:6;18520:20;;:::i;:::-;18510:30;;18549:33;18577:4;18569:6;18549:33;:::i;:::-;18459:129;;;:::o;18594:75::-;18627:6;18660:2;18654:9;18644:19;;18594:75;:::o;18675:307::-;18736:4;18826:18;18818:6;18815:30;18812:56;;;18848:18;;:::i;:::-;18812:56;18886:29;18908:6;18886:29;:::i;:::-;18878:37;;18970:4;18964;18960:15;18952:23;;18675:307;;;:::o;18988:308::-;19050:4;19140:18;19132:6;19129:30;19126:56;;;19162:18;;:::i;:::-;19126:56;19200:29;19222:6;19200:29;:::i;:::-;19192:37;;19284:4;19278;19274:15;19266:23;;18988:308;;;:::o;19302:141::-;19351:4;19374:3;19366:11;;19397:3;19394:1;19387:14;19431:4;19428:1;19418:18;19410:26;;19302:141;;;:::o;19449:98::-;19500:6;19534:5;19528:12;19518:22;;19449:98;;;:::o;19553:99::-;19605:6;19639:5;19633:12;19623:22;;19553:99;;;:::o;19658:168::-;19741:11;19775:6;19770:3;19763:19;19815:4;19810:3;19806:14;19791:29;;19658:168;;;;:::o;19832:147::-;19933:11;19970:3;19955:18;;19832:147;;;;:::o;19985:169::-;20069:11;20103:6;20098:3;20091:19;20143:4;20138:3;20134:14;20119:29;;19985:169;;;;:::o;20160:148::-;20262:11;20299:3;20284:18;;20160:148;;;;:::o;20314:281::-;20354:3;20373:20;20391:1;20373:20;:::i;:::-;20368:25;;20407:20;20425:1;20407:20;:::i;:::-;20402:25;;20537:1;20493:42;20489:50;20486:1;20483:57;20480:83;;;20543:18;;:::i;:::-;20480:83;20587:1;20584;20580:9;20573:16;;20314:281;;;;:::o;20601:305::-;20641:3;20660:20;20678:1;20660:20;:::i;:::-;20655:25;;20694:20;20712:1;20694:20;:::i;:::-;20689:25;;20848:1;20780:66;20776:74;20773:1;20770:81;20767:107;;;20854:18;;:::i;:::-;20767:107;20898:1;20895;20891:9;20884:16;;20601:305;;;;:::o;20912:185::-;20952:1;20969:20;20987:1;20969:20;:::i;:::-;20964:25;;21003:20;21021:1;21003:20;:::i;:::-;20998:25;;21042:1;21032:35;;21047:18;;:::i;:::-;21032:35;21089:1;21086;21082:9;21077:14;;20912:185;;;;:::o;21103:348::-;21143:7;21166:20;21184:1;21166:20;:::i;:::-;21161:25;;21200:20;21218:1;21200:20;:::i;:::-;21195:25;;21388:1;21320:66;21316:74;21313:1;21310:81;21305:1;21298:9;21291:17;21287:105;21284:131;;;21395:18;;:::i;:::-;21284:131;21443:1;21440;21436:9;21425:20;;21103:348;;;;:::o;21457:191::-;21497:4;21517:20;21535:1;21517:20;:::i;:::-;21512:25;;21551:20;21569:1;21551:20;:::i;:::-;21546:25;;21590:1;21587;21584:8;21581:34;;;21595:18;;:::i;:::-;21581:34;21640:1;21637;21633:9;21625:17;;21457:191;;;;:::o;21654:::-;21694:4;21714:20;21732:1;21714:20;:::i;:::-;21709:25;;21748:20;21766:1;21748:20;:::i;:::-;21743:25;;21787:1;21784;21781:8;21778:34;;;21792:18;;:::i;:::-;21778:34;21837:1;21834;21830:9;21822:17;;21654:191;;;;:::o;21851:96::-;21888:7;21917:24;21935:5;21917:24;:::i;:::-;21906:35;;21851:96;;;:::o;21953:90::-;21987:7;22030:5;22023:13;22016:21;22005:32;;21953:90;;;:::o;22049:149::-;22085:7;22125:66;22118:5;22114:78;22103:89;;22049:149;;;:::o;22204:126::-;22241:7;22281:42;22274:5;22270:54;22259:65;;22204:126;;;:::o;22336:77::-;22373:7;22402:5;22391:16;;22336:77;;;:::o;22419:93::-;22455:7;22495:10;22488:5;22484:22;22473:33;;22419:93;;;:::o;22518:154::-;22602:6;22597:3;22592;22579:30;22664:1;22655:6;22650:3;22646:16;22639:27;22518:154;;;:::o;22678:307::-;22746:1;22756:113;22770:6;22767:1;22764:13;22756:113;;;22855:1;22850:3;22846:11;22840:18;22836:1;22831:3;22827:11;22820:39;22792:2;22789:1;22785:10;22780:15;;22756:113;;;22887:6;22884:1;22881:13;22878:101;;;22967:1;22958:6;22953:3;22949:16;22942:27;22878:101;22727:258;22678:307;;;:::o;22991:320::-;23035:6;23072:1;23066:4;23062:12;23052:22;;23119:1;23113:4;23109:12;23140:18;23130:81;;23196:4;23188:6;23184:17;23174:27;;23130:81;23258:2;23250:6;23247:14;23227:18;23224:38;23221:84;;;23277:18;;:::i;:::-;23221:84;23042:269;22991:320;;;:::o;23317:281::-;23400:27;23422:4;23400:27;:::i;:::-;23392:6;23388:40;23530:6;23518:10;23515:22;23494:18;23482:10;23479:34;23476:62;23473:88;;;23541:18;;:::i;:::-;23473:88;23581:10;23577:2;23570:22;23360:238;23317:281;;:::o;23604:233::-;23643:3;23666:24;23684:5;23666:24;:::i;:::-;23657:33;;23712:66;23705:5;23702:77;23699:103;;;23782:18;;:::i;:::-;23699:103;23829:1;23822:5;23818:13;23811:20;;23604:233;;;:::o;23843:176::-;23875:1;23892:20;23910:1;23892:20;:::i;:::-;23887:25;;23926:20;23944:1;23926:20;:::i;:::-;23921:25;;23965:1;23955:35;;23970:18;;:::i;:::-;23955:35;24011:1;24008;24004:9;23999:14;;23843:176;;;;:::o;24025:180::-;24073:77;24070:1;24063:88;24170:4;24167:1;24160:15;24194:4;24191:1;24184:15;24211:180;24259:77;24256:1;24249:88;24356:4;24353:1;24346:15;24380:4;24377:1;24370:15;24397:180;24445:77;24442:1;24435:88;24542:4;24539:1;24532:15;24566:4;24563:1;24556:15;24583:180;24631:77;24628:1;24621:88;24728:4;24725:1;24718:15;24752:4;24749:1;24742:15;24769:180;24817:77;24814:1;24807:88;24914:4;24911:1;24904:15;24938:4;24935:1;24928:15;24955:117;25064:1;25061;25054:12;25078:117;25187:1;25184;25177:12;25201:117;25310:1;25307;25300:12;25324:117;25433:1;25430;25423:12;25447:102;25488:6;25539:2;25535:7;25530:2;25523:5;25519:14;25515:28;25505:38;;25447:102;;;:::o;25555:166::-;25695:18;25691:1;25683:6;25679:14;25672:42;25555:166;:::o;25727:225::-;25867:34;25863:1;25855:6;25851:14;25844:58;25936:8;25931:2;25923:6;25919:15;25912:33;25727:225;:::o;25958:181::-;26098:33;26094:1;26086:6;26082:14;26075:57;25958:181;:::o;26145:174::-;26285:26;26281:1;26273:6;26269:14;26262:50;26145:174;:::o;26325:158::-;26465:10;26461:1;26453:6;26449:14;26442:34;26325:158;:::o;26489:182::-;26629:34;26625:1;26617:6;26613:14;26606:58;26489:182;:::o;26677:234::-;26817:34;26813:1;26805:6;26801:14;26794:58;26886:17;26881:2;26873:6;26869:15;26862:42;26677:234;:::o;26917:114::-;;:::o;27037:122::-;27110:24;27128:5;27110:24;:::i;:::-;27103:5;27100:35;27090:63;;27149:1;27146;27139:12;27090:63;27037:122;:::o;27165:116::-;27235:21;27250:5;27235:21;:::i;:::-;27228:5;27225:32;27215:60;;27271:1;27268;27261:12;27215:60;27165:116;:::o;27287:120::-;27359:23;27376:5;27359:23;:::i;:::-;27352:5;27349:34;27339:62;;27397:1;27394;27387:12;27339:62;27287:120;:::o;27413:122::-;27486:24;27504:5;27486:24;:::i;:::-;27479:5;27476:35;27466:63;;27525:1;27522;27515:12;27466:63;27413:122;:::o
Swarm Source
ipfs://4ad9f9db96d48ef52a4926fa86d0665186a5835e6b1ec844da27be2891dbb0c1
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.