Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
5,267 PJPP
Holders
2,189
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PJPPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PJPP
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-13 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/nft721.sol pragma solidity ^0.8.0; contract PJPP is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.09 ether; uint256 public maxSupply = 9999; uint256 public maxLimitWhitelist = 15; uint256 public maxLimitNonWhitelist = 10; bool public paused = false; bool public revealed = false; bool public onlyWhiteList = true; string public notRevealedUri; mapping(address => bool) public whitelisted; 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 mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { uint256 minted = balanceOf(_to); if(whitelisted[_to] == true) { require(maxLimitWhitelist >= minted+_mintAmount, "cannot mint more than limit"); }else{ require(onlyWhiteList==false, "only whitelist addresses can mint"); require(maxLimitNonWhitelist >= minted+_mintAmount, "cannot mint more than limit"); } require(msg.value == cost * _mintAmount, "pay price of nft"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } 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 setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setmaxLimitWhitelist(uint256 _limit) public onlyOwner { maxLimitWhitelist = _limit; } function setmaxLimitNonWhitelist(uint256 _limit) public onlyOwner { maxLimitNonWhitelist = _limit; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelist(bool _state) public onlyOwner { onlyWhiteList = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() payable public onlyOwner{ uint 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":"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":[{"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":"maxLimitNonWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimitWhitelist","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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","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":"onlyWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","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":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setmaxLimitNonWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setmaxLimitWhitelist","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003c1565b5067013fbe85edc90000600d5561270f600e55600f8055600a6010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff021916908315150217905550348015620000cb57600080fd5b5060405162005399380380620053998339818101604052810190620000f191906200060e565b838381600090805190602001906200010b929190620003c1565b50806001908051906020019062000124929190620003c1565b505050620001476200013b6200017360201b60201c565b6200017b60201b60201c565b62000158826200024160201b60201c565b6200016981620002ec60201b60201c565b50505050620007e4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002516200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002776200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c7906200075d565b60405180910390fd5b80600b9080519060200190620002e8929190620003c1565b5050565b620002fc6200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003226200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000372906200075d565b60405180910390fd5b806012908051906020019062000393929190620003c1565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003cf90620007ae565b90600052602060002090601f016020900481019282620003f357600085556200043f565b82601f106200040e57805160ff19168380011785556200043f565b828001600101855582156200043f579182015b828111156200043e57825182559160200191906001019062000421565b5b5090506200044e919062000452565b5090565b5b808211156200046d57600081600090555060010162000453565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004da826200048f565b810181811067ffffffffffffffff82111715620004fc57620004fb620004a0565b5b80604052505050565b60006200051162000471565b90506200051f8282620004cf565b919050565b600067ffffffffffffffff821115620005425762000541620004a0565b5b6200054d826200048f565b9050602081019050919050565b60005b838110156200057a5780820151818401526020810190506200055d565b838111156200058a576000848401525b50505050565b6000620005a7620005a18462000524565b62000505565b905082815260208101848484011115620005c657620005c56200048a565b5b620005d38482856200055a565b509392505050565b600082601f830112620005f357620005f262000485565b5b81516200060584826020860162000590565b91505092915050565b600080600080608085870312156200062b576200062a6200047b565b5b600085015167ffffffffffffffff8111156200064c576200064b62000480565b5b6200065a87828801620005db565b945050602085015167ffffffffffffffff8111156200067e576200067d62000480565b5b6200068c87828801620005db565b935050604085015167ffffffffffffffff811115620006b057620006af62000480565b5b620006be87828801620005db565b925050606085015167ffffffffffffffff811115620006e257620006e162000480565b5b620006f087828801620005db565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000745602083620006fc565b915062000752826200070d565b602082019050919050565b60006020820190508181036000830152620007788162000736565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007c757607f821691505b60208210811415620007de57620007dd6200077f565b5b50919050565b614ba580620007f46000396000f3fe60806040526004361061025c5760003560e01c80635c975abb11610144578063af237d7b116100b6578063d5abeb011161007a578063d5abeb01146108b8578063d936547e146108e3578063da3ef23f14610920578063e985e9c514610949578063f2c4ce1e14610986578063f2fde38b146109af5761025c565b8063af237d7b146107d1578063b88d4fde146107fc578063c668286214610825578063c87b56dd14610850578063cc24b2111461088d5761025c565b80638da5cb5b116101085780638da5cb5b146106e757806395d89b41146107125780639f182cd11461073d578063a22cb46514610768578063a43fc97214610791578063a475b5dd146107ba5761025c565b80635c975abb146106005780636352211e1461062b5780636c0360eb1461066857806370a0823114610693578063715018a6146106d05761025c565b80632f745c59116101dd57806342842e0e116101a157806342842e0e146104e0578063438b6300146105095780634a4c560d146105465780634f6ccce71461056f57806351830227146105ac57806355f804b3146105d75761025c565b80632f745c591461042b57806330a5ce931461046857806330cc7ae0146104915780633ccfd60b146104ba57806340c10f19146104c45761025c565b8063095ea7b311610224578063095ea7b31461035a57806313faede61461038357806318160ddd146103ae5780631dd02b4b146103d957806323b872dd146104025761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c7578063081812fc146102f2578063081c8c441461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061340f565b6109d8565b6040516102959190613457565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061349e565b610a52565b005b3480156102d357600080fd5b506102dc610aeb565b6040516102e99190613564565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906135bc565b610b7d565b604051610326919061362a565b60405180910390f35b34801561033b57600080fd5b50610344610c02565b6040516103519190613564565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613671565b610c90565b005b34801561038f57600080fd5b50610398610da8565b6040516103a591906136c0565b60405180910390f35b3480156103ba57600080fd5b506103c3610dae565b6040516103d091906136c0565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb919061349e565b610dbb565b005b34801561040e57600080fd5b50610429600480360381019061042491906136db565b610e54565b005b34801561043757600080fd5b50610452600480360381019061044d9190613671565b610eb4565b60405161045f91906136c0565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906135bc565b610f59565b005b34801561049d57600080fd5b506104b860048036038101906104b3919061372e565b610fdf565b005b6104c26110b6565b005b6104de60048036038101906104d99190613671565b6111cb565b005b3480156104ec57600080fd5b50610507600480360381019061050291906136db565b611441565b005b34801561051557600080fd5b50610530600480360381019061052b919061372e565b611461565b60405161053d9190613819565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061372e565b61150f565b005b34801561057b57600080fd5b50610596600480360381019061059191906135bc565b6115e6565b6040516105a391906136c0565b60405180910390f35b3480156105b857600080fd5b506105c1611657565b6040516105ce9190613457565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613970565b61166a565b005b34801561060c57600080fd5b50610615611700565b6040516106229190613457565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906135bc565b611713565b60405161065f919061362a565b60405180910390f35b34801561067457600080fd5b5061067d6117c5565b60405161068a9190613564565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061372e565b611853565b6040516106c791906136c0565b60405180910390f35b3480156106dc57600080fd5b506106e561190b565b005b3480156106f357600080fd5b506106fc611993565b604051610709919061362a565b60405180910390f35b34801561071e57600080fd5b506107276119bd565b6040516107349190613564565b60405180910390f35b34801561074957600080fd5b50610752611a4f565b60405161075f9190613457565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906139b9565b611a62565b005b34801561079d57600080fd5b506107b860048036038101906107b391906135bc565b611a78565b005b3480156107c657600080fd5b506107cf611afe565b005b3480156107dd57600080fd5b506107e6611b97565b6040516107f391906136c0565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613a9a565b611b9d565b005b34801561083157600080fd5b5061083a611bff565b6040516108479190613564565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906135bc565b611c8d565b6040516108849190613564565b60405180910390f35b34801561089957600080fd5b506108a2611de6565b6040516108af91906136c0565b60405180910390f35b3480156108c457600080fd5b506108cd611dec565b6040516108da91906136c0565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061372e565b611df2565b6040516109179190613457565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613970565b611e12565b005b34801561095557600080fd5b50610970600480360381019061096b9190613b1d565b611ea8565b60405161097d9190613457565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613970565b611f3c565b005b3480156109bb57600080fd5b506109d660048036038101906109d1919061372e565b611fd2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4b5750610a4a826120ca565b5b9050919050565b610a5a6121ac565b73ffffffffffffffffffffffffffffffffffffffff16610a78611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590613ba9565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610afa90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2690613bf8565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905090565b6000610b88826121b4565b610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe90613c9c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610c0f90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3b90613bf8565b8015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b505050505081565b6000610c9b82611713565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613d2e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2b6121ac565b73ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d5981610d546121ac565b611ea8565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613dc0565b60405180910390fd5b610da38383612220565b505050565b600d5481565b6000600880549050905090565b610dc36121ac565b73ffffffffffffffffffffffffffffffffffffffff16610de1611993565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613ba9565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b610e65610e5f6121ac565b826122d9565b610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90613e52565b60405180910390fd5b610eaf8383836123b7565b505050565b6000610ebf83611853565b8210610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613ee4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f616121ac565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611993565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613ba9565b60405180910390fd5b80600f8190555050565b610fe76121ac565b73ffffffffffffffffffffffffffffffffffffffff16611005611993565b73ffffffffffffffffffffffffffffffffffffffff161461105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613ba9565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110be6121ac565b73ffffffffffffffffffffffffffffffffffffffff166110dc611993565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613ba9565b60405180910390fd5b60004790506000811161117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117190613f50565b60405180910390fd5b611182611993565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111c7573d6000803e3d6000fd5b5050565b60006111d5610dae565b9050601160009054906101000a900460ff16156111f157600080fd5b600082116111fe57600080fd5b600e54828261120d9190613f9f565b111561121857600080fd5b611220611993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140557600061125d84611853565b905060011515601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561130d5782816112c49190613f9f565b600f541015611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90614041565b60405180910390fd5b6113b4565b60001515601160029054906101000a900460ff16151514611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a906140d3565b60405180910390fd5b828161136f9190613f9f565b60105410156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90614041565b60405180910390fd5b5b82600d546113c291906140f3565b3414611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90614199565b60405180910390fd5b505b6000600190505b82811161143b576114288482846114239190613f9f565b612613565b8080611433906141b9565b91505061140c565b50505050565b61145c83838360405180602001604052806000815250611b9d565b505050565b6060600061146e83611853565b905060008167ffffffffffffffff81111561148c5761148b613845565b5b6040519080825280602002602001820160405280156114ba5781602001602082028036833780820191505090505b50905060005b82811015611504576114d28582610eb4565b8282815181106114e5576114e4614202565b5b60200260200101818152505080806114fc906141b9565b9150506114c0565b508092505050919050565b6115176121ac565b73ffffffffffffffffffffffffffffffffffffffff16611535611993565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613ba9565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006115f0610dae565b8210611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906142a3565b60405180910390fd5b6008828154811061164557611644614202565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6116726121ac565b73ffffffffffffffffffffffffffffffffffffffff16611690611993565b73ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613ba9565b60405180910390fd5b80600b90805190602001906116fc929190613300565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614335565b60405180910390fd5b80915050919050565b600b80546117d290613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546117fe90613bf8565b801561184b5780601f106118205761010080835404028352916020019161184b565b820191906000526020600020905b81548152906001019060200180831161182e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906143c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119136121ac565b73ffffffffffffffffffffffffffffffffffffffff16611931611993565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90613ba9565b60405180910390fd5b6119916000612631565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119cc90613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890613bf8565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b611a74611a6d6121ac565b83836126f7565b5050565b611a806121ac565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611993565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613ba9565b60405180910390fd5b8060108190555050565b611b066121ac565b73ffffffffffffffffffffffffffffffffffffffff16611b24611993565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613ba9565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b60105481565b611bae611ba86121ac565b836122d9565b611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613e52565b60405180910390fd5b611bf984848484612864565b50505050565b600c8054611c0c90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3890613bf8565b8015611c855780601f10611c5a57610100808354040283529160200191611c85565b820191906000526020600020905b815481529060010190602001808311611c6857829003601f168201915b505050505081565b6060611c98826121b4565b611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614459565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611d855760128054611d0090613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2c90613bf8565b8015611d795780601f10611d4e57610100808354040283529160200191611d79565b820191906000526020600020905b815481529060010190602001808311611d5c57829003601f168201915b50505050509050611de1565b6000611d8f6128c0565b90506000815111611daf5760405180602001604052806000815250611ddd565b80611db984612952565b600c604051602001611dcd93929190614549565b6040516020818303038152906040525b9150505b919050565b600f5481565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611e1a6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611e38611993565b73ffffffffffffffffffffffffffffffffffffffff1614611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8590613ba9565b60405180910390fd5b80600c9080519060200190611ea4929190613300565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f446121ac565b73ffffffffffffffffffffffffffffffffffffffff16611f62611993565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613ba9565b60405180910390fd5b8060129080519060200190611fce929190613300565b5050565b611fda6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611ff8611993565b73ffffffffffffffffffffffffffffffffffffffff161461204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613ba9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b5906145ec565b60405180910390fd5b6120c781612631565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a557506121a482612ab3565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229383611713565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e4826121b4565b612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a9061467e565b60405180910390fd5b600061232e83611713565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239d57508373ffffffffffffffffffffffffffffffffffffffff1661238584610b7d565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ae57506123ad8185611ea8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123d782611713565b73ffffffffffffffffffffffffffffffffffffffff161461242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490614710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906147a2565b60405180910390fd5b6124a8838383612b1d565b6124b3600082612220565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250391906147c2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255a9190613f9f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61262d828260405180602001604052806000815250612c31565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90614842565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128579190613457565b60405180910390a3505050565b61286f8484846123b7565b61287b84848484612c8c565b6128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906148d4565b60405180910390fd5b50505050565b6060600b80546128cf90613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90613bf8565b80156129485780601f1061291d57610100808354040283529160200191612948565b820191906000526020600020905b81548152906001019060200180831161292b57829003601f168201915b5050505050905090565b6060600082141561299a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aae565b600082905060005b600082146129cc5780806129b5906141b9565b915050600a826129c59190614923565b91506129a2565b60008167ffffffffffffffff8111156129e8576129e7613845565b5b6040519080825280601f01601f191660200182016040528015612a1a5781602001600182028036833780820191505090505b5090505b60008514612aa757600182612a3391906147c2565b9150600a85612a429190614954565b6030612a4e9190613f9f565b60f81b818381518110612a6457612a63614202565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa09190614923565b9450612a1e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b28838383612e14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6b57612b6681612e19565b612baa565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ba957612ba88382612e62565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bed57612be881612fcf565b612c2c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2b57612c2a82826130a0565b5b5b505050565b612c3b838361311f565b612c486000848484612c8c565b612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906148d4565b60405180910390fd5b505050565b6000612cad8473ffffffffffffffffffffffffffffffffffffffff166132ed565b15612e07578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cd66121ac565b8786866040518563ffffffff1660e01b8152600401612cf894939291906149da565b6020604051808303816000875af1925050508015612d3457506040513d601f19601f82011682018060405250810190612d319190614a3b565b60015b612db7573d8060008114612d64576040519150601f19603f3d011682016040523d82523d6000602084013e612d69565b606091505b50600081511415612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906148d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e0c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e6f84611853565b612e7991906147c2565b9050600060076000848152602001908152602001600020549050818114612f5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fe391906147c2565b905060006009600084815260200190815260200160002054905060006008838154811061301357613012614202565b5b90600052602060002001549050806008838154811061303557613034614202565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061308457613083614a68565b5b6001900381819060005260206000200160009055905550505050565b60006130ab83611853565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318690614ae3565b60405180910390fd5b613198816121b4565b156131d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cf90614b4f565b60405180910390fd5b6131e460008383612b1d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132349190613f9f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461330c90613bf8565b90600052602060002090601f01602090048101928261332e5760008555613375565b82601f1061334757805160ff1916838001178555613375565b82800160010185558215613375579182015b82811115613374578251825591602001919060010190613359565b5b5090506133829190613386565b5090565b5b8082111561339f576000816000905550600101613387565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133ec816133b7565b81146133f757600080fd5b50565b600081359050613409816133e3565b92915050565b600060208284031215613425576134246133ad565b5b6000613433848285016133fa565b91505092915050565b60008115159050919050565b6134518161343c565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b8161343c565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36133ad565b5b60006134c284828501613489565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135055780820151818401526020810190506134ea565b83811115613514576000848401525b50505050565b6000601f19601f8301169050919050565b6000613536826134cb565b61354081856134d6565b93506135508185602086016134e7565b6135598161351a565b840191505092915050565b6000602082019050818103600083015261357e818461352b565b905092915050565b6000819050919050565b61359981613586565b81146135a457600080fd5b50565b6000813590506135b681613590565b92915050565b6000602082840312156135d2576135d16133ad565b5b60006135e0848285016135a7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613614826135e9565b9050919050565b61362481613609565b82525050565b600060208201905061363f600083018461361b565b92915050565b61364e81613609565b811461365957600080fd5b50565b60008135905061366b81613645565b92915050565b60008060408385031215613688576136876133ad565b5b60006136968582860161365c565b92505060206136a7858286016135a7565b9150509250929050565b6136ba81613586565b82525050565b60006020820190506136d560008301846136b1565b92915050565b6000806000606084860312156136f4576136f36133ad565b5b60006137028682870161365c565b93505060206137138682870161365c565b9250506040613724868287016135a7565b9150509250925092565b600060208284031215613744576137436133ad565b5b60006137528482850161365c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61379081613586565b82525050565b60006137a28383613787565b60208301905092915050565b6000602082019050919050565b60006137c68261375b565b6137d08185613766565b93506137db83613777565b8060005b8381101561380c5781516137f38882613796565b97506137fe836137ae565b9250506001810190506137df565b5085935050505092915050565b6000602082019050818103600083015261383381846137bb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61387d8261351a565b810181811067ffffffffffffffff8211171561389c5761389b613845565b5b80604052505050565b60006138af6133a3565b90506138bb8282613874565b919050565b600067ffffffffffffffff8211156138db576138da613845565b5b6138e48261351a565b9050602081019050919050565b82818337600083830152505050565b600061391361390e846138c0565b6138a5565b90508281526020810184848401111561392f5761392e613840565b5b61393a8482856138f1565b509392505050565b600082601f8301126139575761395661383b565b5b8135613967848260208601613900565b91505092915050565b600060208284031215613986576139856133ad565b5b600082013567ffffffffffffffff8111156139a4576139a36133b2565b5b6139b084828501613942565b91505092915050565b600080604083850312156139d0576139cf6133ad565b5b60006139de8582860161365c565b92505060206139ef85828601613489565b9150509250929050565b600067ffffffffffffffff821115613a1457613a13613845565b5b613a1d8261351a565b9050602081019050919050565b6000613a3d613a38846139f9565b6138a5565b905082815260208101848484011115613a5957613a58613840565b5b613a648482856138f1565b509392505050565b600082601f830112613a8157613a8061383b565b5b8135613a91848260208601613a2a565b91505092915050565b60008060008060808587031215613ab457613ab36133ad565b5b6000613ac28782880161365c565b9450506020613ad38782880161365c565b9350506040613ae4878288016135a7565b925050606085013567ffffffffffffffff811115613b0557613b046133b2565b5b613b1187828801613a6c565b91505092959194509250565b60008060408385031215613b3457613b336133ad565b5b6000613b428582860161365c565b9250506020613b538582860161365c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b936020836134d6565b9150613b9e82613b5d565b602082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1057607f821691505b60208210811415613c2457613c23613bc9565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c86602c836134d6565b9150613c9182613c2a565b604082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d186021836134d6565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613daa6038836134d6565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e3c6031836134d6565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ece602b836134d6565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b6000613f3a601e836134d6565b9150613f4582613f04565b602082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613faa82613586565b9150613fb583613586565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fea57613fe9613f70565b5b828201905092915050565b7f63616e6e6f74206d696e74206d6f7265207468616e206c696d69740000000000600082015250565b600061402b601b836134d6565b915061403682613ff5565b602082019050919050565b6000602082019050818103600083015261405a8161401e565b9050919050565b7f6f6e6c792077686974656c697374206164647265737365732063616e206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006140bd6021836134d6565b91506140c882614061565b604082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b60006140fe82613586565b915061410983613586565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414257614141613f70565b5b828202905092915050565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b60006141836010836134d6565b915061418e8261414d565b602082019050919050565b600060208201905081810360008301526141b281614176565b9050919050565b60006141c482613586565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141f7576141f6613f70565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061428d602c836134d6565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061431f6029836134d6565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143b1602a836134d6565b91506143bc82614355565b604082019050919050565b600060208201905081810360008301526143e0816143a4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614443602f836134d6565b915061444e826143e7565b604082019050919050565b6000602082019050818103600083015261447281614436565b9050919050565b600081905092915050565b600061448f826134cb565b6144998185614479565b93506144a98185602086016134e7565b80840191505092915050565b60008190508160005260206000209050919050565b600081546144d781613bf8565b6144e18186614479565b945060018216600081146144fc576001811461450d57614540565b60ff19831686528186019350614540565b614516856144b5565b60005b8381101561453857815481890152600182019150602081019050614519565b838801955050505b50505092915050565b60006145558286614484565b91506145618285614484565b915061456d82846144ca565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145d66026836134d6565b91506145e18261457a565b604082019050919050565b60006020820190508181036000830152614605816145c9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614668602c836134d6565b91506146738261460c565b604082019050919050565b600060208201905081810360008301526146978161465b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006146fa6029836134d6565b91506147058261469e565b604082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061478c6024836134d6565b915061479782614730565b604082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b60006147cd82613586565b91506147d883613586565b9250828210156147eb576147ea613f70565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061482c6019836134d6565b9150614837826147f6565b602082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148be6032836134d6565b91506148c982614862565b604082019050919050565b600060208201905081810360008301526148ed816148b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061492e82613586565b915061493983613586565b925082614949576149486148f4565b5b828204905092915050565b600061495f82613586565b915061496a83613586565b92508261497a576149796148f4565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149ac82614985565b6149b68185614990565b93506149c68185602086016134e7565b6149cf8161351a565b840191505092915050565b60006080820190506149ef600083018761361b565b6149fc602083018661361b565b614a0960408301856136b1565b8181036060830152614a1b81846149a1565b905095945050505050565b600081519050614a35816133e3565b92915050565b600060208284031215614a5157614a506133ad565b5b6000614a5f84828501614a26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614acd6020836134d6565b9150614ad882614a97565b602082019050919050565b60006020820190508181036000830152614afc81614ac0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b39601c836134d6565b9150614b4482614b03565b602082019050919050565b60006020820190508181036000830152614b6881614b2c565b905091905056fea2646970667358221220bc432822459dedfac0d74f4906b5afaf5822d71d61ba588c42b82a11a1e735dd64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001850726976617465204a65742050796a616d6120506172747900000000000000000000000000000000000000000000000000000000000000000000000000000004504a50500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d567a4d745675667262556b7a7a44473234754c7a7239576543323367516131483833734d735131326a636f6d0000000000000000000000
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80635c975abb11610144578063af237d7b116100b6578063d5abeb011161007a578063d5abeb01146108b8578063d936547e146108e3578063da3ef23f14610920578063e985e9c514610949578063f2c4ce1e14610986578063f2fde38b146109af5761025c565b8063af237d7b146107d1578063b88d4fde146107fc578063c668286214610825578063c87b56dd14610850578063cc24b2111461088d5761025c565b80638da5cb5b116101085780638da5cb5b146106e757806395d89b41146107125780639f182cd11461073d578063a22cb46514610768578063a43fc97214610791578063a475b5dd146107ba5761025c565b80635c975abb146106005780636352211e1461062b5780636c0360eb1461066857806370a0823114610693578063715018a6146106d05761025c565b80632f745c59116101dd57806342842e0e116101a157806342842e0e146104e0578063438b6300146105095780634a4c560d146105465780634f6ccce71461056f57806351830227146105ac57806355f804b3146105d75761025c565b80632f745c591461042b57806330a5ce931461046857806330cc7ae0146104915780633ccfd60b146104ba57806340c10f19146104c45761025c565b8063095ea7b311610224578063095ea7b31461035a57806313faede61461038357806318160ddd146103ae5780631dd02b4b146103d957806323b872dd146104025761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c7578063081812fc146102f2578063081c8c441461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061340f565b6109d8565b6040516102959190613457565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061349e565b610a52565b005b3480156102d357600080fd5b506102dc610aeb565b6040516102e99190613564565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906135bc565b610b7d565b604051610326919061362a565b60405180910390f35b34801561033b57600080fd5b50610344610c02565b6040516103519190613564565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613671565b610c90565b005b34801561038f57600080fd5b50610398610da8565b6040516103a591906136c0565b60405180910390f35b3480156103ba57600080fd5b506103c3610dae565b6040516103d091906136c0565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb919061349e565b610dbb565b005b34801561040e57600080fd5b50610429600480360381019061042491906136db565b610e54565b005b34801561043757600080fd5b50610452600480360381019061044d9190613671565b610eb4565b60405161045f91906136c0565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906135bc565b610f59565b005b34801561049d57600080fd5b506104b860048036038101906104b3919061372e565b610fdf565b005b6104c26110b6565b005b6104de60048036038101906104d99190613671565b6111cb565b005b3480156104ec57600080fd5b50610507600480360381019061050291906136db565b611441565b005b34801561051557600080fd5b50610530600480360381019061052b919061372e565b611461565b60405161053d9190613819565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061372e565b61150f565b005b34801561057b57600080fd5b50610596600480360381019061059191906135bc565b6115e6565b6040516105a391906136c0565b60405180910390f35b3480156105b857600080fd5b506105c1611657565b6040516105ce9190613457565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f99190613970565b61166a565b005b34801561060c57600080fd5b50610615611700565b6040516106229190613457565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906135bc565b611713565b60405161065f919061362a565b60405180910390f35b34801561067457600080fd5b5061067d6117c5565b60405161068a9190613564565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b5919061372e565b611853565b6040516106c791906136c0565b60405180910390f35b3480156106dc57600080fd5b506106e561190b565b005b3480156106f357600080fd5b506106fc611993565b604051610709919061362a565b60405180910390f35b34801561071e57600080fd5b506107276119bd565b6040516107349190613564565b60405180910390f35b34801561074957600080fd5b50610752611a4f565b60405161075f9190613457565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a91906139b9565b611a62565b005b34801561079d57600080fd5b506107b860048036038101906107b391906135bc565b611a78565b005b3480156107c657600080fd5b506107cf611afe565b005b3480156107dd57600080fd5b506107e6611b97565b6040516107f391906136c0565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613a9a565b611b9d565b005b34801561083157600080fd5b5061083a611bff565b6040516108479190613564565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906135bc565b611c8d565b6040516108849190613564565b60405180910390f35b34801561089957600080fd5b506108a2611de6565b6040516108af91906136c0565b60405180910390f35b3480156108c457600080fd5b506108cd611dec565b6040516108da91906136c0565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061372e565b611df2565b6040516109179190613457565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613970565b611e12565b005b34801561095557600080fd5b50610970600480360381019061096b9190613b1d565b611ea8565b60405161097d9190613457565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613970565b611f3c565b005b3480156109bb57600080fd5b506109d660048036038101906109d1919061372e565b611fd2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4b5750610a4a826120ca565b5b9050919050565b610a5a6121ac565b73ffffffffffffffffffffffffffffffffffffffff16610a78611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590613ba9565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610afa90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2690613bf8565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905090565b6000610b88826121b4565b610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe90613c9c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610c0f90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3b90613bf8565b8015610c885780601f10610c5d57610100808354040283529160200191610c88565b820191906000526020600020905b815481529060010190602001808311610c6b57829003601f168201915b505050505081565b6000610c9b82611713565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613d2e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2b6121ac565b73ffffffffffffffffffffffffffffffffffffffff161480610d5a5750610d5981610d546121ac565b611ea8565b5b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613dc0565b60405180910390fd5b610da38383612220565b505050565b600d5481565b6000600880549050905090565b610dc36121ac565b73ffffffffffffffffffffffffffffffffffffffff16610de1611993565b73ffffffffffffffffffffffffffffffffffffffff1614610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613ba9565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b610e65610e5f6121ac565b826122d9565b610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90613e52565b60405180910390fd5b610eaf8383836123b7565b505050565b6000610ebf83611853565b8210610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613ee4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f616121ac565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611993565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613ba9565b60405180910390fd5b80600f8190555050565b610fe76121ac565b73ffffffffffffffffffffffffffffffffffffffff16611005611993565b73ffffffffffffffffffffffffffffffffffffffff161461105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290613ba9565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110be6121ac565b73ffffffffffffffffffffffffffffffffffffffff166110dc611993565b73ffffffffffffffffffffffffffffffffffffffff1614611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990613ba9565b60405180910390fd5b60004790506000811161117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117190613f50565b60405180910390fd5b611182611993565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111c7573d6000803e3d6000fd5b5050565b60006111d5610dae565b9050601160009054906101000a900460ff16156111f157600080fd5b600082116111fe57600080fd5b600e54828261120d9190613f9f565b111561121857600080fd5b611220611993565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140557600061125d84611853565b905060011515601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561130d5782816112c49190613f9f565b600f541015611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90614041565b60405180910390fd5b6113b4565b60001515601160029054906101000a900460ff16151514611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a906140d3565b60405180910390fd5b828161136f9190613f9f565b60105410156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90614041565b60405180910390fd5b5b82600d546113c291906140f3565b3414611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90614199565b60405180910390fd5b505b6000600190505b82811161143b576114288482846114239190613f9f565b612613565b8080611433906141b9565b91505061140c565b50505050565b61145c83838360405180602001604052806000815250611b9d565b505050565b6060600061146e83611853565b905060008167ffffffffffffffff81111561148c5761148b613845565b5b6040519080825280602002602001820160405280156114ba5781602001602082028036833780820191505090505b50905060005b82811015611504576114d28582610eb4565b8282815181106114e5576114e4614202565b5b60200260200101818152505080806114fc906141b9565b9150506114c0565b508092505050919050565b6115176121ac565b73ffffffffffffffffffffffffffffffffffffffff16611535611993565b73ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613ba9565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006115f0610dae565b8210611631576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611628906142a3565b60405180910390fd5b6008828154811061164557611644614202565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6116726121ac565b73ffffffffffffffffffffffffffffffffffffffff16611690611993565b73ffffffffffffffffffffffffffffffffffffffff16146116e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dd90613ba9565b60405180910390fd5b80600b90805190602001906116fc929190613300565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614335565b60405180910390fd5b80915050919050565b600b80546117d290613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546117fe90613bf8565b801561184b5780601f106118205761010080835404028352916020019161184b565b820191906000526020600020905b81548152906001019060200180831161182e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906143c7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119136121ac565b73ffffffffffffffffffffffffffffffffffffffff16611931611993565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90613ba9565b60405180910390fd5b6119916000612631565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119cc90613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119f890613bf8565b8015611a455780601f10611a1a57610100808354040283529160200191611a45565b820191906000526020600020905b815481529060010190602001808311611a2857829003601f168201915b5050505050905090565b601160029054906101000a900460ff1681565b611a74611a6d6121ac565b83836126f7565b5050565b611a806121ac565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611993565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613ba9565b60405180910390fd5b8060108190555050565b611b066121ac565b73ffffffffffffffffffffffffffffffffffffffff16611b24611993565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613ba9565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b60105481565b611bae611ba86121ac565b836122d9565b611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613e52565b60405180910390fd5b611bf984848484612864565b50505050565b600c8054611c0c90613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3890613bf8565b8015611c855780601f10611c5a57610100808354040283529160200191611c85565b820191906000526020600020905b815481529060010190602001808311611c6857829003601f168201915b505050505081565b6060611c98826121b4565b611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614459565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611d855760128054611d0090613bf8565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2c90613bf8565b8015611d795780601f10611d4e57610100808354040283529160200191611d79565b820191906000526020600020905b815481529060010190602001808311611d5c57829003601f168201915b50505050509050611de1565b6000611d8f6128c0565b90506000815111611daf5760405180602001604052806000815250611ddd565b80611db984612952565b600c604051602001611dcd93929190614549565b6040516020818303038152906040525b9150505b919050565b600f5481565b600e5481565b60136020528060005260406000206000915054906101000a900460ff1681565b611e1a6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611e38611993565b73ffffffffffffffffffffffffffffffffffffffff1614611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8590613ba9565b60405180910390fd5b80600c9080519060200190611ea4929190613300565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f446121ac565b73ffffffffffffffffffffffffffffffffffffffff16611f62611993565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613ba9565b60405180910390fd5b8060129080519060200190611fce929190613300565b5050565b611fda6121ac565b73ffffffffffffffffffffffffffffffffffffffff16611ff8611993565b73ffffffffffffffffffffffffffffffffffffffff161461204e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204590613ba9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b5906145ec565b60405180910390fd5b6120c781612631565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a557506121a482612ab3565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229383611713565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e4826121b4565b612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a9061467e565b60405180910390fd5b600061232e83611713565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239d57508373ffffffffffffffffffffffffffffffffffffffff1661238584610b7d565b73ffffffffffffffffffffffffffffffffffffffff16145b806123ae57506123ad8185611ea8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123d782611713565b73ffffffffffffffffffffffffffffffffffffffff161461242d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242490614710565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612494906147a2565b60405180910390fd5b6124a8838383612b1d565b6124b3600082612220565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250391906147c2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255a9190613f9f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61262d828260405180602001604052806000815250612c31565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90614842565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128579190613457565b60405180910390a3505050565b61286f8484846123b7565b61287b84848484612c8c565b6128ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b1906148d4565b60405180910390fd5b50505050565b6060600b80546128cf90613bf8565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90613bf8565b80156129485780601f1061291d57610100808354040283529160200191612948565b820191906000526020600020905b81548152906001019060200180831161292b57829003601f168201915b5050505050905090565b6060600082141561299a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aae565b600082905060005b600082146129cc5780806129b5906141b9565b915050600a826129c59190614923565b91506129a2565b60008167ffffffffffffffff8111156129e8576129e7613845565b5b6040519080825280601f01601f191660200182016040528015612a1a5781602001600182028036833780820191505090505b5090505b60008514612aa757600182612a3391906147c2565b9150600a85612a429190614954565b6030612a4e9190613f9f565b60f81b818381518110612a6457612a63614202565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa09190614923565b9450612a1e565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b28838383612e14565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6b57612b6681612e19565b612baa565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ba957612ba88382612e62565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bed57612be881612fcf565b612c2c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2b57612c2a82826130a0565b5b5b505050565b612c3b838361311f565b612c486000848484612c8c565b612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906148d4565b60405180910390fd5b505050565b6000612cad8473ffffffffffffffffffffffffffffffffffffffff166132ed565b15612e07578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cd66121ac565b8786866040518563ffffffff1660e01b8152600401612cf894939291906149da565b6020604051808303816000875af1925050508015612d3457506040513d601f19601f82011682018060405250810190612d319190614a3b565b60015b612db7573d8060008114612d64576040519150601f19603f3d011682016040523d82523d6000602084013e612d69565b606091505b50600081511415612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906148d4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e0c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e6f84611853565b612e7991906147c2565b9050600060076000848152602001908152602001600020549050818114612f5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fe391906147c2565b905060006009600084815260200190815260200160002054905060006008838154811061301357613012614202565b5b90600052602060002001549050806008838154811061303557613034614202565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061308457613083614a68565b5b6001900381819060005260206000200160009055905550505050565b60006130ab83611853565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561318f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318690614ae3565b60405180910390fd5b613198816121b4565b156131d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cf90614b4f565b60405180910390fd5b6131e460008383612b1d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132349190613f9f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461330c90613bf8565b90600052602060002090601f01602090048101928261332e5760008555613375565b82601f1061334757805160ff1916838001178555613375565b82800160010185558215613375579182015b82811115613374578251825591602001919060010190613359565b5b5090506133829190613386565b5090565b5b8082111561339f576000816000905550600101613387565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133ec816133b7565b81146133f757600080fd5b50565b600081359050613409816133e3565b92915050565b600060208284031215613425576134246133ad565b5b6000613433848285016133fa565b91505092915050565b60008115159050919050565b6134518161343c565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b8161343c565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36133ad565b5b60006134c284828501613489565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135055780820151818401526020810190506134ea565b83811115613514576000848401525b50505050565b6000601f19601f8301169050919050565b6000613536826134cb565b61354081856134d6565b93506135508185602086016134e7565b6135598161351a565b840191505092915050565b6000602082019050818103600083015261357e818461352b565b905092915050565b6000819050919050565b61359981613586565b81146135a457600080fd5b50565b6000813590506135b681613590565b92915050565b6000602082840312156135d2576135d16133ad565b5b60006135e0848285016135a7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613614826135e9565b9050919050565b61362481613609565b82525050565b600060208201905061363f600083018461361b565b92915050565b61364e81613609565b811461365957600080fd5b50565b60008135905061366b81613645565b92915050565b60008060408385031215613688576136876133ad565b5b60006136968582860161365c565b92505060206136a7858286016135a7565b9150509250929050565b6136ba81613586565b82525050565b60006020820190506136d560008301846136b1565b92915050565b6000806000606084860312156136f4576136f36133ad565b5b60006137028682870161365c565b93505060206137138682870161365c565b9250506040613724868287016135a7565b9150509250925092565b600060208284031215613744576137436133ad565b5b60006137528482850161365c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61379081613586565b82525050565b60006137a28383613787565b60208301905092915050565b6000602082019050919050565b60006137c68261375b565b6137d08185613766565b93506137db83613777565b8060005b8381101561380c5781516137f38882613796565b97506137fe836137ae565b9250506001810190506137df565b5085935050505092915050565b6000602082019050818103600083015261383381846137bb565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61387d8261351a565b810181811067ffffffffffffffff8211171561389c5761389b613845565b5b80604052505050565b60006138af6133a3565b90506138bb8282613874565b919050565b600067ffffffffffffffff8211156138db576138da613845565b5b6138e48261351a565b9050602081019050919050565b82818337600083830152505050565b600061391361390e846138c0565b6138a5565b90508281526020810184848401111561392f5761392e613840565b5b61393a8482856138f1565b509392505050565b600082601f8301126139575761395661383b565b5b8135613967848260208601613900565b91505092915050565b600060208284031215613986576139856133ad565b5b600082013567ffffffffffffffff8111156139a4576139a36133b2565b5b6139b084828501613942565b91505092915050565b600080604083850312156139d0576139cf6133ad565b5b60006139de8582860161365c565b92505060206139ef85828601613489565b9150509250929050565b600067ffffffffffffffff821115613a1457613a13613845565b5b613a1d8261351a565b9050602081019050919050565b6000613a3d613a38846139f9565b6138a5565b905082815260208101848484011115613a5957613a58613840565b5b613a648482856138f1565b509392505050565b600082601f830112613a8157613a8061383b565b5b8135613a91848260208601613a2a565b91505092915050565b60008060008060808587031215613ab457613ab36133ad565b5b6000613ac28782880161365c565b9450506020613ad38782880161365c565b9350506040613ae4878288016135a7565b925050606085013567ffffffffffffffff811115613b0557613b046133b2565b5b613b1187828801613a6c565b91505092959194509250565b60008060408385031215613b3457613b336133ad565b5b6000613b428582860161365c565b9250506020613b538582860161365c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b936020836134d6565b9150613b9e82613b5d565b602082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1057607f821691505b60208210811415613c2457613c23613bc9565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c86602c836134d6565b9150613c9182613c2a565b604082019050919050565b60006020820190508181036000830152613cb581613c79565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d186021836134d6565b9150613d2382613cbc565b604082019050919050565b60006020820190508181036000830152613d4781613d0b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613daa6038836134d6565b9150613db582613d4e565b604082019050919050565b60006020820190508181036000830152613dd981613d9d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e3c6031836134d6565b9150613e4782613de0565b604082019050919050565b60006020820190508181036000830152613e6b81613e2f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ece602b836134d6565b9150613ed982613e72565b604082019050919050565b60006020820190508181036000830152613efd81613ec1565b9050919050565b7f45746865722062616c616e6365206973203020696e20636f6e74726163740000600082015250565b6000613f3a601e836134d6565b9150613f4582613f04565b602082019050919050565b60006020820190508181036000830152613f6981613f2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613faa82613586565b9150613fb583613586565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fea57613fe9613f70565b5b828201905092915050565b7f63616e6e6f74206d696e74206d6f7265207468616e206c696d69740000000000600082015250565b600061402b601b836134d6565b915061403682613ff5565b602082019050919050565b6000602082019050818103600083015261405a8161401e565b9050919050565b7f6f6e6c792077686974656c697374206164647265737365732063616e206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006140bd6021836134d6565b91506140c882614061565b604082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b60006140fe82613586565b915061410983613586565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414257614141613f70565b5b828202905092915050565b7f706179207072696365206f66206e667400000000000000000000000000000000600082015250565b60006141836010836134d6565b915061418e8261414d565b602082019050919050565b600060208201905081810360008301526141b281614176565b9050919050565b60006141c482613586565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141f7576141f6613f70565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061428d602c836134d6565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061431f6029836134d6565b915061432a826142c3565b604082019050919050565b6000602082019050818103600083015261434e81614312565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006143b1602a836134d6565b91506143bc82614355565b604082019050919050565b600060208201905081810360008301526143e0816143a4565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614443602f836134d6565b915061444e826143e7565b604082019050919050565b6000602082019050818103600083015261447281614436565b9050919050565b600081905092915050565b600061448f826134cb565b6144998185614479565b93506144a98185602086016134e7565b80840191505092915050565b60008190508160005260206000209050919050565b600081546144d781613bf8565b6144e18186614479565b945060018216600081146144fc576001811461450d57614540565b60ff19831686528186019350614540565b614516856144b5565b60005b8381101561453857815481890152600182019150602081019050614519565b838801955050505b50505092915050565b60006145558286614484565b91506145618285614484565b915061456d82846144ca565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145d66026836134d6565b91506145e18261457a565b604082019050919050565b60006020820190508181036000830152614605816145c9565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614668602c836134d6565b91506146738261460c565b604082019050919050565b600060208201905081810360008301526146978161465b565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006146fa6029836134d6565b91506147058261469e565b604082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061478c6024836134d6565b915061479782614730565b604082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b60006147cd82613586565b91506147d883613586565b9250828210156147eb576147ea613f70565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061482c6019836134d6565b9150614837826147f6565b602082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148be6032836134d6565b91506148c982614862565b604082019050919050565b600060208201905081810360008301526148ed816148b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061492e82613586565b915061493983613586565b925082614949576149486148f4565b5b828204905092915050565b600061495f82613586565b915061496a83613586565b92508261497a576149796148f4565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149ac82614985565b6149b68185614990565b93506149c68185602086016134e7565b6149cf8161351a565b840191505092915050565b60006080820190506149ef600083018761361b565b6149fc602083018661361b565b614a0960408301856136b1565b8181036060830152614a1b81846149a1565b905095945050505050565b600081519050614a35816133e3565b92915050565b600060208284031215614a5157614a506133ad565b5b6000614a5f84828501614a26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614acd6020836134d6565b9150614ad882614a97565b602082019050919050565b60006020820190508181036000830152614afc81614ac0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b39601c836134d6565b9150614b4482614b03565b602082019050919050565b60006020820190508181036000830152614b6881614b2c565b905091905056fea2646970667358221220bc432822459dedfac0d74f4906b5afaf5822d71d61ba588c42b82a11a1e735dd64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001850726976617465204a65742050796a616d6120506172747900000000000000000000000000000000000000000000000000000000000000000000000000000004504a50500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d567a4d745675667262556b7a7a44473234754c7a7239576543323367516131483833734d735131326a636f6d0000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Private Jet Pyjama Party
Arg [1] : _symbol (string): PJPP
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string): ipfs://QmVzMtVufrbUkzzDG24uLzr9WeC23gQa1H83sMsQ12jcom
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [5] : 50726976617465204a65742050796a616d612050617274790000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 504a505000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [10] : 697066733a2f2f516d567a4d745675667262556b7a7a44473234754c7a723957
Arg [11] : 6543323367516131483833734d735131326a636f6d0000000000000000000000
Deployed Bytecode Sourcemap
44480:3762:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47658:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44887:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44626:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47737:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47436:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47934:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48040:199;;;:::i;:::-;;45333:807;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46146:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47834:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44817:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47204:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44786:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44558:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44850:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47544:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47003:65;;;;;;;;;;;;;:::i;:::-;;44741:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44584:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46500:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44699:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44663:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44920:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47308:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47078:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;47658:73::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47719:6:::1;47710;;:15;;;;;;;;;;;;;;;;;;47658:73:::0;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;44887:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;44626:32::-;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;47737:91::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47816:6:::1;47800:13;;:22;;;;;;;;;;;;;;;;;;47737:91:::0;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;47436:102::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47526:6:::1;47506:17;:26;;;;47436:102:::0;:::o;47934:100::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48023:5:::1;48002:11;:18;48014:5;48002:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47934:100:::0;:::o;48040:199::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48091:11:::1;48105:21;48091:35;;48148:1;48141:6;:8;48133:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48207:7;:5;:7::i;:::-;48191:34;;:42;48226:6;48191:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48084:155;48040:199::o:0;45333:807::-;45403:14;45420:13;:11;:13::i;:::-;45403:30;;45449:6;;;;;;;;;;;45448:7;45440:16;;;;;;45485:1;45471:11;:15;45463:24;;;;;;45526:9;;45511:11;45502:6;:20;;;;:::i;:::-;:33;;45494:42;;;;;;45563:7;:5;:7::i;:::-;45549:21;;:10;:21;;;45545:498;;45593:14;45610;45620:3;45610:9;:14::i;:::-;45593:31;;45658:4;45638:24;;:11;:16;45650:3;45638:16;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;45635:329;;;45715:11;45708:6;:18;;;;:::i;:::-;45687:17;;:39;;45679:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;45635:329;;;45812:5;45797:20;;:13;;;;;;;;;;;:20;;;45789:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45909:11;45902:6;:18;;;;:::i;:::-;45878:20;;:42;;45870:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45635:329;46002:11;45995:4;;:18;;;;:::i;:::-;45982:9;:31;45974:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45572:471;45545:498;46054:9;46066:1;46054:13;;46049:86;46074:11;46069:1;:16;46049:86;;46101:26;46111:3;46125:1;46116:6;:10;;;;:::i;:::-;46101:9;:26::i;:::-;46087:3;;;;;:::i;:::-;;;;46049:86;;;;45396:744;45333:807;;:::o;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;46146:348::-;46221:16;46249:23;46275:17;46285:6;46275:9;:17::i;:::-;46249:43;;46299:25;46341:15;46327:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46299:58;;46369:9;46364:103;46384:15;46380:1;:19;46364:103;;;46429:30;46449:6;46457:1;46429:19;:30::i;:::-;46415:8;46424:1;46415:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46401:3;;;;;:::i;:::-;;;;46364:103;;;;46480:8;46473:15;;;;46146:348;;;:::o;47834:93::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47917:4:::1;47896:11;:18;47908:5;47896:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;47834:93:::0;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;44817:28::-;;;;;;;;;;;;;:::o;47204:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47285:11:::1;47275:7;:21;;;;;;;;;;;;:::i;:::-;;47204:98:::0;:::o;44786:26::-;;;;;;;;;;;;;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;44558:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;44850:32::-;;;;;;;;;;;;;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;47544:108::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47640:6:::1;47617:20;:29;;;;47544:108:::0;:::o;47003:65::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47058:4:::1;47047:8;;:15;;;;;;;;;;;;;;;;;;47003:65::o:0;44741:40::-;;;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;44584:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46500:497::-;46598:13;46639:16;46647:7;46639;:16::i;:::-;46623:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46748:5;46736:17;;:8;;;;;;;;;;;:17;;;46733:62;;;46773:14;46766:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46733:62;46803:28;46834:10;:8;:10::i;:::-;46803:41;;46889:1;46864:14;46858:28;:32;:133;;;;;;;;;;;;;;;;;46926:14;46942:18;:7;:16;:18::i;:::-;46962:13;46909:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46858:133;46851:140;;;46500:497;;;;:::o;44699:37::-;;;;:::o;44663:31::-;;;;:::o;44920:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;47308:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47407:17:::1;47391:13;:33;;;;;;;;;;;;:::i;:::-;;47308:122:::0;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;47078:120::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47177:15:::1;47160:14;:32;;;;;;;;;;;;:::i;:::-;;47078:120:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;45225:102::-;45285:13;45314:7;45307:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45225:102;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;37122:126::-;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:231::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:14;16164:2;16156:6;16152:15;16145:39;15960:231;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:419::-;16735:4;16773:2;16762:9;16758:18;16750:26;;16822:9;16816:4;16812:20;16808:1;16797:9;16793:17;16786:47;16850:131;16976:4;16850:131;:::i;:::-;16842:139;;16569:419;;;:::o;16994:220::-;17134:34;17130:1;17122:6;17118:14;17111:58;17203:3;17198:2;17190:6;17186:15;17179:28;16994:220;:::o;17220:366::-;17362:3;17383:67;17447:2;17442:3;17383:67;:::i;:::-;17376:74;;17459:93;17548:3;17459:93;:::i;:::-;17577:2;17572:3;17568:12;17561:19;;17220:366;;;:::o;17592:419::-;17758:4;17796:2;17785:9;17781:18;17773:26;;17845:9;17839:4;17835:20;17831:1;17820:9;17816:17;17809:47;17873:131;17999:4;17873:131;:::i;:::-;17865:139;;17592:419;;;:::o;18017:243::-;18157:34;18153:1;18145:6;18141:14;18134:58;18226:26;18221:2;18213:6;18209:15;18202:51;18017:243;:::o;18266:366::-;18408:3;18429:67;18493:2;18488:3;18429:67;:::i;:::-;18422:74;;18505:93;18594:3;18505:93;:::i;:::-;18623:2;18618:3;18614:12;18607:19;;18266:366;;;:::o;18638:419::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:236::-;19203:34;19199:1;19191:6;19187:14;19180:58;19272:19;19267:2;19259:6;19255:15;19248:44;19063:236;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:230::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:13;20306:2;20298:6;20294:15;20287:38;20102:230;:::o;20338:366::-;20480:3;20501:67;20565:2;20560:3;20501:67;:::i;:::-;20494:74;;20577:93;20666:3;20577:93;:::i;:::-;20695:2;20690:3;20686:12;20679:19;;20338:366;;;:::o;20710:419::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:180::-;21275:32;21271:1;21263:6;21259:14;21252:56;21135:180;:::o;21321:366::-;21463:3;21484:67;21548:2;21543:3;21484:67;:::i;:::-;21477:74;;21560:93;21649:3;21560:93;:::i;:::-;21678:2;21673:3;21669:12;21662:19;;21321:366;;;:::o;21693:419::-;21859:4;21897:2;21886:9;21882:18;21874:26;;21946:9;21940:4;21936:20;21932:1;21921:9;21917:17;21910:47;21974:131;22100:4;21974:131;:::i;:::-;21966:139;;21693:419;;;:::o;22118:180::-;22166:77;22163:1;22156:88;22263:4;22260:1;22253:15;22287:4;22284:1;22277:15;22304:305;22344:3;22363:20;22381:1;22363:20;:::i;:::-;22358:25;;22397:20;22415:1;22397:20;:::i;:::-;22392:25;;22551:1;22483:66;22479:74;22476:1;22473:81;22470:107;;;22557:18;;:::i;:::-;22470:107;22601:1;22598;22594:9;22587:16;;22304:305;;;;:::o;22615:177::-;22755:29;22751:1;22743:6;22739:14;22732:53;22615:177;:::o;22798:366::-;22940:3;22961:67;23025:2;23020:3;22961:67;:::i;:::-;22954:74;;23037:93;23126:3;23037:93;:::i;:::-;23155:2;23150:3;23146:12;23139:19;;22798:366;;;:::o;23170:419::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:131;23577:4;23451:131;:::i;:::-;23443:139;;23170:419;;;:::o;23595:220::-;23735:34;23731:1;23723:6;23719:14;23712:58;23804:3;23799:2;23791:6;23787:15;23780:28;23595:220;:::o;23821:366::-;23963:3;23984:67;24048:2;24043:3;23984:67;:::i;:::-;23977:74;;24060:93;24149:3;24060:93;:::i;:::-;24178:2;24173:3;24169:12;24162:19;;23821:366;;;:::o;24193:419::-;24359:4;24397:2;24386:9;24382:18;24374:26;;24446:9;24440:4;24436:20;24432:1;24421:9;24417:17;24410:47;24474:131;24600:4;24474:131;:::i;:::-;24466:139;;24193:419;;;:::o;24618:348::-;24658:7;24681:20;24699:1;24681:20;:::i;:::-;24676:25;;24715:20;24733:1;24715:20;:::i;:::-;24710:25;;24903:1;24835:66;24831:74;24828:1;24825:81;24820:1;24813:9;24806:17;24802:105;24799:131;;;24910:18;;:::i;:::-;24799:131;24958:1;24955;24951:9;24940:20;;24618:348;;;;:::o;24972:166::-;25112:18;25108:1;25100:6;25096:14;25089:42;24972:166;:::o;25144:366::-;25286:3;25307:67;25371:2;25366:3;25307:67;:::i;:::-;25300:74;;25383:93;25472:3;25383:93;:::i;:::-;25501:2;25496:3;25492:12;25485:19;;25144:366;;;:::o;25516:419::-;25682:4;25720:2;25709:9;25705:18;25697:26;;25769:9;25763:4;25759:20;25755:1;25744:9;25740:17;25733:47;25797:131;25923:4;25797:131;:::i;:::-;25789:139;;25516:419;;;:::o;25941:233::-;25980:3;26003:24;26021:5;26003:24;:::i;:::-;25994:33;;26049:66;26042:5;26039:77;26036:103;;;26119:18;;:::i;:::-;26036:103;26166:1;26159:5;26155:13;26148:20;;25941:233;;;:::o;26180:180::-;26228:77;26225:1;26218:88;26325:4;26322:1;26315:15;26349:4;26346:1;26339:15;26366:231;26506:34;26502:1;26494:6;26490:14;26483:58;26575:14;26570:2;26562:6;26558:15;26551:39;26366:231;:::o;26603:366::-;26745:3;26766:67;26830:2;26825:3;26766:67;:::i;:::-;26759:74;;26842:93;26931:3;26842:93;:::i;:::-;26960:2;26955:3;26951:12;26944:19;;26603:366;;;:::o;26975:419::-;27141:4;27179:2;27168:9;27164:18;27156:26;;27228:9;27222:4;27218:20;27214:1;27203:9;27199:17;27192:47;27256:131;27382:4;27256:131;:::i;:::-;27248:139;;26975:419;;;:::o;27400:228::-;27540:34;27536:1;27528:6;27524:14;27517:58;27609:11;27604:2;27596:6;27592:15;27585:36;27400:228;:::o;27634:366::-;27776:3;27797:67;27861:2;27856:3;27797:67;:::i;:::-;27790:74;;27873:93;27962:3;27873:93;:::i;:::-;27991:2;27986:3;27982:12;27975:19;;27634:366;;;:::o;28006:419::-;28172:4;28210:2;28199:9;28195:18;28187:26;;28259:9;28253:4;28249:20;28245:1;28234:9;28230:17;28223:47;28287:131;28413:4;28287:131;:::i;:::-;28279:139;;28006:419;;;:::o;28431:229::-;28571:34;28567:1;28559:6;28555:14;28548:58;28640:12;28635:2;28627:6;28623:15;28616:37;28431:229;:::o;28666:366::-;28808:3;28829:67;28893:2;28888:3;28829:67;:::i;:::-;28822:74;;28905:93;28994:3;28905:93;:::i;:::-;29023:2;29018:3;29014:12;29007:19;;28666:366;;;:::o;29038:419::-;29204:4;29242:2;29231:9;29227:18;29219:26;;29291:9;29285:4;29281:20;29277:1;29266:9;29262:17;29255:47;29319:131;29445:4;29319:131;:::i;:::-;29311:139;;29038:419;;;:::o;29463:234::-;29603:34;29599:1;29591:6;29587:14;29580:58;29672:17;29667:2;29659:6;29655:15;29648:42;29463:234;:::o;29703:366::-;29845:3;29866:67;29930:2;29925:3;29866:67;:::i;:::-;29859:74;;29942:93;30031:3;29942:93;:::i;:::-;30060:2;30055:3;30051:12;30044:19;;29703:366;;;:::o;30075:419::-;30241:4;30279:2;30268:9;30264:18;30256:26;;30328:9;30322:4;30318:20;30314:1;30303:9;30299:17;30292:47;30356:131;30482:4;30356:131;:::i;:::-;30348:139;;30075:419;;;:::o;30500:148::-;30602:11;30639:3;30624:18;;30500:148;;;;:::o;30654:377::-;30760:3;30788:39;30821:5;30788:39;:::i;:::-;30843:89;30925:6;30920:3;30843:89;:::i;:::-;30836:96;;30941:52;30986:6;30981:3;30974:4;30967:5;30963:16;30941:52;:::i;:::-;31018:6;31013:3;31009:16;31002:23;;30764:267;30654:377;;;;:::o;31037:141::-;31086:4;31109:3;31101:11;;31132:3;31129:1;31122:14;31166:4;31163:1;31153:18;31145:26;;31037:141;;;:::o;31208:845::-;31311:3;31348:5;31342:12;31377:36;31403:9;31377:36;:::i;:::-;31429:89;31511:6;31506:3;31429:89;:::i;:::-;31422:96;;31549:1;31538:9;31534:17;31565:1;31560:137;;;;31711:1;31706:341;;;;31527:520;;31560:137;31644:4;31640:9;31629;31625:25;31620:3;31613:38;31680:6;31675:3;31671:16;31664:23;;31560:137;;31706:341;31773:38;31805:5;31773:38;:::i;:::-;31833:1;31847:154;31861:6;31858:1;31855:13;31847:154;;;31935:7;31929:14;31925:1;31920:3;31916:11;31909:35;31985:1;31976:7;31972:15;31961:26;;31883:4;31880:1;31876:12;31871:17;;31847:154;;;32030:6;32025:3;32021:16;32014:23;;31713:334;;31527:520;;31315:738;;31208:845;;;;:::o;32059:589::-;32284:3;32306:95;32397:3;32388:6;32306:95;:::i;:::-;32299:102;;32418:95;32509:3;32500:6;32418:95;:::i;:::-;32411:102;;32530:92;32618:3;32609:6;32530:92;:::i;:::-;32523:99;;32639:3;32632:10;;32059:589;;;;;;:::o;32654:225::-;32794:34;32790:1;32782:6;32778:14;32771:58;32863:8;32858:2;32850:6;32846:15;32839:33;32654:225;:::o;32885:366::-;33027:3;33048:67;33112:2;33107:3;33048:67;:::i;:::-;33041:74;;33124:93;33213:3;33124:93;:::i;:::-;33242:2;33237:3;33233:12;33226:19;;32885:366;;;:::o;33257:419::-;33423:4;33461:2;33450:9;33446:18;33438:26;;33510:9;33504:4;33500:20;33496:1;33485:9;33481:17;33474:47;33538:131;33664:4;33538:131;:::i;:::-;33530:139;;33257:419;;;:::o;33682:231::-;33822:34;33818:1;33810:6;33806:14;33799:58;33891:14;33886:2;33878:6;33874:15;33867:39;33682:231;:::o;33919:366::-;34061:3;34082:67;34146:2;34141:3;34082:67;:::i;:::-;34075:74;;34158:93;34247:3;34158:93;:::i;:::-;34276:2;34271:3;34267:12;34260:19;;33919:366;;;:::o;34291:419::-;34457:4;34495:2;34484:9;34480:18;34472:26;;34544:9;34538:4;34534:20;34530:1;34519:9;34515:17;34508:47;34572:131;34698:4;34572:131;:::i;:::-;34564:139;;34291:419;;;:::o;34716:228::-;34856:34;34852:1;34844:6;34840:14;34833:58;34925:11;34920:2;34912:6;34908:15;34901:36;34716:228;:::o;34950:366::-;35092:3;35113:67;35177:2;35172:3;35113:67;:::i;:::-;35106:74;;35189:93;35278:3;35189:93;:::i;:::-;35307:2;35302:3;35298:12;35291:19;;34950:366;;;:::o;35322:419::-;35488:4;35526:2;35515:9;35511:18;35503:26;;35575:9;35569:4;35565:20;35561:1;35550:9;35546:17;35539:47;35603:131;35729:4;35603:131;:::i;:::-;35595:139;;35322:419;;;:::o;35747:223::-;35887:34;35883:1;35875:6;35871:14;35864:58;35956:6;35951:2;35943:6;35939:15;35932:31;35747:223;:::o;35976:366::-;36118:3;36139:67;36203:2;36198:3;36139:67;:::i;:::-;36132:74;;36215:93;36304:3;36215:93;:::i;:::-;36333:2;36328:3;36324:12;36317:19;;35976:366;;;:::o;36348:419::-;36514:4;36552:2;36541:9;36537:18;36529:26;;36601:9;36595:4;36591:20;36587:1;36576:9;36572:17;36565:47;36629:131;36755:4;36629:131;:::i;:::-;36621:139;;36348:419;;;:::o;36773:191::-;36813:4;36833:20;36851:1;36833:20;:::i;:::-;36828:25;;36867:20;36885:1;36867:20;:::i;:::-;36862:25;;36906:1;36903;36900:8;36897:34;;;36911:18;;:::i;:::-;36897:34;36956:1;36953;36949:9;36941:17;;36773:191;;;;:::o;36970:175::-;37110:27;37106:1;37098:6;37094:14;37087:51;36970:175;:::o;37151:366::-;37293:3;37314:67;37378:2;37373:3;37314:67;:::i;:::-;37307:74;;37390:93;37479:3;37390:93;:::i;:::-;37508:2;37503:3;37499:12;37492:19;;37151:366;;;:::o;37523:419::-;37689:4;37727:2;37716:9;37712:18;37704:26;;37776:9;37770:4;37766:20;37762:1;37751:9;37747:17;37740:47;37804:131;37930:4;37804:131;:::i;:::-;37796:139;;37523:419;;;:::o;37948:237::-;38088:34;38084:1;38076:6;38072:14;38065:58;38157:20;38152:2;38144:6;38140:15;38133:45;37948:237;:::o;38191:366::-;38333:3;38354:67;38418:2;38413:3;38354:67;:::i;:::-;38347:74;;38430:93;38519:3;38430:93;:::i;:::-;38548:2;38543:3;38539:12;38532:19;;38191:366;;;:::o;38563:419::-;38729:4;38767:2;38756:9;38752:18;38744:26;;38816:9;38810:4;38806:20;38802:1;38791:9;38787:17;38780:47;38844:131;38970:4;38844:131;:::i;:::-;38836:139;;38563:419;;;:::o;38988:180::-;39036:77;39033:1;39026:88;39133:4;39130:1;39123:15;39157:4;39154:1;39147:15;39174:185;39214:1;39231:20;39249:1;39231:20;:::i;:::-;39226:25;;39265:20;39283:1;39265:20;:::i;:::-;39260:25;;39304:1;39294:35;;39309:18;;:::i;:::-;39294:35;39351:1;39348;39344:9;39339:14;;39174:185;;;;:::o;39365:176::-;39397:1;39414:20;39432:1;39414:20;:::i;:::-;39409:25;;39448:20;39466:1;39448:20;:::i;:::-;39443:25;;39487:1;39477:35;;39492:18;;:::i;:::-;39477:35;39533:1;39530;39526:9;39521:14;;39365:176;;;;:::o;39547:98::-;39598:6;39632:5;39626:12;39616:22;;39547:98;;;:::o;39651:168::-;39734:11;39768:6;39763:3;39756:19;39808:4;39803:3;39799:14;39784:29;;39651:168;;;;:::o;39825:360::-;39911:3;39939:38;39971:5;39939:38;:::i;:::-;39993:70;40056:6;40051:3;39993:70;:::i;:::-;39986:77;;40072:52;40117:6;40112:3;40105:4;40098:5;40094:16;40072:52;:::i;:::-;40149:29;40171:6;40149:29;:::i;:::-;40144:3;40140:39;40133:46;;39915:270;39825:360;;;;:::o;40191:640::-;40386:4;40424:3;40413:9;40409:19;40401:27;;40438:71;40506:1;40495:9;40491:17;40482:6;40438:71;:::i;:::-;40519:72;40587:2;40576:9;40572:18;40563:6;40519:72;:::i;:::-;40601;40669:2;40658:9;40654:18;40645:6;40601:72;:::i;:::-;40720:9;40714:4;40710:20;40705:2;40694:9;40690:18;40683:48;40748:76;40819:4;40810:6;40748:76;:::i;:::-;40740:84;;40191:640;;;;;;;:::o;40837:141::-;40893:5;40924:6;40918:13;40909:22;;40940:32;40966:5;40940:32;:::i;:::-;40837:141;;;;:::o;40984:349::-;41053:6;41102:2;41090:9;41081:7;41077:23;41073:32;41070:119;;;41108:79;;:::i;:::-;41070:119;41228:1;41253:63;41308:7;41299:6;41288:9;41284:22;41253:63;:::i;:::-;41243:73;;41199:127;40984:349;;;;:::o;41339:180::-;41387:77;41384:1;41377:88;41484:4;41481:1;41474:15;41508:4;41505:1;41498:15;41525:182;41665:34;41661:1;41653:6;41649:14;41642:58;41525:182;:::o;41713:366::-;41855:3;41876:67;41940:2;41935:3;41876:67;:::i;:::-;41869:74;;41952:93;42041:3;41952:93;:::i;:::-;42070:2;42065:3;42061:12;42054:19;;41713:366;;;:::o;42085:419::-;42251:4;42289:2;42278:9;42274:18;42266:26;;42338:9;42332:4;42328:20;42324:1;42313:9;42309:17;42302:47;42366:131;42492:4;42366:131;:::i;:::-;42358:139;;42085:419;;;:::o;42510:178::-;42650:30;42646:1;42638:6;42634:14;42627:54;42510:178;:::o;42694:366::-;42836:3;42857:67;42921:2;42916:3;42857:67;:::i;:::-;42850:74;;42933:93;43022:3;42933:93;:::i;:::-;43051:2;43046:3;43042:12;43035:19;;42694:366;;;:::o;43066:419::-;43232:4;43270:2;43259:9;43255:18;43247:26;;43319:9;43313:4;43309:20;43305:1;43294:9;43290:17;43283:47;43347:131;43473:4;43347:131;:::i;:::-;43339:139;;43066:419;;;:::o
Swarm Source
ipfs://bc432822459dedfac0d74f4906b5afaf5822d71d61ba588c42b82a11a1e735dd
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.