Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
3,333 PJPPFL
Holders
1,343
Market
Volume (24H)
0.0794 ETH
Min Price (24H)
$74.94 @ 0.019000 ETH
Max Price (24H)
$81.41 @ 0.020638 ETH
Other Info
Token Contract
Balance
1 PJPPFLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PJPP_Ladies
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-06 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/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(); } } // File: contracts/PJPP_Ladies.sol pragma solidity >=0.7.0 <0.9.0; contract PJPP_Ladies is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.3 ether; uint256 public maxSupply = 3333; bool public paused = false; bool public revealed = false; mapping(address => uint256) public addressMintedBalance; bytes32 public owligarchMerkleRoot; bytes32 public platinumMerkleRoot; bytes32 public diamondMerkleRoot; uint256 public maxLimitPublic = 2; uint256 public maxLimitOwligarch = 2; uint256 public maxLimitPlatinum = 5; uint256 public maxLimitDiamond = 10; bool public publicSale = false; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setPublicSale(bool _publicSale) external onlyOwner { publicSale = _publicSale; } function isValidMerkleProof(bytes32[] calldata merkleProof, bytes32 root) internal view returns (bool) { return MerkleProof.verify( merkleProof, root, keccak256(abi.encodePacked(msg.sender)) ); } function mint(bytes32[] calldata merkleProof, uint256 _amount) public payable { require(!paused, "minting is paused"); uint256 supply = totalSupply(); require(supply + _amount <= maxSupply, "max NFT limit exceeded"); uint256 minted = balanceOf(msg.sender); if (isValidMerkleProof(merkleProof, diamondMerkleRoot)) { require( minted + _amount <= maxLimitDiamond, "cannot mint more than dimaond limit" ); } else if (isValidMerkleProof(merkleProof, platinumMerkleRoot)) { require( minted + _amount <= maxLimitPlatinum, "cannot mint more than platinum limit" ); } else if (isValidMerkleProof(merkleProof, owligarchMerkleRoot)) { require( minted + _amount <= maxLimitOwligarch, "cannot mint more than owligarch limit" ); } else { require(publicSale == true, "Public sale is not open"); require( minted + _amount <= maxLimitPublic, "cannot mint more than limit" ); } require(msg.value == cost * _amount, "pay price of nft"); for (uint256 i = 1; i <= _amount; i++) { _safeMint(msg.sender, supply + i); } } function ownerMint(address _to, uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function setOwligarchMerkleRoot(bytes32 merkleRoot) external onlyOwner { owligarchMerkleRoot = merkleRoot; } function setPlatinumMerkleRoot(bytes32 merkleRoot) external onlyOwner { platinumMerkleRoot = merkleRoot; } function setDiamondMerkleRoot(bytes32 merkleRoot) external onlyOwner { diamondMerkleRoot = merkleRoot; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setmaxLimitPublic(uint256 _limit) public onlyOwner { maxLimitPublic = _limit; } function setMaxLimitOwligarch(uint256 _limit) public onlyOwner { maxLimitOwligarch = _limit; } function setMaxLimitDiamond(uint256 _limit) public onlyOwner { maxLimitDiamond = _limit; } function setMaxLimitPlatinum(uint256 _limit) public onlyOwner { maxLimitPlatinum = _limit; } function setMaxSupply(uint256 _supply) public onlyOwner { maxSupply = _supply; } function withdraw() public payable onlyOwner { uint256 amount = address(this).balance; require(amount > 0, "Ether balance is 0 in contract"); payable(address(owner())).transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"diamondMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"maxLimitDiamond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitOwligarch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitPlatinum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owligarchMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setDiamondMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxLimitDiamond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxLimitOwligarch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxLimitPlatinum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setOwligarchMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setPlatinumMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicSale","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setmaxLimitPublic","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003cc565b50670429d069189e0000600e55610d05600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550600260155560026016556005601755600a6018556000601960006101000a81548160ff021916908315150217905550348015620000d657600080fd5b5060405162005fa838038062005fa88339818101604052810190620000fc9190620004ee565b8383816000908051906020019062000116929190620003cc565b5080600190805190602001906200012f929190620003cc565b50505062000152620001466200017e60201b60201c565b6200018660201b60201c565b62000163826200024c60201b60201c565b6200017481620002f760201b60201c565b50505050620007b1565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025c6200017e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000282620003a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d290620005e5565b60405180910390fd5b80600b9080519060200190620002f3929190620003cc565b5050565b620003076200017e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032d620003a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000386576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037d90620005e5565b60405180910390fd5b80600d90805190602001906200039e929190620003cc565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003da90620006ad565b90600052602060002090601f016020900481019282620003fe57600085556200044a565b82601f106200041957805160ff19168380011785556200044a565b828001600101855582156200044a579182015b82811115620004495782518255916020019190600101906200042c565b5b5090506200045991906200045d565b5090565b5b80821115620004785760008160009055506001016200045e565b5090565b6000620004936200048d8462000630565b62000607565b905082815260208101848484011115620004ac57600080fd5b620004b984828562000677565b509392505050565b600082601f830112620004d357600080fd5b8151620004e58482602086016200047c565b91505092915050565b600080600080608085870312156200050557600080fd5b600085015167ffffffffffffffff8111156200052057600080fd5b6200052e87828801620004c1565b945050602085015167ffffffffffffffff8111156200054c57600080fd5b6200055a87828801620004c1565b935050604085015167ffffffffffffffff8111156200057857600080fd5b6200058687828801620004c1565b925050606085015167ffffffffffffffff811115620005a457600080fd5b620005b287828801620004c1565b91505092959194509250565b6000620005cd60208362000666565b9150620005da8262000788565b602082019050919050565b600060208201905081810360008301526200060081620005be565b9050919050565b60006200061362000626565b9050620006218282620006e3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200064e576200064d62000748565b5b620006598262000777565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006975780820151818401526020810190506200067a565b83811115620006a7576000848401525b50505050565b60006002820490506001821680620006c657607f821691505b60208210811415620006dd57620006dc62000719565b5b50919050565b620006ee8262000777565b810181811067ffffffffffffffff8211171562000710576200070f62000748565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6157e780620007c16000396000f3fe6080604052600436106103355760003560e01c80636f8b44b0116101ab578063b5868c67116100f7578063df6b6c2911610095578063f04962c61161006f578063f04962c614610bd8578063f09147ca14610c01578063f2c4ce1e14610c2c578063f2fde38b14610c5557610335565b8063df6b6c2914610b47578063e985e9c514610b70578063ef45718414610bad57610335565b8063c87b56dd116100d1578063c87b56dd14610a8b578063c945cf1014610ac8578063d5abeb0114610af3578063da3ef23f14610b1e57610335565b8063b5868c6714610a0e578063b88d4fde14610a37578063c668286214610a6057610335565b80639bed4a7111610164578063a475b5dd1161013e578063a475b5dd14610976578063a8d85e971461098d578063ad3a06e5146109b8578063b3e51ca3146109e357610335565b80639bed4a71146108f95780639ee7298814610924578063a22cb4651461094d57610335565b80636f8b44b0146107fd57806370a0823114610826578063715018a614610863578063742184dc1461087a5780638da5cb5b146108a357806395d89b41146108ce57610335565b80633ccfd60b116102855780634f6ccce7116102235780635aca1bb6116101fd5780635aca1bb6146107415780635c975abb1461076a5780636352211e146107955780636c0360eb146107d257610335565b80634f6ccce7146106b057806351830227146106ed57806355f804b31461071857610335565b806344a0d68a1161025f57806344a0d68a1461061957806345de0d9b14610642578063484b973c1461065e578063485bf8f01461068757610335565b80633ccfd60b146105a957806342842e0e146105b3578063438b6300146105dc57610335565b806313faede6116102f25780631b84b6af116102cc5780631b84b6af146104ef57806323b872dd146105185780632f745c591461054157806333bc1c5c1461057e57610335565b806313faede61461045c57806318160ddd1461048757806318cae269146104b257610335565b806301ffc9a71461033a57806302329a291461037757806306fdde03146103a0578063081812fc146103cb578063081c8c4414610408578063095ea7b314610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061408e565b610c7e565b60405161036e91906147ca565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061403c565b610cf8565b005b3480156103ac57600080fd5b506103b5610d91565b6040516103c29190614800565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190614121565b610e23565b6040516103ff9190614741565b60405180910390f35b34801561041457600080fd5b5061041d610ea8565b60405161042a9190614800565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613fa8565b610f36565b005b34801561046857600080fd5b5061047161104e565b60405161047e9190614b82565b60405180910390f35b34801561049357600080fd5b5061049c611054565b6040516104a99190614b82565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613e3d565b611061565b6040516104e69190614b82565b60405180910390f35b3480156104fb57600080fd5b5061051660048036038101906105119190614121565b611079565b005b34801561052457600080fd5b5061053f600480360381019061053a9190613ea2565b6110ff565b005b34801561054d57600080fd5b5061056860048036038101906105639190613fa8565b61115f565b6040516105759190614b82565b60405180910390f35b34801561058a57600080fd5b50610593611204565b6040516105a091906147ca565b60405180910390f35b6105b1611217565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613ea2565b61132c565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190613e3d565b61134c565b60405161061091906147a8565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614121565b611446565b005b61065c60048036038101906106579190613fe4565b6114cc565b005b34801561066a57600080fd5b5061068560048036038101906106809190613fa8565b6117f0565b005b34801561069357600080fd5b506106ae60048036038101906106a99190614121565b6118db565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190614121565b611961565b6040516106e49190614b82565b60405180910390f35b3480156106f957600080fd5b506107026119f8565b60405161070f91906147ca565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906140e0565b611a0b565b005b34801561074d57600080fd5b506107686004803603810190610763919061403c565b611aa1565b005b34801561077657600080fd5b5061077f611b3a565b60405161078c91906147ca565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190614121565b611b4d565b6040516107c99190614741565b60405180910390f35b3480156107de57600080fd5b506107e7611bff565b6040516107f49190614800565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614121565b611c8d565b005b34801561083257600080fd5b5061084d60048036038101906108489190613e3d565b611d13565b60405161085a9190614b82565b60405180910390f35b34801561086f57600080fd5b50610878611dcb565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614065565b611e53565b005b3480156108af57600080fd5b506108b8611ed9565b6040516108c59190614741565b60405180910390f35b3480156108da57600080fd5b506108e3611f03565b6040516108f09190614800565b60405180910390f35b34801561090557600080fd5b5061090e611f95565b60405161091b91906147e5565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190614065565b611f9b565b005b34801561095957600080fd5b50610974600480360381019061096f9190613f6c565b612021565b005b34801561098257600080fd5b5061098b612037565b005b34801561099957600080fd5b506109a26120d0565b6040516109af9190614b82565b60405180910390f35b3480156109c457600080fd5b506109cd6120d6565b6040516109da91906147e5565b60405180910390f35b3480156109ef57600080fd5b506109f86120dc565b604051610a0591906147e5565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190614065565b6120e2565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613ef1565b612168565b005b348015610a6c57600080fd5b50610a756121ca565b604051610a829190614800565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190614121565b612258565b604051610abf9190614800565b60405180910390f35b348015610ad457600080fd5b50610add6123b1565b604051610aea9190614b82565b60405180910390f35b348015610aff57600080fd5b50610b086123b7565b604051610b159190614b82565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b4091906140e0565b6123bd565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614121565b612453565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190613e66565b6124d9565b604051610ba491906147ca565b60405180910390f35b348015610bb957600080fd5b50610bc261256d565b604051610bcf9190614b82565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa9190614121565b612573565b005b348015610c0d57600080fd5b50610c166125f9565b604051610c239190614b82565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906140e0565b6125ff565b005b348015610c6157600080fd5b50610c7c6004803603810190610c779190613e3d565b612695565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cf15750610cf08261278d565b5b9050919050565b610d0061286f565b73ffffffffffffffffffffffffffffffffffffffff16610d1e611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90614a62565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610da090614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcc90614e8a565b8015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e2e82612877565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490614a42565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610eb590614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee190614e8a565b8015610f2e5780601f10610f0357610100808354040283529160200191610f2e565b820191906000526020600020905b815481529060010190602001808311610f1157829003601f168201915b505050505081565b6000610f4182611b4d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fd161286f565b73ffffffffffffffffffffffffffffffffffffffff1614806110005750610fff81610ffa61286f565b6124d9565b5b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614942565b60405180910390fd5b61104983836128e3565b505050565b600e5481565b6000600880549050905090565b60116020528060005260406000206000915090505481565b61108161286f565b73ffffffffffffffffffffffffffffffffffffffff1661109f611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90614a62565b60405180910390fd5b8060188190555050565b61111061110a61286f565b8261299c565b61114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614ae2565b60405180910390fd5b61115a838383612a7a565b505050565b600061116a83611d13565b82106111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290614822565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601960009054906101000a900460ff1681565b61121f61286f565b73ffffffffffffffffffffffffffffffffffffffff1661123d611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90614a62565b60405180910390fd5b6000479050600081116112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906149c2565b60405180910390fd5b6112e3611ed9565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611328573d6000803e3d6000fd5b5050565b61134783838360405180602001604052806000815250612168565b505050565b6060600061135983611d13565b905060008167ffffffffffffffff81111561139d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113cb5781602001602082028036833780820191505090505b50905060005b8281101561143b576113e3858261115f565b82828151811061141c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061143390614eed565b9150506113d1565b508092505050919050565b61144e61286f565b73ffffffffffffffffffffffffffffffffffffffff1661146c611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614a62565b60405180910390fd5b80600e8190555050565b601060009054906101000a900460ff161561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614ac2565b60405180910390fd5b6000611526611054565b9050600f5482826115379190614cb5565b1115611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906149e2565b60405180910390fd5b600061158333611d13565b90506115928585601454612ce1565b156115ec5760185483826115a69190614cb5565b11156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90614b42565b60405180910390fd5b611763565b6115f98585601354612ce1565b1561165357601754838261160d9190614cb5565b111561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614a02565b60405180910390fd5b611762565b6116608585601254612ce1565b156116ba5760165483826116749190614cb5565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90614962565b60405180910390fd5b611761565b60011515601960009054906101000a900460ff16151514611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790614b62565b60405180910390fd5b601554838261171f9190614cb5565b1115611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614b02565b60405180910390fd5b5b5b5b82600e546117719190614d3c565b34146117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614882565b60405180910390fd5b6000600190505b8381116117e8576117d53382856117d09190614cb5565b612d5e565b80806117e090614eed565b9150506117b9565b505050505050565b6117f861286f565b73ffffffffffffffffffffffffffffffffffffffff16611816611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614a62565b60405180910390fd5b6000611876611054565b90506000821161188557600080fd5b600f5482826118949190614cb5565b111561189f57600080fd5b6000600190505b8281116118d5576118c28482846118bd9190614cb5565b612d5e565b80806118cd90614eed565b9150506118a6565b50505050565b6118e361286f565b73ffffffffffffffffffffffffffffffffffffffff16611901611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614a62565b60405180910390fd5b8060168190555050565b600061196b611054565b82106119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614b22565b60405180910390fd5b600882815481106119e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b611a1361286f565b73ffffffffffffffffffffffffffffffffffffffff16611a31611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90614a62565b60405180910390fd5b80600b9080519060200190611a9d929190613c02565b5050565b611aa961286f565b73ffffffffffffffffffffffffffffffffffffffff16611ac7611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614a62565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed906149a2565b60405180910390fd5b80915050919050565b600b8054611c0c90614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3890614e8a565b8015611c855780601f10611c5a57610100808354040283529160200191611c85565b820191906000526020600020905b815481529060010190602001808311611c6857829003601f168201915b505050505081565b611c9561286f565b73ffffffffffffffffffffffffffffffffffffffff16611cb3611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614a62565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614982565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dd361286f565b73ffffffffffffffffffffffffffffffffffffffff16611df1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614a62565b60405180910390fd5b611e516000612d7c565b565b611e5b61286f565b73ffffffffffffffffffffffffffffffffffffffff16611e79611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690614a62565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611f1290614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3e90614e8a565b8015611f8b5780601f10611f6057610100808354040283529160200191611f8b565b820191906000526020600020905b815481529060010190602001808311611f6e57829003601f168201915b5050505050905090565b60145481565b611fa361286f565b73ffffffffffffffffffffffffffffffffffffffff16611fc1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90614a62565b60405180910390fd5b8060138190555050565b61203361202c61286f565b8383612e42565b5050565b61203f61286f565b73ffffffffffffffffffffffffffffffffffffffff1661205d611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614a62565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b60165481565b60125481565b60135481565b6120ea61286f565b73ffffffffffffffffffffffffffffffffffffffff16612108611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614a62565b60405180910390fd5b8060128190555050565b61217961217361286f565b8361299c565b6121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614ae2565b60405180910390fd5b6121c484848484612faf565b50505050565b600c80546121d790614e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461220390614e8a565b80156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081565b606061226382612877565b6122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614a82565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561235057600d80546122cb90614e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546122f790614e8a565b80156123445780601f1061231957610100808354040283529160200191612344565b820191906000526020600020905b81548152906001019060200180831161232757829003601f168201915b505050505090506123ac565b600061235a61300b565b9050600081511161237a57604051806020016040528060008152506123a8565b806123848461309d565b600c60405160200161239893929190614710565b6040516020818303038152906040525b9150505b919050565b60155481565b600f5481565b6123c561286f565b73ffffffffffffffffffffffffffffffffffffffff166123e3611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090614a62565b60405180910390fd5b80600c908051906020019061244f929190613c02565b5050565b61245b61286f565b73ffffffffffffffffffffffffffffffffffffffff16612479611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614a62565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60185481565b61257b61286f565b73ffffffffffffffffffffffffffffffffffffffff16612599611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614a62565b60405180910390fd5b8060178190555050565b60175481565b61260761286f565b73ffffffffffffffffffffffffffffffffffffffff16612625611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461267b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267290614a62565b60405180910390fd5b80600d9080519060200190612691929190613c02565b5050565b61269d61286f565b73ffffffffffffffffffffffffffffffffffffffff166126bb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614a62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890614862565b60405180910390fd5b61278a81612d7c565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061285857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061286857506128678261324a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661295683611b4d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129a782612877565b6129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614922565b60405180910390fd5b60006129f183611b4d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a6057508373ffffffffffffffffffffffffffffffffffffffff16612a4884610e23565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a715750612a7081856124d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a9a82611b4d565b73ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b57906148e2565b60405180910390fd5b612b6b8383836132b4565b612b766000826128e3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bc69190614d96565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1d9190614cb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cdc8383836133c8565b505050565b6000612d55848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508333604051602001612d3a91906146f5565b604051602081830303815290604052805190602001206133cd565b90509392505050565b612d788282604051806020016040528060008152506133e4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea890614902565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612fa291906147ca565b60405180910390a3505050565b612fba848484612a7a565b612fc68484848461343f565b613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc90614842565b60405180910390fd5b50505050565b6060600b805461301a90614e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461304690614e8a565b80156130935780601f1061306857610100808354040283529160200191613093565b820191906000526020600020905b81548152906001019060200180831161307657829003601f168201915b5050505050905090565b606060008214156130e5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613245565b600082905060005b6000821461311757808061310090614eed565b915050600a826131109190614d0b565b91506130ed565b60008167ffffffffffffffff811115613159577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561318b5781602001600182028036833780820191505090505b5090505b6000851461323e576001826131a49190614d96565b9150600a856131b39190614f5a565b60306131bf9190614cb5565b60f81b8183815181106131fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132379190614d0b565b945061318f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132bf8383836135d6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613302576132fd816135db565b613341565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146133405761333f8382613624565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133845761337f81613791565b6133c3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133c2576133c182826138d4565b5b5b505050565b505050565b6000826133da8584613953565b1490509392505050565b6133ee83836139ee565b6133fb600084848461343f565b61343a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343190614842565b60405180910390fd5b505050565b60006134608473ffffffffffffffffffffffffffffffffffffffff16613bc8565b156135c9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261348961286f565b8786866040518563ffffffff1660e01b81526004016134ab949392919061475c565b602060405180830381600087803b1580156134c557600080fd5b505af19250505080156134f657506040513d601f19601f820116820180604052508101906134f391906140b7565b60015b613579573d8060008114613526576040519150601f19603f3d011682016040523d82523d6000602084013e61352b565b606091505b50600081511415613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356890614842565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135ce565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161363184611d13565b61363b9190614d96565b9050600060076000848152602001908152602001600020549050818114613720576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137a59190614d96565b90506000600960008481526020019081526020016000205490506000600883815481106137fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613843577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138df83611d13565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008082905060005b84518110156139e35760008582815181106139a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116139c2576139bb8382613beb565b92506139cf565b6139cc8184613beb565b92505b5080806139db90614eed565b91505061395c565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5590614a22565b60405180910390fd5b613a6781612877565b15613aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9e906148c2565b60405180910390fd5b613ab3600083836132b4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b039190614cb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613bc4600083836133c8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054613c0e90614e8a565b90600052602060002090601f016020900481019282613c305760008555613c77565b82601f10613c4957805160ff1916838001178555613c77565b82800160010185558215613c77579182015b82811115613c76578251825591602001919060010190613c5b565b5b509050613c849190613c88565b5090565b5b80821115613ca1576000816000905550600101613c89565b5090565b6000613cb8613cb384614bc2565b614b9d565b905082815260208101848484011115613cd057600080fd5b613cdb848285614e48565b509392505050565b6000613cf6613cf184614bf3565b614b9d565b905082815260208101848484011115613d0e57600080fd5b613d19848285614e48565b509392505050565b600081359050613d308161573e565b92915050565b60008083601f840112613d4857600080fd5b8235905067ffffffffffffffff811115613d6157600080fd5b602083019150836020820283011115613d7957600080fd5b9250929050565b600081359050613d8f81615755565b92915050565b600081359050613da48161576c565b92915050565b600081359050613db981615783565b92915050565b600081519050613dce81615783565b92915050565b600082601f830112613de557600080fd5b8135613df5848260208601613ca5565b91505092915050565b600082601f830112613e0f57600080fd5b8135613e1f848260208601613ce3565b91505092915050565b600081359050613e378161579a565b92915050565b600060208284031215613e4f57600080fd5b6000613e5d84828501613d21565b91505092915050565b60008060408385031215613e7957600080fd5b6000613e8785828601613d21565b9250506020613e9885828601613d21565b9150509250929050565b600080600060608486031215613eb757600080fd5b6000613ec586828701613d21565b9350506020613ed686828701613d21565b9250506040613ee786828701613e28565b9150509250925092565b60008060008060808587031215613f0757600080fd5b6000613f1587828801613d21565b9450506020613f2687828801613d21565b9350506040613f3787828801613e28565b925050606085013567ffffffffffffffff811115613f5457600080fd5b613f6087828801613dd4565b91505092959194509250565b60008060408385031215613f7f57600080fd5b6000613f8d85828601613d21565b9250506020613f9e85828601613d80565b9150509250929050565b60008060408385031215613fbb57600080fd5b6000613fc985828601613d21565b9250506020613fda85828601613e28565b9150509250929050565b600080600060408486031215613ff957600080fd5b600084013567ffffffffffffffff81111561401357600080fd5b61401f86828701613d36565b9350935050602061403286828701613e28565b9150509250925092565b60006020828403121561404e57600080fd5b600061405c84828501613d80565b91505092915050565b60006020828403121561407757600080fd5b600061408584828501613d95565b91505092915050565b6000602082840312156140a057600080fd5b60006140ae84828501613daa565b91505092915050565b6000602082840312156140c957600080fd5b60006140d784828501613dbf565b91505092915050565b6000602082840312156140f257600080fd5b600082013567ffffffffffffffff81111561410c57600080fd5b61411884828501613dfe565b91505092915050565b60006020828403121561413357600080fd5b600061414184828501613e28565b91505092915050565b600061415683836146d7565b60208301905092915050565b61416b81614dca565b82525050565b61418261417d82614dca565b614f36565b82525050565b600061419382614c49565b61419d8185614c77565b93506141a883614c24565b8060005b838110156141d95781516141c0888261414a565b97506141cb83614c6a565b9250506001810190506141ac565b5085935050505092915050565b6141ef81614ddc565b82525050565b6141fe81614de8565b82525050565b600061420f82614c54565b6142198185614c88565b9350614229818560208601614e57565b61423281615047565b840191505092915050565b600061424882614c5f565b6142528185614c99565b9350614262818560208601614e57565b61426b81615047565b840191505092915050565b600061428182614c5f565b61428b8185614caa565b935061429b818560208601614e57565b80840191505092915050565b600081546142b481614e8a565b6142be8186614caa565b945060018216600081146142d957600181146142ea5761431d565b60ff1983168652818601935061431d565b6142f385614c34565b60005b83811015614315578154818901526001820191506020810190506142f6565b838801955050505b50505092915050565b6000614333602b83614c99565b915061433e82615065565b604082019050919050565b6000614356603283614c99565b9150614361826150b4565b604082019050919050565b6000614379602683614c99565b915061438482615103565b604082019050919050565b600061439c601083614c99565b91506143a782615152565b602082019050919050565b60006143bf602583614c99565b91506143ca8261517b565b604082019050919050565b60006143e2601c83614c99565b91506143ed826151ca565b602082019050919050565b6000614405602483614c99565b9150614410826151f3565b604082019050919050565b6000614428601983614c99565b915061443382615242565b602082019050919050565b600061444b602c83614c99565b91506144568261526b565b604082019050919050565b600061446e603883614c99565b9150614479826152ba565b604082019050919050565b6000614491602583614c99565b915061449c82615309565b604082019050919050565b60006144b4602a83614c99565b91506144bf82615358565b604082019050919050565b60006144d7602983614c99565b91506144e2826153a7565b604082019050919050565b60006144fa601e83614c99565b9150614505826153f6565b602082019050919050565b600061451d601683614c99565b91506145288261541f565b602082019050919050565b6000614540602483614c99565b915061454b82615448565b604082019050919050565b6000614563602083614c99565b915061456e82615497565b602082019050919050565b6000614586602c83614c99565b9150614591826154c0565b604082019050919050565b60006145a9602083614c99565b91506145b48261550f565b602082019050919050565b60006145cc602f83614c99565b91506145d782615538565b604082019050919050565b60006145ef602183614c99565b91506145fa82615587565b604082019050919050565b6000614612601183614c99565b915061461d826155d6565b602082019050919050565b6000614635603183614c99565b9150614640826155ff565b604082019050919050565b6000614658601b83614c99565b91506146638261564e565b602082019050919050565b600061467b602c83614c99565b915061468682615677565b604082019050919050565b600061469e602383614c99565b91506146a9826156c6565b604082019050919050565b60006146c1601783614c99565b91506146cc82615715565b602082019050919050565b6146e081614e3e565b82525050565b6146ef81614e3e565b82525050565b60006147018284614171565b60148201915081905092915050565b600061471c8286614276565b91506147288285614276565b915061473482846142a7565b9150819050949350505050565b60006020820190506147566000830184614162565b92915050565b60006080820190506147716000830187614162565b61477e6020830186614162565b61478b60408301856146e6565b818103606083015261479d8184614204565b905095945050505050565b600060208201905081810360008301526147c28184614188565b905092915050565b60006020820190506147df60008301846141e6565b92915050565b60006020820190506147fa60008301846141f5565b92915050565b6000602082019050818103600083015261481a818461423d565b905092915050565b6000602082019050818103600083015261483b81614326565b9050919050565b6000602082019050818103600083015261485b81614349565b9050919050565b6000602082019050818103600083015261487b8161436c565b9050919050565b6000602082019050818103600083015261489b8161438f565b9050919050565b600060208201905081810360008301526148bb816143b2565b9050919050565b600060208201905081810360008301526148db816143d5565b9050919050565b600060208201905081810360008301526148fb816143f8565b9050919050565b6000602082019050818103600083015261491b8161441b565b9050919050565b6000602082019050818103600083015261493b8161443e565b9050919050565b6000602082019050818103600083015261495b81614461565b9050919050565b6000602082019050818103600083015261497b81614484565b9050919050565b6000602082019050818103600083015261499b816144a7565b9050919050565b600060208201905081810360008301526149bb816144ca565b9050919050565b600060208201905081810360008301526149db816144ed565b9050919050565b600060208201905081810360008301526149fb81614510565b9050919050565b60006020820190508181036000830152614a1b81614533565b9050919050565b60006020820190508181036000830152614a3b81614556565b9050919050565b60006020820190508181036000830152614a5b81614579565b9050919050565b60006020820190508181036000830152614a7b8161459c565b9050919050565b60006020820190508181036000830152614a9b816145bf565b9050919050565b60006020820190508181036000830152614abb816145e2565b9050919050565b60006020820190508181036000830152614adb81614605565b9050919050565b60006020820190508181036000830152614afb81614628565b9050919050565b60006020820190508181036000830152614b1b8161464b565b9050919050565b60006020820190508181036000830152614b3b8161466e565b9050919050565b60006020820190508181036000830152614b5b81614691565b9050919050565b60006020820190508181036000830152614b7b816146b4565b9050919050565b6000602082019050614b9760008301846146e6565b92915050565b6000614ba7614bb8565b9050614bb38282614ebc565b919050565b6000604051905090565b600067ffffffffffffffff821115614bdd57614bdc615018565b5b614be682615047565b9050602081019050919050565b600067ffffffffffffffff821115614c0e57614c0d615018565b5b614c1782615047565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cc082614e3e565b9150614ccb83614e3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0057614cff614f8b565b5b828201905092915050565b6000614d1682614e3e565b9150614d2183614e3e565b925082614d3157614d30614fba565b5b828204905092915050565b6000614d4782614e3e565b9150614d5283614e3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8b57614d8a614f8b565b5b828202905092915050565b6000614da182614e3e565b9150614dac83614e3e565b925082821015614dbf57614dbe614f8b565b5b828203905092915050565b6000614dd582614e1e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614e75578082015181840152602081019050614e5a565b83811115614e84576000848401525b50505050565b60006002820490506001821680614ea257607f821691505b60208210811415614eb657614eb5614fe9565b5b50919050565b614ec582615047565b810181811067ffffffffffffffff82111715614ee457614ee3615018565b5b80604052505050565b6000614ef882614e3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f2b57614f2a614f8b565b5b600182019050919050565b6000614f4182614f48565b9050919050565b6000614f5382615058565b9050919050565b6000614f6582614e3e565b9150614f7083614e3e565b925082614f8057614f7f614fba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e206f776c6967617263682060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e20706c6174696e756d206c60008201527f696d697400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e206c696d69740000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e2064696d616f6e64206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b61574781614dca565b811461575257600080fd5b50565b61575e81614ddc565b811461576957600080fd5b50565b61577581614de8565b811461578057600080fd5b50565b61578c81614df2565b811461579757600080fd5b50565b6157a381614e3e565b81146157ae57600080fd5b5056fea2646970667358221220b0366a7dbf182c54e35540dce574bac9500ea05fe4e6e626c348e7e43c64fecc64736f6c63430008020033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002550726976617465204a65742050796a616d61205061727479204669727374204c61646965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006504a5050464c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103355760003560e01c80636f8b44b0116101ab578063b5868c67116100f7578063df6b6c2911610095578063f04962c61161006f578063f04962c614610bd8578063f09147ca14610c01578063f2c4ce1e14610c2c578063f2fde38b14610c5557610335565b8063df6b6c2914610b47578063e985e9c514610b70578063ef45718414610bad57610335565b8063c87b56dd116100d1578063c87b56dd14610a8b578063c945cf1014610ac8578063d5abeb0114610af3578063da3ef23f14610b1e57610335565b8063b5868c6714610a0e578063b88d4fde14610a37578063c668286214610a6057610335565b80639bed4a7111610164578063a475b5dd1161013e578063a475b5dd14610976578063a8d85e971461098d578063ad3a06e5146109b8578063b3e51ca3146109e357610335565b80639bed4a71146108f95780639ee7298814610924578063a22cb4651461094d57610335565b80636f8b44b0146107fd57806370a0823114610826578063715018a614610863578063742184dc1461087a5780638da5cb5b146108a357806395d89b41146108ce57610335565b80633ccfd60b116102855780634f6ccce7116102235780635aca1bb6116101fd5780635aca1bb6146107415780635c975abb1461076a5780636352211e146107955780636c0360eb146107d257610335565b80634f6ccce7146106b057806351830227146106ed57806355f804b31461071857610335565b806344a0d68a1161025f57806344a0d68a1461061957806345de0d9b14610642578063484b973c1461065e578063485bf8f01461068757610335565b80633ccfd60b146105a957806342842e0e146105b3578063438b6300146105dc57610335565b806313faede6116102f25780631b84b6af116102cc5780631b84b6af146104ef57806323b872dd146105185780632f745c591461054157806333bc1c5c1461057e57610335565b806313faede61461045c57806318160ddd1461048757806318cae269146104b257610335565b806301ffc9a71461033a57806302329a291461037757806306fdde03146103a0578063081812fc146103cb578063081c8c4414610408578063095ea7b314610433575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061408e565b610c7e565b60405161036e91906147ca565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061403c565b610cf8565b005b3480156103ac57600080fd5b506103b5610d91565b6040516103c29190614800565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190614121565b610e23565b6040516103ff9190614741565b60405180910390f35b34801561041457600080fd5b5061041d610ea8565b60405161042a9190614800565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613fa8565b610f36565b005b34801561046857600080fd5b5061047161104e565b60405161047e9190614b82565b60405180910390f35b34801561049357600080fd5b5061049c611054565b6040516104a99190614b82565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613e3d565b611061565b6040516104e69190614b82565b60405180910390f35b3480156104fb57600080fd5b5061051660048036038101906105119190614121565b611079565b005b34801561052457600080fd5b5061053f600480360381019061053a9190613ea2565b6110ff565b005b34801561054d57600080fd5b5061056860048036038101906105639190613fa8565b61115f565b6040516105759190614b82565b60405180910390f35b34801561058a57600080fd5b50610593611204565b6040516105a091906147ca565b60405180910390f35b6105b1611217565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613ea2565b61132c565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190613e3d565b61134c565b60405161061091906147a8565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614121565b611446565b005b61065c60048036038101906106579190613fe4565b6114cc565b005b34801561066a57600080fd5b5061068560048036038101906106809190613fa8565b6117f0565b005b34801561069357600080fd5b506106ae60048036038101906106a99190614121565b6118db565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190614121565b611961565b6040516106e49190614b82565b60405180910390f35b3480156106f957600080fd5b506107026119f8565b60405161070f91906147ca565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906140e0565b611a0b565b005b34801561074d57600080fd5b506107686004803603810190610763919061403c565b611aa1565b005b34801561077657600080fd5b5061077f611b3a565b60405161078c91906147ca565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190614121565b611b4d565b6040516107c99190614741565b60405180910390f35b3480156107de57600080fd5b506107e7611bff565b6040516107f49190614800565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190614121565b611c8d565b005b34801561083257600080fd5b5061084d60048036038101906108489190613e3d565b611d13565b60405161085a9190614b82565b60405180910390f35b34801561086f57600080fd5b50610878611dcb565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614065565b611e53565b005b3480156108af57600080fd5b506108b8611ed9565b6040516108c59190614741565b60405180910390f35b3480156108da57600080fd5b506108e3611f03565b6040516108f09190614800565b60405180910390f35b34801561090557600080fd5b5061090e611f95565b60405161091b91906147e5565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190614065565b611f9b565b005b34801561095957600080fd5b50610974600480360381019061096f9190613f6c565b612021565b005b34801561098257600080fd5b5061098b612037565b005b34801561099957600080fd5b506109a26120d0565b6040516109af9190614b82565b60405180910390f35b3480156109c457600080fd5b506109cd6120d6565b6040516109da91906147e5565b60405180910390f35b3480156109ef57600080fd5b506109f86120dc565b604051610a0591906147e5565b60405180910390f35b348015610a1a57600080fd5b50610a356004803603810190610a309190614065565b6120e2565b005b348015610a4357600080fd5b50610a5e6004803603810190610a599190613ef1565b612168565b005b348015610a6c57600080fd5b50610a756121ca565b604051610a829190614800565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190614121565b612258565b604051610abf9190614800565b60405180910390f35b348015610ad457600080fd5b50610add6123b1565b604051610aea9190614b82565b60405180910390f35b348015610aff57600080fd5b50610b086123b7565b604051610b159190614b82565b60405180910390f35b348015610b2a57600080fd5b50610b456004803603810190610b4091906140e0565b6123bd565b005b348015610b5357600080fd5b50610b6e6004803603810190610b699190614121565b612453565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190613e66565b6124d9565b604051610ba491906147ca565b60405180910390f35b348015610bb957600080fd5b50610bc261256d565b604051610bcf9190614b82565b60405180910390f35b348015610be457600080fd5b50610bff6004803603810190610bfa9190614121565b612573565b005b348015610c0d57600080fd5b50610c166125f9565b604051610c239190614b82565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906140e0565b6125ff565b005b348015610c6157600080fd5b50610c7c6004803603810190610c779190613e3d565b612695565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cf15750610cf08261278d565b5b9050919050565b610d0061286f565b73ffffffffffffffffffffffffffffffffffffffff16610d1e611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90614a62565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610da090614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcc90614e8a565b8015610e195780601f10610dee57610100808354040283529160200191610e19565b820191906000526020600020905b815481529060010190602001808311610dfc57829003601f168201915b5050505050905090565b6000610e2e82612877565b610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490614a42565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610eb590614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee190614e8a565b8015610f2e5780601f10610f0357610100808354040283529160200191610f2e565b820191906000526020600020905b815481529060010190602001808311610f1157829003601f168201915b505050505081565b6000610f4182611b4d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990614aa2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fd161286f565b73ffffffffffffffffffffffffffffffffffffffff1614806110005750610fff81610ffa61286f565b6124d9565b5b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690614942565b60405180910390fd5b61104983836128e3565b505050565b600e5481565b6000600880549050905090565b60116020528060005260406000206000915090505481565b61108161286f565b73ffffffffffffffffffffffffffffffffffffffff1661109f611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90614a62565b60405180910390fd5b8060188190555050565b61111061110a61286f565b8261299c565b61114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690614ae2565b60405180910390fd5b61115a838383612a7a565b505050565b600061116a83611d13565b82106111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290614822565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601960009054906101000a900460ff1681565b61121f61286f565b73ffffffffffffffffffffffffffffffffffffffff1661123d611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a90614a62565b60405180910390fd5b6000479050600081116112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906149c2565b60405180910390fd5b6112e3611ed9565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611328573d6000803e3d6000fd5b5050565b61134783838360405180602001604052806000815250612168565b505050565b6060600061135983611d13565b905060008167ffffffffffffffff81111561139d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113cb5781602001602082028036833780820191505090505b50905060005b8281101561143b576113e3858261115f565b82828151811061141c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061143390614eed565b9150506113d1565b508092505050919050565b61144e61286f565b73ffffffffffffffffffffffffffffffffffffffff1661146c611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990614a62565b60405180910390fd5b80600e8190555050565b601060009054906101000a900460ff161561151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151390614ac2565b60405180910390fd5b6000611526611054565b9050600f5482826115379190614cb5565b1115611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906149e2565b60405180910390fd5b600061158333611d13565b90506115928585601454612ce1565b156115ec5760185483826115a69190614cb5565b11156115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90614b42565b60405180910390fd5b611763565b6115f98585601354612ce1565b1561165357601754838261160d9190614cb5565b111561164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614a02565b60405180910390fd5b611762565b6116608585601254612ce1565b156116ba5760165483826116749190614cb5565b11156116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90614962565b60405180910390fd5b611761565b60011515601960009054906101000a900460ff16151514611710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170790614b62565b60405180910390fd5b601554838261171f9190614cb5565b1115611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614b02565b60405180910390fd5b5b5b5b82600e546117719190614d3c565b34146117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614882565b60405180910390fd5b6000600190505b8381116117e8576117d53382856117d09190614cb5565b612d5e565b80806117e090614eed565b9150506117b9565b505050505050565b6117f861286f565b73ffffffffffffffffffffffffffffffffffffffff16611816611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461186c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186390614a62565b60405180910390fd5b6000611876611054565b90506000821161188557600080fd5b600f5482826118949190614cb5565b111561189f57600080fd5b6000600190505b8281116118d5576118c28482846118bd9190614cb5565b612d5e565b80806118cd90614eed565b9150506118a6565b50505050565b6118e361286f565b73ffffffffffffffffffffffffffffffffffffffff16611901611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614a62565b60405180910390fd5b8060168190555050565b600061196b611054565b82106119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a390614b22565b60405180910390fd5b600882815481106119e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b611a1361286f565b73ffffffffffffffffffffffffffffffffffffffff16611a31611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90614a62565b60405180910390fd5b80600b9080519060200190611a9d929190613c02565b5050565b611aa961286f565b73ffffffffffffffffffffffffffffffffffffffff16611ac7611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614a62565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed906149a2565b60405180910390fd5b80915050919050565b600b8054611c0c90614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3890614e8a565b8015611c855780601f10611c5a57610100808354040283529160200191611c85565b820191906000526020600020905b815481529060010190602001808311611c6857829003601f168201915b505050505081565b611c9561286f565b73ffffffffffffffffffffffffffffffffffffffff16611cb3611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0090614a62565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90614982565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dd361286f565b73ffffffffffffffffffffffffffffffffffffffff16611df1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614a62565b60405180910390fd5b611e516000612d7c565b565b611e5b61286f565b73ffffffffffffffffffffffffffffffffffffffff16611e79611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690614a62565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611f1290614e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3e90614e8a565b8015611f8b5780601f10611f6057610100808354040283529160200191611f8b565b820191906000526020600020905b815481529060010190602001808311611f6e57829003601f168201915b5050505050905090565b60145481565b611fa361286f565b73ffffffffffffffffffffffffffffffffffffffff16611fc1611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90614a62565b60405180910390fd5b8060138190555050565b61203361202c61286f565b8383612e42565b5050565b61203f61286f565b73ffffffffffffffffffffffffffffffffffffffff1661205d611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614a62565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b60165481565b60125481565b60135481565b6120ea61286f565b73ffffffffffffffffffffffffffffffffffffffff16612108611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614a62565b60405180910390fd5b8060128190555050565b61217961217361286f565b8361299c565b6121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614ae2565b60405180910390fd5b6121c484848484612faf565b50505050565b600c80546121d790614e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461220390614e8a565b80156122505780601f1061222557610100808354040283529160200191612250565b820191906000526020600020905b81548152906001019060200180831161223357829003601f168201915b505050505081565b606061226382612877565b6122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229990614a82565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561235057600d80546122cb90614e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546122f790614e8a565b80156123445780601f1061231957610100808354040283529160200191612344565b820191906000526020600020905b81548152906001019060200180831161232757829003601f168201915b505050505090506123ac565b600061235a61300b565b9050600081511161237a57604051806020016040528060008152506123a8565b806123848461309d565b600c60405160200161239893929190614710565b6040516020818303038152906040525b9150505b919050565b60155481565b600f5481565b6123c561286f565b73ffffffffffffffffffffffffffffffffffffffff166123e3611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090614a62565b60405180910390fd5b80600c908051906020019061244f929190613c02565b5050565b61245b61286f565b73ffffffffffffffffffffffffffffffffffffffff16612479611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614a62565b60405180910390fd5b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60185481565b61257b61286f565b73ffffffffffffffffffffffffffffffffffffffff16612599611ed9565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e690614a62565b60405180910390fd5b8060178190555050565b60175481565b61260761286f565b73ffffffffffffffffffffffffffffffffffffffff16612625611ed9565b73ffffffffffffffffffffffffffffffffffffffff161461267b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267290614a62565b60405180910390fd5b80600d9080519060200190612691929190613c02565b5050565b61269d61286f565b73ffffffffffffffffffffffffffffffffffffffff166126bb611ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270890614a62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890614862565b60405180910390fd5b61278a81612d7c565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061285857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061286857506128678261324a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661295683611b4d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129a782612877565b6129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614922565b60405180910390fd5b60006129f183611b4d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a6057508373ffffffffffffffffffffffffffffffffffffffff16612a4884610e23565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a715750612a7081856124d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a9a82611b4d565b73ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b57906148e2565b60405180910390fd5b612b6b8383836132b4565b612b766000826128e3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bc69190614d96565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1d9190614cb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612cdc8383836133c8565b505050565b6000612d55848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508333604051602001612d3a91906146f5565b604051602081830303815290604052805190602001206133cd565b90509392505050565b612d788282604051806020016040528060008152506133e4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea890614902565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612fa291906147ca565b60405180910390a3505050565b612fba848484612a7a565b612fc68484848461343f565b613005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffc90614842565b60405180910390fd5b50505050565b6060600b805461301a90614e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461304690614e8a565b80156130935780601f1061306857610100808354040283529160200191613093565b820191906000526020600020905b81548152906001019060200180831161307657829003601f168201915b5050505050905090565b606060008214156130e5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613245565b600082905060005b6000821461311757808061310090614eed565b915050600a826131109190614d0b565b91506130ed565b60008167ffffffffffffffff811115613159577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561318b5781602001600182028036833780820191505090505b5090505b6000851461323e576001826131a49190614d96565b9150600a856131b39190614f5a565b60306131bf9190614cb5565b60f81b8183815181106131fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132379190614d0b565b945061318f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132bf8383836135d6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613302576132fd816135db565b613341565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146133405761333f8382613624565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133845761337f81613791565b6133c3565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133c2576133c182826138d4565b5b5b505050565b505050565b6000826133da8584613953565b1490509392505050565b6133ee83836139ee565b6133fb600084848461343f565b61343a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343190614842565b60405180910390fd5b505050565b60006134608473ffffffffffffffffffffffffffffffffffffffff16613bc8565b156135c9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261348961286f565b8786866040518563ffffffff1660e01b81526004016134ab949392919061475c565b602060405180830381600087803b1580156134c557600080fd5b505af19250505080156134f657506040513d601f19601f820116820180604052508101906134f391906140b7565b60015b613579573d8060008114613526576040519150601f19603f3d011682016040523d82523d6000602084013e61352b565b606091505b50600081511415613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356890614842565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135ce565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161363184611d13565b61363b9190614d96565b9050600060076000848152602001908152602001600020549050818114613720576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137a59190614d96565b90506000600960008481526020019081526020016000205490506000600883815481106137fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613843577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006138df83611d13565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008082905060005b84518110156139e35760008582815181106139a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116139c2576139bb8382613beb565b92506139cf565b6139cc8184613beb565b92505b5080806139db90614eed565b91505061395c565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a5590614a22565b60405180910390fd5b613a6781612877565b15613aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9e906148c2565b60405180910390fd5b613ab3600083836132b4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b039190614cb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613bc4600083836133c8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054613c0e90614e8a565b90600052602060002090601f016020900481019282613c305760008555613c77565b82601f10613c4957805160ff1916838001178555613c77565b82800160010185558215613c77579182015b82811115613c76578251825591602001919060010190613c5b565b5b509050613c849190613c88565b5090565b5b80821115613ca1576000816000905550600101613c89565b5090565b6000613cb8613cb384614bc2565b614b9d565b905082815260208101848484011115613cd057600080fd5b613cdb848285614e48565b509392505050565b6000613cf6613cf184614bf3565b614b9d565b905082815260208101848484011115613d0e57600080fd5b613d19848285614e48565b509392505050565b600081359050613d308161573e565b92915050565b60008083601f840112613d4857600080fd5b8235905067ffffffffffffffff811115613d6157600080fd5b602083019150836020820283011115613d7957600080fd5b9250929050565b600081359050613d8f81615755565b92915050565b600081359050613da48161576c565b92915050565b600081359050613db981615783565b92915050565b600081519050613dce81615783565b92915050565b600082601f830112613de557600080fd5b8135613df5848260208601613ca5565b91505092915050565b600082601f830112613e0f57600080fd5b8135613e1f848260208601613ce3565b91505092915050565b600081359050613e378161579a565b92915050565b600060208284031215613e4f57600080fd5b6000613e5d84828501613d21565b91505092915050565b60008060408385031215613e7957600080fd5b6000613e8785828601613d21565b9250506020613e9885828601613d21565b9150509250929050565b600080600060608486031215613eb757600080fd5b6000613ec586828701613d21565b9350506020613ed686828701613d21565b9250506040613ee786828701613e28565b9150509250925092565b60008060008060808587031215613f0757600080fd5b6000613f1587828801613d21565b9450506020613f2687828801613d21565b9350506040613f3787828801613e28565b925050606085013567ffffffffffffffff811115613f5457600080fd5b613f6087828801613dd4565b91505092959194509250565b60008060408385031215613f7f57600080fd5b6000613f8d85828601613d21565b9250506020613f9e85828601613d80565b9150509250929050565b60008060408385031215613fbb57600080fd5b6000613fc985828601613d21565b9250506020613fda85828601613e28565b9150509250929050565b600080600060408486031215613ff957600080fd5b600084013567ffffffffffffffff81111561401357600080fd5b61401f86828701613d36565b9350935050602061403286828701613e28565b9150509250925092565b60006020828403121561404e57600080fd5b600061405c84828501613d80565b91505092915050565b60006020828403121561407757600080fd5b600061408584828501613d95565b91505092915050565b6000602082840312156140a057600080fd5b60006140ae84828501613daa565b91505092915050565b6000602082840312156140c957600080fd5b60006140d784828501613dbf565b91505092915050565b6000602082840312156140f257600080fd5b600082013567ffffffffffffffff81111561410c57600080fd5b61411884828501613dfe565b91505092915050565b60006020828403121561413357600080fd5b600061414184828501613e28565b91505092915050565b600061415683836146d7565b60208301905092915050565b61416b81614dca565b82525050565b61418261417d82614dca565b614f36565b82525050565b600061419382614c49565b61419d8185614c77565b93506141a883614c24565b8060005b838110156141d95781516141c0888261414a565b97506141cb83614c6a565b9250506001810190506141ac565b5085935050505092915050565b6141ef81614ddc565b82525050565b6141fe81614de8565b82525050565b600061420f82614c54565b6142198185614c88565b9350614229818560208601614e57565b61423281615047565b840191505092915050565b600061424882614c5f565b6142528185614c99565b9350614262818560208601614e57565b61426b81615047565b840191505092915050565b600061428182614c5f565b61428b8185614caa565b935061429b818560208601614e57565b80840191505092915050565b600081546142b481614e8a565b6142be8186614caa565b945060018216600081146142d957600181146142ea5761431d565b60ff1983168652818601935061431d565b6142f385614c34565b60005b83811015614315578154818901526001820191506020810190506142f6565b838801955050505b50505092915050565b6000614333602b83614c99565b915061433e82615065565b604082019050919050565b6000614356603283614c99565b9150614361826150b4565b604082019050919050565b6000614379602683614c99565b915061438482615103565b604082019050919050565b600061439c601083614c99565b91506143a782615152565b602082019050919050565b60006143bf602583614c99565b91506143ca8261517b565b604082019050919050565b60006143e2601c83614c99565b91506143ed826151ca565b602082019050919050565b6000614405602483614c99565b9150614410826151f3565b604082019050919050565b6000614428601983614c99565b915061443382615242565b602082019050919050565b600061444b602c83614c99565b91506144568261526b565b604082019050919050565b600061446e603883614c99565b9150614479826152ba565b604082019050919050565b6000614491602583614c99565b915061449c82615309565b604082019050919050565b60006144b4602a83614c99565b91506144bf82615358565b604082019050919050565b60006144d7602983614c99565b91506144e2826153a7565b604082019050919050565b60006144fa601e83614c99565b9150614505826153f6565b602082019050919050565b600061451d601683614c99565b91506145288261541f565b602082019050919050565b6000614540602483614c99565b915061454b82615448565b604082019050919050565b6000614563602083614c99565b915061456e82615497565b602082019050919050565b6000614586602c83614c99565b9150614591826154c0565b604082019050919050565b60006145a9602083614c99565b91506145b48261550f565b602082019050919050565b60006145cc602f83614c99565b91506145d782615538565b604082019050919050565b60006145ef602183614c99565b91506145fa82615587565b604082019050919050565b6000614612601183614c99565b915061461d826155d6565b602082019050919050565b6000614635603183614c99565b9150614640826155ff565b604082019050919050565b6000614658601b83614c99565b91506146638261564e565b602082019050919050565b600061467b602c83614c99565b915061468682615677565b604082019050919050565b600061469e602383614c99565b91506146a9826156c6565b604082019050919050565b60006146c1601783614c99565b91506146cc82615715565b602082019050919050565b6146e081614e3e565b82525050565b6146ef81614e3e565b82525050565b60006147018284614171565b60148201915081905092915050565b600061471c8286614276565b91506147288285614276565b915061473482846142a7565b9150819050949350505050565b60006020820190506147566000830184614162565b92915050565b60006080820190506147716000830187614162565b61477e6020830186614162565b61478b60408301856146e6565b818103606083015261479d8184614204565b905095945050505050565b600060208201905081810360008301526147c28184614188565b905092915050565b60006020820190506147df60008301846141e6565b92915050565b60006020820190506147fa60008301846141f5565b92915050565b6000602082019050818103600083015261481a818461423d565b905092915050565b6000602082019050818103600083015261483b81614326565b9050919050565b6000602082019050818103600083015261485b81614349565b9050919050565b6000602082019050818103600083015261487b8161436c565b9050919050565b6000602082019050818103600083015261489b8161438f565b9050919050565b600060208201905081810360008301526148bb816143b2565b9050919050565b600060208201905081810360008301526148db816143d5565b9050919050565b600060208201905081810360008301526148fb816143f8565b9050919050565b6000602082019050818103600083015261491b8161441b565b9050919050565b6000602082019050818103600083015261493b8161443e565b9050919050565b6000602082019050818103600083015261495b81614461565b9050919050565b6000602082019050818103600083015261497b81614484565b9050919050565b6000602082019050818103600083015261499b816144a7565b9050919050565b600060208201905081810360008301526149bb816144ca565b9050919050565b600060208201905081810360008301526149db816144ed565b9050919050565b600060208201905081810360008301526149fb81614510565b9050919050565b60006020820190508181036000830152614a1b81614533565b9050919050565b60006020820190508181036000830152614a3b81614556565b9050919050565b60006020820190508181036000830152614a5b81614579565b9050919050565b60006020820190508181036000830152614a7b8161459c565b9050919050565b60006020820190508181036000830152614a9b816145bf565b9050919050565b60006020820190508181036000830152614abb816145e2565b9050919050565b60006020820190508181036000830152614adb81614605565b9050919050565b60006020820190508181036000830152614afb81614628565b9050919050565b60006020820190508181036000830152614b1b8161464b565b9050919050565b60006020820190508181036000830152614b3b8161466e565b9050919050565b60006020820190508181036000830152614b5b81614691565b9050919050565b60006020820190508181036000830152614b7b816146b4565b9050919050565b6000602082019050614b9760008301846146e6565b92915050565b6000614ba7614bb8565b9050614bb38282614ebc565b919050565b6000604051905090565b600067ffffffffffffffff821115614bdd57614bdc615018565b5b614be682615047565b9050602081019050919050565b600067ffffffffffffffff821115614c0e57614c0d615018565b5b614c1782615047565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cc082614e3e565b9150614ccb83614e3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0057614cff614f8b565b5b828201905092915050565b6000614d1682614e3e565b9150614d2183614e3e565b925082614d3157614d30614fba565b5b828204905092915050565b6000614d4782614e3e565b9150614d5283614e3e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8b57614d8a614f8b565b5b828202905092915050565b6000614da182614e3e565b9150614dac83614e3e565b925082821015614dbf57614dbe614f8b565b5b828203905092915050565b6000614dd582614e1e565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614e75578082015181840152602081019050614e5a565b83811115614e84576000848401525b50505050565b60006002820490506001821680614ea257607f821691505b60208210811415614eb657614eb5614fe9565b5b50919050565b614ec582615047565b810181811067ffffffffffffffff82111715614ee457614ee3615018565b5b80604052505050565b6000614ef882614e3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f2b57614f2a614f8b565b5b600182019050919050565b6000614f4182614f48565b9050919050565b6000614f5382615058565b9050919050565b6000614f6582614e3e565b9150614f7083614e3e565b925082614f8057614f7f614fba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e206f776c6967617263682060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e20706c6174696e756d206c60008201527f696d697400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e206c696d69740000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f63616e6e6f74206d696e74206d6f7265207468616e2064696d616f6e64206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b61574781614dca565b811461575257600080fd5b50565b61575e81614ddc565b811461576957600080fd5b50565b61577581614de8565b811461578057600080fd5b50565b61578c81614df2565b811461579757600080fd5b50565b6157a381614e3e565b81146157ae57600080fd5b5056fea2646970667358221220b0366a7dbf182c54e35540dce574bac9500ea05fe4e6e626c348e7e43c64fecc64736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002550726976617465204a65742050796a616d61205061727479204669727374204c61646965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006504a5050464c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Private Jet Pyjama Party First Ladies
Arg [1] : _symbol (string): PJPPFL
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [5] : 50726976617465204a65742050796a616d61205061727479204669727374204c
Arg [6] : 6164696573000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 504a5050464c0000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47967:6256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41736:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53360:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28556:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30115:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48128:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29638:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48163:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42376:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48309:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53673:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30865:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42044:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48664:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54001:219;;;:::i;:::-;;31275:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51653:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52861:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49541:1399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50948:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53557:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42566:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48272:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52955:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49104:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48239:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28250:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48056:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53899:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27980:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7152:103;;;;;;;;;;;;;:::i;:::-;;51527:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6501:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28725:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48454:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51399:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30408:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52784:69;;;;;;;;;;;;;:::i;:::-;;48535:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48373:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48414:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51269:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31531:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48084:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52051:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48495:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48201:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53067:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53447:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30634:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48620:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53785:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48578:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53226:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7410:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41736:224;41838:4;41877:35;41862:50;;;:11;:50;;;;:90;;;;41916:36;41940:11;41916:23;:36::i;:::-;41862:90;41855:97;;41736:224;;;:::o;53360:79::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53425:6:::1;53416;;:15;;;;;;;;;;;;;;;;;;53360:79:::0;:::o;28556:100::-;28610:13;28643:5;28636:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28556:100;:::o;30115:221::-;30191:7;30219:16;30227:7;30219;:16::i;:::-;30211:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30304:15;:24;30320:7;30304:24;;;;;;;;;;;;;;;;;;;;;30297:31;;30115:221;;;:::o;48128:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29638:411::-;29719:13;29735:23;29750:7;29735:14;:23::i;:::-;29719:39;;29783:5;29777:11;;:2;:11;;;;29769:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29877:5;29861:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29886:37;29903:5;29910:12;:10;:12::i;:::-;29886:16;:37::i;:::-;29861:62;29839:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30020:21;30029:2;30033:7;30020:8;:21::i;:::-;29638:411;;;:::o;48163:31::-;;;;:::o;42376:113::-;42437:7;42464:10;:17;;;;42457:24;;42376:113;:::o;48309:55::-;;;;;;;;;;;;;;;;;:::o;53673:104::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53763:6:::1;53745:15;:24;;;;53673:104:::0;:::o;30865:339::-;31060:41;31079:12;:10;:12::i;:::-;31093:7;31060:18;:41::i;:::-;31052:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31168:28;31178:4;31184:2;31188:7;31168:9;:28::i;:::-;30865:339;;;:::o;42044:256::-;42141:7;42177:23;42194:5;42177:16;:23::i;:::-;42169:5;:31;42161:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42266:12;:19;42279:5;42266:19;;;;;;;;;;;;;;;:26;42286:5;42266:26;;;;;;;;;;;;42259:33;;42044:256;;;;:::o;48664:30::-;;;;;;;;;;;;;:::o;54001:219::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54057:14:::1;54074:21;54057:38;;54123:1;54114:6;:10;54106:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;54186:7;:5;:7::i;:::-;54170:34;;:42;54205:6;54170:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6792:1;54001:219::o:0;31275:185::-;31413:39;31430:4;31436:2;31440:7;31413:39;;;;;;;;;;;;:16;:39::i;:::-;31275:185;;;:::o;51653:390::-;51740:16;51774:23;51800:17;51810:6;51800:9;:17::i;:::-;51774:43;;51828:25;51870:15;51856:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51828:58;;51902:9;51897:113;51917:15;51913:1;:19;51897:113;;;51968:30;51988:6;51996:1;51968:19;:30::i;:::-;51954:8;51963:1;51954:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;51934:3;;;;;:::i;:::-;;;;51897:113;;;;52027:8;52020:15;;;;51653:390;;;:::o;52861:86::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52931:8:::1;52924:4;:15;;;;52861:86:::0;:::o;49541:1399::-;49662:6;;;;;;;;;;;49661:7;49653:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;49701:14;49718:13;:11;:13::i;:::-;49701:30;;49770:9;;49759:7;49750:6;:16;;;;:::i;:::-;:29;;49742:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49817:14;49834:21;49844:10;49834:9;:21::i;:::-;49817:38;;49870:50;49889:11;;49902:17;;49870:18;:50::i;:::-;49866:891;;;49983:15;;49972:7;49963:6;:16;;;;:::i;:::-;:35;;49937:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;49866:891;;;50091:51;50110:11;;50123:18;;50091;:51::i;:::-;50087:670;;;50205:16;;50194:7;50185:6;:16;;;;:::i;:::-;:36;;50159:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;50087:670;;;50315:52;50334:11;;50347:19;;50315:18;:52::i;:::-;50311:446;;;50430:17;;50419:7;50410:6;:16;;;;:::i;:::-;:37;;50384:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;50311:446;;;50575:4;50561:18;;:10;;;;;;;;;;;:18;;;50553:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50668:14;;50657:7;50648:6;:16;;;;:::i;:::-;:34;;50622:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;50311:446;50087:670;49866:891;50795:7;50788:4;;:14;;;;:::i;:::-;50775:9;:27;50767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;50839:9;50851:1;50839:13;;50834:99;50859:7;50854:1;:12;50834:99;;50888:33;50898:10;50919:1;50910:6;:10;;;;:::i;:::-;50888:9;:33::i;:::-;50868:3;;;;;:::i;:::-;;;;50834:99;;;;49541:1399;;;;;:::o;50948:313::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51029:14:::1;51046:13;:11;:13::i;:::-;51029:30;;51092:1;51078:11;:15;51070:24;;;::::0;::::1;;51137:9;;51122:11;51113:6;:20;;;;:::i;:::-;:33;;51105:42;;;::::0;::::1;;51163:9;51175:1;51163:13;;51158:96;51183:11;51178:1;:16;51158:96;;51216:26;51226:3;51240:1;51231:6;:10;;;;:::i;:::-;51216:9;:26::i;:::-;51196:3;;;;;:::i;:::-;;;;51158:96;;;;6792:1;50948:313:::0;;:::o;53557:108::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53651:6:::1;53631:17;:26;;;;53557:108:::0;:::o;42566:233::-;42641:7;42677:30;:28;:30::i;:::-;42669:5;:38;42661:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42774:10;42785:5;42774:17;;;;;;;;;;;;;;;;;;;;;;;;42767:24;;42566:233;;;:::o;48272:28::-;;;;;;;;;;;;;:::o;52955:104::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53040:11:::1;53030:7;:21;;;;;;;;;;;;:::i;:::-;;52955:104:::0;:::o;49104:103::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49188:11:::1;49175:10;;:24;;;;;;;;;;;;;;;;;;49104:103:::0;:::o;48239:26::-;;;;;;;;;;;;;:::o;28250:239::-;28322:7;28342:13;28358:7;:16;28366:7;28358:16;;;;;;;;;;;;;;;;;;;;;28342:32;;28410:1;28393:19;;:5;:19;;;;28385:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28476:5;28469:12;;;28250:239;;;:::o;48056:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53899:94::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53978:7:::1;53966:9;:19;;;;53899:94:::0;:::o;27980:208::-;28052:7;28097:1;28080:19;;:5;:19;;;;28072:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28164:9;:16;28174:5;28164:16;;;;;;;;;;;;;;;;28157:23;;27980:208;;;:::o;7152:103::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7217:30:::1;7244:1;7217:18;:30::i;:::-;7152:103::o:0;51527:118::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51627:10:::1;51607:17;:30;;;;51527:118:::0;:::o;6501:87::-;6547:7;6574:6;;;;;;;;;;;6567:13;;6501:87;:::o;28725:104::-;28781:13;28814:7;28807:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:104;:::o;48454:32::-;;;;:::o;51399:120::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51501:10:::1;51480:18;:31;;;;51399:120:::0;:::o;30408:155::-;30503:52;30522:12;:10;:12::i;:::-;30536:8;30546;30503:18;:52::i;:::-;30408:155;;:::o;52784:69::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52841:4:::1;52830:8;;:15;;;;;;;;;;;;;;;;;;52784:69::o:0;48535:36::-;;;;:::o;48373:34::-;;;;:::o;48414:33::-;;;;:::o;51269:122::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51373:10:::1;51351:19;:32;;;;51269:122:::0;:::o;31531:328::-;31706:41;31725:12;:10;:12::i;:::-;31739:7;31706:18;:41::i;:::-;31698:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31812:39;31826:4;31832:2;31836:7;31845:5;31812:13;:39::i;:::-;31531:328;;;;:::o;48084:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52051:725::-;52169:13;52222:16;52230:7;52222;:16::i;:::-;52200:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;52342:5;52330:17;;:8;;;;;;;;;;;:17;;;52326:71;;;52371:14;52364:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52326:71;52409:28;52440:10;:8;:10::i;:::-;52409:41;;52512:1;52487:14;52481:28;:32;:287;;;;;;;;;;;;;;;;;52605:14;52646:18;:7;:16;:18::i;:::-;52691:13;52562:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52481:287;52461:307;;;52051:725;;;;:::o;48495:33::-;;;;:::o;48201:31::-;;;;:::o;53067:151::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53193:17:::1;53177:13;:33;;;;;;;;;;;;:::i;:::-;;53067:151:::0;:::o;53447:102::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53535:6:::1;53518:14;:23;;;;53447:102:::0;:::o;30634:164::-;30731:4;30755:18;:25;30774:5;30755:25;;;;;;;;;;;;;;;:35;30781:8;30755:35;;;;;;;;;;;;;;;;;;;;;;;;;30748:42;;30634:164;;;;:::o;48620:35::-;;;;:::o;53785:106::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53877:6:::1;53858:16;:25;;;;53785:106:::0;:::o;48578:35::-;;;;:::o;53226:126::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53329:15:::1;53312:14;:32;;;;;;;;;;;;:::i;:::-;;53226:126:::0;:::o;7410:201::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7519:1:::1;7499:22;;:8;:22;;;;7491:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7575:28;7594:8;7575:18;:28::i;:::-;7410:201:::0;:::o;27611:305::-;27713:4;27765:25;27750:40;;;:11;:40;;;;:105;;;;27822:33;27807:48;;;:11;:48;;;;27750:105;:158;;;;27872:36;27896:11;27872:23;:36::i;:::-;27750:158;27730:178;;27611:305;;;:::o;5225:98::-;5278:7;5305:10;5298:17;;5225:98;:::o;33369:127::-;33434:4;33486:1;33458:30;;:7;:16;33466:7;33458:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33451:37;;33369:127;;;:::o;37515:174::-;37617:2;37590:15;:24;37606:7;37590:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37673:7;37669:2;37635:46;;37644:23;37659:7;37644:14;:23::i;:::-;37635:46;;;;;;;;;;;;37515:174;;:::o;33663:348::-;33756:4;33781:16;33789:7;33781;:16::i;:::-;33773:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33857:13;33873:23;33888:7;33873:14;:23::i;:::-;33857:39;;33926:5;33915:16;;:7;:16;;;:51;;;;33959:7;33935:31;;:20;33947:7;33935:11;:20::i;:::-;:31;;;33915:51;:87;;;;33970:32;33987:5;33994:7;33970:16;:32::i;:::-;33915:87;33907:96;;;33663:348;;;;:::o;36772:625::-;36931:4;36904:31;;:23;36919:7;36904:14;:23::i;:::-;:31;;;36896:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37010:1;36996:16;;:2;:16;;;;36988:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37066:39;37087:4;37093:2;37097:7;37066:20;:39::i;:::-;37170:29;37187:1;37191:7;37170:8;:29::i;:::-;37231:1;37212:9;:15;37222:4;37212:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37260:1;37243:9;:13;37253:2;37243:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37291:2;37272:7;:16;37280:7;37272:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37330:7;37326:2;37311:27;;37320:4;37311:27;;;;;;;;;;;;37351:38;37371:4;37377:2;37381:7;37351:19;:38::i;:::-;36772:625;;;:::o;49215:318::-;49339:4;49381:144;49418:11;;49381:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49448:4;49498:10;49481:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49471:39;;;;;;49381:18;:144::i;:::-;49361:164;;49215:318;;;;;:::o;34353:110::-;34429:26;34439:2;34443:7;34429:26;;;;;;;;;;;;:9;:26::i;:::-;34353:110;;:::o;7771:191::-;7845:16;7864:6;;;;;;;;;;;7845:25;;7890:8;7881:6;;:17;;;;;;;;;;;;;;;;;;7945:8;7914:40;;7935:8;7914:40;;;;;;;;;;;;7771:191;;:::o;37831:315::-;37986:8;37977:17;;:5;:17;;;;37969:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38073:8;38035:18;:25;38054:5;38035:25;;;;;;;;;;;;;;;:35;38061:8;38035:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38119:8;38097:41;;38112:5;38097:41;;;38129:8;38097:41;;;;;;:::i;:::-;;;;;;;;37831:315;;;:::o;32741:::-;32898:28;32908:4;32914:2;32918:7;32898:9;:28::i;:::-;32945:48;32968:4;32974:2;32978:7;32987:5;32945:22;:48::i;:::-;32937:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32741:315;;;;:::o;48988:108::-;49048:13;49081:7;49074:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48988:108;:::o;2787:723::-;2843:13;3073:1;3064:5;:10;3060:53;;;3091:10;;;;;;;;;;;;;;;;;;;;;3060:53;3123:12;3138:5;3123:20;;3154:14;3179:78;3194:1;3186:4;:9;3179:78;;3212:8;;;;;:::i;:::-;;;;3243:2;3235:10;;;;;:::i;:::-;;;3179:78;;;3267:19;3299:6;3289:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3267:39;;3317:154;3333:1;3324:5;:10;3317:154;;3361:1;3351:11;;;;;:::i;:::-;;;3428:2;3420:5;:10;;;;:::i;:::-;3407:2;:24;;;;:::i;:::-;3394:39;;3377:6;3384;3377:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;3457:2;3448:11;;;;;:::i;:::-;;;3317:154;;;3495:6;3481:21;;;;;2787:723;;;;:::o;19285:157::-;19370:4;19409:25;19394:40;;;:11;:40;;;;19387:47;;19285:157;;;:::o;43412:589::-;43556:45;43583:4;43589:2;43593:7;43556:26;:45::i;:::-;43634:1;43618:18;;:4;:18;;;43614:187;;;43653:40;43685:7;43653:31;:40::i;:::-;43614:187;;;43723:2;43715:10;;:4;:10;;;43711:90;;43742:47;43775:4;43781:7;43742:32;:47::i;:::-;43711:90;43614:187;43829:1;43815:16;;:2;:16;;;43811:183;;;43848:45;43885:7;43848:36;:45::i;:::-;43811:183;;;43921:4;43915:10;;:2;:10;;;43911:83;;43942:40;43970:2;43974:7;43942:27;:40::i;:::-;43911:83;43811:183;43412:589;;;:::o;40593:125::-;;;;:::o;956:190::-;1081:4;1134;1105:25;1118:5;1125:4;1105:12;:25::i;:::-;:33;1098:40;;956:190;;;;;:::o;34690:321::-;34820:18;34826:2;34830:7;34820:5;:18::i;:::-;34871:54;34902:1;34906:2;34910:7;34919:5;34871:22;:54::i;:::-;34849:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34690:321;;;:::o;38711:799::-;38866:4;38887:15;:2;:13;;;:15::i;:::-;38883:620;;;38939:2;38923:36;;;38960:12;:10;:12::i;:::-;38974:4;38980:7;38989:5;38923:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38919:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39182:1;39165:6;:13;:18;39161:272;;;39208:60;;;;;;;;;;:::i;:::-;;;;;;;;39161:272;39383:6;39377:13;39368:6;39364:2;39360:15;39353:38;38919:529;39056:41;;;39046:51;;;:6;:51;;;;39039:58;;;;;38883:620;39487:4;39480:11;;38711:799;;;;;;;:::o;40082:126::-;;;;:::o;44724:164::-;44828:10;:17;;;;44801:15;:24;44817:7;44801:24;;;;;;;;;;;:44;;;;44856:10;44872:7;44856:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44724:164;:::o;45515:988::-;45781:22;45831:1;45806:22;45823:4;45806:16;:22::i;:::-;:26;;;;:::i;:::-;45781:51;;45843:18;45864:17;:26;45882:7;45864:26;;;;;;;;;;;;45843:47;;46011:14;45997:10;:28;45993:328;;46042:19;46064:12;:18;46077:4;46064:18;;;;;;;;;;;;;;;:34;46083:14;46064:34;;;;;;;;;;;;46042:56;;46148:11;46115:12;:18;46128:4;46115:18;;;;;;;;;;;;;;;:30;46134:10;46115:30;;;;;;;;;;;:44;;;;46265:10;46232:17;:30;46250:11;46232:30;;;;;;;;;;;:43;;;;45993:328;;46417:17;:26;46435:7;46417:26;;;;;;;;;;;46410:33;;;46461:12;:18;46474:4;46461:18;;;;;;;;;;;;;;;:34;46480:14;46461:34;;;;;;;;;;;46454:41;;;45515:988;;;;:::o;46798:1079::-;47051:22;47096:1;47076:10;:17;;;;:21;;;;:::i;:::-;47051:46;;47108:18;47129:15;:24;47145:7;47129:24;;;;;;;;;;;;47108:45;;47480:19;47502:10;47513:14;47502:26;;;;;;;;;;;;;;;;;;;;;;;;47480:48;;47566:11;47541:10;47552;47541:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;47677:10;47646:15;:28;47662:11;47646:28;;;;;;;;;;;:41;;;;47818:15;:24;47834:7;47818:24;;;;;;;;;;;47811:31;;;47853:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46798:1079;;;;:::o;44302:221::-;44387:14;44404:20;44421:2;44404:16;:20::i;:::-;44387:37;;44462:7;44435:12;:16;44448:2;44435:16;;;;;;;;;;;;;;;:24;44452:6;44435:24;;;;;;;;;;;:34;;;;44509:6;44480:17;:26;44498:7;44480:26;;;;;;;;;;;:35;;;;44302:221;;;:::o;1508:675::-;1591:7;1611:20;1634:4;1611:27;;1654:9;1649:497;1673:5;:12;1669:1;:16;1649:497;;;1707:20;1730:5;1736:1;1730:8;;;;;;;;;;;;;;;;;;;;;;1707:31;;1773:12;1757;:28;1753:382;;1900:42;1915:12;1929;1900:14;:42::i;:::-;1885:57;;1753:382;;;2077:42;2092:12;2106;2077:14;:42::i;:::-;2062:57;;1753:382;1649:497;1687:3;;;;;:::i;:::-;;;;1649:497;;;;2163:12;2156:19;;;1508:675;;;;:::o;35347:439::-;35441:1;35427:16;;:2;:16;;;;35419:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35500:16;35508:7;35500;:16::i;:::-;35499:17;35491:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35562:45;35591:1;35595:2;35599:7;35562:20;:45::i;:::-;35637:1;35620:9;:13;35630:2;35620:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35668:2;35649:7;:16;35657:7;35649:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35713:7;35709:2;35688:33;;35705:1;35688:33;;;;;;;;;;;;35734:44;35762:1;35766:2;35770:7;35734:19;:44::i;:::-;35347:439;;:::o;9202:326::-;9262:4;9519:1;9497:7;:19;;;:23;9490:30;;9202:326;;;:::o;2191:224::-;2259:13;2322:1;2316:4;2309:15;2351:1;2345:4;2338:15;2392:4;2386;2376:21;2367:30;;2294:114;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;;;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:262::-;;2652:2;2640:9;2631:7;2627:23;2623:32;2620:2;;;2668:1;2665;2658:12;2620:2;2711:1;2736:53;2781:7;2772:6;2761:9;2757:22;2736:53;:::i;:::-;2726:63;;2682:117;2610:196;;;;:::o;2812:407::-;;;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2996:1;3021:53;3066:7;3057:6;3046:9;3042:22;3021:53;:::i;:::-;3011:63;;2967:117;3123:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3094:118;2895:324;;;;;:::o;3225:552::-;;;;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3383:1;3380;3373:12;3335:2;3426:1;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3397:117;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3681:2;3707:53;3752:7;3743:6;3732:9;3728:22;3707:53;:::i;:::-;3697:63;;3652:118;3325:452;;;;;:::o;3783:809::-;;;;;3951:3;3939:9;3930:7;3926:23;3922:33;3919:2;;;3968:1;3965;3958:12;3919:2;4011:1;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3982:117;4138:2;4164:53;4209:7;4200:6;4189:9;4185:22;4164:53;:::i;:::-;4154:63;;4109:118;4266:2;4292:53;4337:7;4328:6;4317:9;4313:22;4292:53;:::i;:::-;4282:63;;4237:118;4422:2;4411:9;4407:18;4394:32;4453:18;4445:6;4442:30;4439:2;;;4485:1;4482;4475:12;4439:2;4513:62;4567:7;4558:6;4547:9;4543:22;4513:62;:::i;:::-;4503:72;;4365:220;3909:683;;;;;;;:::o;4598:401::-;;;4720:2;4708:9;4699:7;4695:23;4691:32;4688:2;;;4736:1;4733;4726:12;4688:2;4779:1;4804:53;4849:7;4840:6;4829:9;4825:22;4804:53;:::i;:::-;4794:63;;4750:117;4906:2;4932:50;4974:7;4965:6;4954:9;4950:22;4932:50;:::i;:::-;4922:60;;4877:115;4678:321;;;;;:::o;5005:407::-;;;5130:2;5118:9;5109:7;5105:23;5101:32;5098:2;;;5146:1;5143;5136:12;5098:2;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;5088:324;;;;;:::o;5418:570::-;;;;5578:2;5566:9;5557:7;5553:23;5549:32;5546:2;;;5594:1;5591;5584:12;5546:2;5665:1;5654:9;5650:17;5637:31;5695:18;5687:6;5684:30;5681:2;;;5727:1;5724;5717:12;5681:2;5763:80;5835:7;5826:6;5815:9;5811:22;5763:80;:::i;:::-;5745:98;;;;5608:245;5892:2;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5863:118;5536:452;;;;;:::o;5994:256::-;;6099:2;6087:9;6078:7;6074:23;6070:32;6067:2;;;6115:1;6112;6105:12;6067:2;6158:1;6183:50;6225:7;6216:6;6205:9;6201:22;6183:50;:::i;:::-;6173:60;;6129:114;6057:193;;;;:::o;6256:262::-;;6364:2;6352:9;6343:7;6339:23;6335:32;6332:2;;;6380:1;6377;6370:12;6332:2;6423:1;6448:53;6493:7;6484:6;6473:9;6469:22;6448:53;:::i;:::-;6438:63;;6394:117;6322:196;;;;:::o;6524:260::-;;6631:2;6619:9;6610:7;6606:23;6602:32;6599:2;;;6647:1;6644;6637:12;6599:2;6690:1;6715:52;6759:7;6750:6;6739:9;6735:22;6715:52;:::i;:::-;6705:62;;6661:116;6589:195;;;;:::o;6790:282::-;;6908:2;6896:9;6887:7;6883:23;6879:32;6876:2;;;6924:1;6921;6914:12;6876:2;6967:1;6992:63;7047:7;7038:6;7027:9;7023:22;6992:63;:::i;:::-;6982:73;;6938:127;6866:206;;;;:::o;7078:375::-;;7196:2;7184:9;7175:7;7171:23;7167:32;7164:2;;;7212:1;7209;7202:12;7164:2;7283:1;7272:9;7268:17;7255:31;7313:18;7305:6;7302:30;7299:2;;;7345:1;7342;7335:12;7299:2;7373:63;7428:7;7419:6;7408:9;7404:22;7373:63;:::i;:::-;7363:73;;7226:220;7154:299;;;;:::o;7459:262::-;;7567:2;7555:9;7546:7;7542:23;7538:32;7535:2;;;7583:1;7580;7573:12;7535:2;7626:1;7651:53;7696:7;7687:6;7676:9;7672:22;7651:53;:::i;:::-;7641:63;;7597:117;7525:196;;;;:::o;7727:179::-;;7817:46;7859:3;7851:6;7817:46;:::i;:::-;7895:4;7890:3;7886:14;7872:28;;7807:99;;;;:::o;7912:118::-;7999:24;8017:5;7999:24;:::i;:::-;7994:3;7987:37;7977:53;;:::o;8036:157::-;8141:45;8161:24;8179:5;8161:24;:::i;:::-;8141:45;:::i;:::-;8136:3;8129:58;8119:74;;:::o;8229:732::-;;8377:54;8425:5;8377:54;:::i;:::-;8447:86;8526:6;8521:3;8447:86;:::i;:::-;8440:93;;8557:56;8607:5;8557:56;:::i;:::-;8636:7;8667:1;8652:284;8677:6;8674:1;8671:13;8652:284;;;8753:6;8747:13;8780:63;8839:3;8824:13;8780:63;:::i;:::-;8773:70;;8866:60;8919:6;8866:60;:::i;:::-;8856:70;;8712:224;8699:1;8696;8692:9;8687:14;;8652:284;;;8656:14;8952:3;8945:10;;8353:608;;;;;;;:::o;8967:109::-;9048:21;9063:5;9048:21;:::i;:::-;9043:3;9036:34;9026:50;;:::o;9082:118::-;9169:24;9187:5;9169:24;:::i;:::-;9164:3;9157:37;9147:53;;:::o;9206:360::-;;9320:38;9352:5;9320:38;:::i;:::-;9374:70;9437:6;9432:3;9374:70;:::i;:::-;9367:77;;9453:52;9498:6;9493:3;9486:4;9479:5;9475:16;9453:52;:::i;:::-;9530:29;9552:6;9530:29;:::i;:::-;9525:3;9521:39;9514:46;;9296:270;;;;;:::o;9572:364::-;;9688:39;9721:5;9688:39;:::i;:::-;9743:71;9807:6;9802:3;9743:71;:::i;:::-;9736:78;;9823:52;9868:6;9863:3;9856:4;9849:5;9845:16;9823:52;:::i;:::-;9900:29;9922:6;9900:29;:::i;:::-;9895:3;9891:39;9884:46;;9664:272;;;;;:::o;9942:377::-;;10076:39;10109:5;10076:39;:::i;:::-;10131:89;10213:6;10208:3;10131:89;:::i;:::-;10124:96;;10229:52;10274:6;10269:3;10262:4;10255:5;10251:16;10229:52;:::i;:::-;10306:6;10301:3;10297:16;10290:23;;10052:267;;;;;:::o;10349:845::-;;10489:5;10483:12;10518:36;10544:9;10518:36;:::i;:::-;10570:89;10652:6;10647:3;10570:89;:::i;:::-;10563:96;;10690:1;10679:9;10675:17;10706:1;10701:137;;;;10852:1;10847:341;;;;10668:520;;10701:137;10785:4;10781:9;10770;10766:25;10761:3;10754:38;10821:6;10816:3;10812:16;10805:23;;10701:137;;10847:341;10914:38;10946:5;10914:38;:::i;:::-;10974:1;10988:154;11002:6;10999:1;10996:13;10988:154;;;11076:7;11070:14;11066:1;11061:3;11057:11;11050:35;11126:1;11117:7;11113:15;11102:26;;11024:4;11021:1;11017:12;11012:17;;10988:154;;;11171:6;11166:3;11162:16;11155:23;;10854:334;;10668:520;;10456:738;;;;;;:::o;11200:366::-;;11363:67;11427:2;11422:3;11363:67;:::i;:::-;11356:74;;11439:93;11528:3;11439:93;:::i;:::-;11557:2;11552:3;11548:12;11541:19;;11346:220;;;:::o;11572:366::-;;11735:67;11799:2;11794:3;11735:67;:::i;:::-;11728:74;;11811:93;11900:3;11811:93;:::i;:::-;11929:2;11924:3;11920:12;11913:19;;11718:220;;;:::o;11944:366::-;;12107:67;12171:2;12166:3;12107:67;:::i;:::-;12100:74;;12183:93;12272:3;12183:93;:::i;:::-;12301:2;12296:3;12292:12;12285:19;;12090:220;;;:::o;12316:366::-;;12479:67;12543:2;12538:3;12479:67;:::i;:::-;12472:74;;12555:93;12644:3;12555:93;:::i;:::-;12673:2;12668:3;12664:12;12657:19;;12462:220;;;:::o;12688:366::-;;12851:67;12915:2;12910:3;12851:67;:::i;:::-;12844:74;;12927:93;13016:3;12927:93;:::i;:::-;13045:2;13040:3;13036:12;13029:19;;12834:220;;;:::o;13060:366::-;;13223:67;13287:2;13282:3;13223:67;:::i;:::-;13216:74;;13299:93;13388:3;13299:93;:::i;:::-;13417:2;13412:3;13408:12;13401:19;;13206:220;;;:::o;13432:366::-;;13595:67;13659:2;13654:3;13595:67;:::i;:::-;13588:74;;13671:93;13760:3;13671:93;:::i;:::-;13789:2;13784:3;13780:12;13773:19;;13578:220;;;:::o;13804:366::-;;13967:67;14031:2;14026:3;13967:67;:::i;:::-;13960:74;;14043:93;14132:3;14043:93;:::i;:::-;14161:2;14156:3;14152:12;14145:19;;13950:220;;;:::o;14176:366::-;;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14322:220;;;:::o;14548:366::-;;14711:67;14775:2;14770:3;14711:67;:::i;:::-;14704:74;;14787:93;14876:3;14787:93;:::i;:::-;14905:2;14900:3;14896:12;14889:19;;14694:220;;;:::o;14920:366::-;;15083:67;15147:2;15142:3;15083:67;:::i;:::-;15076:74;;15159:93;15248:3;15159:93;:::i;:::-;15277:2;15272:3;15268:12;15261:19;;15066:220;;;:::o;15292:366::-;;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15438:220;;;:::o;15664:366::-;;15827:67;15891:2;15886:3;15827:67;:::i;:::-;15820:74;;15903:93;15992:3;15903:93;:::i;:::-;16021:2;16016:3;16012:12;16005:19;;15810:220;;;:::o;16036:366::-;;16199:67;16263:2;16258:3;16199:67;:::i;:::-;16192:74;;16275:93;16364:3;16275:93;:::i;:::-;16393:2;16388:3;16384:12;16377:19;;16182:220;;;:::o;16408:366::-;;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16554:220;;;:::o;16780:366::-;;16943:67;17007:2;17002:3;16943:67;:::i;:::-;16936:74;;17019:93;17108:3;17019:93;:::i;:::-;17137:2;17132:3;17128:12;17121:19;;16926:220;;;:::o;17152:366::-;;17315:67;17379:2;17374:3;17315:67;:::i;:::-;17308:74;;17391:93;17480:3;17391:93;:::i;:::-;17509:2;17504:3;17500:12;17493:19;;17298:220;;;:::o;17524:366::-;;17687:67;17751:2;17746:3;17687:67;:::i;:::-;17680:74;;17763:93;17852:3;17763:93;:::i;:::-;17881:2;17876:3;17872:12;17865:19;;17670:220;;;:::o;17896:366::-;;18059:67;18123:2;18118:3;18059:67;:::i;:::-;18052:74;;18135:93;18224:3;18135:93;:::i;:::-;18253:2;18248:3;18244:12;18237:19;;18042:220;;;:::o;18268:366::-;;18431:67;18495:2;18490:3;18431:67;:::i;:::-;18424:74;;18507:93;18596:3;18507:93;:::i;:::-;18625:2;18620:3;18616:12;18609:19;;18414:220;;;:::o;18640:366::-;;18803:67;18867:2;18862:3;18803:67;:::i;:::-;18796:74;;18879:93;18968:3;18879:93;:::i;:::-;18997:2;18992:3;18988:12;18981:19;;18786:220;;;:::o;19012:366::-;;19175:67;19239:2;19234:3;19175:67;:::i;:::-;19168:74;;19251:93;19340:3;19251:93;:::i;:::-;19369:2;19364:3;19360:12;19353:19;;19158:220;;;:::o;19384:366::-;;19547:67;19611:2;19606:3;19547:67;:::i;:::-;19540:74;;19623:93;19712:3;19623:93;:::i;:::-;19741:2;19736:3;19732:12;19725:19;;19530:220;;;:::o;19756:366::-;;19919:67;19983:2;19978:3;19919:67;:::i;:::-;19912:74;;19995:93;20084:3;19995:93;:::i;:::-;20113:2;20108:3;20104:12;20097:19;;19902:220;;;:::o;20128:366::-;;20291:67;20355:2;20350:3;20291:67;:::i;:::-;20284:74;;20367:93;20456:3;20367:93;:::i;:::-;20485:2;20480:3;20476:12;20469:19;;20274:220;;;:::o;20500:366::-;;20663:67;20727:2;20722:3;20663:67;:::i;:::-;20656:74;;20739:93;20828:3;20739:93;:::i;:::-;20857:2;20852:3;20848:12;20841:19;;20646:220;;;:::o;20872:366::-;;21035:67;21099:2;21094:3;21035:67;:::i;:::-;21028:74;;21111:93;21200:3;21111:93;:::i;:::-;21229:2;21224:3;21220:12;21213:19;;21018:220;;;:::o;21244:108::-;21321:24;21339:5;21321:24;:::i;:::-;21316:3;21309:37;21299:53;;:::o;21358:118::-;21445:24;21463:5;21445:24;:::i;:::-;21440:3;21433:37;21423:53;;:::o;21482:256::-;;21609:75;21680:3;21671:6;21609:75;:::i;:::-;21709:2;21704:3;21700:12;21693:19;;21729:3;21722:10;;21598:140;;;;:::o;21744:589::-;;21991:95;22082:3;22073:6;21991:95;:::i;:::-;21984:102;;22103:95;22194:3;22185:6;22103:95;:::i;:::-;22096:102;;22215:92;22303:3;22294:6;22215:92;:::i;:::-;22208:99;;22324:3;22317:10;;21973:360;;;;;;:::o;22339:222::-;;22470:2;22459:9;22455:18;22447:26;;22483:71;22551:1;22540:9;22536:17;22527:6;22483:71;:::i;:::-;22437:124;;;;:::o;22567:640::-;;22800:3;22789:9;22785:19;22777:27;;22814:71;22882:1;22871:9;22867:17;22858:6;22814:71;:::i;:::-;22895:72;22963:2;22952:9;22948:18;22939:6;22895:72;:::i;:::-;22977;23045:2;23034:9;23030:18;23021:6;22977:72;:::i;:::-;23096:9;23090:4;23086:20;23081:2;23070:9;23066:18;23059:48;23124:76;23195:4;23186:6;23124:76;:::i;:::-;23116:84;;22767:440;;;;;;;:::o;23213:373::-;;23394:2;23383:9;23379:18;23371:26;;23443:9;23437:4;23433:20;23429:1;23418:9;23414:17;23407:47;23471:108;23574:4;23565:6;23471:108;:::i;:::-;23463:116;;23361:225;;;;:::o;23592:210::-;;23717:2;23706:9;23702:18;23694:26;;23730:65;23792:1;23781:9;23777:17;23768:6;23730:65;:::i;:::-;23684:118;;;;:::o;23808:222::-;;23939:2;23928:9;23924:18;23916:26;;23952:71;24020:1;24009:9;24005:17;23996:6;23952:71;:::i;:::-;23906:124;;;;:::o;24036:313::-;;24187:2;24176:9;24172:18;24164:26;;24236:9;24230:4;24226:20;24222:1;24211:9;24207:17;24200:47;24264:78;24337:4;24328:6;24264:78;:::i;:::-;24256:86;;24154:195;;;;:::o;24355:419::-;;24559:2;24548:9;24544:18;24536:26;;24608:9;24602:4;24598:20;24594:1;24583:9;24579:17;24572:47;24636:131;24762:4;24636:131;:::i;:::-;24628:139;;24526:248;;;:::o;24780:419::-;;24984:2;24973:9;24969:18;24961:26;;25033:9;25027:4;25023:20;25019:1;25008:9;25004:17;24997:47;25061:131;25187:4;25061:131;:::i;:::-;25053:139;;24951:248;;;:::o;25205:419::-;;25409:2;25398:9;25394:18;25386:26;;25458:9;25452:4;25448:20;25444:1;25433:9;25429:17;25422:47;25486:131;25612:4;25486:131;:::i;:::-;25478:139;;25376:248;;;:::o;25630:419::-;;25834:2;25823:9;25819:18;25811:26;;25883:9;25877:4;25873:20;25869:1;25858:9;25854:17;25847:47;25911:131;26037:4;25911:131;:::i;:::-;25903:139;;25801:248;;;:::o;26055:419::-;;26259:2;26248:9;26244:18;26236:26;;26308:9;26302:4;26298:20;26294:1;26283:9;26279:17;26272:47;26336:131;26462:4;26336:131;:::i;:::-;26328:139;;26226:248;;;:::o;26480:419::-;;26684:2;26673:9;26669:18;26661:26;;26733:9;26727:4;26723:20;26719:1;26708:9;26704:17;26697:47;26761:131;26887:4;26761:131;:::i;:::-;26753:139;;26651:248;;;:::o;26905:419::-;;27109:2;27098:9;27094:18;27086:26;;27158:9;27152:4;27148:20;27144:1;27133:9;27129:17;27122:47;27186:131;27312:4;27186:131;:::i;:::-;27178:139;;27076:248;;;:::o;27330:419::-;;27534:2;27523:9;27519:18;27511:26;;27583:9;27577:4;27573:20;27569:1;27558:9;27554:17;27547:47;27611:131;27737:4;27611:131;:::i;:::-;27603:139;;27501:248;;;:::o;27755:419::-;;27959:2;27948:9;27944:18;27936:26;;28008:9;28002:4;27998:20;27994:1;27983:9;27979:17;27972:47;28036:131;28162:4;28036:131;:::i;:::-;28028:139;;27926:248;;;:::o;28180:419::-;;28384:2;28373:9;28369:18;28361:26;;28433:9;28427:4;28423:20;28419:1;28408:9;28404:17;28397:47;28461:131;28587:4;28461:131;:::i;:::-;28453:139;;28351:248;;;:::o;28605:419::-;;28809:2;28798:9;28794:18;28786:26;;28858:9;28852:4;28848:20;28844:1;28833:9;28829:17;28822:47;28886:131;29012:4;28886:131;:::i;:::-;28878:139;;28776:248;;;:::o;29030:419::-;;29234:2;29223:9;29219:18;29211:26;;29283:9;29277:4;29273:20;29269:1;29258:9;29254:17;29247:47;29311:131;29437:4;29311:131;:::i;:::-;29303:139;;29201:248;;;:::o;29455:419::-;;29659:2;29648:9;29644:18;29636:26;;29708:9;29702:4;29698:20;29694:1;29683:9;29679:17;29672:47;29736:131;29862:4;29736:131;:::i;:::-;29728:139;;29626:248;;;:::o;29880:419::-;;30084:2;30073:9;30069:18;30061:26;;30133:9;30127:4;30123:20;30119:1;30108:9;30104:17;30097:47;30161:131;30287:4;30161:131;:::i;:::-;30153:139;;30051:248;;;:::o;30305:419::-;;30509:2;30498:9;30494:18;30486:26;;30558:9;30552:4;30548:20;30544:1;30533:9;30529:17;30522:47;30586:131;30712:4;30586:131;:::i;:::-;30578:139;;30476:248;;;:::o;30730:419::-;;30934:2;30923:9;30919:18;30911:26;;30983:9;30977:4;30973:20;30969:1;30958:9;30954:17;30947:47;31011:131;31137:4;31011:131;:::i;:::-;31003:139;;30901:248;;;:::o;31155:419::-;;31359:2;31348:9;31344:18;31336:26;;31408:9;31402:4;31398:20;31394:1;31383:9;31379:17;31372:47;31436:131;31562:4;31436:131;:::i;:::-;31428:139;;31326:248;;;:::o;31580:419::-;;31784:2;31773:9;31769:18;31761:26;;31833:9;31827:4;31823:20;31819:1;31808:9;31804:17;31797:47;31861:131;31987:4;31861:131;:::i;:::-;31853:139;;31751:248;;;:::o;32005:419::-;;32209:2;32198:9;32194:18;32186:26;;32258:9;32252:4;32248:20;32244:1;32233:9;32229:17;32222:47;32286:131;32412:4;32286:131;:::i;:::-;32278:139;;32176:248;;;:::o;32430:419::-;;32634:2;32623:9;32619:18;32611:26;;32683:9;32677:4;32673:20;32669:1;32658:9;32654:17;32647:47;32711:131;32837:4;32711:131;:::i;:::-;32703:139;;32601:248;;;:::o;32855:419::-;;33059:2;33048:9;33044:18;33036:26;;33108:9;33102:4;33098:20;33094:1;33083:9;33079:17;33072:47;33136:131;33262:4;33136:131;:::i;:::-;33128:139;;33026:248;;;:::o;33280:419::-;;33484:2;33473:9;33469:18;33461:26;;33533:9;33527:4;33523:20;33519:1;33508:9;33504:17;33497:47;33561:131;33687:4;33561:131;:::i;:::-;33553:139;;33451:248;;;:::o;33705:419::-;;33909:2;33898:9;33894:18;33886:26;;33958:9;33952:4;33948:20;33944:1;33933:9;33929:17;33922:47;33986:131;34112:4;33986:131;:::i;:::-;33978:139;;33876:248;;;:::o;34130:419::-;;34334:2;34323:9;34319:18;34311:26;;34383:9;34377:4;34373:20;34369:1;34358:9;34354:17;34347:47;34411:131;34537:4;34411:131;:::i;:::-;34403:139;;34301:248;;;:::o;34555:419::-;;34759:2;34748:9;34744:18;34736:26;;34808:9;34802:4;34798:20;34794:1;34783:9;34779:17;34772:47;34836:131;34962:4;34836:131;:::i;:::-;34828:139;;34726:248;;;:::o;34980:419::-;;35184:2;35173:9;35169:18;35161:26;;35233:9;35227:4;35223:20;35219:1;35208:9;35204:17;35197:47;35261:131;35387:4;35261:131;:::i;:::-;35253:139;;35151:248;;;:::o;35405:419::-;;35609:2;35598:9;35594:18;35586:26;;35658:9;35652:4;35648:20;35644:1;35633:9;35629:17;35622:47;35686:131;35812:4;35686:131;:::i;:::-;35678:139;;35576:248;;;:::o;35830:222::-;;35961:2;35950:9;35946:18;35938:26;;35974:71;36042:1;36031:9;36027:17;36018:6;35974:71;:::i;:::-;35928:124;;;;:::o;36058:129::-;;36119:20;;:::i;:::-;36109:30;;36148:33;36176:4;36168:6;36148:33;:::i;:::-;36099:88;;;:::o;36193:75::-;;36259:2;36253:9;36243:19;;36233:35;:::o;36274:307::-;;36425:18;36417:6;36414:30;36411:2;;;36447:18;;:::i;:::-;36411:2;36485:29;36507:6;36485:29;:::i;:::-;36477:37;;36569:4;36563;36559:15;36551:23;;36340:241;;;:::o;36587:308::-;;36739:18;36731:6;36728:30;36725:2;;;36761:18;;:::i;:::-;36725:2;36799:29;36821:6;36799:29;:::i;:::-;36791:37;;36883:4;36877;36873:15;36865:23;;36654:241;;;:::o;36901:132::-;;36991:3;36983:11;;37021:4;37016:3;37012:14;37004:22;;36973:60;;;:::o;37039:141::-;;37111:3;37103:11;;37134:3;37131:1;37124:14;37168:4;37165:1;37155:18;37147:26;;37093:87;;;:::o;37186:114::-;;37287:5;37281:12;37271:22;;37260:40;;;:::o;37306:98::-;;37391:5;37385:12;37375:22;;37364:40;;;:::o;37410:99::-;;37496:5;37490:12;37480:22;;37469:40;;;:::o;37515:113::-;;37617:4;37612:3;37608:14;37600:22;;37590:38;;;:::o;37634:184::-;;37767:6;37762:3;37755:19;37807:4;37802:3;37798:14;37783:29;;37745:73;;;;:::o;37824:168::-;;37941:6;37936:3;37929:19;37981:4;37976:3;37972:14;37957:29;;37919:73;;;;:::o;37998:169::-;;38116:6;38111:3;38104:19;38156:4;38151:3;38147:14;38132:29;;38094:73;;;;:::o;38173:148::-;;38312:3;38297:18;;38287:34;;;;:::o;38327:305::-;;38386:20;38404:1;38386:20;:::i;:::-;38381:25;;38420:20;38438:1;38420:20;:::i;:::-;38415:25;;38574:1;38506:66;38502:74;38499:1;38496:81;38493:2;;;38580:18;;:::i;:::-;38493:2;38624:1;38621;38617:9;38610:16;;38371:261;;;;:::o;38638:185::-;;38695:20;38713:1;38695:20;:::i;:::-;38690:25;;38729:20;38747:1;38729:20;:::i;:::-;38724:25;;38768:1;38758:2;;38773:18;;:::i;:::-;38758:2;38815:1;38812;38808:9;38803:14;;38680:143;;;;:::o;38829:348::-;;38892:20;38910:1;38892:20;:::i;:::-;38887:25;;38926:20;38944:1;38926:20;:::i;:::-;38921:25;;39114:1;39046:66;39042:74;39039:1;39036:81;39031:1;39024:9;39017:17;39013:105;39010:2;;;39121:18;;:::i;:::-;39010:2;39169:1;39166;39162:9;39151:20;;38877:300;;;;:::o;39183:191::-;;39243:20;39261:1;39243:20;:::i;:::-;39238:25;;39277:20;39295:1;39277:20;:::i;:::-;39272:25;;39316:1;39313;39310:8;39307:2;;;39321:18;;:::i;:::-;39307:2;39366:1;39363;39359:9;39351:17;;39228:146;;;;:::o;39380:96::-;;39446:24;39464:5;39446:24;:::i;:::-;39435:35;;39425:51;;;:::o;39482:90::-;;39559:5;39552:13;39545:21;39534:32;;39524:48;;;:::o;39578:77::-;;39644:5;39633:16;;39623:32;;;:::o;39661:149::-;;39737:66;39730:5;39726:78;39715:89;;39705:105;;;:::o;39816:126::-;;39893:42;39886:5;39882:54;39871:65;;39861:81;;;:::o;39948:77::-;;40014:5;40003:16;;39993:32;;;:::o;40031:154::-;40115:6;40110:3;40105;40092:30;40177:1;40168:6;40163:3;40159:16;40152:27;40082:103;;;:::o;40191:307::-;40259:1;40269:113;40283:6;40280:1;40277:13;40269:113;;;40368:1;40363:3;40359:11;40353:18;40349:1;40344:3;40340:11;40333:39;40305:2;40302:1;40298:10;40293:15;;40269:113;;;40400:6;40397:1;40394:13;40391:2;;;40480:1;40471:6;40466:3;40462:16;40455:27;40391:2;40240:258;;;;:::o;40504:320::-;;40585:1;40579:4;40575:12;40565:22;;40632:1;40626:4;40622:12;40653:18;40643:2;;40709:4;40701:6;40697:17;40687:27;;40643:2;40771;40763:6;40760:14;40740:18;40737:38;40734:2;;;40790:18;;:::i;:::-;40734:2;40555:269;;;;:::o;40830:281::-;40913:27;40935:4;40913:27;:::i;:::-;40905:6;40901:40;41043:6;41031:10;41028:22;41007:18;40995:10;40992:34;40989:62;40986:2;;;41054:18;;:::i;:::-;40986:2;41094:10;41090:2;41083:22;40873:238;;;:::o;41117:233::-;;41179:24;41197:5;41179:24;:::i;:::-;41170:33;;41225:66;41218:5;41215:77;41212:2;;;41295:18;;:::i;:::-;41212:2;41342:1;41335:5;41331:13;41324:20;;41160:190;;;:::o;41356:100::-;;41424:26;41444:5;41424:26;:::i;:::-;41413:37;;41403:53;;;:::o;41462:94::-;;41530:20;41544:5;41530:20;:::i;:::-;41519:31;;41509:47;;;:::o;41562:176::-;;41611:20;41629:1;41611:20;:::i;:::-;41606:25;;41645:20;41663:1;41645:20;:::i;:::-;41640:25;;41684:1;41674:2;;41689:18;;:::i;:::-;41674:2;41730:1;41727;41723:9;41718:14;;41596:142;;;;:::o;41744:180::-;41792:77;41789:1;41782:88;41889:4;41886:1;41879:15;41913:4;41910:1;41903:15;41930:180;41978:77;41975:1;41968:88;42075:4;42072:1;42065:15;42099:4;42096:1;42089:15;42116:180;42164:77;42161:1;42154:88;42261:4;42258:1;42251:15;42285:4;42282:1;42275:15;42302:180;42350:77;42347:1;42340:88;42447:4;42444:1;42437:15;42471:4;42468:1;42461:15;42488:102;;42580:2;42576:7;42571:2;42564:5;42560:14;42556:28;42546:38;;42536:54;;;:::o;42596:94::-;;42677:5;42673:2;42669:14;42648:35;;42638:52;;;:::o;42696:230::-;42836:34;42832:1;42824:6;42820:14;42813:58;42905:13;42900:2;42892:6;42888:15;42881:38;42802:124;:::o;42932:237::-;43072:34;43068:1;43060:6;43056:14;43049:58;43141:20;43136:2;43128:6;43124:15;43117:45;43038:131;:::o;43175:225::-;43315:34;43311:1;43303:6;43299:14;43292:58;43384:8;43379:2;43371:6;43367:15;43360:33;43281:119;:::o;43406:166::-;43546:18;43542:1;43534:6;43530:14;43523:42;43512:60;:::o;43578:224::-;43718:34;43714:1;43706:6;43702:14;43695:58;43787:7;43782:2;43774:6;43770:15;43763:32;43684:118;:::o;43808:178::-;43948:30;43944:1;43936:6;43932:14;43925:54;43914:72;:::o;43992:223::-;44132:34;44128:1;44120:6;44116:14;44109:58;44201:6;44196:2;44188:6;44184:15;44177:31;44098:117;:::o;44221:175::-;44361:27;44357:1;44349:6;44345:14;44338:51;44327:69;:::o;44402:231::-;44542:34;44538:1;44530:6;44526:14;44519:58;44611:14;44606:2;44598:6;44594:15;44587:39;44508:125;:::o;44639:243::-;44779:34;44775:1;44767:6;44763:14;44756:58;44848:26;44843:2;44835:6;44831:15;44824:51;44745:137;:::o;44888:224::-;45028:34;45024:1;45016:6;45012:14;45005:58;45097:7;45092:2;45084:6;45080:15;45073:32;44994:118;:::o;45118:229::-;45258:34;45254:1;45246:6;45242:14;45235:58;45327:12;45322:2;45314:6;45310:15;45303:37;45224:123;:::o;45353:228::-;45493:34;45489:1;45481:6;45477:14;45470:58;45562:11;45557:2;45549:6;45545:15;45538:36;45459:122;:::o;45587:180::-;45727:32;45723:1;45715:6;45711:14;45704:56;45693:74;:::o;45773:172::-;45913:24;45909:1;45901:6;45897:14;45890:48;45879:66;:::o;45951:223::-;46091:34;46087:1;46079:6;46075:14;46068:58;46160:6;46155:2;46147:6;46143:15;46136:31;46057:117;:::o;46180:182::-;46320:34;46316:1;46308:6;46304:14;46297:58;46286:76;:::o;46368:231::-;46508:34;46504:1;46496:6;46492:14;46485:58;46577:14;46572:2;46564:6;46560:15;46553:39;46474:125;:::o;46605:182::-;46745:34;46741:1;46733:6;46729:14;46722:58;46711:76;:::o;46793:234::-;46933:34;46929:1;46921:6;46917:14;46910:58;47002:17;46997:2;46989:6;46985:15;46978:42;46899:128;:::o;47033:220::-;47173:34;47169:1;47161:6;47157:14;47150:58;47242:3;47237:2;47229:6;47225:15;47218:28;47139:114;:::o;47259:167::-;47399:19;47395:1;47387:6;47383:14;47376:43;47365:61;:::o;47432:236::-;47572:34;47568:1;47560:6;47556:14;47549:58;47641:19;47636:2;47628:6;47624:15;47617:44;47538:130;:::o;47674:177::-;47814:29;47810:1;47802:6;47798:14;47791:53;47780:71;:::o;47857:231::-;47997:34;47993:1;47985:6;47981:14;47974:58;48066:14;48061:2;48053:6;48049:15;48042:39;47963:125;:::o;48094:222::-;48234:34;48230:1;48222:6;48218:14;48211:58;48303:5;48298:2;48290:6;48286:15;48279:30;48200:116;:::o;48322:173::-;48462:25;48458:1;48450:6;48446:14;48439:49;48428:67;:::o;48501:122::-;48574:24;48592:5;48574:24;:::i;:::-;48567:5;48564:35;48554:2;;48613:1;48610;48603:12;48554:2;48544:79;:::o;48629:116::-;48699:21;48714:5;48699:21;:::i;:::-;48692:5;48689:32;48679:2;;48735:1;48732;48725:12;48679:2;48669:76;:::o;48751:122::-;48824:24;48842:5;48824:24;:::i;:::-;48817:5;48814:35;48804:2;;48863:1;48860;48853:12;48804:2;48794:79;:::o;48879:120::-;48951:23;48968:5;48951:23;:::i;:::-;48944:5;48941:34;48931:2;;48989:1;48986;48979:12;48931:2;48921:78;:::o;49005:122::-;49078:24;49096:5;49078:24;:::i;:::-;49071:5;49068:35;49058:2;;49117:1;49114;49107:12;49058:2;49048:79;:::o
Swarm Source
ipfs://b0366a7dbf182c54e35540dce574bac9500ea05fe4e6e626c348e7e43c64fecc
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.