ERC-721
Overview
Max Total Supply
86 CC0DENZ
Holders
45
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CC0DENZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Racc0onDenzas
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-06 */ // SPDX-License-Identifier: CC0 /** *Submitted for verification at Etherscan.io on 2022-04-03 */ // File: @openzeppelin/[email protected]/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/[email protected]/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/[email protected]/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/[email protected]/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.4; contract Racc0onDenzas is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint immutable maxSupply; constructor(uint _maxSupply) ERC721("racc0ondenzas", "CC0DENZ") {maxSupply = _maxSupply - 1;} function _baseURI() internal pure override returns (string memory) { return "https://gateway.pinata.cloud/ipfs/QmSQGEgfKzntTPC9zZBVbxz24HavnWg8ifzELwY5a6Sw7p/"; } function mint() public payable { require(_tokenIdCounter.current() <= maxSupply, "Sold out"); // NFT project sold out require(msg.value == 0.08 ether, "Minting price is 0.08 ETH"); // Cost to mint 1 NFT is 0.08 ETH _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } // Owner can withdraw all the eth that was paid to mint NFTs function withdraw() public onlyOwner { address payable recipient = payable(address(msg.sender)); recipient.transfer(address(this).balance); } // the following functions are overrides required by Solidity. // =========================================================== function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162003d3e38038062003d3e8339818101604052810190620000379190620002a9565b6040518060400160405280600d81526020017f72616363306f6e64656e7a6173000000000000000000000000000000000000008152506040518060400160405280600781526020017f43433044454e5a000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001e2565b508060019080519060200190620000d4929190620001e2565b505050620000f7620000eb6200011460201b60201c565b6200011c60201b60201c565b600181620001069190620002db565b6080818152505050620003d3565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f09062000320565b90600052602060002090601f01602090048101928262000214576000855562000260565b82601f106200022f57805160ff191683800117855562000260565b8280016001018555821562000260579182015b828111156200025f57825182559160200191906001019062000242565b5b5090506200026f919062000273565b5090565b5b808211156200028e57600081600090555060010162000274565b5090565b600081519050620002a381620003b9565b92915050565b600060208284031215620002c257620002c1620003b4565b5b6000620002d28482850162000292565b91505092915050565b6000620002e88262000316565b9150620002f58362000316565b9250828210156200030b576200030a62000356565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200033957607f821691505b6020821081141562000350576200034f62000385565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c48162000316565b8114620003d057600080fd5b50565b60805161394f620003ef6000396000610734015261394f6000f3fe60806040526004361061012a5760003560e01c80634f6ccce7116100ab57806395d89b411161006f57806395d89b41146103d1578063a22cb465146103fc578063b88d4fde14610425578063c87b56dd1461044e578063e985e9c51461048b578063f2fde38b146104c85761012a565b80634f6ccce7146102d85780636352211e1461031557806370a0823114610352578063715018a61461038f5780638da5cb5b146103a65761012a565b806318160ddd116100f257806318160ddd1461020757806323b872dd146102325780632f745c591461025b5780633ccfd60b1461029857806342842e0e146102af5761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d45780631249c58b146101fd575b600080fd5b34801561013b57600080fd5b506101566004803603810190610151919061267b565b6104f1565b6040516101639190612b8e565b60405180910390f35b34801561017857600080fd5b50610181610503565b60405161018e9190612ba9565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b991906126d5565b610595565b6040516101cb9190612b27565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f6919061263b565b61061a565b005b610205610732565b005b34801561021357600080fd5b5061021c610807565b6040516102299190612e6b565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190612525565b610814565b005b34801561026757600080fd5b50610282600480360381019061027d919061263b565b610874565b60405161028f9190612e6b565b60405180910390f35b3480156102a457600080fd5b506102ad610919565b005b3480156102bb57600080fd5b506102d660048036038101906102d19190612525565b6109e4565b005b3480156102e457600080fd5b506102ff60048036038101906102fa91906126d5565b610a04565b60405161030c9190612e6b565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906126d5565b610a75565b6040516103499190612b27565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906124b8565b610b27565b6040516103869190612e6b565b60405180910390f35b34801561039b57600080fd5b506103a4610bdf565b005b3480156103b257600080fd5b506103bb610c67565b6040516103c89190612b27565b60405180910390f35b3480156103dd57600080fd5b506103e6610c91565b6040516103f39190612ba9565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e91906125fb565b610d23565b005b34801561043157600080fd5b5061044c60048036038101906104479190612578565b610d39565b005b34801561045a57600080fd5b50610475600480360381019061047091906126d5565b610d9b565b6040516104829190612ba9565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906124e5565b610dad565b6040516104bf9190612b8e565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906124b8565b610e41565b005b60006104fc82610f39565b9050919050565b60606000805461051290613090565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90613090565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60006105a082610fb3565b6105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690612d6b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061062582610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106b561101f565b73ffffffffffffffffffffffffffffffffffffffff1614806106e457506106e3816106de61101f565b610dad565b5b610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612ccb565b60405180910390fd5b61072d8383611027565b505050565b7f000000000000000000000000000000000000000000000000000000000000000061075d600c6110e0565b111561079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612e2b565b60405180910390fd5b67011c37937e08000034146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90612dcb565b60405180910390fd5b6107fb336107f6600c6110e0565b6110ee565b610805600c61110c565b565b6000600880549050905090565b61082561081f61101f565b82611122565b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90612e0b565b60405180910390fd5b61086f838383611200565b505050565b600061087f83610b27565b82106108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612bcb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61092161101f565b73ffffffffffffffffffffffffffffffffffffffff1661093f610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90612d8b565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109e0573d6000803e3d6000fd5b5050565b6109ff83838360405180602001604052806000815250610d39565b505050565b6000610a0e610807565b8210610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612e4b565b60405180910390fd5b60088281548110610a6357610a62613229565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612d0b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612ceb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be761101f565b73ffffffffffffffffffffffffffffffffffffffff16610c05610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290612d8b565b60405180910390fd5b610c656000611467565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ca090613090565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccc90613090565b8015610d195780601f10610cee57610100808354040283529160200191610d19565b820191906000526020600020905b815481529060010190602001808311610cfc57829003601f168201915b5050505050905090565b610d35610d2e61101f565b838361152d565b5050565b610d4a610d4461101f565b83611122565b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090612e0b565b60405180910390fd5b610d958484848461169a565b50505050565b6060610da6826116f6565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e4961101f565b73ffffffffffffffffffffffffffffffffffffffff16610e67610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612c0b565b60405180910390fd5b610f3681611467565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac5750610fab82611848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661109a83610a75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b61110882826040518060200160405280600081525061192a565b5050565b6001816000016000828254019250508190555050565b600061112d82610fb3565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390612cab565b60405180910390fd5b600061117783610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111e657508373ffffffffffffffffffffffffffffffffffffffff166111ce84610595565b73ffffffffffffffffffffffffffffffffffffffff16145b806111f757506111f68185610dad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661122082610a75565b73ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90612c2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90612c6b565b60405180910390fd5b6112f1838383611985565b6112fc600082611027565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461134c9190612fa6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a39190612f1f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611462838383611995565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612c8b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168d9190612b8e565b60405180910390a3505050565b6116a5848484611200565b6116b18484848461199a565b6116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790612beb565b60405180910390fd5b50505050565b606061170182610fb3565b611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790612d4b565b60405180910390fd5b6000600a6000848152602001908152602001600020805461176090613090565b80601f016020809104026020016040519081016040528092919081815260200182805461178c90613090565b80156117d95780601f106117ae576101008083540402835291602001916117d9565b820191906000526020600020905b8154815290600101906020018083116117bc57829003601f168201915b5050505050905060006117ea611b31565b9050600081511415611800578192505050611843565b60008251111561183557808260405160200161181d929190612ad4565b60405160208183030381529060405292505050611843565b61183e84611b51565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061191357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611923575061192282611bf8565b5b9050919050565b6119348383611c62565b611941600084848461199a565b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790612beb565b60405180910390fd5b505050565b611990838383611e3c565b505050565b505050565b60006119bb8473ffffffffffffffffffffffffffffffffffffffff16611f50565b15611b24578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119e461101f565b8786866040518563ffffffff1660e01b8152600401611a069493929190612b42565b602060405180830381600087803b158015611a2057600080fd5b505af1925050508015611a5157506040513d601f19601f82011682018060405250810190611a4e91906126a8565b60015b611ad4573d8060008114611a81576040519150601f19603f3d011682016040523d82523d6000602084013e611a86565b606091505b50600081511415611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390612beb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b29565b600190505b949350505050565b60606040518060800160405280605181526020016138c960519139905090565b6060611b5c82610fb3565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612dab565b60405180910390fd5b6000611ba5611b31565b90506000815111611bc55760405180602001604052806000815250611bf0565b80611bcf84611f73565b604051602001611be0929190612af8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990612d2b565b60405180910390fd5b611cdb81610fb3565b15611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290612c4b565b60405180910390fd5b611d2760008383611985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d779190612f1f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e3860008383611995565b5050565b611e478383836120d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e8a57611e85816120d9565b611ec9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611ec857611ec78382612122565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f0c57611f078161228f565b611f4b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611f4a57611f498282612360565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000821415611fbb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120cf565b600082905060005b60008214611fed578080611fd6906130f3565b915050600a82611fe69190612f75565b9150611fc3565b60008167ffffffffffffffff81111561200957612008613258565b5b6040519080825280601f01601f19166020018201604052801561203b5781602001600182028036833780820191505090505b5090505b600085146120c8576001826120549190612fa6565b9150600a85612063919061313c565b603061206f9190612f1f565b60f81b81838151811061208557612084613229565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120c19190612f75565b945061203f565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161212f84610b27565b6121399190612fa6565b905060006007600084815260200190815260200160002054905081811461221e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506122a39190612fa6565b90506000600960008481526020019081526020016000205490506000600883815481106122d3576122d2613229565b5b9060005260206000200154905080600883815481106122f5576122f4613229565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612344576123436131fa565b5b6001900381819060005260206000200160009055905550505050565b600061236b83610b27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60006123f26123ed84612eab565b612e86565b90508281526020810184848401111561240e5761240d61328c565b5b61241984828561304e565b509392505050565b6000813590506124308161386c565b92915050565b60008135905061244581613883565b92915050565b60008135905061245a8161389a565b92915050565b60008151905061246f8161389a565b92915050565b600082601f83011261248a57612489613287565b5b813561249a8482602086016123df565b91505092915050565b6000813590506124b2816138b1565b92915050565b6000602082840312156124ce576124cd613296565b5b60006124dc84828501612421565b91505092915050565b600080604083850312156124fc576124fb613296565b5b600061250a85828601612421565b925050602061251b85828601612421565b9150509250929050565b60008060006060848603121561253e5761253d613296565b5b600061254c86828701612421565b935050602061255d86828701612421565b925050604061256e868287016124a3565b9150509250925092565b6000806000806080858703121561259257612591613296565b5b60006125a087828801612421565b94505060206125b187828801612421565b93505060406125c2878288016124a3565b925050606085013567ffffffffffffffff8111156125e3576125e2613291565b5b6125ef87828801612475565b91505092959194509250565b6000806040838503121561261257612611613296565b5b600061262085828601612421565b925050602061263185828601612436565b9150509250929050565b6000806040838503121561265257612651613296565b5b600061266085828601612421565b9250506020612671858286016124a3565b9150509250929050565b60006020828403121561269157612690613296565b5b600061269f8482850161244b565b91505092915050565b6000602082840312156126be576126bd613296565b5b60006126cc84828501612460565b91505092915050565b6000602082840312156126eb576126ea613296565b5b60006126f9848285016124a3565b91505092915050565b61270b81612fda565b82525050565b61271a81612fec565b82525050565b600061272b82612edc565b6127358185612ef2565b935061274581856020860161305d565b61274e8161329b565b840191505092915050565b600061276482612ee7565b61276e8185612f03565b935061277e81856020860161305d565b6127878161329b565b840191505092915050565b600061279d82612ee7565b6127a78185612f14565b93506127b781856020860161305d565b80840191505092915050565b60006127d0602b83612f03565b91506127db826132ac565b604082019050919050565b60006127f3603283612f03565b91506127fe826132fb565b604082019050919050565b6000612816602683612f03565b91506128218261334a565b604082019050919050565b6000612839602583612f03565b915061284482613399565b604082019050919050565b600061285c601c83612f03565b9150612867826133e8565b602082019050919050565b600061287f602483612f03565b915061288a82613411565b604082019050919050565b60006128a2601983612f03565b91506128ad82613460565b602082019050919050565b60006128c5602c83612f03565b91506128d082613489565b604082019050919050565b60006128e8603883612f03565b91506128f3826134d8565b604082019050919050565b600061290b602a83612f03565b915061291682613527565b604082019050919050565b600061292e602983612f03565b915061293982613576565b604082019050919050565b6000612951602083612f03565b915061295c826135c5565b602082019050919050565b6000612974603183612f03565b915061297f826135ee565b604082019050919050565b6000612997602c83612f03565b91506129a28261363d565b604082019050919050565b60006129ba600583612f14565b91506129c58261368c565b600582019050919050565b60006129dd602083612f03565b91506129e8826136b5565b602082019050919050565b6000612a00602f83612f03565b9150612a0b826136de565b604082019050919050565b6000612a23601983612f03565b9150612a2e8261372d565b602082019050919050565b6000612a46602183612f03565b9150612a5182613756565b604082019050919050565b6000612a69603183612f03565b9150612a74826137a5565b604082019050919050565b6000612a8c600883612f03565b9150612a97826137f4565b602082019050919050565b6000612aaf602c83612f03565b9150612aba8261381d565b604082019050919050565b612ace81613044565b82525050565b6000612ae08285612792565b9150612aec8284612792565b91508190509392505050565b6000612b048285612792565b9150612b108284612792565b9150612b1b826129ad565b91508190509392505050565b6000602082019050612b3c6000830184612702565b92915050565b6000608082019050612b576000830187612702565b612b646020830186612702565b612b716040830185612ac5565b8181036060830152612b838184612720565b905095945050505050565b6000602082019050612ba36000830184612711565b92915050565b60006020820190508181036000830152612bc38184612759565b905092915050565b60006020820190508181036000830152612be4816127c3565b9050919050565b60006020820190508181036000830152612c04816127e6565b9050919050565b60006020820190508181036000830152612c2481612809565b9050919050565b60006020820190508181036000830152612c448161282c565b9050919050565b60006020820190508181036000830152612c648161284f565b9050919050565b60006020820190508181036000830152612c8481612872565b9050919050565b60006020820190508181036000830152612ca481612895565b9050919050565b60006020820190508181036000830152612cc4816128b8565b9050919050565b60006020820190508181036000830152612ce4816128db565b9050919050565b60006020820190508181036000830152612d04816128fe565b9050919050565b60006020820190508181036000830152612d2481612921565b9050919050565b60006020820190508181036000830152612d4481612944565b9050919050565b60006020820190508181036000830152612d6481612967565b9050919050565b60006020820190508181036000830152612d848161298a565b9050919050565b60006020820190508181036000830152612da4816129d0565b9050919050565b60006020820190508181036000830152612dc4816129f3565b9050919050565b60006020820190508181036000830152612de481612a16565b9050919050565b60006020820190508181036000830152612e0481612a39565b9050919050565b60006020820190508181036000830152612e2481612a5c565b9050919050565b60006020820190508181036000830152612e4481612a7f565b9050919050565b60006020820190508181036000830152612e6481612aa2565b9050919050565b6000602082019050612e806000830184612ac5565b92915050565b6000612e90612ea1565b9050612e9c82826130c2565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec657612ec5613258565b5b612ecf8261329b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f2a82613044565b9150612f3583613044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f6a57612f6961316d565b5b828201905092915050565b6000612f8082613044565b9150612f8b83613044565b925082612f9b57612f9a61319c565b5b828204905092915050565b6000612fb182613044565b9150612fbc83613044565b925082821015612fcf57612fce61316d565b5b828203905092915050565b6000612fe582613024565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561307b578082015181840152602081019050613060565b8381111561308a576000848401525b50505050565b600060028204905060018216806130a857607f821691505b602082108114156130bc576130bb6131cb565b5b50919050565b6130cb8261329b565b810181811067ffffffffffffffff821117156130ea576130e9613258565b5b80604052505050565b60006130fe82613044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131315761313061316d565b5b600182019050919050565b600061314782613044565b915061315283613044565b9250826131625761316161319c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720707269636520697320302e30382045544800000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61387581612fda565b811461388057600080fd5b50565b61388c81612fec565b811461389757600080fd5b50565b6138a381612ff8565b81146138ae57600080fd5b50565b6138ba81613044565b81146138c557600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5351474567664b7a6e74545043397a5a425662787a32344861766e57673869667a454c7759356136537737702fa2646970667358221220b1fd2c91bed9aa0eae4f7ffaa8b88750ed1ae3071dfa09ed36fc5df8a109308764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000007d
Deployed Bytecode
0x60806040526004361061012a5760003560e01c80634f6ccce7116100ab57806395d89b411161006f57806395d89b41146103d1578063a22cb465146103fc578063b88d4fde14610425578063c87b56dd1461044e578063e985e9c51461048b578063f2fde38b146104c85761012a565b80634f6ccce7146102d85780636352211e1461031557806370a0823114610352578063715018a61461038f5780638da5cb5b146103a65761012a565b806318160ddd116100f257806318160ddd1461020757806323b872dd146102325780632f745c591461025b5780633ccfd60b1461029857806342842e0e146102af5761012a565b806301ffc9a71461012f57806306fdde031461016c578063081812fc14610197578063095ea7b3146101d45780631249c58b146101fd575b600080fd5b34801561013b57600080fd5b506101566004803603810190610151919061267b565b6104f1565b6040516101639190612b8e565b60405180910390f35b34801561017857600080fd5b50610181610503565b60405161018e9190612ba9565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b991906126d5565b610595565b6040516101cb9190612b27565b60405180910390f35b3480156101e057600080fd5b506101fb60048036038101906101f6919061263b565b61061a565b005b610205610732565b005b34801561021357600080fd5b5061021c610807565b6040516102299190612e6b565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190612525565b610814565b005b34801561026757600080fd5b50610282600480360381019061027d919061263b565b610874565b60405161028f9190612e6b565b60405180910390f35b3480156102a457600080fd5b506102ad610919565b005b3480156102bb57600080fd5b506102d660048036038101906102d19190612525565b6109e4565b005b3480156102e457600080fd5b506102ff60048036038101906102fa91906126d5565b610a04565b60405161030c9190612e6b565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906126d5565b610a75565b6040516103499190612b27565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906124b8565b610b27565b6040516103869190612e6b565b60405180910390f35b34801561039b57600080fd5b506103a4610bdf565b005b3480156103b257600080fd5b506103bb610c67565b6040516103c89190612b27565b60405180910390f35b3480156103dd57600080fd5b506103e6610c91565b6040516103f39190612ba9565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e91906125fb565b610d23565b005b34801561043157600080fd5b5061044c60048036038101906104479190612578565b610d39565b005b34801561045a57600080fd5b50610475600480360381019061047091906126d5565b610d9b565b6040516104829190612ba9565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906124e5565b610dad565b6040516104bf9190612b8e565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906124b8565b610e41565b005b60006104fc82610f39565b9050919050565b60606000805461051290613090565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90613090565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60006105a082610fb3565b6105df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d690612d6b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061062582610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90612deb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106b561101f565b73ffffffffffffffffffffffffffffffffffffffff1614806106e457506106e3816106de61101f565b610dad565b5b610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90612ccb565b60405180910390fd5b61072d8383611027565b505050565b7f000000000000000000000000000000000000000000000000000000000000007c61075d600c6110e0565b111561079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612e2b565b60405180910390fd5b67011c37937e08000034146107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df90612dcb565b60405180910390fd5b6107fb336107f6600c6110e0565b6110ee565b610805600c61110c565b565b6000600880549050905090565b61082561081f61101f565b82611122565b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085b90612e0b565b60405180910390fd5b61086f838383611200565b505050565b600061087f83610b27565b82106108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790612bcb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61092161101f565b73ffffffffffffffffffffffffffffffffffffffff1661093f610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90612d8b565b60405180910390fd5b60003390508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109e0573d6000803e3d6000fd5b5050565b6109ff83838360405180602001604052806000815250610d39565b505050565b6000610a0e610807565b8210610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612e4b565b60405180910390fd5b60088281548110610a6357610a62613229565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612d0b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90612ceb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be761101f565b73ffffffffffffffffffffffffffffffffffffffff16610c05610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290612d8b565b60405180910390fd5b610c656000611467565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ca090613090565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccc90613090565b8015610d195780601f10610cee57610100808354040283529160200191610d19565b820191906000526020600020905b815481529060010190602001808311610cfc57829003601f168201915b5050505050905090565b610d35610d2e61101f565b838361152d565b5050565b610d4a610d4461101f565b83611122565b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090612e0b565b60405180910390fd5b610d958484848461169a565b50505050565b6060610da6826116f6565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e4961101f565b73ffffffffffffffffffffffffffffffffffffffff16610e67610c67565b73ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb490612d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490612c0b565b60405180910390fd5b610f3681611467565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac5750610fab82611848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661109a83610a75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b61110882826040518060200160405280600081525061192a565b5050565b6001816000016000828254019250508190555050565b600061112d82610fb3565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390612cab565b60405180910390fd5b600061117783610a75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111e657508373ffffffffffffffffffffffffffffffffffffffff166111ce84610595565b73ffffffffffffffffffffffffffffffffffffffff16145b806111f757506111f68185610dad565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661122082610a75565b73ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d90612c2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90612c6b565b60405180910390fd5b6112f1838383611985565b6112fc600082611027565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461134c9190612fa6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a39190612f1f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611462838383611995565b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612c8b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161168d9190612b8e565b60405180910390a3505050565b6116a5848484611200565b6116b18484848461199a565b6116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790612beb565b60405180910390fd5b50505050565b606061170182610fb3565b611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790612d4b565b60405180910390fd5b6000600a6000848152602001908152602001600020805461176090613090565b80601f016020809104026020016040519081016040528092919081815260200182805461178c90613090565b80156117d95780601f106117ae576101008083540402835291602001916117d9565b820191906000526020600020905b8154815290600101906020018083116117bc57829003601f168201915b5050505050905060006117ea611b31565b9050600081511415611800578192505050611843565b60008251111561183557808260405160200161181d929190612ad4565b60405160208183030381529060405292505050611843565b61183e84611b51565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061191357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611923575061192282611bf8565b5b9050919050565b6119348383611c62565b611941600084848461199a565b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790612beb565b60405180910390fd5b505050565b611990838383611e3c565b505050565b505050565b60006119bb8473ffffffffffffffffffffffffffffffffffffffff16611f50565b15611b24578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119e461101f565b8786866040518563ffffffff1660e01b8152600401611a069493929190612b42565b602060405180830381600087803b158015611a2057600080fd5b505af1925050508015611a5157506040513d601f19601f82011682018060405250810190611a4e91906126a8565b60015b611ad4573d8060008114611a81576040519150601f19603f3d011682016040523d82523d6000602084013e611a86565b606091505b50600081511415611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390612beb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b29565b600190505b949350505050565b60606040518060800160405280605181526020016138c960519139905090565b6060611b5c82610fb3565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612dab565b60405180910390fd5b6000611ba5611b31565b90506000815111611bc55760405180602001604052806000815250611bf0565b80611bcf84611f73565b604051602001611be0929190612af8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990612d2b565b60405180910390fd5b611cdb81610fb3565b15611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1290612c4b565b60405180910390fd5b611d2760008383611985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d779190612f1f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e3860008383611995565b5050565b611e478383836120d4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e8a57611e85816120d9565b611ec9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611ec857611ec78382612122565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f0c57611f078161228f565b611f4b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611f4a57611f498282612360565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60606000821415611fbb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120cf565b600082905060005b60008214611fed578080611fd6906130f3565b915050600a82611fe69190612f75565b9150611fc3565b60008167ffffffffffffffff81111561200957612008613258565b5b6040519080825280601f01601f19166020018201604052801561203b5781602001600182028036833780820191505090505b5090505b600085146120c8576001826120549190612fa6565b9150600a85612063919061313c565b603061206f9190612f1f565b60f81b81838151811061208557612084613229565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120c19190612f75565b945061203f565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161212f84610b27565b6121399190612fa6565b905060006007600084815260200190815260200160002054905081811461221e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506122a39190612fa6565b90506000600960008481526020019081526020016000205490506000600883815481106122d3576122d2613229565b5b9060005260206000200154905080600883815481106122f5576122f4613229565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612344576123436131fa565b5b6001900381819060005260206000200160009055905550505050565b600061236b83610b27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60006123f26123ed84612eab565b612e86565b90508281526020810184848401111561240e5761240d61328c565b5b61241984828561304e565b509392505050565b6000813590506124308161386c565b92915050565b60008135905061244581613883565b92915050565b60008135905061245a8161389a565b92915050565b60008151905061246f8161389a565b92915050565b600082601f83011261248a57612489613287565b5b813561249a8482602086016123df565b91505092915050565b6000813590506124b2816138b1565b92915050565b6000602082840312156124ce576124cd613296565b5b60006124dc84828501612421565b91505092915050565b600080604083850312156124fc576124fb613296565b5b600061250a85828601612421565b925050602061251b85828601612421565b9150509250929050565b60008060006060848603121561253e5761253d613296565b5b600061254c86828701612421565b935050602061255d86828701612421565b925050604061256e868287016124a3565b9150509250925092565b6000806000806080858703121561259257612591613296565b5b60006125a087828801612421565b94505060206125b187828801612421565b93505060406125c2878288016124a3565b925050606085013567ffffffffffffffff8111156125e3576125e2613291565b5b6125ef87828801612475565b91505092959194509250565b6000806040838503121561261257612611613296565b5b600061262085828601612421565b925050602061263185828601612436565b9150509250929050565b6000806040838503121561265257612651613296565b5b600061266085828601612421565b9250506020612671858286016124a3565b9150509250929050565b60006020828403121561269157612690613296565b5b600061269f8482850161244b565b91505092915050565b6000602082840312156126be576126bd613296565b5b60006126cc84828501612460565b91505092915050565b6000602082840312156126eb576126ea613296565b5b60006126f9848285016124a3565b91505092915050565b61270b81612fda565b82525050565b61271a81612fec565b82525050565b600061272b82612edc565b6127358185612ef2565b935061274581856020860161305d565b61274e8161329b565b840191505092915050565b600061276482612ee7565b61276e8185612f03565b935061277e81856020860161305d565b6127878161329b565b840191505092915050565b600061279d82612ee7565b6127a78185612f14565b93506127b781856020860161305d565b80840191505092915050565b60006127d0602b83612f03565b91506127db826132ac565b604082019050919050565b60006127f3603283612f03565b91506127fe826132fb565b604082019050919050565b6000612816602683612f03565b91506128218261334a565b604082019050919050565b6000612839602583612f03565b915061284482613399565b604082019050919050565b600061285c601c83612f03565b9150612867826133e8565b602082019050919050565b600061287f602483612f03565b915061288a82613411565b604082019050919050565b60006128a2601983612f03565b91506128ad82613460565b602082019050919050565b60006128c5602c83612f03565b91506128d082613489565b604082019050919050565b60006128e8603883612f03565b91506128f3826134d8565b604082019050919050565b600061290b602a83612f03565b915061291682613527565b604082019050919050565b600061292e602983612f03565b915061293982613576565b604082019050919050565b6000612951602083612f03565b915061295c826135c5565b602082019050919050565b6000612974603183612f03565b915061297f826135ee565b604082019050919050565b6000612997602c83612f03565b91506129a28261363d565b604082019050919050565b60006129ba600583612f14565b91506129c58261368c565b600582019050919050565b60006129dd602083612f03565b91506129e8826136b5565b602082019050919050565b6000612a00602f83612f03565b9150612a0b826136de565b604082019050919050565b6000612a23601983612f03565b9150612a2e8261372d565b602082019050919050565b6000612a46602183612f03565b9150612a5182613756565b604082019050919050565b6000612a69603183612f03565b9150612a74826137a5565b604082019050919050565b6000612a8c600883612f03565b9150612a97826137f4565b602082019050919050565b6000612aaf602c83612f03565b9150612aba8261381d565b604082019050919050565b612ace81613044565b82525050565b6000612ae08285612792565b9150612aec8284612792565b91508190509392505050565b6000612b048285612792565b9150612b108284612792565b9150612b1b826129ad565b91508190509392505050565b6000602082019050612b3c6000830184612702565b92915050565b6000608082019050612b576000830187612702565b612b646020830186612702565b612b716040830185612ac5565b8181036060830152612b838184612720565b905095945050505050565b6000602082019050612ba36000830184612711565b92915050565b60006020820190508181036000830152612bc38184612759565b905092915050565b60006020820190508181036000830152612be4816127c3565b9050919050565b60006020820190508181036000830152612c04816127e6565b9050919050565b60006020820190508181036000830152612c2481612809565b9050919050565b60006020820190508181036000830152612c448161282c565b9050919050565b60006020820190508181036000830152612c648161284f565b9050919050565b60006020820190508181036000830152612c8481612872565b9050919050565b60006020820190508181036000830152612ca481612895565b9050919050565b60006020820190508181036000830152612cc4816128b8565b9050919050565b60006020820190508181036000830152612ce4816128db565b9050919050565b60006020820190508181036000830152612d04816128fe565b9050919050565b60006020820190508181036000830152612d2481612921565b9050919050565b60006020820190508181036000830152612d4481612944565b9050919050565b60006020820190508181036000830152612d6481612967565b9050919050565b60006020820190508181036000830152612d848161298a565b9050919050565b60006020820190508181036000830152612da4816129d0565b9050919050565b60006020820190508181036000830152612dc4816129f3565b9050919050565b60006020820190508181036000830152612de481612a16565b9050919050565b60006020820190508181036000830152612e0481612a39565b9050919050565b60006020820190508181036000830152612e2481612a5c565b9050919050565b60006020820190508181036000830152612e4481612a7f565b9050919050565b60006020820190508181036000830152612e6481612aa2565b9050919050565b6000602082019050612e806000830184612ac5565b92915050565b6000612e90612ea1565b9050612e9c82826130c2565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec657612ec5613258565b5b612ecf8261329b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f2a82613044565b9150612f3583613044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f6a57612f6961316d565b5b828201905092915050565b6000612f8082613044565b9150612f8b83613044565b925082612f9b57612f9a61319c565b5b828204905092915050565b6000612fb182613044565b9150612fbc83613044565b925082821015612fcf57612fce61316d565b5b828203905092915050565b6000612fe582613024565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561307b578082015181840152602081019050613060565b8381111561308a576000848401525b50505050565b600060028204905060018216806130a857607f821691505b602082108114156130bc576130bb6131cb565b5b50919050565b6130cb8261329b565b810181811067ffffffffffffffff821117156130ea576130e9613258565b5b80604052505050565b60006130fe82613044565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131315761313061316d565b5b600182019050919050565b600061314782613044565b915061315283613044565b9250826131625761316161319c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720707269636520697320302e30382045544800000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61387581612fda565b811461388057600080fd5b50565b61388c81612fec565b811461389757600080fd5b50565b6138a381612ff8565b81146138ae57600080fd5b50565b6138ba81613044565b81146138c557600080fd5b5056fe68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5351474567664b7a6e74545043397a5a425662787a32344861766e57673869667a454c7759356136537737702fa2646970667358221220b1fd2c91bed9aa0eae4f7ffaa8b88750ed1ae3071dfa09ed36fc5df8a109308764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000007d
-----Decoded View---------------
Arg [0] : _maxSupply (uint256): 125
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000007d
Deployed Bytecode Sourcemap
49140:1968:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50893:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27759:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29327:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28850:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49634:338;;;:::i;:::-;;43605:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30077:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43273:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50046:164;;;;;;;;;;;;;:::i;:::-;;30487:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43795:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27453:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27183:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6325:103;;;;;;;;;;;;;:::i;:::-;;5674:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27928:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29620:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30743:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50689:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29846:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6583:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50893:212;51032:4;51061:36;51085:11;51061:23;:36::i;:::-;51054:43;;50893:212;;;:::o;27759:100::-;27813:13;27846:5;27839:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27759:100;:::o;29327:221::-;29403:7;29431:16;29439:7;29431;:16::i;:::-;29423:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29516:15;:24;29532:7;29516:24;;;;;;;;;;;;;;;;;;;;;29509:31;;29327:221;;;:::o;28850:411::-;28931:13;28947:23;28962:7;28947:14;:23::i;:::-;28931:39;;28995:5;28989:11;;:2;:11;;;;28981:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29089:5;29073:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29098:37;29115:5;29122:12;:10;:12::i;:::-;29098:16;:37::i;:::-;29073:62;29051:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:21;29241:2;29245:7;29232:8;:21::i;:::-;28920:341;28850:411;;:::o;49634:338::-;49713:9;49684:25;:15;:23;:25::i;:::-;:38;;49676:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49791:10;49778:9;:23;49770:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;49878:48;49888:10;49900:25;:15;:23;:25::i;:::-;49878:9;:48::i;:::-;49937:27;:15;:25;:27::i;:::-;49634:338::o;43605:113::-;43666:7;43693:10;:17;;;;43686:24;;43605:113;:::o;30077:339::-;30272:41;30291:12;:10;:12::i;:::-;30305:7;30272:18;:41::i;:::-;30264:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30380:28;30390:4;30396:2;30400:7;30380:9;:28::i;:::-;30077:339;;;:::o;43273:256::-;43370:7;43406:23;43423:5;43406:16;:23::i;:::-;43398:5;:31;43390:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43495:12;:19;43508:5;43495:19;;;;;;;;;;;;;;;:26;43515:5;43495:26;;;;;;;;;;;;43488:33;;43273:256;;;;:::o;50046:164::-;5905:12;:10;:12::i;:::-;5894:23;;:7;:5;:7::i;:::-;:23;;;5886:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50094:25:::1;50138:10;50094:56;;50161:9;:18;;:41;50180:21;50161:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50083:127;50046:164::o:0;30487:185::-;30625:39;30642:4;30648:2;30652:7;30625:39;;;;;;;;;;;;:16;:39::i;:::-;30487:185;;;:::o;43795:233::-;43870:7;43906:30;:28;:30::i;:::-;43898:5;:38;43890:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44003:10;44014:5;44003:17;;;;;;;;:::i;:::-;;;;;;;;;;43996:24;;43795:233;;;:::o;27453:239::-;27525:7;27545:13;27561:7;:16;27569:7;27561:16;;;;;;;;;;;;;;;;;;;;;27545:32;;27613:1;27596:19;;:5;:19;;;;27588:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27679:5;27672:12;;;27453:239;;;:::o;27183:208::-;27255:7;27300:1;27283:19;;:5;:19;;;;27275:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27367:9;:16;27377:5;27367:16;;;;;;;;;;;;;;;;27360:23;;27183:208;;;:::o;6325:103::-;5905:12;:10;:12::i;:::-;5894:23;;:7;:5;:7::i;:::-;:23;;;5886:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6390:30:::1;6417:1;6390:18;:30::i;:::-;6325:103::o:0;5674:87::-;5720:7;5747:6;;;;;;;;;;;5740:13;;5674:87;:::o;27928:104::-;27984:13;28017:7;28010:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27928:104;:::o;29620:155::-;29715:52;29734:12;:10;:12::i;:::-;29748:8;29758;29715:18;:52::i;:::-;29620:155;;:::o;30743:328::-;30918:41;30937:12;:10;:12::i;:::-;30951:7;30918:18;:41::i;:::-;30910:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31024:39;31038:4;31044:2;31048:7;31057:5;31024:13;:39::i;:::-;30743:328;;;;:::o;50689:196::-;50816:13;50854:23;50869:7;50854:14;:23::i;:::-;50847:30;;50689:196;;;:::o;29846:164::-;29943:4;29967:18;:25;29986:5;29967:25;;;;;;;;;;;;;;;:35;29993:8;29967:35;;;;;;;;;;;;;;;;;;;;;;;;;29960:42;;29846:164;;;;:::o;6583:201::-;5905:12;:10;:12::i;:::-;5894:23;;:7;:5;:7::i;:::-;:23;;;5886:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6692:1:::1;6672:22;;:8;:22;;;;6664:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6748:28;6767:8;6748:18;:28::i;:::-;6583:201:::0;:::o;42965:224::-;43067:4;43106:35;43091:50;;;:11;:50;;;;:90;;;;43145:36;43169:11;43145:23;:36::i;:::-;43091:90;43084:97;;42965:224;;;:::o;32581:127::-;32646:4;32698:1;32670:30;;:7;:16;32678:7;32670:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32663:37;;32581:127;;;:::o;4392:98::-;4445:7;4472:10;4465:17;;4392:98;:::o;36727:174::-;36829:2;36802:15;:24;36818:7;36802:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36885:7;36881:2;36847:46;;36856:23;36871:7;36856:14;:23::i;:::-;36847:46;;;;;;;;;;;;36727:174;;:::o;984:114::-;1049:7;1076;:14;;;1069:21;;984:114;;;:::o;33565:110::-;33641:26;33651:2;33655:7;33641:26;;;;;;;;;;;;:9;:26::i;:::-;33565:110;;:::o;1106:127::-;1213:1;1195:7;:14;;;:19;;;;;;;;;;;1106:127;:::o;32875:348::-;32968:4;32993:16;33001:7;32993;:16::i;:::-;32985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33069:13;33085:23;33100:7;33085:14;:23::i;:::-;33069:39;;33138:5;33127:16;;:7;:16;;;:51;;;;33171:7;33147:31;;:20;33159:7;33147:11;:20::i;:::-;:31;;;33127:51;:87;;;;33182:32;33199:5;33206:7;33182:16;:32::i;:::-;33127:87;33119:96;;;32875:348;;;;:::o;35984:625::-;36143:4;36116:31;;:23;36131:7;36116:14;:23::i;:::-;:31;;;36108:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36222:1;36208:16;;:2;:16;;;;36200:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36278:39;36299:4;36305:2;36309:7;36278:20;:39::i;:::-;36382:29;36399:1;36403:7;36382:8;:29::i;:::-;36443:1;36424:9;:15;36434:4;36424:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36472:1;36455:9;:13;36465:2;36455:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36503:2;36484:7;:16;36492:7;36484:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36542:7;36538:2;36523:27;;36532:4;36523:27;;;;;;;;;;;;36563:38;36583:4;36589:2;36593:7;36563:19;:38::i;:::-;35984:625;;;:::o;6944:191::-;7018:16;7037:6;;;;;;;;;;;7018:25;;7063:8;7054:6;;:17;;;;;;;;;;;;;;;;;;7118:8;7087:40;;7108:8;7087:40;;;;;;;;;;;;7007:128;6944:191;:::o;37043:315::-;37198:8;37189:17;;:5;:17;;;;37181:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37285:8;37247:18;:25;37266:5;37247:25;;;;;;;;;;;;;;;:35;37273:8;37247:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37331:8;37309:41;;37324:5;37309:41;;;37341:8;37309:41;;;;;;:::i;:::-;;;;;;;;37043:315;;;:::o;31953:::-;32110:28;32120:4;32126:2;32130:7;32110:9;:28::i;:::-;32157:48;32180:4;32186:2;32190:7;32199:5;32157:22;:48::i;:::-;32149:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31953:315;;;;:::o;40454:679::-;40527:13;40561:16;40569:7;40561;:16::i;:::-;40553:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40644:23;40670:10;:19;40681:7;40670:19;;;;;;;;;;;40644:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40700:18;40721:10;:8;:10::i;:::-;40700:31;;40829:1;40813:4;40807:18;:23;40803:72;;;40854:9;40847:16;;;;;;40803:72;41005:1;40985:9;40979:23;:27;40975:108;;;41054:4;41060:9;41037:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41023:48;;;;;;40975:108;41102:23;41117:7;41102:14;:23::i;:::-;41095:30;;;;40454:679;;;;:::o;26814:305::-;26916:4;26968:25;26953:40;;;:11;:40;;;;:105;;;;27025:33;27010:48;;;:11;:48;;;;26953:105;:158;;;;27075:36;27099:11;27075:23;:36::i;:::-;26953:158;26933:178;;26814:305;;;:::o;33902:321::-;34032:18;34038:2;34042:7;34032:5;:18::i;:::-;34083:54;34114:1;34118:2;34122:7;34131:5;34083:22;:54::i;:::-;34061:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33902:321;;;:::o;50354:204::-;50505:45;50532:4;50538:2;50542:7;50505:26;:45::i;:::-;50354:204;;;:::o;39805:125::-;;;;:::o;37923:799::-;38078:4;38099:15;:2;:13;;;:15::i;:::-;38095:620;;;38151:2;38135:36;;;38172:12;:10;:12::i;:::-;38186:4;38192:7;38201:5;38135:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38131:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38394:1;38377:6;:13;:18;38373:272;;;38420:60;;;;;;;;;;:::i;:::-;;;;;;;;38373:272;38595:6;38589:13;38580:6;38576:2;38572:15;38565:38;38131:529;38268:41;;;38258:51;;;:6;:51;;;;38251:58;;;;;38095:620;38699:4;38692:11;;37923:799;;;;;;;:::o;49450:176::-;49502:13;49528:90;;;;;;;;;;;;;;;;;;;49450:176;:::o;28103:343::-;28176:13;28210:16;28218:7;28210;:16::i;:::-;28202:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28291:21;28315:10;:8;:10::i;:::-;28291:34;;28367:1;28349:7;28343:21;:25;:95;;;;;;;;;;;;;;;;;28395:7;28404:18;:7;:16;:18::i;:::-;28378:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28343:95;28336:102;;;28103:343;;;:::o;18482:157::-;18567:4;18606:25;18591:40;;;:11;:40;;;;18584:47;;18482:157;;;:::o;34559:439::-;34653:1;34639:16;;:2;:16;;;;34631:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34712:16;34720:7;34712;:16::i;:::-;34711:17;34703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34774:45;34803:1;34807:2;34811:7;34774:20;:45::i;:::-;34849:1;34832:9;:13;34842:2;34832:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34880:2;34861:7;:16;34869:7;34861:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34925:7;34921:2;34900:33;;34917:1;34900:33;;;;;;;;;;;;34946:44;34974:1;34978:2;34982:7;34946:19;:44::i;:::-;34559:439;;:::o;44641:589::-;44785:45;44812:4;44818:2;44822:7;44785:26;:45::i;:::-;44863:1;44847:18;;:4;:18;;;44843:187;;;44882:40;44914:7;44882:31;:40::i;:::-;44843:187;;;44952:2;44944:10;;:4;:10;;;44940:90;;44971:47;45004:4;45010:7;44971:32;:47::i;:::-;44940:90;44843:187;45058:1;45044:16;;:2;:16;;;45040:183;;;45077:45;45114:7;45077:36;:45::i;:::-;45040:183;;;45150:4;45144:10;;:2;:10;;;45140:83;;45171:40;45199:2;45203:7;45171:27;:40::i;:::-;45140:83;45040:183;44641:589;;;:::o;8381:326::-;8441:4;8698:1;8676:7;:19;;;:23;8669:30;;8381:326;;;:::o;1948:723::-;2004:13;2234:1;2225:5;:10;2221:53;;;2252:10;;;;;;;;;;;;;;;;;;;;;2221:53;2284:12;2299:5;2284:20;;2315:14;2340:78;2355:1;2347:4;:9;2340:78;;2373:8;;;;;:::i;:::-;;;;2404:2;2396:10;;;;;:::i;:::-;;;2340:78;;;2428:19;2460:6;2450:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2428:39;;2478:154;2494:1;2485:5;:10;2478:154;;2522:1;2512:11;;;;;:::i;:::-;;;2589:2;2581:5;:10;;;;:::i;:::-;2568:2;:24;;;;:::i;:::-;2555:39;;2538:6;2545;2538:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2618:2;2609:11;;;;;:::i;:::-;;;2478:154;;;2656:6;2642:21;;;;;1948:723;;;;:::o;39294:126::-;;;;:::o;45953:164::-;46057:10;:17;;;;46030:15;:24;46046:7;46030:24;;;;;;;;;;;:44;;;;46085:10;46101:7;46085:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45953:164;:::o;46744:988::-;47010:22;47060:1;47035:22;47052:4;47035:16;:22::i;:::-;:26;;;;:::i;:::-;47010:51;;47072:18;47093:17;:26;47111:7;47093:26;;;;;;;;;;;;47072:47;;47240:14;47226:10;:28;47222:328;;47271:19;47293:12;:18;47306:4;47293:18;;;;;;;;;;;;;;;:34;47312:14;47293:34;;;;;;;;;;;;47271:56;;47377:11;47344:12;:18;47357:4;47344:18;;;;;;;;;;;;;;;:30;47363:10;47344:30;;;;;;;;;;;:44;;;;47494:10;47461:17;:30;47479:11;47461:30;;;;;;;;;;;:43;;;;47256:294;47222:328;47646:17;:26;47664:7;47646:26;;;;;;;;;;;47639:33;;;47690:12;:18;47703:4;47690:18;;;;;;;;;;;;;;;:34;47709:14;47690:34;;;;;;;;;;;47683:41;;;46825:907;;46744:988;;:::o;48027:1079::-;48280:22;48325:1;48305:10;:17;;;;:21;;;;:::i;:::-;48280:46;;48337:18;48358:15;:24;48374:7;48358:24;;;;;;;;;;;;48337:45;;48709:19;48731:10;48742:14;48731:26;;;;;;;;:::i;:::-;;;;;;;;;;48709:48;;48795:11;48770:10;48781;48770:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48906:10;48875:15;:28;48891:11;48875:28;;;;;;;;;;;:41;;;;49047:15;:24;49063:7;49047:24;;;;;;;;;;;49040:31;;;49082:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48098:1008;;;48027:1079;:::o;45531:221::-;45616:14;45633:20;45650:2;45633:16;:20::i;:::-;45616:37;;45691:7;45664:12;:16;45677:2;45664:16;;;;;;;;;;;;;;;:24;45681:6;45664:24;;;;;;;;;;;:34;;;;45738:6;45709:17;:26;45727:7;45709:26;;;;;;;;;;;:35;;;;45605:147;45531:221;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:::-;8481:3;8502:67;8566:2;8561:3;8502:67;:::i;:::-;8495:74;;8578:93;8667:3;8578:93;:::i;:::-;8696:2;8691:3;8687:12;8680:19;;8339:366;;;:::o;8711:::-;8853:3;8874:67;8938:2;8933:3;8874:67;:::i;:::-;8867:74;;8950:93;9039:3;8950:93;:::i;:::-;9068:2;9063:3;9059:12;9052:19;;8711:366;;;:::o;9083:::-;9225:3;9246:67;9310:2;9305:3;9246:67;:::i;:::-;9239:74;;9322:93;9411:3;9322:93;:::i;:::-;9440:2;9435:3;9431:12;9424:19;;9083:366;;;:::o;9455:::-;9597:3;9618:67;9682:2;9677:3;9618:67;:::i;:::-;9611:74;;9694:93;9783:3;9694:93;:::i;:::-;9812:2;9807:3;9803:12;9796:19;;9455:366;;;:::o;9827:::-;9969:3;9990:67;10054:2;10049:3;9990:67;:::i;:::-;9983:74;;10066:93;10155:3;10066:93;:::i;:::-;10184:2;10179:3;10175:12;10168:19;;9827:366;;;:::o;10199:::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:400::-;12591:3;12612:84;12694:1;12689:3;12612:84;:::i;:::-;12605:91;;12705:93;12794:3;12705:93;:::i;:::-;12823:1;12818:3;12814:11;12807:18;;12431:400;;;:::o;12837:366::-;12979:3;13000:67;13064:2;13059:3;13000:67;:::i;:::-;12993:74;;13076:93;13165:3;13076:93;:::i;:::-;13194:2;13189:3;13185:12;13178:19;;12837:366;;;:::o;13209:::-;13351:3;13372:67;13436:2;13431:3;13372:67;:::i;:::-;13365:74;;13448:93;13537:3;13448:93;:::i;:::-;13566:2;13561:3;13557:12;13550:19;;13209:366;;;:::o;13581:::-;13723:3;13744:67;13808:2;13803:3;13744:67;:::i;:::-;13737:74;;13820:93;13909:3;13820:93;:::i;:::-;13938:2;13933:3;13929:12;13922:19;;13581:366;;;:::o;13953:::-;14095:3;14116:67;14180:2;14175:3;14116:67;:::i;:::-;14109:74;;14192:93;14281:3;14192:93;:::i;:::-;14310:2;14305:3;14301:12;14294:19;;13953:366;;;:::o;14325:::-;14467:3;14488:67;14552:2;14547:3;14488:67;:::i;:::-;14481:74;;14564:93;14653:3;14564:93;:::i;:::-;14682:2;14677:3;14673:12;14666:19;;14325:366;;;:::o;14697:365::-;14839:3;14860:66;14924:1;14919:3;14860:66;:::i;:::-;14853:73;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14697:365;;;:::o;15068:366::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:118::-;15527:24;15545:5;15527:24;:::i;:::-;15522:3;15515:37;15440:118;;:::o;15564:435::-;15744:3;15766:95;15857:3;15848:6;15766:95;:::i;:::-;15759:102;;15878:95;15969:3;15960:6;15878:95;:::i;:::-;15871:102;;15990:3;15983:10;;15564:435;;;;;:::o;16005:701::-;16286:3;16308:95;16399:3;16390:6;16308:95;:::i;:::-;16301:102;;16420:95;16511:3;16502:6;16420:95;:::i;:::-;16413:102;;16532:148;16676:3;16532:148;:::i;:::-;16525:155;;16697:3;16690:10;;16005:701;;;;;:::o;16712:222::-;16805:4;16843:2;16832:9;16828:18;16820:26;;16856:71;16924:1;16913:9;16909:17;16900:6;16856:71;:::i;:::-;16712:222;;;;:::o;16940:640::-;17135:4;17173:3;17162:9;17158:19;17150:27;;17187:71;17255:1;17244:9;17240:17;17231:6;17187:71;:::i;:::-;17268:72;17336:2;17325:9;17321:18;17312:6;17268:72;:::i;:::-;17350;17418:2;17407:9;17403:18;17394:6;17350:72;:::i;:::-;17469:9;17463:4;17459:20;17454:2;17443:9;17439:18;17432:48;17497:76;17568:4;17559:6;17497:76;:::i;:::-;17489:84;;16940:640;;;;;;;:::o;17586:210::-;17673:4;17711:2;17700:9;17696:18;17688:26;;17724:65;17786:1;17775:9;17771:17;17762:6;17724:65;:::i;:::-;17586:210;;;;:::o;17802:313::-;17915:4;17953:2;17942:9;17938:18;17930:26;;18002:9;17996:4;17992:20;17988:1;17977:9;17973:17;17966:47;18030:78;18103:4;18094:6;18030:78;:::i;:::-;18022:86;;17802:313;;;;:::o;18121:419::-;18287:4;18325:2;18314:9;18310:18;18302:26;;18374:9;18368:4;18364:20;18360:1;18349:9;18345:17;18338:47;18402:131;18528:4;18402:131;:::i;:::-;18394:139;;18121:419;;;:::o;18546:::-;18712:4;18750:2;18739:9;18735:18;18727:26;;18799:9;18793:4;18789:20;18785:1;18774:9;18770:17;18763:47;18827:131;18953:4;18827:131;:::i;:::-;18819:139;;18546:419;;;:::o;18971:::-;19137:4;19175:2;19164:9;19160:18;19152:26;;19224:9;19218:4;19214:20;19210:1;19199:9;19195:17;19188:47;19252:131;19378:4;19252:131;:::i;:::-;19244:139;;18971:419;;;:::o;19396:::-;19562:4;19600:2;19589:9;19585:18;19577:26;;19649:9;19643:4;19639:20;19635:1;19624:9;19620:17;19613:47;19677:131;19803:4;19677:131;:::i;:::-;19669:139;;19396:419;;;:::o;19821:::-;19987:4;20025:2;20014:9;20010:18;20002:26;;20074:9;20068:4;20064:20;20060:1;20049:9;20045:17;20038:47;20102:131;20228:4;20102:131;:::i;:::-;20094:139;;19821:419;;;:::o;20246:::-;20412:4;20450:2;20439:9;20435:18;20427:26;;20499:9;20493:4;20489:20;20485:1;20474:9;20470:17;20463:47;20527:131;20653:4;20527:131;:::i;:::-;20519:139;;20246:419;;;:::o;20671:::-;20837:4;20875:2;20864:9;20860:18;20852:26;;20924:9;20918:4;20914:20;20910:1;20899:9;20895:17;20888:47;20952:131;21078:4;20952:131;:::i;:::-;20944:139;;20671:419;;;:::o;21096:::-;21262:4;21300:2;21289:9;21285:18;21277:26;;21349:9;21343:4;21339:20;21335:1;21324:9;21320:17;21313:47;21377:131;21503:4;21377:131;:::i;:::-;21369:139;;21096:419;;;:::o;21521:::-;21687:4;21725:2;21714:9;21710:18;21702:26;;21774:9;21768:4;21764:20;21760:1;21749:9;21745:17;21738:47;21802:131;21928:4;21802:131;:::i;:::-;21794:139;;21521:419;;;:::o;21946:::-;22112:4;22150:2;22139:9;22135:18;22127:26;;22199:9;22193:4;22189:20;22185:1;22174:9;22170:17;22163:47;22227:131;22353:4;22227:131;:::i;:::-;22219:139;;21946:419;;;:::o;22371:::-;22537:4;22575:2;22564:9;22560:18;22552:26;;22624:9;22618:4;22614:20;22610:1;22599:9;22595:17;22588:47;22652:131;22778:4;22652:131;:::i;:::-;22644:139;;22371:419;;;:::o;22796:::-;22962:4;23000:2;22989:9;22985:18;22977:26;;23049:9;23043:4;23039:20;23035:1;23024:9;23020:17;23013:47;23077:131;23203:4;23077:131;:::i;:::-;23069:139;;22796:419;;;:::o;23221:::-;23387:4;23425:2;23414:9;23410:18;23402:26;;23474:9;23468:4;23464:20;23460:1;23449:9;23445:17;23438:47;23502:131;23628:4;23502:131;:::i;:::-;23494:139;;23221:419;;;:::o;23646:::-;23812:4;23850:2;23839:9;23835:18;23827:26;;23899:9;23893:4;23889:20;23885:1;23874:9;23870:17;23863:47;23927:131;24053:4;23927:131;:::i;:::-;23919:139;;23646:419;;;:::o;24071:::-;24237:4;24275:2;24264:9;24260:18;24252:26;;24324:9;24318:4;24314:20;24310:1;24299:9;24295:17;24288:47;24352:131;24478:4;24352:131;:::i;:::-;24344:139;;24071:419;;;:::o;24496:::-;24662:4;24700:2;24689:9;24685:18;24677:26;;24749:9;24743:4;24739:20;24735:1;24724:9;24720:17;24713:47;24777:131;24903:4;24777:131;:::i;:::-;24769:139;;24496:419;;;:::o;24921:::-;25087:4;25125:2;25114:9;25110:18;25102:26;;25174:9;25168:4;25164:20;25160:1;25149:9;25145:17;25138:47;25202:131;25328:4;25202:131;:::i;:::-;25194:139;;24921:419;;;:::o;25346:::-;25512:4;25550:2;25539:9;25535:18;25527:26;;25599:9;25593:4;25589:20;25585:1;25574:9;25570:17;25563:47;25627:131;25753:4;25627:131;:::i;:::-;25619:139;;25346:419;;;:::o;25771:::-;25937:4;25975:2;25964:9;25960:18;25952:26;;26024:9;26018:4;26014:20;26010:1;25999:9;25995:17;25988:47;26052:131;26178:4;26052:131;:::i;:::-;26044:139;;25771:419;;;:::o;26196:::-;26362:4;26400:2;26389:9;26385:18;26377:26;;26449:9;26443:4;26439:20;26435:1;26424:9;26420:17;26413:47;26477:131;26603:4;26477:131;:::i;:::-;26469:139;;26196:419;;;:::o;26621:::-;26787:4;26825:2;26814:9;26810:18;26802:26;;26874:9;26868:4;26864:20;26860:1;26849:9;26845:17;26838:47;26902:131;27028:4;26902:131;:::i;:::-;26894:139;;26621:419;;;:::o;27046:222::-;27139:4;27177:2;27166:9;27162:18;27154:26;;27190:71;27258:1;27247:9;27243:17;27234:6;27190:71;:::i;:::-;27046:222;;;;:::o;27274:129::-;27308:6;27335:20;;:::i;:::-;27325:30;;27364:33;27392:4;27384:6;27364:33;:::i;:::-;27274:129;;;:::o;27409:75::-;27442:6;27475:2;27469:9;27459:19;;27409:75;:::o;27490:307::-;27551:4;27641:18;27633:6;27630:30;27627:56;;;27663:18;;:::i;:::-;27627:56;27701:29;27723:6;27701:29;:::i;:::-;27693:37;;27785:4;27779;27775:15;27767:23;;27490:307;;;:::o;27803:98::-;27854:6;27888:5;27882:12;27872:22;;27803:98;;;:::o;27907:99::-;27959:6;27993:5;27987:12;27977:22;;27907:99;;;:::o;28012:168::-;28095:11;28129:6;28124:3;28117:19;28169:4;28164:3;28160:14;28145:29;;28012:168;;;;:::o;28186:169::-;28270:11;28304:6;28299:3;28292:19;28344:4;28339:3;28335:14;28320:29;;28186:169;;;;:::o;28361:148::-;28463:11;28500:3;28485:18;;28361:148;;;;:::o;28515:305::-;28555:3;28574:20;28592:1;28574:20;:::i;:::-;28569:25;;28608:20;28626:1;28608:20;:::i;:::-;28603:25;;28762:1;28694:66;28690:74;28687:1;28684:81;28681:107;;;28768:18;;:::i;:::-;28681:107;28812:1;28809;28805:9;28798:16;;28515:305;;;;:::o;28826:185::-;28866:1;28883:20;28901:1;28883:20;:::i;:::-;28878:25;;28917:20;28935:1;28917:20;:::i;:::-;28912:25;;28956:1;28946:35;;28961:18;;:::i;:::-;28946:35;29003:1;29000;28996:9;28991:14;;28826:185;;;;:::o;29017:191::-;29057:4;29077:20;29095:1;29077:20;:::i;:::-;29072:25;;29111:20;29129:1;29111:20;:::i;:::-;29106:25;;29150:1;29147;29144:8;29141:34;;;29155:18;;:::i;:::-;29141:34;29200:1;29197;29193:9;29185:17;;29017:191;;;;:::o;29214:96::-;29251:7;29280:24;29298:5;29280:24;:::i;:::-;29269:35;;29214:96;;;:::o;29316:90::-;29350:7;29393:5;29386:13;29379:21;29368:32;;29316:90;;;:::o;29412:149::-;29448:7;29488:66;29481:5;29477:78;29466:89;;29412:149;;;:::o;29567:126::-;29604:7;29644:42;29637:5;29633:54;29622:65;;29567:126;;;:::o;29699:77::-;29736:7;29765:5;29754:16;;29699:77;;;:::o;29782:154::-;29866:6;29861:3;29856;29843:30;29928:1;29919:6;29914:3;29910:16;29903:27;29782:154;;;:::o;29942:307::-;30010:1;30020:113;30034:6;30031:1;30028:13;30020:113;;;30119:1;30114:3;30110:11;30104:18;30100:1;30095:3;30091:11;30084:39;30056:2;30053:1;30049:10;30044:15;;30020:113;;;30151:6;30148:1;30145:13;30142:101;;;30231:1;30222:6;30217:3;30213:16;30206:27;30142:101;29991:258;29942:307;;;:::o;30255:320::-;30299:6;30336:1;30330:4;30326:12;30316:22;;30383:1;30377:4;30373:12;30404:18;30394:81;;30460:4;30452:6;30448:17;30438:27;;30394:81;30522:2;30514:6;30511:14;30491:18;30488:38;30485:84;;;30541:18;;:::i;:::-;30485:84;30306:269;30255:320;;;:::o;30581:281::-;30664:27;30686:4;30664:27;:::i;:::-;30656:6;30652:40;30794:6;30782:10;30779:22;30758:18;30746:10;30743:34;30740:62;30737:88;;;30805:18;;:::i;:::-;30737:88;30845:10;30841:2;30834:22;30624:238;30581:281;;:::o;30868:233::-;30907:3;30930:24;30948:5;30930:24;:::i;:::-;30921:33;;30976:66;30969:5;30966:77;30963:103;;;31046:18;;:::i;:::-;30963:103;31093:1;31086:5;31082:13;31075:20;;30868:233;;;:::o;31107:176::-;31139:1;31156:20;31174:1;31156:20;:::i;:::-;31151:25;;31190:20;31208:1;31190:20;:::i;:::-;31185:25;;31229:1;31219:35;;31234:18;;:::i;:::-;31219:35;31275:1;31272;31268:9;31263:14;;31107:176;;;;:::o;31289:180::-;31337:77;31334:1;31327:88;31434:4;31431:1;31424:15;31458:4;31455:1;31448:15;31475:180;31523:77;31520:1;31513:88;31620:4;31617:1;31610:15;31644:4;31641:1;31634:15;31661:180;31709:77;31706:1;31699:88;31806:4;31803:1;31796:15;31830:4;31827:1;31820:15;31847:180;31895:77;31892:1;31885:88;31992:4;31989:1;31982:15;32016:4;32013:1;32006:15;32033:180;32081:77;32078:1;32071:88;32178:4;32175:1;32168:15;32202:4;32199:1;32192:15;32219:180;32267:77;32264:1;32257:88;32364:4;32361:1;32354:15;32388:4;32385:1;32378:15;32405:117;32514:1;32511;32504:12;32528:117;32637:1;32634;32627:12;32651:117;32760:1;32757;32750:12;32774:117;32883:1;32880;32873:12;32897:102;32938:6;32989:2;32985:7;32980:2;32973:5;32969:14;32965:28;32955:38;;32897:102;;;:::o;33005:230::-;33145:34;33141:1;33133:6;33129:14;33122:58;33214:13;33209:2;33201:6;33197:15;33190:38;33005:230;:::o;33241:237::-;33381:34;33377:1;33369:6;33365:14;33358:58;33450:20;33445:2;33437:6;33433:15;33426:45;33241:237;:::o;33484:225::-;33624:34;33620:1;33612:6;33608:14;33601:58;33693:8;33688:2;33680:6;33676:15;33669:33;33484:225;:::o;33715:224::-;33855:34;33851:1;33843:6;33839:14;33832:58;33924:7;33919:2;33911:6;33907:15;33900:32;33715:224;:::o;33945:178::-;34085:30;34081:1;34073:6;34069:14;34062:54;33945:178;:::o;34129:223::-;34269:34;34265:1;34257:6;34253:14;34246:58;34338:6;34333:2;34325:6;34321:15;34314:31;34129:223;:::o;34358:175::-;34498:27;34494:1;34486:6;34482:14;34475:51;34358:175;:::o;34539:231::-;34679:34;34675:1;34667:6;34663:14;34656:58;34748:14;34743:2;34735:6;34731:15;34724:39;34539:231;:::o;34776:243::-;34916:34;34912:1;34904:6;34900:14;34893:58;34985:26;34980:2;34972:6;34968:15;34961:51;34776:243;:::o;35025:229::-;35165:34;35161:1;35153:6;35149:14;35142:58;35234:12;35229:2;35221:6;35217:15;35210:37;35025:229;:::o;35260:228::-;35400:34;35396:1;35388:6;35384:14;35377:58;35469:11;35464:2;35456:6;35452:15;35445:36;35260:228;:::o;35494:182::-;35634:34;35630:1;35622:6;35618:14;35611:58;35494:182;:::o;35682:236::-;35822:34;35818:1;35810:6;35806:14;35799:58;35891:19;35886:2;35878:6;35874:15;35867:44;35682:236;:::o;35924:231::-;36064:34;36060:1;36052:6;36048:14;36041:58;36133:14;36128:2;36120:6;36116:15;36109:39;35924:231;:::o;36161:155::-;36301:7;36297:1;36289:6;36285:14;36278:31;36161:155;:::o;36322:182::-;36462:34;36458:1;36450:6;36446:14;36439:58;36322:182;:::o;36510:234::-;36650:34;36646:1;36638:6;36634:14;36627:58;36719:17;36714:2;36706:6;36702:15;36695:42;36510:234;:::o;36750:175::-;36890:27;36886:1;36878:6;36874:14;36867:51;36750:175;:::o;36931:220::-;37071:34;37067:1;37059:6;37055:14;37048:58;37140:3;37135:2;37127:6;37123:15;37116:28;36931:220;:::o;37157:236::-;37297:34;37293:1;37285:6;37281:14;37274:58;37366:19;37361:2;37353:6;37349:15;37342:44;37157:236;:::o;37399:158::-;37539:10;37535:1;37527:6;37523:14;37516:34;37399:158;:::o;37563:231::-;37703:34;37699:1;37691:6;37687:14;37680:58;37772:14;37767:2;37759:6;37755:15;37748:39;37563:231;:::o;37800:122::-;37873:24;37891:5;37873:24;:::i;:::-;37866:5;37863:35;37853:63;;37912:1;37909;37902:12;37853:63;37800:122;:::o;37928:116::-;37998:21;38013:5;37998:21;:::i;:::-;37991:5;37988:32;37978:60;;38034:1;38031;38024:12;37978:60;37928:116;:::o;38050:120::-;38122:23;38139:5;38122:23;:::i;:::-;38115:5;38112:34;38102:62;;38160:1;38157;38150:12;38102:62;38050:120;:::o;38176:122::-;38249:24;38267:5;38249:24;:::i;:::-;38242:5;38239:35;38229:63;;38288:1;38285;38278:12;38229:63;38176:122;:::o
Swarm Source
ipfs://b1fd2c91bed9aa0eae4f7ffaa8b88750ed1ae3071dfa09ed36fc5df8a1093087
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.