Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 25 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 14417676 | 860 days ago | IN | 0 ETH | 0.00210256 | ||||
Toggle Soldout | 13939445 | 934 days ago | IN | 0 ETH | 0.00375966 | ||||
Mint | 13826385 | 952 days ago | IN | 0.08 ETH | 0.01836605 | ||||
Transfer From | 13823997 | 952 days ago | IN | 0 ETH | 0.00693432 | ||||
Transfer From | 13823968 | 952 days ago | IN | 0 ETH | 0.00942797 | ||||
Transfer From | 13823961 | 952 days ago | IN | 0 ETH | 0.00808707 | ||||
Transfer From | 13823954 | 952 days ago | IN | 0 ETH | 0.01024222 | ||||
Transfer From | 13823951 | 952 days ago | IN | 0 ETH | 0.01083773 | ||||
Transfer From | 13823941 | 952 days ago | IN | 0 ETH | 0.00615448 | ||||
Mint | 13819847 | 953 days ago | IN | 0.08 ETH | 0.03734954 | ||||
Mint | 13819822 | 953 days ago | IN | 0.08 ETH | 0.01724304 | ||||
Mint | 13819822 | 953 days ago | IN | 0.08 ETH | 0.01724304 | ||||
Mint | 13819746 | 953 days ago | IN | 0.08 ETH | 0.01191222 | ||||
Mint | 13819705 | 953 days ago | IN | 0.16 ETH | 0.03110082 | ||||
Mint | 13818268 | 953 days ago | IN | 0.35 ETH | 0.11212472 | ||||
Mint | 13815256 | 953 days ago | IN | 0.07 ETH | 0.01021582 | ||||
Mint | 13813581 | 954 days ago | IN | 0.07 ETH | 0.01770325 | ||||
Mint | 13813570 | 954 days ago | IN | 0.07 ETH | 0.01543074 | ||||
Mint | 13813543 | 954 days ago | IN | 0.07 ETH | 0.01790662 | ||||
Switch To Presal... | 13812948 | 954 days ago | IN | 0 ETH | 0.00651489 | ||||
Transfer From | 13799542 | 956 days ago | IN | 0 ETH | 0.00860056 | ||||
Reserved Mint Cr... | 13799291 | 956 days ago | IN | 0 ETH | 0.01934361 | ||||
Change Unreveale... | 13772165 | 960 days ago | IN | 0 ETH | 0.0026957 | ||||
Reserved Mint Cr... | 13754234 | 963 days ago | IN | 0 ETH | 0.01598305 | ||||
0x60806040 | 13748971 | 964 days ago | IN | 0 ETH | 0.38940656 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13826385 | 952 days ago | 0.08 ETH | ||||
13819847 | 953 days ago | 0.08 ETH | ||||
13819822 | 953 days ago | 0.08 ETH | ||||
13819822 | 953 days ago | 0.08 ETH | ||||
13819746 | 953 days ago | 0.08 ETH | ||||
13819705 | 953 days ago | 0.16 ETH | ||||
13818268 | 953 days ago | 0.35 ETH | ||||
13815256 | 953 days ago | 0.07 ETH | ||||
13813581 | 954 days ago | 0.07 ETH | ||||
13813570 | 954 days ago | 0.07 ETH | ||||
13813543 | 954 days ago | 0.07 ETH |
Loading...
Loading
Contract Name:
nft
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-07 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/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 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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/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 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 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 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 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/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/creepies.sol pragma solidity >=0.8.2; // to enable certain compiler features //import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; 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; //Mapping para atribuirle un URI para cada token mapping(uint256 => string) internal id_to_URI; //defines the uri for when the NFTs have not been yet revealed string public unrevealedURI; //marks the timestamp of when the respective sales open uint256 internal presaleLaunchTime; uint256 internal publicSaleLaunchTime; //see if all NFTs have ben sold bool public soldout; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor() { _name = 'Beezium'; _symbol = 'BEEZ'; unrevealedURI = "ipfs://QmXN5mxxJLhhw1cWpeioTnqh4gfMG3ux22bHNDrvKFwh5s/"; soldout = false; } /** * @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"); //check to see that 24 hours have passed since beginning of publicsale launch if (!soldout) { return unrevealedURI; } else { string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), '.json')) : ""; } } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //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 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 {} } 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); } 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(); } } contract nft is ERC721Enumerable, Ownable { //tokens that have been minted in presale uint256 private numberOfTokensPresale; //declares the maximum amount of tokens that can be minted, total and in presale uint256 private maxTotalTokens; uint256 private maxTokensPresale; //initial part of the URI for the metadata string private _currentBaseURI; //cost of mints depending on state of sale uint public constant mintCostPresale = 0.07 ether; uint public constant baseMintCost = 0.08 ether; uint public constant mintIncrement = 0.02 ether; //the amount of reserved mints that have currently been executed by creator and by marketing wallet uint private _reservedMintsCreator = 0; uint private _reservedMintsDev = 0; //the maximum amount of reserved mints allowed for creator and marketing wallet uint private maxReservedMintsCreator = 10; uint private maxReservedMintsDev = 1; //the addresses of the dev address public dev = 0x318cBF186eB13C74533943b054959867eE44eFFE; //dummy address that we use to sign the mint transaction to make sure it is valid address private dummy = 0x80E4929c869102140E69550BBECC20bEd61B080c; //amount of mints that each address has executed mapping(address => uint256) public mintsPerAddress; //current state os sale enum State {NoSale, Presale, PublicSale} State private saleState; //declaring initial values for variables constructor() { numberOfTokensPresale = 0; _currentBaseURI = 'ipfs://QmfAK96HLttxYyfCfuYEziz97vbe49SPCd8A2aje6vETPC/'; maxTotalTokens = 6666; maxTokensPresale = 1111; saleState = State.NoSale; } //in case somebody accidentaly sends funds or transaction to contract receive() payable external {} fallback() payable external { revert(); } //visualize baseURI function _baseURI() internal view virtual override returns (string memory) { return _currentBaseURI; } //change baseURI in case needed for IPFS function changeBaseURI(string memory baseURI_) public onlyOwner { _currentBaseURI = baseURI_; } function changeUnrevealedURI(string memory unrevealedURI_) public onlyOwner { unrevealedURI = unrevealedURI_; } //gets the tokenID of NFT to be minted function tokenId() internal view returns(uint256) { uint currentId = totalSupply() - _reservedMintsCreator; bool exists = true; while (exists) { currentId += 1; exists = _exists(currentId); } return currentId; } modifier onlyValidAccess(uint8 _v, bytes32 _r, bytes32 _s) { require( isValidAccessMessage(msg.sender,_v,_r,_s), 'Invalid Signature' ); _; } /* * @dev Verifies if message was signed by owner to give access to _add for this contract. * Assumes Geth signature prefix. * @param _add Address of agent with access * @param _v ECDSA signature parameter v. * @param _r ECDSA signature parameters r. * @param _s ECDSA signature parameters s. * @return Validity of access message for a given address. */ function isValidAccessMessage(address _add, uint8 _v, bytes32 _r, bytes32 _s) view public returns (bool) { bytes32 hash = keccak256(abi.encodePacked(address(this), _add)); return dummy == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), _v, _r, _s); } //mint a @param number of NFTs function mint(uint256 number, uint8 _v, bytes32 _r, bytes32 _s) onlyValidAccess(_v, _r, _s) public payable { require(saleState != State.NoSale, "Sale in not open yet!"); require(totalSupply() + number <= maxTotalTokens - (maxReservedMintsCreator + maxReservedMintsDev - _reservedMintsDev - _reservedMintsCreator), "Not enough NFTs left to mint.."); require(msg.value >= mintCost() * number, "Not sufficient Ether to mint this amount of NFTs"); if (block.timestamp >= presaleLaunchTime && block.timestamp < publicSaleLaunchTime) { require(numberOfTokensPresale + number <= maxTokensPresale, "Not enough NFTs left to mint in Presale.."); } else { if (saleState == State.Presale) { saleState = State.PublicSale; } } for (uint256 i = 0; i < number; i++) { uint256 tid = tokenId(); _safeMint(msg.sender, tid); mintsPerAddress[msg.sender] += 1; if (saleState == State.Presale) { numberOfTokensPresale += 1; } } retrieveFunds(); if (totalSupply() == maxTotalTokens) { soldout == true; } } //reserved NFTs for creator function reservedMintCreator(uint256 number) public onlyOwner { require(_reservedMintsCreator + number <= maxReservedMintsCreator, "Not enough Reserved NFTs for Creator left to mint.."); for (uint i = 0; i < number; i++) { _safeMint(msg.sender, tokenId()); mintsPerAddress[msg.sender] += 1; _reservedMintsCreator += 1; } } function reservedMint() public onlyOwner { //minting some NFTs for team & giveaways _safeMint(msg.sender, 6666); _safeMint(msg.sender, 6664); _safeMint(msg.sender, 6665); _safeMint(msg.sender, 6658); mintsPerAddress[msg.sender] += 4; } //reserved NFTs for marketing wallet function reservedMintDev() public { require(msg.sender == dev, 'Only Dev has access..'); require(_reservedMintsDev == 0, "Dev already minted NFT.."); uint256 tid = tokenId(); _safeMint(dev, tid); mintsPerAddress[dev] += 1; _reservedMintsDev += 1; } //begins the minting of the NFTs function switchToPresale() public onlyOwner{ require(saleState == State.NoSale, "Presale has already opened!"); saleState = State.Presale; presaleLaunchTime = block.timestamp; publicSaleLaunchTime = presaleLaunchTime + 86400; } //burn the tokens that have not been sold yet function burnTokens() public onlyOwner { maxTotalTokens = totalSupply(); } //se the current account balance function accountBalance() public onlyOwner view returns(uint) { return address(this).balance; } //change the dummy account used for signing transactions function changeDummy(address _dummy) public onlyOwner { dummy = _dummy; } //see the total amount of reserved mints that creator has left function reservedMintsCreatorLeft() public onlyOwner view returns(uint) { return maxReservedMintsCreator - _reservedMintsCreator; } //get the funds from the minting of the NFTs function retrieveFunds() internal { (bool sent, ) = payable(owner()).call{value: msg.value}(""); require(sent, "Failed to send Ether"); } //amount of tokens left in presale so we can restrict in website function tokensLeftPresale() public view returns(uint) { return maxTokensPresale - numberOfTokensPresale; } //in case it doesnt sell out and we want to reveal the NFTs function toggleSoldout() public onlyOwner { require(soldout == false, 'Cannot change soldout back to false!'); soldout = !soldout; } //see the current state of the sale function stateOfSale() public view returns(State){ if (saleState == State.NoSale) { return saleState; } else { if (saleState == State.Presale && block.timestamp >= publicSaleLaunchTime) { return State.PublicSale; } else { return saleState; } } } //gets the cost of current mint function mintCost() public view returns(uint) { State saleState_ = stateOfSale(); if (saleState_ == State.Presale || saleState_ == State.NoSale) { return mintCostPresale; } else { return baseMintCost + ((totalSupply()/1111) * mintIncrement); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"accountBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dummy","type":"address"}],"name":"changeDummy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unrevealedURI_","type":"string"}],"name":"changeUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"isValidAccessMessage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCostPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"reservedMintCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMintDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMintsCreatorLeft","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":"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":[],"name":"soldout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stateOfSale","outputs":[{"internalType":"enum nft.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSoldout","outputs":[],"stateMutability":"nonpayable","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":"tokensLeftPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006014556000601555600a601655600160175573318cbf186eb13c74533943b054959867ee44effe601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507380e4929c869102140e69550bbecc20bed61b080c601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000cf57600080fd5b506040518060400160405280600781526020017f4265657a69756d00000000000000000000000000000000000000000000000000815250600090805190602001906200011d92919062000327565b506040518060400160405280600481526020017f4245455a00000000000000000000000000000000000000000000000000000000815250600190805190602001906200016b92919062000327565b5060405180606001604052806036815260200162005b0760369139600790805190602001906200019d92919062000327565b506000600a60006101000a81548160ff021916908315150217905550620001d9620001cd6200025960201b60201c565b6200026160201b60201c565b600060108190555060405180606001604052806036815260200162005ad160369139601390805190602001906200021292919062000327565b50611a0a6011819055506104576012819055506000601b60006101000a81548160ff021916908360028111156200024e576200024d6200040d565b5b02179055506200046b565b600033905090565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033590620003d7565b90600052602060002090601f016020900481019282620003595760008555620003a5565b82601f106200037457805160ff1916838001178555620003a5565b82800160010185558215620003a5579182015b82811115620003a457825182559160200191906001019062000387565b5b509050620003b49190620003b8565b5090565b5b80821115620003d3576000816000905550600101620003b9565b5090565b60006002820490506001821680620003f057607f821691505b602082108114156200040757620004066200043c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615656806200047b6000396000f3fe6080604052600436106102555760003560e01c806364ef533b11610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd14610878578063d4cb2fb3146108b5578063e985e9c5146108e0578063eab417821461091d578063f2fde38b14610934578063fbaca3c91461095d5761025c565b8063a22cb465146107a7578063b0a1c1c4146107d0578063b88d4fde146107fb578063bdb4b84814610824578063c4d8b9df1461084f5761025c565b8063753dce67116100fd578063753dce67146106e457806381b915461461070f5780638da5cb5b1461072657806391cca3db1461075157806395d89b411461077c5761025c565b806364ef533b146106235780636e04b2b01461064e5780637035bf181461066557806370a0823114610690578063715018a6146106cd5761025c565b80632f745c59116101d257806342842e0e1161019657806342842e0e14610515578063465a3b011461053e5780634f6ccce7146105555780635136efb8146105925780635488e4b6146105bb5780636352211e146105e65761025c565b80632f745c591461040a5780633023eba614610447578063326241141461048457806339a0c6f9146104c15780634017e220146104ea5761025c565b8063095ea7b311610219578063095ea7b31461034657806310aec4a61461036f57806318160ddd1461038b5780631ee71bd3146103b657806323b872dd146103e15761025c565b80630191a6571461026157806301ffc9a71461028a57806306fdde03146102c757806308003f78146102f2578063081812fc146103095761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613a39565b610988565b005b34801561029657600080fd5b506102b160048036038101906102ac9190613c63565b610a48565b6040516102be9190614422565b60405180910390f35b3480156102d357600080fd5b506102dc610ac2565b6040516102e9919061449d565b60405180910390f35b3480156102fe57600080fd5b50610307610b54565b005b34801561031557600080fd5b50610330600480360381019061032b9190613d06565b610be0565b60405161033d91906143bb565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613bbc565b610c65565b005b61038960048036038101906103849190613d33565b610d7d565b005b34801561039757600080fd5b506103a0611114565b6040516103ad919061485f565b60405180910390f35b3480156103c257600080fd5b506103cb611121565b6040516103d89190614422565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190613aa6565b611134565b005b34801561041657600080fd5b50610431600480360381019061042c9190613bbc565b611194565b60405161043e919061485f565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613a39565b611239565b60405161047b919061485f565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613bfc565b611251565b6040516104b89190614422565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613cbd565b61134f565b005b3480156104f657600080fd5b506104ff6113e5565b60405161050c919061485f565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613aa6565b6113f0565b005b34801561054a57600080fd5b50610553611410565b005b34801561056157600080fd5b5061057c60048036038101906105779190613d06565b61150e565b604051610589919061485f565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613d06565b61157f565b005b3480156105c757600080fd5b506105d06116f1565b6040516105dd919061485f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613d06565b6116fd565b60405161061a91906143bb565b60405180910390f35b34801561062f57600080fd5b506106386117af565b604051610645919061485f565b60405180910390f35b34801561065a57600080fd5b506106636117c6565b005b34801561067157600080fd5b5061067a6118cb565b604051610687919061449d565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613a39565b611959565b6040516106c4919061485f565b60405180910390f35b3480156106d957600080fd5b506106e2611a11565b005b3480156106f057600080fd5b506106f9611a99565b604051610706919061485f565b60405180910390f35b34801561071b57600080fd5b50610724611b2c565b005b34801561073257600080fd5b5061073b611ccf565b60405161074891906143bb565b60405180910390f35b34801561075d57600080fd5b50610766611cf9565b60405161077391906143bb565b60405180910390f35b34801561078857600080fd5b50610791611d1f565b60405161079e919061449d565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190613b7c565b611db1565b005b3480156107dc57600080fd5b506107e5611f32565b6040516107f2919061485f565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613af9565b611fb6565b005b34801561083057600080fd5b50610839612018565b604051610846919061485f565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190613cbd565b6120d2565b005b34801561088457600080fd5b5061089f600480360381019061089a9190613d06565b612168565b6040516108ac919061449d565b60405180910390f35b3480156108c157600080fd5b506108ca6122b6565b6040516108d79190614482565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613a66565b612373565b6040516109149190614422565b60405180910390f35b34801561092957600080fd5b50610932612407565b005b34801561094057600080fd5b5061095b60048036038101906109569190613a39565b612544565b005b34801561096957600080fd5b5061097261263c565b60405161097f919061485f565b60405180910390f35b610990612647565b73ffffffffffffffffffffffffffffffffffffffff166109ae611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb9061473f565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610abb5750610aba8261264f565b5b9050919050565b606060008054610ad190614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd90614b56565b8015610b4a5780601f10610b1f57610100808354040283529160200191610b4a565b820191906000526020600020905b815481529060010190602001808311610b2d57829003601f168201915b5050505050905090565b610b5c612647565b73ffffffffffffffffffffffffffffffffffffffff16610b7a611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc79061473f565b60405180910390fd5b610bd8611114565b601181905550565b6000610beb82612731565b610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906146ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c70826116fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd89061479f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d00612647565b73ffffffffffffffffffffffffffffffffffffffff161480610d2f5750610d2e81610d29612647565b612373565b5b610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d659061461f565b60405180910390fd5b610d78838361279d565b505050565b828282610d8c33848484611251565b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061471f565b60405180910390fd5b60006002811115610ddf57610dde614cbf565b5b601b60009054906101000a900460ff166002811115610e0157610e00614cbf565b5b1415610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e399061481f565b60405180910390fd5b601454601554601754601654610e58919061494f565b610e629190614a30565b610e6c9190614a30565b601154610e799190614a30565b87610e82611114565b610e8c919061494f565b1115610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906145df565b60405180910390fd5b86610ed6612018565b610ee091906149d6565b341015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906146df565b60405180910390fd5b6008544210158015610f35575060095442105b15610f915760125487601054610f4b919061494f565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f83906144bf565b60405180910390fd5b610ffa565b60016002811115610fa557610fa4614cbf565b5b601b60009054906101000a900460ff166002811115610fc757610fc6614cbf565b5b1415610ff9576002601b60006101000a81548160ff02191690836002811115610ff357610ff2614cbf565b5b02179055505b5b60005b878110156110dd57600061100f612856565b905061101b33826128a4565b6001601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106b919061494f565b925050819055506001600281111561108657611085614cbf565b5b601b60009054906101000a900460ff1660028111156110a8576110a7614cbf565b5b14156110c9576001601060008282546110c1919061494f565b925050819055505b5080806110d590614bb9565b915050610ffd565b506110e66128c2565b6011546110f1611114565b141561110b5760011515600a60009054906101000a905050505b50505050505050565b6000600d80549050905090565b600a60009054906101000a900460ff1681565b61114561113f612647565b82612978565b611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b906147df565b60405180910390fd5b61118f838383612a56565b505050565b600061119f83611959565b82106111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906144df565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601a6020528060005260406000206000915090505481565b6000803086604051602001611267929190614325565b6040516020818303038152906040528051906020012090506001816040516020016112929190614380565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112c8949392919061443d565b6020604051602081039080840390855afa1580156112ea573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b611357612647565b73ffffffffffffffffffffffffffffffffffffffff16611375611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c29061473f565b60405180910390fd5b80601390805190602001906113e1929190613823565b5050565b66470de4df82000081565b61140b83838360405180602001604052806000815250611fb6565b505050565b611418612647565b73ffffffffffffffffffffffffffffffffffffffff16611436611ccf565b73ffffffffffffffffffffffffffffffffffffffff161461148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114839061473f565b60405180910390fd5b60001515600a60009054906101000a900460ff161515146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d99061483f565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000611518611114565b8210611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906147ff565b60405180910390fd5b600d828154811061156d5761156c614d4c565b5b90600052602060002001549050919050565b611587612647565b73ffffffffffffffffffffffffffffffffffffffff166115a5611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f29061473f565b60405180910390fd5b6016548160145461160c919061494f565b111561164d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449061455f565b60405180910390fd5b60005b818110156116ed5761166933611664612856565b6128a4565b6001601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b9919061494f565b925050819055506001601460008282546116d3919061494f565b9250508190555080806116e590614bb9565b915050611650565b5050565b67011c37937e08000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d9061465f565b60405180910390fd5b80915050919050565b60006010546012546117c19190614a30565b905090565b6117ce612647565b73ffffffffffffffffffffffffffffffffffffffff166117ec611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061473f565b60405180910390fd5b61184e33611a0a6128a4565b61185a33611a086128a4565b61186633611a096128a4565b61187233611a026128a4565b6004601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c2919061494f565b92505081905550565b600780546118d890614b56565b80601f016020809104026020016040519081016040528092919081815260200182805461190490614b56565b80156119515780601f1061192657610100808354040283529160200191611951565b820191906000526020600020905b81548152906001019060200180831161193457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c19061463f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a19612647565b73ffffffffffffffffffffffffffffffffffffffff16611a37611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a849061473f565b60405180910390fd5b611a976000612cb2565b565b6000611aa3612647565b73ffffffffffffffffffffffffffffffffffffffff16611ac1611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061473f565b60405180910390fd5b601454601654611b279190614a30565b905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb39061467f565b60405180910390fd5b600060155414611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061469f565b60405180910390fd5b6000611c0b612856565b9050611c39601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826128a4565b6001601a6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cab919061494f565b92505081905550600160156000828254611cc5919061494f565b9250508190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611d2e90614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5a90614b56565b8015611da75780601f10611d7c57610100808354040283529160200191611da7565b820191906000526020600020905b815481529060010190602001808311611d8a57829003601f168201915b5050505050905090565b611db9612647565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906145bf565b60405180910390fd5b8060056000611e34612647565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ee1612647565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f269190614422565b60405180910390a35050565b6000611f3c612647565b73ffffffffffffffffffffffffffffffffffffffff16611f5a611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061473f565b60405180910390fd5b47905090565b611fc7611fc1612647565b83612978565b612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd906147df565b60405180910390fd5b61201284848484612d78565b50505050565b6000806120236122b6565b90506001600281111561203957612038614cbf565b5b81600281111561204c5761204b614cbf565b5b148061207c57506000600281111561206757612066614cbf565b5b81600281111561207a57612079614cbf565b5b145b156120915766f8b0a10e4700009150506120cf565b66470de4df8200006104576120a4611114565b6120ae91906149a5565b6120b891906149d6565b67011c37937e0800006120cb919061494f565b9150505b90565b6120da612647565b73ffffffffffffffffffffffffffffffffffffffff166120f8611ccf565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061473f565b60405180910390fd5b8060079080519060200190612164929190613823565b5050565b606061217382612731565b6121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a99061477f565b60405180910390fd5b600a60009054906101000a900460ff1661225857600780546121d390614b56565b80601f01602080910402602001604051908101604052809291908181526020018280546121ff90614b56565b801561224c5780601f106122215761010080835404028352916020019161224c565b820191906000526020600020905b81548152906001019060200180831161222f57829003601f168201915b505050505090506122b1565b6000612262612dd4565b9050600081511161228257604051806020016040528060008152506122ad565b8061228c84612e66565b60405160200161229d929190614351565b6040516020818303038152906040525b9150505b919050565b60008060028111156122cb576122ca614cbf565b5b601b60009054906101000a900460ff1660028111156122ed576122ec614cbf565b5b141561230a57601b60009054906101000a900460ff169050612370565b6001600281111561231e5761231d614cbf565b5b601b60009054906101000a900460ff1660028111156123405761233f614cbf565b5b14801561234f57506009544210155b1561235d5760029050612370565b601b60009054906101000a900460ff1690505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61240f612647565b73ffffffffffffffffffffffffffffffffffffffff1661242d611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061473f565b60405180910390fd5b6000600281111561249757612496614cbf565b5b601b60009054906101000a900460ff1660028111156124b9576124b8614cbf565b5b146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906147bf565b60405180910390fd5b6001601b60006101000a81548160ff0219169083600281111561251f5761251e614cbf565b5b0217905550426008819055506201518060085461253c919061494f565b600981905550565b61254c612647565b73ffffffffffffffffffffffffffffffffffffffff1661256a611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b79061473f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126279061451f565b60405180910390fd5b61263981612cb2565b50565b66f8b0a10e47000081565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061271a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061272a575061272982612fc7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612810836116fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080601454612864611114565b61286e9190614a30565b90506000600190505b801561289c5760018261288a919061494f565b915061289582612731565b9050612877565b819250505090565b6128be828260405180602001604052806000815250613031565b5050565b60006128cc611ccf565b73ffffffffffffffffffffffffffffffffffffffff16346040516128ef906143a6565b60006040518083038185875af1925050503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5050905080612975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296c9061457f565b60405180910390fd5b50565b600061298382612731565b6129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b9906145ff565b60405180910390fd5b60006129cd836116fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a3c57508373ffffffffffffffffffffffffffffffffffffffff16612a2484610be0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a4d5750612a4c8185612373565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a76826116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac39061475f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b339061459f565b60405180910390fd5b612b4783838361308c565b612b5260008261279d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba29190614a30565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf9919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d83848484612a56565b612d8f848484846131a0565b612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc5906144ff565b60405180910390fd5b50505050565b606060138054612de390614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0f90614b56565b8015612e5c5780601f10612e3157610100808354040283529160200191612e5c565b820191906000526020600020905b815481529060010190602001808311612e3f57829003601f168201915b5050505050905090565b60606000821415612eae576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc2565b600082905060005b60008214612ee0578080612ec990614bb9565b915050600a82612ed991906149a5565b9150612eb6565b60008167ffffffffffffffff811115612efc57612efb614d7b565b5b6040519080825280601f01601f191660200182016040528015612f2e5781602001600182028036833780820191505090505b5090505b60008514612fbb57600182612f479190614a30565b9150600a85612f569190614c30565b6030612f62919061494f565b60f81b818381518110612f7857612f77614d4c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fb491906149a5565b9450612f32565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61303b8383613337565b61304860008484846131a0565b613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906144ff565b60405180910390fd5b505050565b613097838383613505565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130da576130d58161350a565b613119565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613118576131178382613553565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561315c57613157816136c0565b61319b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461319a576131998282613791565b5b5b505050565b60006131c18473ffffffffffffffffffffffffffffffffffffffff16613810565b1561332a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ea612647565b8786866040518563ffffffff1660e01b815260040161320c94939291906143d6565b602060405180830381600087803b15801561322657600080fd5b505af192505050801561325757506040513d601f19601f820116820180604052508101906132549190613c90565b60015b6132da573d8060008114613287576040519150601f19603f3d011682016040523d82523d6000602084013e61328c565b606091505b506000815114156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c9906144ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061332f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e906146bf565b60405180910390fd5b6133b081612731565b156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e79061453f565b60405180910390fd5b6133fc6000838361308c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344c919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600d80549050600e600083815260200190815260200160002081905550600d81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161356084611959565b61356a9190614a30565b90506000600c600084815260200190815260200160002054905081811461364f576000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081600c600083815260200190815260200160002081905550505b600c600084815260200190815260200160002060009055600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600d805490506136d49190614a30565b90506000600e60008481526020019081526020016000205490506000600d838154811061370457613703614d4c565b5b9060005260206000200154905080600d838154811061372657613725614d4c565b5b906000526020600020018190555081600e600083815260200190815260200160002081905550600e600085815260200190815260200160002060009055600d80548061377557613774614d1d565b5b6001900381819060005260206000200160009055905550505050565b600061379c83611959565b905081600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080600c600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461382f90614b56565b90600052602060002090601f0160209004810192826138515760008555613898565b82601f1061386a57805160ff1916838001178555613898565b82800160010185558215613898579182015b8281111561389757825182559160200191906001019061387c565b5b5090506138a591906138a9565b5090565b5b808211156138c25760008160009055506001016138aa565b5090565b60006138d96138d48461489f565b61487a565b9050828152602081018484840111156138f5576138f4614daf565b5b613900848285614b14565b509392505050565b600061391b613916846148d0565b61487a565b90508281526020810184848401111561393757613936614daf565b5b613942848285614b14565b509392505050565b60008135905061395981615596565b92915050565b60008135905061396e816155ad565b92915050565b600081359050613983816155c4565b92915050565b600081359050613998816155db565b92915050565b6000815190506139ad816155db565b92915050565b600082601f8301126139c8576139c7614daa565b5b81356139d88482602086016138c6565b91505092915050565b600082601f8301126139f6576139f5614daa565b5b8135613a06848260208601613908565b91505092915050565b600081359050613a1e816155f2565b92915050565b600081359050613a3381615609565b92915050565b600060208284031215613a4f57613a4e614db9565b5b6000613a5d8482850161394a565b91505092915050565b60008060408385031215613a7d57613a7c614db9565b5b6000613a8b8582860161394a565b9250506020613a9c8582860161394a565b9150509250929050565b600080600060608486031215613abf57613abe614db9565b5b6000613acd8682870161394a565b9350506020613ade8682870161394a565b9250506040613aef86828701613a0f565b9150509250925092565b60008060008060808587031215613b1357613b12614db9565b5b6000613b218782880161394a565b9450506020613b328782880161394a565b9350506040613b4387828801613a0f565b925050606085013567ffffffffffffffff811115613b6457613b63614db4565b5b613b70878288016139b3565b91505092959194509250565b60008060408385031215613b9357613b92614db9565b5b6000613ba18582860161394a565b9250506020613bb28582860161395f565b9150509250929050565b60008060408385031215613bd357613bd2614db9565b5b6000613be18582860161394a565b9250506020613bf285828601613a0f565b9150509250929050565b60008060008060808587031215613c1657613c15614db9565b5b6000613c248782880161394a565b9450506020613c3587828801613a24565b9350506040613c4687828801613974565b9250506060613c5787828801613974565b91505092959194509250565b600060208284031215613c7957613c78614db9565b5b6000613c8784828501613989565b91505092915050565b600060208284031215613ca657613ca5614db9565b5b6000613cb48482850161399e565b91505092915050565b600060208284031215613cd357613cd2614db9565b5b600082013567ffffffffffffffff811115613cf157613cf0614db4565b5b613cfd848285016139e1565b91505092915050565b600060208284031215613d1c57613d1b614db9565b5b6000613d2a84828501613a0f565b91505092915050565b60008060008060808587031215613d4d57613d4c614db9565b5b6000613d5b87828801613a0f565b9450506020613d6c87828801613a24565b9350506040613d7d87828801613974565b9250506060613d8e87828801613974565b91505092959194509250565b613da381614a64565b82525050565b613dba613db582614a64565b614c02565b82525050565b613dc981614a76565b82525050565b613dd881614a82565b82525050565b613def613dea82614a82565b614c14565b82525050565b6000613e0082614901565b613e0a8185614917565b9350613e1a818560208601614b23565b613e2381614dbe565b840191505092915050565b613e3781614b02565b82525050565b6000613e488261490c565b613e528185614933565b9350613e62818560208601614b23565b613e6b81614dbe565b840191505092915050565b6000613e818261490c565b613e8b8185614944565b9350613e9b818560208601614b23565b80840191505092915050565b6000613eb4601c83614944565b9150613ebf82614ddc565b601c82019050919050565b6000613ed7602983614933565b9150613ee282614e05565b604082019050919050565b6000613efa602b83614933565b9150613f0582614e54565b604082019050919050565b6000613f1d603283614933565b9150613f2882614ea3565b604082019050919050565b6000613f40602683614933565b9150613f4b82614ef2565b604082019050919050565b6000613f63601c83614933565b9150613f6e82614f41565b602082019050919050565b6000613f86603383614933565b9150613f9182614f6a565b604082019050919050565b6000613fa9601483614933565b9150613fb482614fb9565b602082019050919050565b6000613fcc602483614933565b9150613fd782614fe2565b604082019050919050565b6000613fef601983614933565b9150613ffa82615031565b602082019050919050565b6000614012601e83614933565b915061401d8261505a565b602082019050919050565b6000614035602c83614933565b915061404082615083565b604082019050919050565b6000614058603883614933565b9150614063826150d2565b604082019050919050565b600061407b602a83614933565b915061408682615121565b604082019050919050565b600061409e602983614933565b91506140a982615170565b604082019050919050565b60006140c1601583614933565b91506140cc826151bf565b602082019050919050565b60006140e4601883614933565b91506140ef826151e8565b602082019050919050565b6000614107602083614933565b915061411282615211565b602082019050919050565b600061412a603083614933565b91506141358261523a565b604082019050919050565b600061414d602c83614933565b915061415882615289565b604082019050919050565b6000614170600583614944565b915061417b826152d8565b600582019050919050565b6000614193601183614933565b915061419e82615301565b602082019050919050565b60006141b6602083614933565b91506141c18261532a565b602082019050919050565b60006141d9602983614933565b91506141e482615353565b604082019050919050565b60006141fc602f83614933565b9150614207826153a2565b604082019050919050565b600061421f602183614933565b915061422a826153f1565b604082019050919050565b6000614242601b83614933565b915061424d82615440565b602082019050919050565b6000614265600083614928565b915061427082615469565b600082019050919050565b6000614288603183614933565b91506142938261546c565b604082019050919050565b60006142ab602c83614933565b91506142b6826154bb565b604082019050919050565b60006142ce601583614933565b91506142d98261550a565b602082019050919050565b60006142f1602483614933565b91506142fc82615533565b604082019050919050565b61431081614aeb565b82525050565b61431f81614af5565b82525050565b60006143318285613da9565b6014820191506143418284613da9565b6014820191508190509392505050565b600061435d8285613e76565b91506143698284613e76565b915061437482614163565b91508190509392505050565b600061438b82613ea7565b91506143978284613dde565b60208201915081905092915050565b60006143b182614258565b9150819050919050565b60006020820190506143d06000830184613d9a565b92915050565b60006080820190506143eb6000830187613d9a565b6143f86020830186613d9a565b6144056040830185614307565b81810360608301526144178184613df5565b905095945050505050565b60006020820190506144376000830184613dc0565b92915050565b60006080820190506144526000830187613dcf565b61445f6020830186614316565b61446c6040830185613dcf565b6144796060830184613dcf565b95945050505050565b60006020820190506144976000830184613e2e565b92915050565b600060208201905081810360008301526144b78184613e3d565b905092915050565b600060208201905081810360008301526144d881613eca565b9050919050565b600060208201905081810360008301526144f881613eed565b9050919050565b6000602082019050818103600083015261451881613f10565b9050919050565b6000602082019050818103600083015261453881613f33565b9050919050565b6000602082019050818103600083015261455881613f56565b9050919050565b6000602082019050818103600083015261457881613f79565b9050919050565b6000602082019050818103600083015261459881613f9c565b9050919050565b600060208201905081810360008301526145b881613fbf565b9050919050565b600060208201905081810360008301526145d881613fe2565b9050919050565b600060208201905081810360008301526145f881614005565b9050919050565b6000602082019050818103600083015261461881614028565b9050919050565b600060208201905081810360008301526146388161404b565b9050919050565b600060208201905081810360008301526146588161406e565b9050919050565b6000602082019050818103600083015261467881614091565b9050919050565b60006020820190508181036000830152614698816140b4565b9050919050565b600060208201905081810360008301526146b8816140d7565b9050919050565b600060208201905081810360008301526146d8816140fa565b9050919050565b600060208201905081810360008301526146f88161411d565b9050919050565b6000602082019050818103600083015261471881614140565b9050919050565b6000602082019050818103600083015261473881614186565b9050919050565b60006020820190508181036000830152614758816141a9565b9050919050565b60006020820190508181036000830152614778816141cc565b9050919050565b60006020820190508181036000830152614798816141ef565b9050919050565b600060208201905081810360008301526147b881614212565b9050919050565b600060208201905081810360008301526147d881614235565b9050919050565b600060208201905081810360008301526147f88161427b565b9050919050565b600060208201905081810360008301526148188161429e565b9050919050565b60006020820190508181036000830152614838816142c1565b9050919050565b60006020820190508181036000830152614858816142e4565b9050919050565b60006020820190506148746000830184614307565b92915050565b6000614884614895565b90506148908282614b88565b919050565b6000604051905090565b600067ffffffffffffffff8211156148ba576148b9614d7b565b5b6148c382614dbe565b9050602081019050919050565b600067ffffffffffffffff8211156148eb576148ea614d7b565b5b6148f482614dbe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061495a82614aeb565b915061496583614aeb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499a57614999614c61565b5b828201905092915050565b60006149b082614aeb565b91506149bb83614aeb565b9250826149cb576149ca614c90565b5b828204905092915050565b60006149e182614aeb565b91506149ec83614aeb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2557614a24614c61565b5b828202905092915050565b6000614a3b82614aeb565b9150614a4683614aeb565b925082821015614a5957614a58614c61565b5b828203905092915050565b6000614a6f82614acb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614ac682615582565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b0d82614ab8565b9050919050565b82818337600083830152505050565b60005b83811015614b41578082015181840152602081019050614b26565b83811115614b50576000848401525b50505050565b60006002820490506001821680614b6e57607f821691505b60208210811415614b8257614b81614cee565b5b50919050565b614b9182614dbe565b810181811067ffffffffffffffff82111715614bb057614baf614d7b565b5b80604052505050565b6000614bc482614aeb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bf757614bf6614c61565b5b600182019050919050565b6000614c0d82614c1e565b9050919050565b6000819050919050565b6000614c2982614dcf565b9050919050565b6000614c3b82614aeb565b9150614c4683614aeb565b925082614c5657614c55614c90565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e7420696e2060008201527f50726573616c652e2e0000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f756768205265736572766564204e46547320666f722043726560008201527f61746f72206c65667420746f206d696e742e2e00000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792044657620686173206163636573732e2e0000000000000000000000600082015250565b7f44657620616c7265616479206d696e746564204e46542e2e0000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f742073756666696369656e7420457468657220746f206d696e742074686960008201527f7320616d6f756e74206f66204e46547300000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c652068617320616c7265616479206f70656e6564210000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f43616e6e6f74206368616e676520736f6c646f7574206261636b20746f20666160008201527f6c73652100000000000000000000000000000000000000000000000000000000602082015250565b6003811061559357615592614cbf565b5b50565b61559f81614a64565b81146155aa57600080fd5b50565b6155b681614a76565b81146155c157600080fd5b50565b6155cd81614a82565b81146155d857600080fd5b50565b6155e481614a8c565b81146155ef57600080fd5b50565b6155fb81614aeb565b811461560657600080fd5b50565b61561281614af5565b811461561d57600080fd5b5056fea2646970667358221220d78de55255021d808c4aa224e4c3729c79d42fb4d9a77370a11e58aa642d9c5a64736f6c63430008070033697066733a2f2f516d66414b3936484c74747859796643667559457a697a3937766265343953504364384132616a653676455450432f697066733a2f2f516d584e356d78784a4c6868773163577065696f546e71683467664d47337578323262484e4472764b46776835732f
Deployed Bytecode
0x6080604052600436106102555760003560e01c806364ef533b11610139578063a22cb465116100b6578063c87b56dd1161007a578063c87b56dd14610878578063d4cb2fb3146108b5578063e985e9c5146108e0578063eab417821461091d578063f2fde38b14610934578063fbaca3c91461095d5761025c565b8063a22cb465146107a7578063b0a1c1c4146107d0578063b88d4fde146107fb578063bdb4b84814610824578063c4d8b9df1461084f5761025c565b8063753dce67116100fd578063753dce67146106e457806381b915461461070f5780638da5cb5b1461072657806391cca3db1461075157806395d89b411461077c5761025c565b806364ef533b146106235780636e04b2b01461064e5780637035bf181461066557806370a0823114610690578063715018a6146106cd5761025c565b80632f745c59116101d257806342842e0e1161019657806342842e0e14610515578063465a3b011461053e5780634f6ccce7146105555780635136efb8146105925780635488e4b6146105bb5780636352211e146105e65761025c565b80632f745c591461040a5780633023eba614610447578063326241141461048457806339a0c6f9146104c15780634017e220146104ea5761025c565b8063095ea7b311610219578063095ea7b31461034657806310aec4a61461036f57806318160ddd1461038b5780631ee71bd3146103b657806323b872dd146103e15761025c565b80630191a6571461026157806301ffc9a71461028a57806306fdde03146102c757806308003f78146102f2578063081812fc146103095761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613a39565b610988565b005b34801561029657600080fd5b506102b160048036038101906102ac9190613c63565b610a48565b6040516102be9190614422565b60405180910390f35b3480156102d357600080fd5b506102dc610ac2565b6040516102e9919061449d565b60405180910390f35b3480156102fe57600080fd5b50610307610b54565b005b34801561031557600080fd5b50610330600480360381019061032b9190613d06565b610be0565b60405161033d91906143bb565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613bbc565b610c65565b005b61038960048036038101906103849190613d33565b610d7d565b005b34801561039757600080fd5b506103a0611114565b6040516103ad919061485f565b60405180910390f35b3480156103c257600080fd5b506103cb611121565b6040516103d89190614422565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190613aa6565b611134565b005b34801561041657600080fd5b50610431600480360381019061042c9190613bbc565b611194565b60405161043e919061485f565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613a39565b611239565b60405161047b919061485f565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613bfc565b611251565b6040516104b89190614422565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613cbd565b61134f565b005b3480156104f657600080fd5b506104ff6113e5565b60405161050c919061485f565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613aa6565b6113f0565b005b34801561054a57600080fd5b50610553611410565b005b34801561056157600080fd5b5061057c60048036038101906105779190613d06565b61150e565b604051610589919061485f565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190613d06565b61157f565b005b3480156105c757600080fd5b506105d06116f1565b6040516105dd919061485f565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613d06565b6116fd565b60405161061a91906143bb565b60405180910390f35b34801561062f57600080fd5b506106386117af565b604051610645919061485f565b60405180910390f35b34801561065a57600080fd5b506106636117c6565b005b34801561067157600080fd5b5061067a6118cb565b604051610687919061449d565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b29190613a39565b611959565b6040516106c4919061485f565b60405180910390f35b3480156106d957600080fd5b506106e2611a11565b005b3480156106f057600080fd5b506106f9611a99565b604051610706919061485f565b60405180910390f35b34801561071b57600080fd5b50610724611b2c565b005b34801561073257600080fd5b5061073b611ccf565b60405161074891906143bb565b60405180910390f35b34801561075d57600080fd5b50610766611cf9565b60405161077391906143bb565b60405180910390f35b34801561078857600080fd5b50610791611d1f565b60405161079e919061449d565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190613b7c565b611db1565b005b3480156107dc57600080fd5b506107e5611f32565b6040516107f2919061485f565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613af9565b611fb6565b005b34801561083057600080fd5b50610839612018565b604051610846919061485f565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190613cbd565b6120d2565b005b34801561088457600080fd5b5061089f600480360381019061089a9190613d06565b612168565b6040516108ac919061449d565b60405180910390f35b3480156108c157600080fd5b506108ca6122b6565b6040516108d79190614482565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613a66565b612373565b6040516109149190614422565b60405180910390f35b34801561092957600080fd5b50610932612407565b005b34801561094057600080fd5b5061095b60048036038101906109569190613a39565b612544565b005b34801561096957600080fd5b5061097261263c565b60405161097f919061485f565b60405180910390f35b610990612647565b73ffffffffffffffffffffffffffffffffffffffff166109ae611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb9061473f565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610abb5750610aba8261264f565b5b9050919050565b606060008054610ad190614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd90614b56565b8015610b4a5780601f10610b1f57610100808354040283529160200191610b4a565b820191906000526020600020905b815481529060010190602001808311610b2d57829003601f168201915b5050505050905090565b610b5c612647565b73ffffffffffffffffffffffffffffffffffffffff16610b7a611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc79061473f565b60405180910390fd5b610bd8611114565b601181905550565b6000610beb82612731565b610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c21906146ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c70826116fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd89061479f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d00612647565b73ffffffffffffffffffffffffffffffffffffffff161480610d2f5750610d2e81610d29612647565b612373565b5b610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d659061461f565b60405180910390fd5b610d78838361279d565b505050565b828282610d8c33848484611251565b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc29061471f565b60405180910390fd5b60006002811115610ddf57610dde614cbf565b5b601b60009054906101000a900460ff166002811115610e0157610e00614cbf565b5b1415610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e399061481f565b60405180910390fd5b601454601554601754601654610e58919061494f565b610e629190614a30565b610e6c9190614a30565b601154610e799190614a30565b87610e82611114565b610e8c919061494f565b1115610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906145df565b60405180910390fd5b86610ed6612018565b610ee091906149d6565b341015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906146df565b60405180910390fd5b6008544210158015610f35575060095442105b15610f915760125487601054610f4b919061494f565b1115610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f83906144bf565b60405180910390fd5b610ffa565b60016002811115610fa557610fa4614cbf565b5b601b60009054906101000a900460ff166002811115610fc757610fc6614cbf565b5b1415610ff9576002601b60006101000a81548160ff02191690836002811115610ff357610ff2614cbf565b5b02179055505b5b60005b878110156110dd57600061100f612856565b905061101b33826128a4565b6001601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461106b919061494f565b925050819055506001600281111561108657611085614cbf565b5b601b60009054906101000a900460ff1660028111156110a8576110a7614cbf565b5b14156110c9576001601060008282546110c1919061494f565b925050819055505b5080806110d590614bb9565b915050610ffd565b506110e66128c2565b6011546110f1611114565b141561110b5760011515600a60009054906101000a905050505b50505050505050565b6000600d80549050905090565b600a60009054906101000a900460ff1681565b61114561113f612647565b82612978565b611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b906147df565b60405180910390fd5b61118f838383612a56565b505050565b600061119f83611959565b82106111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906144df565b60405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601a6020528060005260406000206000915090505481565b6000803086604051602001611267929190614325565b6040516020818303038152906040528051906020012090506001816040516020016112929190614380565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516112c8949392919061443d565b6020604051602081039080840390855afa1580156112ea573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b611357612647565b73ffffffffffffffffffffffffffffffffffffffff16611375611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c29061473f565b60405180910390fd5b80601390805190602001906113e1929190613823565b5050565b66470de4df82000081565b61140b83838360405180602001604052806000815250611fb6565b505050565b611418612647565b73ffffffffffffffffffffffffffffffffffffffff16611436611ccf565b73ffffffffffffffffffffffffffffffffffffffff161461148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114839061473f565b60405180910390fd5b60001515600a60009054906101000a900460ff161515146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d99061483f565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000611518611114565b8210611559576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611550906147ff565b60405180910390fd5b600d828154811061156d5761156c614d4c565b5b90600052602060002001549050919050565b611587612647565b73ffffffffffffffffffffffffffffffffffffffff166115a5611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f29061473f565b60405180910390fd5b6016548160145461160c919061494f565b111561164d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449061455f565b60405180910390fd5b60005b818110156116ed5761166933611664612856565b6128a4565b6001601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b9919061494f565b925050819055506001601460008282546116d3919061494f565b9250508190555080806116e590614bb9565b915050611650565b5050565b67011c37937e08000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d9061465f565b60405180910390fd5b80915050919050565b60006010546012546117c19190614a30565b905090565b6117ce612647565b73ffffffffffffffffffffffffffffffffffffffff166117ec611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611842576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118399061473f565b60405180910390fd5b61184e33611a0a6128a4565b61185a33611a086128a4565b61186633611a096128a4565b61187233611a026128a4565b6004601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c2919061494f565b92505081905550565b600780546118d890614b56565b80601f016020809104026020016040519081016040528092919081815260200182805461190490614b56565b80156119515780601f1061192657610100808354040283529160200191611951565b820191906000526020600020905b81548152906001019060200180831161193457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c19061463f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a19612647565b73ffffffffffffffffffffffffffffffffffffffff16611a37611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a849061473f565b60405180910390fd5b611a976000612cb2565b565b6000611aa3612647565b73ffffffffffffffffffffffffffffffffffffffff16611ac1611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061473f565b60405180910390fd5b601454601654611b279190614a30565b905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb39061467f565b60405180910390fd5b600060155414611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf89061469f565b60405180910390fd5b6000611c0b612856565b9050611c39601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826128a4565b6001601a6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cab919061494f565b92505081905550600160156000828254611cc5919061494f565b9250508190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611d2e90614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5a90614b56565b8015611da75780601f10611d7c57610100808354040283529160200191611da7565b820191906000526020600020905b815481529060010190602001808311611d8a57829003601f168201915b5050505050905090565b611db9612647565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906145bf565b60405180910390fd5b8060056000611e34612647565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ee1612647565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f269190614422565b60405180910390a35050565b6000611f3c612647565b73ffffffffffffffffffffffffffffffffffffffff16611f5a611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa79061473f565b60405180910390fd5b47905090565b611fc7611fc1612647565b83612978565b612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd906147df565b60405180910390fd5b61201284848484612d78565b50505050565b6000806120236122b6565b90506001600281111561203957612038614cbf565b5b81600281111561204c5761204b614cbf565b5b148061207c57506000600281111561206757612066614cbf565b5b81600281111561207a57612079614cbf565b5b145b156120915766f8b0a10e4700009150506120cf565b66470de4df8200006104576120a4611114565b6120ae91906149a5565b6120b891906149d6565b67011c37937e0800006120cb919061494f565b9150505b90565b6120da612647565b73ffffffffffffffffffffffffffffffffffffffff166120f8611ccf565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061473f565b60405180910390fd5b8060079080519060200190612164929190613823565b5050565b606061217382612731565b6121b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a99061477f565b60405180910390fd5b600a60009054906101000a900460ff1661225857600780546121d390614b56565b80601f01602080910402602001604051908101604052809291908181526020018280546121ff90614b56565b801561224c5780601f106122215761010080835404028352916020019161224c565b820191906000526020600020905b81548152906001019060200180831161222f57829003601f168201915b505050505090506122b1565b6000612262612dd4565b9050600081511161228257604051806020016040528060008152506122ad565b8061228c84612e66565b60405160200161229d929190614351565b6040516020818303038152906040525b9150505b919050565b60008060028111156122cb576122ca614cbf565b5b601b60009054906101000a900460ff1660028111156122ed576122ec614cbf565b5b141561230a57601b60009054906101000a900460ff169050612370565b6001600281111561231e5761231d614cbf565b5b601b60009054906101000a900460ff1660028111156123405761233f614cbf565b5b14801561234f57506009544210155b1561235d5760029050612370565b601b60009054906101000a900460ff1690505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61240f612647565b73ffffffffffffffffffffffffffffffffffffffff1661242d611ccf565b73ffffffffffffffffffffffffffffffffffffffff1614612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a9061473f565b60405180910390fd5b6000600281111561249757612496614cbf565b5b601b60009054906101000a900460ff1660028111156124b9576124b8614cbf565b5b146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f0906147bf565b60405180910390fd5b6001601b60006101000a81548160ff0219169083600281111561251f5761251e614cbf565b5b0217905550426008819055506201518060085461253c919061494f565b600981905550565b61254c612647565b73ffffffffffffffffffffffffffffffffffffffff1661256a611ccf565b73ffffffffffffffffffffffffffffffffffffffff16146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b79061473f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126279061451f565b60405180910390fd5b61263981612cb2565b50565b66f8b0a10e47000081565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061271a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061272a575061272982612fc7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612810836116fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080601454612864611114565b61286e9190614a30565b90506000600190505b801561289c5760018261288a919061494f565b915061289582612731565b9050612877565b819250505090565b6128be828260405180602001604052806000815250613031565b5050565b60006128cc611ccf565b73ffffffffffffffffffffffffffffffffffffffff16346040516128ef906143a6565b60006040518083038185875af1925050503d806000811461292c576040519150601f19603f3d011682016040523d82523d6000602084013e612931565b606091505b5050905080612975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296c9061457f565b60405180910390fd5b50565b600061298382612731565b6129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b9906145ff565b60405180910390fd5b60006129cd836116fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a3c57508373ffffffffffffffffffffffffffffffffffffffff16612a2484610be0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a4d5750612a4c8185612373565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a76826116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac39061475f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b339061459f565b60405180910390fd5b612b4783838361308c565b612b5260008261279d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba29190614a30565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bf9919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d83848484612a56565b612d8f848484846131a0565b612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc5906144ff565b60405180910390fd5b50505050565b606060138054612de390614b56565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0f90614b56565b8015612e5c5780601f10612e3157610100808354040283529160200191612e5c565b820191906000526020600020905b815481529060010190602001808311612e3f57829003601f168201915b5050505050905090565b60606000821415612eae576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc2565b600082905060005b60008214612ee0578080612ec990614bb9565b915050600a82612ed991906149a5565b9150612eb6565b60008167ffffffffffffffff811115612efc57612efb614d7b565b5b6040519080825280601f01601f191660200182016040528015612f2e5781602001600182028036833780820191505090505b5090505b60008514612fbb57600182612f479190614a30565b9150600a85612f569190614c30565b6030612f62919061494f565b60f81b818381518110612f7857612f77614d4c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fb491906149a5565b9450612f32565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61303b8383613337565b61304860008484846131a0565b613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906144ff565b60405180910390fd5b505050565b613097838383613505565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130da576130d58161350a565b613119565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613118576131178382613553565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561315c57613157816136c0565b61319b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461319a576131998282613791565b5b5b505050565b60006131c18473ffffffffffffffffffffffffffffffffffffffff16613810565b1561332a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131ea612647565b8786866040518563ffffffff1660e01b815260040161320c94939291906143d6565b602060405180830381600087803b15801561322657600080fd5b505af192505050801561325757506040513d601f19601f820116820180604052508101906132549190613c90565b60015b6132da573d8060008114613287576040519150601f19603f3d011682016040523d82523d6000602084013e61328c565b606091505b506000815114156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c9906144ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061332f565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e906146bf565b60405180910390fd5b6133b081612731565b156133f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e79061453f565b60405180910390fd5b6133fc6000838361308c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344c919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600d80549050600e600083815260200190815260200160002081905550600d81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161356084611959565b61356a9190614a30565b90506000600c600084815260200190815260200160002054905081811461364f576000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081600c600083815260200190815260200160002081905550505b600c600084815260200190815260200160002060009055600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600d805490506136d49190614a30565b90506000600e60008481526020019081526020016000205490506000600d838154811061370457613703614d4c565b5b9060005260206000200154905080600d838154811061372657613725614d4c565b5b906000526020600020018190555081600e600083815260200190815260200160002081905550600e600085815260200190815260200160002060009055600d80548061377557613774614d1d565b5b6001900381819060005260206000200160009055905550505050565b600061379c83611959565b905081600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080600c600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461382f90614b56565b90600052602060002090601f0160209004810192826138515760008555613898565b82601f1061386a57805160ff1916838001178555613898565b82800160010185558215613898579182015b8281111561389757825182559160200191906001019061387c565b5b5090506138a591906138a9565b5090565b5b808211156138c25760008160009055506001016138aa565b5090565b60006138d96138d48461489f565b61487a565b9050828152602081018484840111156138f5576138f4614daf565b5b613900848285614b14565b509392505050565b600061391b613916846148d0565b61487a565b90508281526020810184848401111561393757613936614daf565b5b613942848285614b14565b509392505050565b60008135905061395981615596565b92915050565b60008135905061396e816155ad565b92915050565b600081359050613983816155c4565b92915050565b600081359050613998816155db565b92915050565b6000815190506139ad816155db565b92915050565b600082601f8301126139c8576139c7614daa565b5b81356139d88482602086016138c6565b91505092915050565b600082601f8301126139f6576139f5614daa565b5b8135613a06848260208601613908565b91505092915050565b600081359050613a1e816155f2565b92915050565b600081359050613a3381615609565b92915050565b600060208284031215613a4f57613a4e614db9565b5b6000613a5d8482850161394a565b91505092915050565b60008060408385031215613a7d57613a7c614db9565b5b6000613a8b8582860161394a565b9250506020613a9c8582860161394a565b9150509250929050565b600080600060608486031215613abf57613abe614db9565b5b6000613acd8682870161394a565b9350506020613ade8682870161394a565b9250506040613aef86828701613a0f565b9150509250925092565b60008060008060808587031215613b1357613b12614db9565b5b6000613b218782880161394a565b9450506020613b328782880161394a565b9350506040613b4387828801613a0f565b925050606085013567ffffffffffffffff811115613b6457613b63614db4565b5b613b70878288016139b3565b91505092959194509250565b60008060408385031215613b9357613b92614db9565b5b6000613ba18582860161394a565b9250506020613bb28582860161395f565b9150509250929050565b60008060408385031215613bd357613bd2614db9565b5b6000613be18582860161394a565b9250506020613bf285828601613a0f565b9150509250929050565b60008060008060808587031215613c1657613c15614db9565b5b6000613c248782880161394a565b9450506020613c3587828801613a24565b9350506040613c4687828801613974565b9250506060613c5787828801613974565b91505092959194509250565b600060208284031215613c7957613c78614db9565b5b6000613c8784828501613989565b91505092915050565b600060208284031215613ca657613ca5614db9565b5b6000613cb48482850161399e565b91505092915050565b600060208284031215613cd357613cd2614db9565b5b600082013567ffffffffffffffff811115613cf157613cf0614db4565b5b613cfd848285016139e1565b91505092915050565b600060208284031215613d1c57613d1b614db9565b5b6000613d2a84828501613a0f565b91505092915050565b60008060008060808587031215613d4d57613d4c614db9565b5b6000613d5b87828801613a0f565b9450506020613d6c87828801613a24565b9350506040613d7d87828801613974565b9250506060613d8e87828801613974565b91505092959194509250565b613da381614a64565b82525050565b613dba613db582614a64565b614c02565b82525050565b613dc981614a76565b82525050565b613dd881614a82565b82525050565b613def613dea82614a82565b614c14565b82525050565b6000613e0082614901565b613e0a8185614917565b9350613e1a818560208601614b23565b613e2381614dbe565b840191505092915050565b613e3781614b02565b82525050565b6000613e488261490c565b613e528185614933565b9350613e62818560208601614b23565b613e6b81614dbe565b840191505092915050565b6000613e818261490c565b613e8b8185614944565b9350613e9b818560208601614b23565b80840191505092915050565b6000613eb4601c83614944565b9150613ebf82614ddc565b601c82019050919050565b6000613ed7602983614933565b9150613ee282614e05565b604082019050919050565b6000613efa602b83614933565b9150613f0582614e54565b604082019050919050565b6000613f1d603283614933565b9150613f2882614ea3565b604082019050919050565b6000613f40602683614933565b9150613f4b82614ef2565b604082019050919050565b6000613f63601c83614933565b9150613f6e82614f41565b602082019050919050565b6000613f86603383614933565b9150613f9182614f6a565b604082019050919050565b6000613fa9601483614933565b9150613fb482614fb9565b602082019050919050565b6000613fcc602483614933565b9150613fd782614fe2565b604082019050919050565b6000613fef601983614933565b9150613ffa82615031565b602082019050919050565b6000614012601e83614933565b915061401d8261505a565b602082019050919050565b6000614035602c83614933565b915061404082615083565b604082019050919050565b6000614058603883614933565b9150614063826150d2565b604082019050919050565b600061407b602a83614933565b915061408682615121565b604082019050919050565b600061409e602983614933565b91506140a982615170565b604082019050919050565b60006140c1601583614933565b91506140cc826151bf565b602082019050919050565b60006140e4601883614933565b91506140ef826151e8565b602082019050919050565b6000614107602083614933565b915061411282615211565b602082019050919050565b600061412a603083614933565b91506141358261523a565b604082019050919050565b600061414d602c83614933565b915061415882615289565b604082019050919050565b6000614170600583614944565b915061417b826152d8565b600582019050919050565b6000614193601183614933565b915061419e82615301565b602082019050919050565b60006141b6602083614933565b91506141c18261532a565b602082019050919050565b60006141d9602983614933565b91506141e482615353565b604082019050919050565b60006141fc602f83614933565b9150614207826153a2565b604082019050919050565b600061421f602183614933565b915061422a826153f1565b604082019050919050565b6000614242601b83614933565b915061424d82615440565b602082019050919050565b6000614265600083614928565b915061427082615469565b600082019050919050565b6000614288603183614933565b91506142938261546c565b604082019050919050565b60006142ab602c83614933565b91506142b6826154bb565b604082019050919050565b60006142ce601583614933565b91506142d98261550a565b602082019050919050565b60006142f1602483614933565b91506142fc82615533565b604082019050919050565b61431081614aeb565b82525050565b61431f81614af5565b82525050565b60006143318285613da9565b6014820191506143418284613da9565b6014820191508190509392505050565b600061435d8285613e76565b91506143698284613e76565b915061437482614163565b91508190509392505050565b600061438b82613ea7565b91506143978284613dde565b60208201915081905092915050565b60006143b182614258565b9150819050919050565b60006020820190506143d06000830184613d9a565b92915050565b60006080820190506143eb6000830187613d9a565b6143f86020830186613d9a565b6144056040830185614307565b81810360608301526144178184613df5565b905095945050505050565b60006020820190506144376000830184613dc0565b92915050565b60006080820190506144526000830187613dcf565b61445f6020830186614316565b61446c6040830185613dcf565b6144796060830184613dcf565b95945050505050565b60006020820190506144976000830184613e2e565b92915050565b600060208201905081810360008301526144b78184613e3d565b905092915050565b600060208201905081810360008301526144d881613eca565b9050919050565b600060208201905081810360008301526144f881613eed565b9050919050565b6000602082019050818103600083015261451881613f10565b9050919050565b6000602082019050818103600083015261453881613f33565b9050919050565b6000602082019050818103600083015261455881613f56565b9050919050565b6000602082019050818103600083015261457881613f79565b9050919050565b6000602082019050818103600083015261459881613f9c565b9050919050565b600060208201905081810360008301526145b881613fbf565b9050919050565b600060208201905081810360008301526145d881613fe2565b9050919050565b600060208201905081810360008301526145f881614005565b9050919050565b6000602082019050818103600083015261461881614028565b9050919050565b600060208201905081810360008301526146388161404b565b9050919050565b600060208201905081810360008301526146588161406e565b9050919050565b6000602082019050818103600083015261467881614091565b9050919050565b60006020820190508181036000830152614698816140b4565b9050919050565b600060208201905081810360008301526146b8816140d7565b9050919050565b600060208201905081810360008301526146d8816140fa565b9050919050565b600060208201905081810360008301526146f88161411d565b9050919050565b6000602082019050818103600083015261471881614140565b9050919050565b6000602082019050818103600083015261473881614186565b9050919050565b60006020820190508181036000830152614758816141a9565b9050919050565b60006020820190508181036000830152614778816141cc565b9050919050565b60006020820190508181036000830152614798816141ef565b9050919050565b600060208201905081810360008301526147b881614212565b9050919050565b600060208201905081810360008301526147d881614235565b9050919050565b600060208201905081810360008301526147f88161427b565b9050919050565b600060208201905081810360008301526148188161429e565b9050919050565b60006020820190508181036000830152614838816142c1565b9050919050565b60006020820190508181036000830152614858816142e4565b9050919050565b60006020820190506148746000830184614307565b92915050565b6000614884614895565b90506148908282614b88565b919050565b6000604051905090565b600067ffffffffffffffff8211156148ba576148b9614d7b565b5b6148c382614dbe565b9050602081019050919050565b600067ffffffffffffffff8211156148eb576148ea614d7b565b5b6148f482614dbe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061495a82614aeb565b915061496583614aeb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499a57614999614c61565b5b828201905092915050565b60006149b082614aeb565b91506149bb83614aeb565b9250826149cb576149ca614c90565b5b828204905092915050565b60006149e182614aeb565b91506149ec83614aeb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a2557614a24614c61565b5b828202905092915050565b6000614a3b82614aeb565b9150614a4683614aeb565b925082821015614a5957614a58614c61565b5b828203905092915050565b6000614a6f82614acb565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614ac682615582565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b0d82614ab8565b9050919050565b82818337600083830152505050565b60005b83811015614b41578082015181840152602081019050614b26565b83811115614b50576000848401525b50505050565b60006002820490506001821680614b6e57607f821691505b60208210811415614b8257614b81614cee565b5b50919050565b614b9182614dbe565b810181811067ffffffffffffffff82111715614bb057614baf614d7b565b5b80604052505050565b6000614bc482614aeb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bf757614bf6614c61565b5b600182019050919050565b6000614c0d82614c1e565b9050919050565b6000819050919050565b6000614c2982614dcf565b9050919050565b6000614c3b82614aeb565b9150614c4683614aeb565b925082614c5657614c55614c90565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e7420696e2060008201527f50726573616c652e2e0000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f756768205265736572766564204e46547320666f722043726560008201527f61746f72206c65667420746f206d696e742e2e00000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768204e465473206c65667420746f206d696e742e2e0000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792044657620686173206163636573732e2e0000000000000000000000600082015250565b7f44657620616c7265616479206d696e746564204e46542e2e0000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f742073756666696369656e7420457468657220746f206d696e742074686960008201527f7320616d6f756e74206f66204e46547300000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e76616c6964205369676e6174757265000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c652068617320616c7265616479206f70656e6564210000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e20796574210000000000000000000000600082015250565b7f43616e6e6f74206368616e676520736f6c646f7574206261636b20746f20666160008201527f6c73652100000000000000000000000000000000000000000000000000000000602082015250565b6003811061559357615592614cbf565b5b50565b61559f81614a64565b81146155aa57600080fd5b50565b6155b681614a76565b81146155c157600080fd5b50565b6155cd81614a82565b81146155d857600080fd5b50565b6155e481614a8c565b81146155ef57600080fd5b50565b6155fb81614aeb565b811461560657600080fd5b50565b61561281614af5565b811461561d57600080fd5b5056fea2646970667358221220d78de55255021d808c4aa224e4c3729c79d42fb4d9a77370a11e58aa642d9c5a64736f6c63430008070033
Deployed Bytecode Sourcemap
43134:8604:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45100:8;;;49943:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37001:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49622:88;;;;;;;;;;;;;:::i;:::-;;26036:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25559:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46869:1271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37641:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22894:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26926:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37309:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44465:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46515:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45327:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43702:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27336:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50757:155;;;;;;;;;;;;;:::i;:::-;;37831:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48185:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43649:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23947:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50559:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48586:294;;;;;;;;;;;;;:::i;:::-;;22665:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23677:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:94;;;;;;;;;;;;;:::i;:::-;;50110:145;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48934:307;;;;;;;;;;;;;:::i;:::-;;3940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44173:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24422:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26329:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49760:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27592:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51399:331;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45448:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24597:558;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50965:385;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26695:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49291:268;;;;;;;;;;;;;:::i;:::-;;4840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43593:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49943:87;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50016:6:::1;50008:5;;:14;;;;;;;;;;;;;;;;;;49943:87:::0;:::o;37001:224::-;37103:4;37142:35;37127:50;;;:11;:50;;;;:90;;;;37181:36;37205:11;37181:23;:36::i;:::-;37127:90;37120:97;;37001:224;;;:::o;24253:100::-;24307:13;24340:5;24333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24253:100;:::o;49622:88::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49689:13:::1;:11;:13::i;:::-;49672:14;:30;;;;49622:88::o:0;26036:221::-;26112:7;26140:16;26148:7;26140;:16::i;:::-;26132:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26225:15;:24;26241:7;26225:24;;;;;;;;;;;;;;;;;;;;;26218:31;;26036:221;;;:::o;25559:411::-;25640:13;25656:23;25671:7;25656:14;:23::i;:::-;25640:39;;25704:5;25698:11;;:2;:11;;;;25690:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25798:5;25782:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25807:37;25824:5;25831:12;:10;:12::i;:::-;25807:16;:37::i;:::-;25782:62;25760:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25941:21;25950:2;25954:7;25941:8;:21::i;:::-;25629:341;25559:411;;:::o;46869:1271::-;46949:2;46953;46957;46017:41;46038:10;46049:2;46052;46055;46017:20;:41::i;:::-;46008:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47008:12:::1;46995:25;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:25;;;;;;;;:::i;:::-;;;;46987:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47177:21;;47157:17;;47135:19;;47109:23;;:45;;;;:::i;:::-;:65;;;;:::i;:::-;:89;;;;:::i;:::-;47091:14;;:108;;;;:::i;:::-;47081:6;47065:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:134;;47057:177;;;;;;;;;;;;:::i;:::-;;;;;;;;;47279:6;47266:10;:8;:10::i;:::-;:19;;;;:::i;:::-;47253:9;:32;;47245:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;47382:17;;47363:15;:36;;:78;;;;;47421:20;;47403:15;:38;47363:78;47359:351;;;47500:16;;47490:6;47466:21;;:30;;;;:::i;:::-;:50;;47458:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;47359:351;;;47621:13;47608:26;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:26;;;;;;;;:::i;:::-;;;47604:95;;;47667:16;47655:9;;:28;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;47604:95;47359:351;47735:9;47730:282;47754:6;47750:1;:10;47730:282;;;47782:11;47796:9;:7;:9::i;:::-;47782:23;;47820:26;47830:10;47842:3;47820:9;:26::i;:::-;47892:1;47861:15;:27;47877:10;47861:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;47925:13;47912:26;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:26;;;;;;;;:::i;:::-;;;47908:93;;;47984:1;47959:21;;:26;;;;;;;:::i;:::-;;;;;;;;47908:93;47767:245;47762:3;;;;;:::i;:::-;;;;47730:282;;;;48024:15;:13;:15::i;:::-;48073:14;;48056:13;:11;:13::i;:::-;:31;48052:79;;;48115:4;48104:15;;:7;;;;;;;;::::0;;:15;48052:79:::1;46869:1271:::0;;;;;;;:::o;37641:113::-;37702:7;37729:10;:17;;;;37722:24;;37641:113;:::o;22894:19::-;;;;;;;;;;;;;:::o;26926:339::-;27121:41;27140:12;:10;:12::i;:::-;27154:7;27121:18;:41::i;:::-;27113:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27229:28;27239:4;27245:2;27249:7;27229:9;:28::i;:::-;26926:339;;;:::o;37309:256::-;37406:7;37442:23;37459:5;37442:16;:23::i;:::-;37434:5;:31;37426:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37531:12;:19;37544:5;37531:19;;;;;;;;;;;;;;;:26;37551:5;37531:26;;;;;;;;;;;;37524:33;;37309:256;;;;:::o;44465:50::-;;;;;;;;;;;;;;;;;:::o;46515:306::-;46614:4;46631:12;46681:4;46688;46656:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46646:48;;;;;;46631:63;;46721:92;46794:4;46741:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;46731:69;;;;;;46802:2;46806;46810;46721:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46712:101;;:5;;;;;;;;;;;:101;;;46705:108;;;46515:306;;;;;;:::o;45327:109::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45420:8:::1;45402:15;:26;;;;;;;;;;;;:::i;:::-;;45327:109:::0;:::o;43702:47::-;43739:10;43702:47;:::o;27336:185::-;27474:39;27491:4;27497:2;27501:7;27474:39;;;;;;;;;;;;:16;:39::i;:::-;27336:185;;;:::o;50757:155::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50829:5:::1;50818:16;;:7;;;;;;;;;;;:16;;;50810:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50897:7;;;;;;;;;;;50896:8;50886:7;;:18;;;;;;;;;;;;;;;;;;50757:155::o:0;37831:233::-;37906:7;37942:30;:28;:30::i;:::-;37934:5;:38;37926:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38039:10;38050:5;38039:17;;;;;;;;:::i;:::-;;;;;;;;;;38032:24;;37831:233;;;:::o;48185:393::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48300:23:::1;;48290:6;48266:21;;:30;;;;:::i;:::-;:57;;48258:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;48395:6;48390:181;48411:6;48407:1;:10;48390:181;;;48439:32;48449:10;48461:9;:7;:9::i;:::-;48439;:32::i;:::-;48517:1;48486:15;:27;48502:10;48486:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;48558:1;48533:21;;:26;;;;;;;:::i;:::-;;;;;;;;48419:3;;;;;:::i;:::-;;;;48390:181;;;;48185:393:::0;:::o;43649:46::-;43685:10;43649:46;:::o;23947:239::-;24019:7;24039:13;24055:7;:16;24063:7;24055:16;;;;;;;;;;;;;;;;;;;;;24039:32;;24107:1;24090:19;;:5;:19;;;;24082:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24173:5;24166:12;;;23947:239;;;:::o;50559:121::-;50608:4;50651:21;;50632:16;;:40;;;;:::i;:::-;50625:47;;50559:121;:::o;48586:294::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48688:27:::1;48698:10;48710:4;48688:9;:27::i;:::-;48726;48736:10;48748:4;48726:9;:27::i;:::-;48764;48774:10;48786:4;48764:9;:27::i;:::-;48802;48812:10;48824:4;48802:9;:27::i;:::-;48871:1;48840:15;:27;48856:10;48840:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;48586:294::o:0;22665:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23677:208::-;23749:7;23794:1;23777:19;;:5;:19;;;;23769:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23861:9;:16;23871:5;23861:16;;;;;;;;;;;;;;;;23854:23;;23677:208;;;:::o;4591:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:21:::1;4674:1;4656:9;:21::i;:::-;4591:94::o:0;50110:145::-;50176:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50226:21:::1;;50200:23;;:47;;;;:::i;:::-;50193:54;;50110:145:::0;:::o;48934:307::-;49001:3;;;;;;;;;;;48987:17;;:10;:17;;;48979:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;49070:1;49049:17;;:22;49041:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49111:11;49125:9;:7;:9::i;:::-;49111:23;;49145:19;49155:3;;;;;;;;;;;49160;49145:9;:19::i;:::-;49199:1;49175:15;:20;49191:3;;;;;;;;;;;49175:20;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;49232:1;49211:17;;:22;;;;;;;:::i;:::-;;;;;;;;48968:273;48934:307::o;3940:87::-;3986:7;4013:6;;;;;;;;;;;4006:13;;3940:87;:::o;44173:63::-;;;;;;;;;;;;;:::o;24422:104::-;24478:13;24511:7;24504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24422:104;:::o;26329:295::-;26444:12;:10;:12::i;:::-;26432:24;;:8;:24;;;;26424:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26544:8;26499:18;:32;26518:12;:10;:12::i;:::-;26499:32;;;;;;;;;;;;;;;:42;26532:8;26499:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26597:8;26568:48;;26583:12;:10;:12::i;:::-;26568:48;;;26607:8;26568:48;;;;;;:::i;:::-;;;;;;;;26329:295;;:::o;49760:109::-;49816:4;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49840:21:::1;49833:28;;49760:109:::0;:::o;27592:328::-;27767:41;27786:12;:10;:12::i;:::-;27800:7;27767:18;:41::i;:::-;27759:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27873:39;27887:4;27893:2;27897:7;27906:5;27873:13;:39::i;:::-;27592:328;;;;:::o;51399:331::-;51439:4;51456:16;51475:13;:11;:13::i;:::-;51456:32;;51527:13;51513:27;;;;;;;;:::i;:::-;;:10;:27;;;;;;;;:::i;:::-;;;:57;;;;51558:12;51544:26;;;;;;;;:::i;:::-;;:10;:26;;;;;;;;:::i;:::-;;;51513:57;51509:214;;;43632:10;51587:22;;;;;51509:214;43739:10;51689:4;51675:13;:11;:13::i;:::-;:18;;;;:::i;:::-;51674:36;;;;:::i;:::-;43685:10;51658:53;;;;:::i;:::-;51651:60;;;51399:331;;:::o;45448:125::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45551:14:::1;45535:13;:30;;;;;;;;;;;;:::i;:::-;;45448:125:::0;:::o;24597:558::-;24670:13;24704:16;24712:7;24704;:16::i;:::-;24696:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24885:7;;;;;;;;;;;24880:264;;24916:13;24909:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24880:264;24981:21;25005:10;:8;:10::i;:::-;24981:34;;25061:1;25043:7;25037:21;:25;:95;;;;;;;;;;;;;;;;;25089:7;25098:18;:7;:16;:18::i;:::-;25072:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25037:95;25030:102;;;24597:558;;;;:::o;50965:385::-;51008:5;51042:12;51029:25;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:25;;;;;;;;:::i;:::-;;;51025:318;;;51078:9;;;;;;;;;;;51071:16;;;;51025:318;51146:13;51133:26;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:26;;;;;;;;:::i;:::-;;;:69;;;;;51182:20;;51163:15;:39;;51133:69;51129:203;;;51230:16;51223:23;;;;51129:203;51307:9;;;;;;;;;;;51300:16;;50965:385;;:::o;26695:164::-;26792:4;26816:18;:25;26835:5;26816:25;;;;;;;;;;;;;;;:35;26842:8;26816:35;;;;;;;;;;;;;;;;;;;;;;;;;26809:42;;26695:164;;;;:::o;49291:268::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49366:12:::1;49353:25;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:25;;;;;;;;:::i;:::-;;;49345:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49433:13;49421:9;;:25;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;49477:15;49457:17;:35;;;;49546:5;49526:17;;:25;;;;:::i;:::-;49503:20;:48;;;;49291:268::o:0;4840:192::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4949:1:::1;4929:22;;:8;:22;;;;4921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5005:19;5015:8;5005:9;:19::i;:::-;4840:192:::0;:::o;43593:49::-;43632:10;43593:49;:::o;2728:98::-;2781:7;2808:10;2801:17;;2728:98;:::o;23302:305::-;23404:4;23456:25;23441:40;;;:11;:40;;;;:105;;;;23513:33;23498:48;;;:11;:48;;;;23441:105;:158;;;;23563:36;23587:11;23563:23;:36::i;:::-;23441:158;23421:178;;23302:305;;;:::o;29430:127::-;29495:4;29547:1;29519:30;;:7;:16;29527:7;29519:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29512:37;;29430:127;;;:::o;33412:174::-;33514:2;33487:15;:24;33503:7;33487:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33570:7;33566:2;33532:46;;33541:23;33556:7;33541:14;:23::i;:::-;33532:46;;;;;;;;;;;;33412:174;;:::o;45629:297::-;45670:7;45690:14;45723:21;;45707:13;:11;:13::i;:::-;:37;;;;:::i;:::-;45690:54;;45755:11;45769:4;45755:18;;45784:98;45791:6;45784:98;;;45827:1;45814:14;;;;;:::i;:::-;;;45852:18;45860:9;45852:7;:18::i;:::-;45843:27;;45784:98;;;45909:9;45902:16;;;;45629:297;:::o;30414:110::-;30490:26;30500:2;30504:7;30490:26;;;;;;;;;;;;:9;:26::i;:::-;30414:110;;:::o;50317:160::-;50363:9;50386:7;:5;:7::i;:::-;50378:21;;50407:9;50378:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50362:59;;;50440:4;50432:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;50351:126;50317:160::o;29724:348::-;29817:4;29842:16;29850:7;29842;:16::i;:::-;29834:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29918:13;29934:23;29949:7;29934:14;:23::i;:::-;29918:39;;29987:5;29976:16;;:7;:16;;;:51;;;;30020:7;29996:31;;:20;30008:7;29996:11;:20::i;:::-;:31;;;29976:51;:87;;;;30031:32;30048:5;30055:7;30031:16;:32::i;:::-;29976:87;29968:96;;;29724:348;;;;:::o;32716:578::-;32875:4;32848:31;;:23;32863:7;32848:14;:23::i;:::-;:31;;;32840:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32958:1;32944:16;;:2;:16;;;;32936:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33014:39;33035:4;33041:2;33045:7;33014:20;:39::i;:::-;33118:29;33135:1;33139:7;33118:8;:29::i;:::-;33179:1;33160:9;:15;33170:4;33160:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33208:1;33191:9;:13;33201:2;33191:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33239:2;33220:7;:16;33228:7;33220:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33278:7;33274:2;33259:27;;33268:4;33259:27;;;;;;;;;;;;32716:578;;;:::o;5040:173::-;5096:16;5115:6;;;;;;;;;;;5096:25;;5141:8;5132:6;;:17;;;;;;;;;;;;;;;;;;5196:8;5165:40;;5186:8;5165:40;;;;;;;;;;;;5085:128;5040:173;:::o;28802:315::-;28959:28;28969:4;28975:2;28979:7;28959:9;:28::i;:::-;29006:48;29029:4;29035:2;29039:7;29048:5;29006:22;:48::i;:::-;28998:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28802:315;;;;:::o;45153:116::-;45213:13;45246:15;45239:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45153:116;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;15926:157::-;16011:4;16050:25;16035:40;;;:11;:40;;;;16028:47;;15926:157;;;:::o;30751:321::-;30881:18;30887:2;30891:7;30881:5;:18::i;:::-;30932:54;30963:1;30967:2;30971:7;30980:5;30932:22;:54::i;:::-;30910:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30751:321;;;:::o;38677:574::-;38786:45;38813:4;38819:2;38823:7;38786:26;:45::i;:::-;38864:1;38848:18;;:4;:18;;;38844:197;;;38883:40;38915:7;38883:31;:40::i;:::-;38844:197;;;38963:2;38955:10;;:4;:10;;;38951:90;;38982:47;39015:4;39021:7;38982:32;:47::i;:::-;38951:90;38844:197;39069:1;39055:16;;:2;:16;;;39051:193;;;39088:45;39125:7;39088:36;:45::i;:::-;39051:193;;;39171:4;39165:10;;:2;:10;;;39161:83;;39192:40;39220:2;39224:7;39192:27;:40::i;:::-;39161:83;39051:193;38677:574;;;:::o;34151:799::-;34306:4;34327:15;:2;:13;;;:15::i;:::-;34323:620;;;34379:2;34363:36;;;34400:12;:10;:12::i;:::-;34414:4;34420:7;34429:5;34363:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34359:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34622:1;34605:6;:13;:18;34601:272;;;34648:60;;;;;;;;;;:::i;:::-;;;;;;;;34601:272;34823:6;34817:13;34808:6;34804:2;34800:15;34793:38;34359:529;34496:41;;;34486:51;;;:6;:51;;;;34479:58;;;;;34323:620;34927:4;34920:11;;34151:799;;;;;;;:::o;31408:382::-;31502:1;31488:16;;:2;:16;;;;31480:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31561:16;31569:7;31561;:16::i;:::-;31560:17;31552:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31623:45;31652:1;31656:2;31660:7;31623:20;:45::i;:::-;31698:1;31681:9;:13;31691:2;31681:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31729:2;31710:7;:16;31718:7;31710:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31774:7;31770:2;31749:33;;31766:1;31749:33;;;;;;;;;;;;31408:382;;:::o;35522:126::-;;;;:::o;39974:164::-;40078:10;:17;;;;40051:15;:24;40067:7;40051:24;;;;;;;;;;;:44;;;;40106:10;40122:7;40106:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39974:164;:::o;40765:988::-;41031:22;41081:1;41056:22;41073:4;41056:16;:22::i;:::-;:26;;;;:::i;:::-;41031:51;;41093:18;41114:17;:26;41132:7;41114:26;;;;;;;;;;;;41093:47;;41261:14;41247:10;:28;41243:328;;41292:19;41314:12;:18;41327:4;41314:18;;;;;;;;;;;;;;;:34;41333:14;41314:34;;;;;;;;;;;;41292:56;;41398:11;41365:12;:18;41378:4;41365:18;;;;;;;;;;;;;;;:30;41384:10;41365:30;;;;;;;;;;;:44;;;;41515:10;41482:17;:30;41500:11;41482:30;;;;;;;;;;;:43;;;;41277:294;41243:328;41667:17;:26;41685:7;41667:26;;;;;;;;;;;41660:33;;;41711:12;:18;41724:4;41711:18;;;;;;;;;;;;;;;:34;41730:14;41711:34;;;;;;;;;;;41704:41;;;40846:907;;40765:988;;:::o;42048:1079::-;42301:22;42346:1;42326:10;:17;;;;:21;;;;:::i;:::-;42301:46;;42358:18;42379:15;:24;42395:7;42379:24;;;;;;;;;;;;42358:45;;42730:19;42752:10;42763:14;42752:26;;;;;;;;:::i;:::-;;;;;;;;;;42730:48;;42816:11;42791:10;42802;42791:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42927:10;42896:15;:28;42912:11;42896:28;;;;;;;;;;;:41;;;;43068:15;:24;43084:7;43068:24;;;;;;;;;;;43061:31;;;43103:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42119:1008;;;42048:1079;:::o;39552:221::-;39637:14;39654:20;39671:2;39654:16;:20::i;:::-;39637:37;;39712:7;39685:12;:16;39698:2;39685:16;;;;;;;;;;;;;;;:24;39702:6;39685:24;;;;;;;;;;;:34;;;;39759:6;39730:17;:26;39748:7;39730:26;;;;;;;;;;;:35;;;;39626:147;39552:221;;:::o;5986:387::-;6046:4;6254:12;6321:7;6309:20;6301:28;;6364:1;6357:4;:8;6350:15;;;5986:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:135::-;2466:5;2504:6;2491:20;2482:29;;2520:31;2545:5;2520:31;:::i;:::-;2422:135;;;;:::o;2563:329::-;2622:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:119;;;2677:79;;:::i;:::-;2639:119;2797:1;2822:53;2867:7;2858:6;2847:9;2843:22;2822:53;:::i;:::-;2812:63;;2768:117;2563:329;;;;:::o;2898:474::-;2966:6;2974;3023:2;3011:9;3002:7;2998:23;2994:32;2991:119;;;3029:79;;:::i;:::-;2991:119;3149:1;3174:53;3219:7;3210:6;3199:9;3195:22;3174:53;:::i;:::-;3164:63;;3120:117;3276:2;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3247:118;2898:474;;;;;:::o;3378:619::-;3455:6;3463;3471;3520:2;3508:9;3499:7;3495:23;3491:32;3488:119;;;3526:79;;:::i;:::-;3488:119;3646:1;3671:53;3716:7;3707:6;3696:9;3692:22;3671:53;:::i;:::-;3661:63;;3617:117;3773:2;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3744:118;3901:2;3927:53;3972:7;3963:6;3952:9;3948:22;3927:53;:::i;:::-;3917:63;;3872:118;3378:619;;;;;:::o;4003:943::-;4098:6;4106;4114;4122;4171:3;4159:9;4150:7;4146:23;4142:33;4139:120;;;4178:79;;:::i;:::-;4139:120;4298:1;4323:53;4368:7;4359:6;4348:9;4344:22;4323:53;:::i;:::-;4313:63;;4269:117;4425:2;4451:53;4496:7;4487:6;4476:9;4472:22;4451:53;:::i;:::-;4441:63;;4396:118;4553:2;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4524:118;4709:2;4698:9;4694:18;4681:32;4740:18;4732:6;4729:30;4726:117;;;4762:79;;:::i;:::-;4726:117;4867:62;4921:7;4912:6;4901:9;4897:22;4867:62;:::i;:::-;4857:72;;4652:287;4003:943;;;;;;;:::o;4952:468::-;5017:6;5025;5074:2;5062:9;5053:7;5049:23;5045:32;5042:119;;;5080:79;;:::i;:::-;5042:119;5200:1;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5171:117;5327:2;5353:50;5395:7;5386:6;5375:9;5371:22;5353:50;:::i;:::-;5343:60;;5298:115;4952:468;;;;;:::o;5426:474::-;5494:6;5502;5551:2;5539:9;5530:7;5526:23;5522:32;5519:119;;;5557:79;;:::i;:::-;5519:119;5677:1;5702:53;5747:7;5738:6;5727:9;5723:22;5702:53;:::i;:::-;5692:63;;5648:117;5804:2;5830:53;5875:7;5866:6;5855:9;5851:22;5830:53;:::i;:::-;5820:63;;5775:118;5426:474;;;;;:::o;5906:761::-;5990:6;5998;6006;6014;6063:3;6051:9;6042:7;6038:23;6034:33;6031:120;;;6070:79;;:::i;:::-;6031:120;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:51;6386:7;6377:6;6366:9;6362:22;6343:51;:::i;:::-;6333:61;;6288:116;6443:2;6469:53;6514:7;6505:6;6494:9;6490:22;6469:53;:::i;:::-;6459:63;;6414:118;6571:2;6597:53;6642:7;6633:6;6622:9;6618:22;6597:53;:::i;:::-;6587:63;;6542:118;5906:761;;;;;;;:::o;6673:327::-;6731:6;6780:2;6768:9;6759:7;6755:23;6751:32;6748:119;;;6786:79;;:::i;:::-;6748:119;6906:1;6931:52;6975:7;6966:6;6955:9;6951:22;6931:52;:::i;:::-;6921:62;;6877:116;6673:327;;;;:::o;7006:349::-;7075:6;7124:2;7112:9;7103:7;7099:23;7095:32;7092:119;;;7130:79;;:::i;:::-;7092:119;7250:1;7275:63;7330:7;7321:6;7310:9;7306:22;7275:63;:::i;:::-;7265:73;;7221:127;7006:349;;;;:::o;7361:509::-;7430:6;7479:2;7467:9;7458:7;7454:23;7450:32;7447:119;;;7485:79;;:::i;:::-;7447:119;7633:1;7622:9;7618:17;7605:31;7663:18;7655:6;7652:30;7649:117;;;7685:79;;:::i;:::-;7649:117;7790:63;7845:7;7836:6;7825:9;7821:22;7790:63;:::i;:::-;7780:73;;7576:287;7361:509;;;;:::o;7876:329::-;7935:6;7984:2;7972:9;7963:7;7959:23;7955:32;7952:119;;;7990:79;;:::i;:::-;7952:119;8110:1;8135:53;8180:7;8171:6;8160:9;8156:22;8135:53;:::i;:::-;8125:63;;8081:117;7876:329;;;;:::o;8211:761::-;8295:6;8303;8311;8319;8368:3;8356:9;8347:7;8343:23;8339:33;8336:120;;;8375:79;;:::i;:::-;8336:120;8495:1;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8466:117;8622:2;8648:51;8691:7;8682:6;8671:9;8667:22;8648:51;:::i;:::-;8638:61;;8593:116;8748:2;8774:53;8819:7;8810:6;8799:9;8795:22;8774:53;:::i;:::-;8764:63;;8719:118;8876:2;8902:53;8947:7;8938:6;8927:9;8923:22;8902:53;:::i;:::-;8892:63;;8847:118;8211:761;;;;;;;:::o;8978:118::-;9065:24;9083:5;9065:24;:::i;:::-;9060:3;9053:37;8978:118;;:::o;9102:157::-;9207:45;9227:24;9245:5;9227:24;:::i;:::-;9207:45;:::i;:::-;9202:3;9195:58;9102:157;;:::o;9265:109::-;9346:21;9361:5;9346:21;:::i;:::-;9341:3;9334:34;9265:109;;:::o;9380:118::-;9467:24;9485:5;9467:24;:::i;:::-;9462:3;9455:37;9380:118;;:::o;9504:157::-;9609:45;9629:24;9647:5;9629:24;:::i;:::-;9609:45;:::i;:::-;9604:3;9597:58;9504:157;;:::o;9667:360::-;9753:3;9781:38;9813:5;9781:38;:::i;:::-;9835:70;9898:6;9893:3;9835:70;:::i;:::-;9828:77;;9914:52;9959:6;9954:3;9947:4;9940:5;9936:16;9914:52;:::i;:::-;9991:29;10013:6;9991:29;:::i;:::-;9986:3;9982:39;9975:46;;9757:270;9667:360;;;;:::o;10033:147::-;10128:45;10167:5;10128:45;:::i;:::-;10123:3;10116:58;10033:147;;:::o;10186:364::-;10274:3;10302:39;10335:5;10302:39;:::i;:::-;10357:71;10421:6;10416:3;10357:71;:::i;:::-;10350:78;;10437:52;10482:6;10477:3;10470:4;10463:5;10459:16;10437:52;:::i;:::-;10514:29;10536:6;10514:29;:::i;:::-;10509:3;10505:39;10498:46;;10278:272;10186:364;;;;:::o;10556:377::-;10662:3;10690:39;10723:5;10690:39;:::i;:::-;10745:89;10827:6;10822:3;10745:89;:::i;:::-;10738:96;;10843:52;10888:6;10883:3;10876:4;10869:5;10865:16;10843:52;:::i;:::-;10920:6;10915:3;10911:16;10904:23;;10666:267;10556:377;;;;:::o;10939:402::-;11099:3;11120:85;11202:2;11197:3;11120:85;:::i;:::-;11113:92;;11214:93;11303:3;11214:93;:::i;:::-;11332:2;11327:3;11323:12;11316:19;;10939:402;;;:::o;11347:366::-;11489:3;11510:67;11574:2;11569:3;11510:67;:::i;:::-;11503:74;;11586:93;11675:3;11586:93;:::i;:::-;11704:2;11699:3;11695:12;11688:19;;11347:366;;;:::o;11719:::-;11861:3;11882:67;11946:2;11941:3;11882:67;:::i;:::-;11875:74;;11958:93;12047:3;11958:93;:::i;:::-;12076:2;12071:3;12067:12;12060:19;;11719:366;;;:::o;12091:::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:::-;12605:3;12626:67;12690:2;12685:3;12626:67;:::i;:::-;12619:74;;12702:93;12791:3;12702:93;:::i;:::-;12820:2;12815:3;12811:12;12804:19;;12463:366;;;:::o;12835:::-;12977:3;12998:67;13062:2;13057:3;12998:67;:::i;:::-;12991:74;;13074:93;13163:3;13074:93;:::i;:::-;13192:2;13187:3;13183:12;13176:19;;12835:366;;;:::o;13207:::-;13349:3;13370:67;13434:2;13429:3;13370:67;:::i;:::-;13363:74;;13446:93;13535:3;13446:93;:::i;:::-;13564:2;13559:3;13555:12;13548:19;;13207:366;;;:::o;13579:::-;13721:3;13742:67;13806:2;13801:3;13742:67;:::i;:::-;13735:74;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13579:366;;;:::o;13951:::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:::-;14465:3;14486:67;14550:2;14545:3;14486:67;:::i;:::-;14479:74;;14562:93;14651:3;14562:93;:::i;:::-;14680:2;14675:3;14671:12;14664:19;;14323:366;;;:::o;14695:::-;14837:3;14858:67;14922:2;14917:3;14858:67;:::i;:::-;14851:74;;14934:93;15023:3;14934:93;:::i;:::-;15052:2;15047:3;15043:12;15036:19;;14695:366;;;:::o;15067:::-;15209:3;15230:67;15294:2;15289:3;15230:67;:::i;:::-;15223:74;;15306:93;15395:3;15306:93;:::i;:::-;15424:2;15419:3;15415:12;15408:19;;15067:366;;;:::o;15439:::-;15581:3;15602:67;15666:2;15661:3;15602:67;:::i;:::-;15595:74;;15678:93;15767:3;15678:93;:::i;:::-;15796:2;15791:3;15787:12;15780:19;;15439:366;;;:::o;15811:::-;15953:3;15974:67;16038:2;16033:3;15974:67;:::i;:::-;15967:74;;16050:93;16139:3;16050:93;:::i;:::-;16168:2;16163:3;16159:12;16152:19;;15811:366;;;:::o;16183:::-;16325:3;16346:67;16410:2;16405:3;16346:67;:::i;:::-;16339:74;;16422:93;16511:3;16422:93;:::i;:::-;16540:2;16535:3;16531:12;16524:19;;16183:366;;;:::o;16555:::-;16697:3;16718:67;16782:2;16777:3;16718:67;:::i;:::-;16711:74;;16794:93;16883:3;16794:93;:::i;:::-;16912:2;16907:3;16903:12;16896:19;;16555:366;;;:::o;16927:::-;17069:3;17090:67;17154:2;17149:3;17090:67;:::i;:::-;17083:74;;17166:93;17255:3;17166:93;:::i;:::-;17284:2;17279:3;17275:12;17268:19;;16927:366;;;:::o;17299:::-;17441:3;17462:67;17526:2;17521:3;17462:67;:::i;:::-;17455:74;;17538:93;17627:3;17538:93;:::i;:::-;17656:2;17651:3;17647:12;17640:19;;17299:366;;;:::o;17671:::-;17813:3;17834:67;17898:2;17893:3;17834:67;:::i;:::-;17827:74;;17910:93;17999:3;17910:93;:::i;:::-;18028:2;18023:3;18019:12;18012:19;;17671:366;;;:::o;18043:::-;18185:3;18206:67;18270:2;18265:3;18206:67;:::i;:::-;18199:74;;18282:93;18371:3;18282:93;:::i;:::-;18400:2;18395:3;18391:12;18384:19;;18043:366;;;:::o;18415:400::-;18575:3;18596:84;18678:1;18673:3;18596:84;:::i;:::-;18589:91;;18689:93;18778:3;18689:93;:::i;:::-;18807:1;18802:3;18798:11;18791:18;;18415:400;;;:::o;18821:366::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:::-;19335:3;19356:67;19420:2;19415:3;19356:67;:::i;:::-;19349:74;;19432:93;19521:3;19432:93;:::i;:::-;19550:2;19545:3;19541:12;19534:19;;19193:366;;;:::o;19565:::-;19707:3;19728:67;19792:2;19787:3;19728:67;:::i;:::-;19721:74;;19804:93;19893:3;19804:93;:::i;:::-;19922:2;19917:3;19913:12;19906:19;;19565:366;;;:::o;19937:::-;20079:3;20100:67;20164:2;20159:3;20100:67;:::i;:::-;20093:74;;20176:93;20265:3;20176:93;:::i;:::-;20294:2;20289:3;20285:12;20278:19;;19937:366;;;:::o;20309:::-;20451:3;20472:67;20536:2;20531:3;20472:67;:::i;:::-;20465:74;;20548:93;20637:3;20548:93;:::i;:::-;20666:2;20661:3;20657:12;20650:19;;20309:366;;;:::o;20681:::-;20823:3;20844:67;20908:2;20903:3;20844:67;:::i;:::-;20837:74;;20920:93;21009:3;20920:93;:::i;:::-;21038:2;21033:3;21029:12;21022:19;;20681:366;;;:::o;21053:398::-;21212:3;21233:83;21314:1;21309:3;21233:83;:::i;:::-;21226:90;;21325:93;21414:3;21325:93;:::i;:::-;21443:1;21438:3;21434:11;21427:18;;21053:398;;;:::o;21457:366::-;21599:3;21620:67;21684:2;21679:3;21620:67;:::i;:::-;21613:74;;21696:93;21785:3;21696:93;:::i;:::-;21814:2;21809:3;21805:12;21798:19;;21457:366;;;:::o;21829:::-;21971:3;21992:67;22056:2;22051:3;21992:67;:::i;:::-;21985:74;;22068:93;22157:3;22068:93;:::i;:::-;22186:2;22181:3;22177:12;22170:19;;21829:366;;;:::o;22201:::-;22343:3;22364:67;22428:2;22423:3;22364:67;:::i;:::-;22357:74;;22440:93;22529:3;22440:93;:::i;:::-;22558:2;22553:3;22549:12;22542:19;;22201:366;;;:::o;22573:::-;22715:3;22736:67;22800:2;22795:3;22736:67;:::i;:::-;22729:74;;22812:93;22901:3;22812:93;:::i;:::-;22930:2;22925:3;22921:12;22914:19;;22573:366;;;:::o;22945:118::-;23032:24;23050:5;23032:24;:::i;:::-;23027:3;23020:37;22945:118;;:::o;23069:112::-;23152:22;23168:5;23152:22;:::i;:::-;23147:3;23140:35;23069:112;;:::o;23187:397::-;23327:3;23342:75;23413:3;23404:6;23342:75;:::i;:::-;23442:2;23437:3;23433:12;23426:19;;23455:75;23526:3;23517:6;23455:75;:::i;:::-;23555:2;23550:3;23546:12;23539:19;;23575:3;23568:10;;23187:397;;;;;:::o;23590:701::-;23871:3;23893:95;23984:3;23975:6;23893:95;:::i;:::-;23886:102;;24005:95;24096:3;24087:6;24005:95;:::i;:::-;23998:102;;24117:148;24261:3;24117:148;:::i;:::-;24110:155;;24282:3;24275:10;;23590:701;;;;;:::o;24297:522::-;24510:3;24532:148;24676:3;24532:148;:::i;:::-;24525:155;;24690:75;24761:3;24752:6;24690:75;:::i;:::-;24790:2;24785:3;24781:12;24774:19;;24810:3;24803:10;;24297:522;;;;:::o;24825:379::-;25009:3;25031:147;25174:3;25031:147;:::i;:::-;25024:154;;25195:3;25188:10;;24825:379;;;:::o;25210:222::-;25303:4;25341:2;25330:9;25326:18;25318:26;;25354:71;25422:1;25411:9;25407:17;25398:6;25354:71;:::i;:::-;25210:222;;;;:::o;25438:640::-;25633:4;25671:3;25660:9;25656:19;25648:27;;25685:71;25753:1;25742:9;25738:17;25729:6;25685:71;:::i;:::-;25766:72;25834:2;25823:9;25819:18;25810:6;25766:72;:::i;:::-;25848;25916:2;25905:9;25901:18;25892:6;25848:72;:::i;:::-;25967:9;25961:4;25957:20;25952:2;25941:9;25937:18;25930:48;25995:76;26066:4;26057:6;25995:76;:::i;:::-;25987:84;;25438:640;;;;;;;:::o;26084:210::-;26171:4;26209:2;26198:9;26194:18;26186:26;;26222:65;26284:1;26273:9;26269:17;26260:6;26222:65;:::i;:::-;26084:210;;;;:::o;26300:545::-;26473:4;26511:3;26500:9;26496:19;26488:27;;26525:71;26593:1;26582:9;26578:17;26569:6;26525:71;:::i;:::-;26606:68;26670:2;26659:9;26655:18;26646:6;26606:68;:::i;:::-;26684:72;26752:2;26741:9;26737:18;26728:6;26684:72;:::i;:::-;26766;26834:2;26823:9;26819:18;26810:6;26766:72;:::i;:::-;26300:545;;;;;;;:::o;26851:238::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27003:79;27079:1;27068:9;27064:17;27055:6;27003:79;:::i;:::-;26851:238;;;;:::o;27095:313::-;27208:4;27246:2;27235:9;27231:18;27223:26;;27295:9;27289:4;27285:20;27281:1;27270:9;27266:17;27259:47;27323:78;27396:4;27387:6;27323:78;:::i;:::-;27315:86;;27095:313;;;;:::o;27414:419::-;27580:4;27618:2;27607:9;27603:18;27595:26;;27667:9;27661:4;27657:20;27653:1;27642:9;27638:17;27631:47;27695:131;27821:4;27695:131;:::i;:::-;27687:139;;27414:419;;;:::o;27839:::-;28005:4;28043:2;28032:9;28028:18;28020:26;;28092:9;28086:4;28082:20;28078:1;28067:9;28063:17;28056:47;28120:131;28246:4;28120:131;:::i;:::-;28112:139;;27839:419;;;:::o;28264:::-;28430:4;28468:2;28457:9;28453:18;28445:26;;28517:9;28511:4;28507:20;28503:1;28492:9;28488:17;28481:47;28545:131;28671:4;28545:131;:::i;:::-;28537:139;;28264:419;;;:::o;28689:::-;28855:4;28893:2;28882:9;28878:18;28870:26;;28942:9;28936:4;28932:20;28928:1;28917:9;28913:17;28906:47;28970:131;29096:4;28970:131;:::i;:::-;28962:139;;28689:419;;;:::o;29114:::-;29280:4;29318:2;29307:9;29303:18;29295:26;;29367:9;29361:4;29357:20;29353:1;29342:9;29338:17;29331:47;29395:131;29521:4;29395:131;:::i;:::-;29387:139;;29114:419;;;:::o;29539:::-;29705:4;29743:2;29732:9;29728:18;29720:26;;29792:9;29786:4;29782:20;29778:1;29767:9;29763:17;29756:47;29820:131;29946:4;29820:131;:::i;:::-;29812:139;;29539:419;;;:::o;29964:::-;30130:4;30168:2;30157:9;30153:18;30145:26;;30217:9;30211:4;30207:20;30203:1;30192:9;30188:17;30181:47;30245:131;30371:4;30245:131;:::i;:::-;30237:139;;29964:419;;;:::o;30389:::-;30555:4;30593:2;30582:9;30578:18;30570:26;;30642:9;30636:4;30632:20;30628:1;30617:9;30613:17;30606:47;30670:131;30796:4;30670:131;:::i;:::-;30662:139;;30389:419;;;:::o;30814:::-;30980:4;31018:2;31007:9;31003:18;30995:26;;31067:9;31061:4;31057:20;31053:1;31042:9;31038:17;31031:47;31095:131;31221:4;31095:131;:::i;:::-;31087:139;;30814:419;;;:::o;31239:::-;31405:4;31443:2;31432:9;31428:18;31420:26;;31492:9;31486:4;31482:20;31478:1;31467:9;31463:17;31456:47;31520:131;31646:4;31520:131;:::i;:::-;31512:139;;31239:419;;;:::o;31664:::-;31830:4;31868:2;31857:9;31853:18;31845:26;;31917:9;31911:4;31907:20;31903:1;31892:9;31888:17;31881:47;31945:131;32071:4;31945:131;:::i;:::-;31937:139;;31664:419;;;:::o;32089:::-;32255:4;32293:2;32282:9;32278:18;32270:26;;32342:9;32336:4;32332:20;32328:1;32317:9;32313:17;32306:47;32370:131;32496:4;32370:131;:::i;:::-;32362:139;;32089:419;;;:::o;32514:::-;32680:4;32718:2;32707:9;32703:18;32695:26;;32767:9;32761:4;32757:20;32753:1;32742:9;32738:17;32731:47;32795:131;32921:4;32795:131;:::i;:::-;32787:139;;32514:419;;;:::o;32939:::-;33105:4;33143:2;33132:9;33128:18;33120:26;;33192:9;33186:4;33182:20;33178:1;33167:9;33163:17;33156:47;33220:131;33346:4;33220:131;:::i;:::-;33212:139;;32939:419;;;:::o;33364:::-;33530:4;33568:2;33557:9;33553:18;33545:26;;33617:9;33611:4;33607:20;33603:1;33592:9;33588:17;33581:47;33645:131;33771:4;33645:131;:::i;:::-;33637:139;;33364:419;;;:::o;33789:::-;33955:4;33993:2;33982:9;33978:18;33970:26;;34042:9;34036:4;34032:20;34028:1;34017:9;34013:17;34006:47;34070:131;34196:4;34070:131;:::i;:::-;34062:139;;33789:419;;;:::o;34214:::-;34380:4;34418:2;34407:9;34403:18;34395:26;;34467:9;34461:4;34457:20;34453:1;34442:9;34438:17;34431:47;34495:131;34621:4;34495:131;:::i;:::-;34487:139;;34214:419;;;:::o;34639:::-;34805:4;34843:2;34832:9;34828:18;34820:26;;34892:9;34886:4;34882:20;34878:1;34867:9;34863:17;34856:47;34920:131;35046:4;34920:131;:::i;:::-;34912:139;;34639:419;;;:::o;35064:::-;35230:4;35268:2;35257:9;35253:18;35245:26;;35317:9;35311:4;35307:20;35303:1;35292:9;35288:17;35281:47;35345:131;35471:4;35345:131;:::i;:::-;35337:139;;35064:419;;;:::o;35489:::-;35655:4;35693:2;35682:9;35678:18;35670:26;;35742:9;35736:4;35732:20;35728:1;35717:9;35713:17;35706:47;35770:131;35896:4;35770:131;:::i;:::-;35762:139;;35489:419;;;:::o;35914:::-;36080:4;36118:2;36107:9;36103:18;36095:26;;36167:9;36161:4;36157:20;36153:1;36142:9;36138:17;36131:47;36195:131;36321:4;36195:131;:::i;:::-;36187:139;;35914:419;;;:::o;36339:::-;36505:4;36543:2;36532:9;36528:18;36520:26;;36592:9;36586:4;36582:20;36578:1;36567:9;36563:17;36556:47;36620:131;36746:4;36620:131;:::i;:::-;36612:139;;36339:419;;;:::o;36764:::-;36930:4;36968:2;36957:9;36953:18;36945:26;;37017:9;37011:4;37007:20;37003:1;36992:9;36988:17;36981:47;37045:131;37171:4;37045:131;:::i;:::-;37037:139;;36764:419;;;:::o;37189:::-;37355:4;37393:2;37382:9;37378:18;37370:26;;37442:9;37436:4;37432:20;37428:1;37417:9;37413:17;37406:47;37470:131;37596:4;37470:131;:::i;:::-;37462:139;;37189:419;;;:::o;37614:::-;37780:4;37818:2;37807:9;37803:18;37795:26;;37867:9;37861:4;37857:20;37853:1;37842:9;37838:17;37831:47;37895:131;38021:4;37895:131;:::i;:::-;37887:139;;37614:419;;;:::o;38039:::-;38205:4;38243:2;38232:9;38228:18;38220:26;;38292:9;38286:4;38282:20;38278:1;38267:9;38263:17;38256:47;38320:131;38446:4;38320:131;:::i;:::-;38312:139;;38039:419;;;:::o;38464:::-;38630:4;38668:2;38657:9;38653:18;38645:26;;38717:9;38711:4;38707:20;38703:1;38692:9;38688:17;38681:47;38745:131;38871:4;38745:131;:::i;:::-;38737:139;;38464:419;;;:::o;38889:::-;39055:4;39093:2;39082:9;39078:18;39070:26;;39142:9;39136:4;39132:20;39128:1;39117:9;39113:17;39106:47;39170:131;39296:4;39170:131;:::i;:::-;39162:139;;38889:419;;;:::o;39314:::-;39480:4;39518:2;39507:9;39503:18;39495:26;;39567:9;39561:4;39557:20;39553:1;39542:9;39538:17;39531:47;39595:131;39721:4;39595:131;:::i;:::-;39587:139;;39314:419;;;:::o;39739:222::-;39832:4;39870:2;39859:9;39855:18;39847:26;;39883:71;39951:1;39940:9;39936:17;39927:6;39883:71;:::i;:::-;39739:222;;;;:::o;39967:129::-;40001:6;40028:20;;:::i;:::-;40018:30;;40057:33;40085:4;40077:6;40057:33;:::i;:::-;39967:129;;;:::o;40102:75::-;40135:6;40168:2;40162:9;40152:19;;40102:75;:::o;40183:307::-;40244:4;40334:18;40326:6;40323:30;40320:56;;;40356:18;;:::i;:::-;40320:56;40394:29;40416:6;40394:29;:::i;:::-;40386:37;;40478:4;40472;40468:15;40460:23;;40183:307;;;:::o;40496:308::-;40558:4;40648:18;40640:6;40637:30;40634:56;;;40670:18;;:::i;:::-;40634:56;40708:29;40730:6;40708:29;:::i;:::-;40700:37;;40792:4;40786;40782:15;40774:23;;40496:308;;;:::o;40810:98::-;40861:6;40895:5;40889:12;40879:22;;40810:98;;;:::o;40914:99::-;40966:6;41000:5;40994:12;40984:22;;40914:99;;;:::o;41019:168::-;41102:11;41136:6;41131:3;41124:19;41176:4;41171:3;41167:14;41152:29;;41019:168;;;;:::o;41193:147::-;41294:11;41331:3;41316:18;;41193:147;;;;:::o;41346:169::-;41430:11;41464:6;41459:3;41452:19;41504:4;41499:3;41495:14;41480:29;;41346:169;;;;:::o;41521:148::-;41623:11;41660:3;41645:18;;41521:148;;;;:::o;41675:305::-;41715:3;41734:20;41752:1;41734:20;:::i;:::-;41729:25;;41768:20;41786:1;41768:20;:::i;:::-;41763:25;;41922:1;41854:66;41850:74;41847:1;41844:81;41841:107;;;41928:18;;:::i;:::-;41841:107;41972:1;41969;41965:9;41958:16;;41675:305;;;;:::o;41986:185::-;42026:1;42043:20;42061:1;42043:20;:::i;:::-;42038:25;;42077:20;42095:1;42077:20;:::i;:::-;42072:25;;42116:1;42106:35;;42121:18;;:::i;:::-;42106:35;42163:1;42160;42156:9;42151:14;;41986:185;;;;:::o;42177:348::-;42217:7;42240:20;42258:1;42240:20;:::i;:::-;42235:25;;42274:20;42292:1;42274:20;:::i;:::-;42269:25;;42462:1;42394:66;42390:74;42387:1;42384:81;42379:1;42372:9;42365:17;42361:105;42358:131;;;42469:18;;:::i;:::-;42358:131;42517:1;42514;42510:9;42499:20;;42177:348;;;;:::o;42531:191::-;42571:4;42591:20;42609:1;42591:20;:::i;:::-;42586:25;;42625:20;42643:1;42625:20;:::i;:::-;42620:25;;42664:1;42661;42658:8;42655:34;;;42669:18;;:::i;:::-;42655:34;42714:1;42711;42707:9;42699:17;;42531:191;;;;:::o;42728:96::-;42765:7;42794:24;42812:5;42794:24;:::i;:::-;42783:35;;42728:96;;;:::o;42830:90::-;42864:7;42907:5;42900:13;42893:21;42882:32;;42830:90;;;:::o;42926:77::-;42963:7;42992:5;42981:16;;42926:77;;;:::o;43009:149::-;43045:7;43085:66;43078:5;43074:78;43063:89;;43009:149;;;:::o;43164:131::-;43211:7;43240:5;43229:16;;43246:43;43283:5;43246:43;:::i;:::-;43164:131;;;:::o;43301:126::-;43338:7;43378:42;43371:5;43367:54;43356:65;;43301:126;;;:::o;43433:77::-;43470:7;43499:5;43488:16;;43433:77;;;:::o;43516:86::-;43551:7;43591:4;43584:5;43580:16;43569:27;;43516:86;;;:::o;43608:131::-;43666:9;43699:34;43727:5;43699:34;:::i;:::-;43686:47;;43608:131;;;:::o;43745:154::-;43829:6;43824:3;43819;43806:30;43891:1;43882:6;43877:3;43873:16;43866:27;43745:154;;;:::o;43905:307::-;43973:1;43983:113;43997:6;43994:1;43991:13;43983:113;;;44082:1;44077:3;44073:11;44067:18;44063:1;44058:3;44054:11;44047:39;44019:2;44016:1;44012:10;44007:15;;43983:113;;;44114:6;44111:1;44108:13;44105:101;;;44194:1;44185:6;44180:3;44176:16;44169:27;44105:101;43954:258;43905:307;;;:::o;44218:320::-;44262:6;44299:1;44293:4;44289:12;44279:22;;44346:1;44340:4;44336:12;44367:18;44357:81;;44423:4;44415:6;44411:17;44401:27;;44357:81;44485:2;44477:6;44474:14;44454:18;44451:38;44448:84;;;44504:18;;:::i;:::-;44448:84;44269:269;44218:320;;;:::o;44544:281::-;44627:27;44649:4;44627:27;:::i;:::-;44619:6;44615:40;44757:6;44745:10;44742:22;44721:18;44709:10;44706:34;44703:62;44700:88;;;44768:18;;:::i;:::-;44700:88;44808:10;44804:2;44797:22;44587:238;44544:281;;:::o;44831:233::-;44870:3;44893:24;44911:5;44893:24;:::i;:::-;44884:33;;44939:66;44932:5;44929:77;44926:103;;;45009:18;;:::i;:::-;44926:103;45056:1;45049:5;45045:13;45038:20;;44831:233;;;:::o;45070:100::-;45109:7;45138:26;45158:5;45138:26;:::i;:::-;45127:37;;45070:100;;;:::o;45176:79::-;45215:7;45244:5;45233:16;;45176:79;;;:::o;45261:94::-;45300:7;45329:20;45343:5;45329:20;:::i;:::-;45318:31;;45261:94;;;:::o;45361:176::-;45393:1;45410:20;45428:1;45410:20;:::i;:::-;45405:25;;45444:20;45462:1;45444:20;:::i;:::-;45439:25;;45483:1;45473:35;;45488:18;;:::i;:::-;45473:35;45529:1;45526;45522:9;45517:14;;45361:176;;;;:::o;45543:180::-;45591:77;45588:1;45581:88;45688:4;45685:1;45678:15;45712:4;45709:1;45702:15;45729:180;45777:77;45774:1;45767:88;45874:4;45871:1;45864:15;45898:4;45895:1;45888:15;45915:180;45963:77;45960:1;45953:88;46060:4;46057:1;46050:15;46084:4;46081:1;46074:15;46101:180;46149:77;46146:1;46139:88;46246:4;46243:1;46236:15;46270:4;46267:1;46260:15;46287:180;46335:77;46332:1;46325:88;46432:4;46429:1;46422:15;46456:4;46453:1;46446:15;46473:180;46521:77;46518:1;46511:88;46618:4;46615:1;46608:15;46642:4;46639:1;46632:15;46659:180;46707:77;46704:1;46697:88;46804:4;46801:1;46794:15;46828:4;46825:1;46818:15;46845:117;46954:1;46951;46944:12;46968:117;47077:1;47074;47067:12;47091:117;47200:1;47197;47190:12;47214:117;47323:1;47320;47313:12;47337:102;47378:6;47429:2;47425:7;47420:2;47413:5;47409:14;47405:28;47395:38;;47337:102;;;:::o;47445:94::-;47478:8;47526:5;47522:2;47518:14;47497:35;;47445:94;;;:::o;47545:214::-;47685:66;47681:1;47673:6;47669:14;47662:90;47545:214;:::o;47765:228::-;47905:34;47901:1;47893:6;47889:14;47882:58;47974:11;47969:2;47961:6;47957:15;47950:36;47765:228;:::o;47999:230::-;48139:34;48135:1;48127:6;48123:14;48116:58;48208:13;48203:2;48195:6;48191:15;48184:38;47999:230;:::o;48235:237::-;48375:34;48371:1;48363:6;48359:14;48352:58;48444:20;48439:2;48431:6;48427:15;48420:45;48235:237;:::o;48478:225::-;48618:34;48614:1;48606:6;48602:14;48595:58;48687:8;48682:2;48674:6;48670:15;48663:33;48478:225;:::o;48709:178::-;48849:30;48845:1;48837:6;48833:14;48826:54;48709:178;:::o;48893:238::-;49033:34;49029:1;49021:6;49017:14;49010:58;49102:21;49097:2;49089:6;49085:15;49078:46;48893:238;:::o;49137:170::-;49277:22;49273:1;49265:6;49261:14;49254:46;49137:170;:::o;49313:223::-;49453:34;49449:1;49441:6;49437:14;49430:58;49522:6;49517:2;49509:6;49505:15;49498:31;49313:223;:::o;49542:175::-;49682:27;49678:1;49670:6;49666:14;49659:51;49542:175;:::o;49723:180::-;49863:32;49859:1;49851:6;49847:14;49840:56;49723:180;:::o;49909:231::-;50049:34;50045:1;50037:6;50033:14;50026:58;50118:14;50113:2;50105:6;50101:15;50094:39;49909:231;:::o;50146:243::-;50286:34;50282:1;50274:6;50270:14;50263:58;50355:26;50350:2;50342:6;50338:15;50331:51;50146:243;:::o;50395:229::-;50535:34;50531:1;50523:6;50519:14;50512:58;50604:12;50599:2;50591:6;50587:15;50580:37;50395:229;:::o;50630:228::-;50770:34;50766:1;50758:6;50754:14;50747:58;50839:11;50834:2;50826:6;50822:15;50815:36;50630:228;:::o;50864:171::-;51004:23;51000:1;50992:6;50988:14;50981:47;50864:171;:::o;51041:174::-;51181:26;51177:1;51169:6;51165:14;51158:50;51041:174;:::o;51221:182::-;51361:34;51357:1;51349:6;51345:14;51338:58;51221:182;:::o;51409:235::-;51549:34;51545:1;51537:6;51533:14;51526:58;51618:18;51613:2;51605:6;51601:15;51594:43;51409:235;:::o;51650:231::-;51790:34;51786:1;51778:6;51774:14;51767:58;51859:14;51854:2;51846:6;51842:15;51835:39;51650:231;:::o;51887:155::-;52027:7;52023:1;52015:6;52011:14;52004:31;51887:155;:::o;52048:167::-;52188:19;52184:1;52176:6;52172:14;52165:43;52048:167;:::o;52221:182::-;52361:34;52357:1;52349:6;52345:14;52338:58;52221:182;:::o;52409:228::-;52549:34;52545:1;52537:6;52533:14;52526:58;52618:11;52613:2;52605:6;52601:15;52594:36;52409:228;:::o;52643:234::-;52783:34;52779:1;52771:6;52767:14;52760:58;52852:17;52847:2;52839:6;52835:15;52828:42;52643:234;:::o;52883:220::-;53023:34;53019:1;53011:6;53007:14;53000:58;53092:3;53087:2;53079:6;53075:15;53068:28;52883:220;:::o;53109:177::-;53249:29;53245:1;53237:6;53233:14;53226:53;53109:177;:::o;53292:114::-;;:::o;53412:236::-;53552:34;53548:1;53540:6;53536:14;53529:58;53621:19;53616:2;53608:6;53604:15;53597:44;53412:236;:::o;53654:231::-;53794:34;53790:1;53782:6;53778:14;53771:58;53863:14;53858:2;53850:6;53846:15;53839:39;53654:231;:::o;53891:171::-;54031:23;54027:1;54019:6;54015:14;54008:47;53891:171;:::o;54068:223::-;54208:34;54204:1;54196:6;54192:14;54185:58;54277:6;54272:2;54264:6;54260:15;54253:31;54068:223;:::o;54297:115::-;54380:1;54373:5;54370:12;54360:46;;54386:18;;:::i;:::-;54360:46;54297:115;:::o;54418:122::-;54491:24;54509:5;54491:24;:::i;:::-;54484:5;54481:35;54471:63;;54530:1;54527;54520:12;54471:63;54418:122;:::o;54546:116::-;54616:21;54631:5;54616:21;:::i;:::-;54609:5;54606:32;54596:60;;54652:1;54649;54642:12;54596:60;54546:116;:::o;54668:122::-;54741:24;54759:5;54741:24;:::i;:::-;54734:5;54731:35;54721:63;;54780:1;54777;54770:12;54721:63;54668:122;:::o;54796:120::-;54868:23;54885:5;54868:23;:::i;:::-;54861:5;54858:34;54848:62;;54906:1;54903;54896:12;54848:62;54796:120;:::o;54922:122::-;54995:24;55013:5;54995:24;:::i;:::-;54988:5;54985:35;54975:63;;55034:1;55031;55024:12;54975:63;54922:122;:::o;55050:118::-;55121:22;55137:5;55121:22;:::i;:::-;55114:5;55111:33;55101:61;;55158:1;55155;55148:12;55101:61;55050:118;:::o
Swarm Source
ipfs://d78de55255021d808c4aa224e4c3729c79d42fb4d9a77370a11e58aa642d9c5a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.