Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Flip Sale State | 2950340 | 110 days ago | IN | 0 APE | 0.00116444 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Moogie
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-10-31 */ // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/[email protected]/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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/[email protected]/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. 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 || ERC721.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 || ERC721.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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` 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 { } } // File: @openzeppelin/[email protected]/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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: Moogie.sol pragma solidity ^0.8.26; contract Moogie is ERC721, Ownable { using Strings for uint256; uint public constant MAX_TOKENS = 3500; uint private constant TOKENS_RESERVED = 5; uint public price = 5 ether; // Price per NFT 5 Ape uint256 public constant MAX_MINT_PER_TX = 5; // Maximum number of NFTs that can be minted in a single transaction // Example: With a price of 5 Ape per NFT, the cost for minting the maximum number of NFTs in one transaction would be 5 Ape * 5 = 25 Ape bool public isSaleActive; uint256 public totalSupply; mapping(address => uint256) private mintedPerWallet; string public baseUri; string public baseExtension = ".json"; address payable private withdrawAddress = payable(0x37081Ce9294e826AcA5B00855aB755C21b49106a); constructor() ERC721("Moogie", "MG") { baseUri = "ipfs://bafybeifasjpnjzurnlfd7etfd55aeuzvyybwexkknpxo6hytssnmxwa6ze/"; for(uint256 i = 1; i <= TOKENS_RESERVED; ++i) { _safeMint(msg.sender, i); } totalSupply = TOKENS_RESERVED; } function mint(uint256 _numTokens) external payable { require(isSaleActive, "The sale is paused."); require(_numTokens <= MAX_MINT_PER_TX, "You cannot mint that many in one transaction."); require(mintedPerWallet[msg.sender] + _numTokens <= MAX_MINT_PER_TX, "You cannot mint that many total."); uint256 curTotalSupply = totalSupply; require(curTotalSupply + _numTokens <= MAX_TOKENS, "Exceeds total supply."); uint256 totalPrice = _numTokens * price; require(msg.value >= totalPrice, "Insufficient funds."); for(uint256 i = 1; i <= _numTokens; ++i) { _safeMint(msg.sender, curTotalSupply + i); } mintedPerWallet[msg.sender] += _numTokens; totalSupply += _numTokens; uint256 excessFunds = msg.value - totalPrice; if (excessFunds > 0) { (bool refundSuccess, ) = payable(msg.sender).call{value: excessFunds}(""); require(refundSuccess, "Refund failed."); } (bool success, ) = withdrawAddress.call{value: totalPrice}(""); require(success, "Transfer failed."); } function flipSaleState() external onlyOwner { isSaleActive = !isSaleActive; } function setBaseUri(string memory _baseUri) external onlyOwner { baseUri = _baseUri; } function setPrice(uint256 _price) external onlyOwner { price = _price; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function _baseURI() internal view virtual override returns (string memory) { return baseUri; } }
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"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052674563918244f400006007556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908161005491906108f9565b507337081ce9294e826aca5b00855ab755c21b49106a600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b4575f80fd5b506040518060400160405280600681526020017f4d6f6f67696500000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d47000000000000000000000000000000000000000000000000000000000000815250815f908161012f91906108f9565b50806001908161013f91906108f9565b5050505f61015161025360201b60201c565b90508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060405180608001604052806043815260200161496c60439139600b908161021591906108f9565b505f600190505b6005811161024557610234338261025a60201b60201c565b8061023e906109f5565b905061021c565b506005600981905550610d69565b5f33905090565b610279828260405180602001604052805f81525061027d60201b60201c565b5050565b61028d83836102e360201b60201c565b61029f5f8484846104b360201b60201c565b6102de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d590610abc565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034890610b24565b60405180910390fd5b6103608161064160201b60201c565b156103a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039790610b8c565b60405180910390fd5b6103b15f83836106a960201b60201c565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546103fe9190610baa565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f6104d98473ffffffffffffffffffffffffffffffffffffffff166106ae60201b60201c565b15610634578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261050861025360201b60201c565b8786866040518563ffffffff1660e01b815260040161052a9493929190610c9b565b6020604051808303815f875af192505050801561056557506040513d601f19601f820116820180604052508101906105629190610d3e565b60015b6105e4573d805f8114610593576040519150601f19603f3d011682016040523d82523d5f602084013e610598565b606091505b505f8151036105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d390610abc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050610639565b600190505b949350505050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b5f80823b90505f8111915050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061073a57607f821691505b60208210810361074d5761074c6106f6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610774565b6107b98683610774565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6107fd6107f86107f3846107d1565b6107da565b6107d1565b9050919050565b5f819050919050565b610816836107e3565b61082a61082282610804565b848454610780565b825550505050565b5f90565b61083e610832565b61084981848461080d565b505050565b5b8181101561086c576108615f82610836565b60018101905061084f565b5050565b601f8211156108b15761088281610753565b61088b84610765565b8101602085101561089a578190505b6108ae6108a685610765565b83018261084e565b50505b505050565b5f82821c905092915050565b5f6108d15f19846008026108b6565b1980831691505092915050565b5f6108e983836108c2565b9150826002028217905092915050565b610902826106bf565b67ffffffffffffffff81111561091b5761091a6106c9565b5b6109258254610723565b610930828285610870565b5f60209050601f831160018114610961575f841561094f578287015190505b61095985826108de565b8655506109c0565b601f19841661096f86610753565b5f5b8281101561099657848901518255600182019150602085019450602081019050610971565b868310156109b357848901516109af601f8916826108c2565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6109ff826107d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a3157610a306109c8565b5b600182019050919050565b5f82825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f610aa6603283610a3c565b9150610ab182610a4c565b604082019050919050565b5f6020820190508181035f830152610ad381610a9a565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f610b0e602083610a3c565b9150610b1982610ada565b602082019050919050565b5f6020820190508181035f830152610b3b81610b02565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f610b76601c83610a3c565b9150610b8182610b42565b602082019050919050565b5f6020820190508181035f830152610ba381610b6a565b9050919050565b5f610bb4826107d1565b9150610bbf836107d1565b9250828201905080821115610bd757610bd66109c8565b5b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c0682610bdd565b9050919050565b610c1681610bfc565b82525050565b610c25816107d1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c6d82610c2b565b610c778185610c35565b9350610c87818560208601610c45565b610c9081610c53565b840191505092915050565b5f608082019050610cae5f830187610c0d565b610cbb6020830186610c0d565b610cc86040830185610c1c565b8181036060830152610cda8184610c63565b905095945050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610d1d81610ce9565b8114610d27575f80fd5b50565b5f81519050610d3881610d14565b92915050565b5f60208284031215610d5357610d52610ce5565b5b5f610d6084828501610d2a565b91505092915050565b613bf680610d765f395ff3fe60806040526004361061019b575f3560e01c80638ecad721116100eb578063a22cb46511610089578063c87b56dd11610063578063c87b56dd14610569578063e985e9c5146105a5578063f2fde38b146105e1578063f47c84c5146106095761019b565b8063a22cb465146104ef578063b88d4fde14610517578063c66828621461053f5761019b565b80639abc8320116100c55780639abc832014610457578063a035b1fe14610481578063a0712d68146104ab578063a0bcfc7f146104c75761019b565b80638ecad721146103db57806391b7f5ed1461040557806395d89b411461042d5761019b565b806334918dfd116101585780636352211e116101325780636352211e1461032357806370a082311461035f578063715018a61461039b5780638da5cb5b146103b15761019b565b806334918dfd146102bb57806342842e0e146102d1578063564566a8146102f95761019b565b806301ffc9a71461019f57806306fdde03146101db578063081812fc14610205578063095ea7b31461024157806318160ddd1461026957806323b872dd14610293575b5f80fd5b3480156101aa575f80fd5b506101c560048036038101906101c091906123f0565b610633565b6040516101d29190612435565b60405180910390f35b3480156101e6575f80fd5b506101ef610714565b6040516101fc91906124be565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612511565b6107a3565b604051610238919061257b565b60405180910390f35b34801561024c575f80fd5b50610267600480360381019061026291906125be565b610824565b005b348015610274575f80fd5b5061027d61093a565b60405161028a919061260b565b60405180910390f35b34801561029e575f80fd5b506102b960048036038101906102b49190612624565b610940565b005b3480156102c6575f80fd5b506102cf6109a0565b005b3480156102dc575f80fd5b506102f760048036038101906102f29190612624565b610a46565b005b348015610304575f80fd5b5061030d610a65565b60405161031a9190612435565b60405180910390f35b34801561032e575f80fd5b5061034960048036038101906103449190612511565b610a77565b604051610356919061257b565b60405180910390f35b34801561036a575f80fd5b5061038560048036038101906103809190612674565b610b23565b604051610392919061260b565b60405180910390f35b3480156103a6575f80fd5b506103af610bd7565b005b3480156103bc575f80fd5b506103c5610d10565b6040516103d2919061257b565b60405180910390f35b3480156103e6575f80fd5b506103ef610d38565b6040516103fc919061260b565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190612511565b610d3d565b005b348015610438575f80fd5b50610441610dc3565b60405161044e91906124be565b60405180910390f35b348015610462575f80fd5b5061046b610e53565b60405161047891906124be565b60405180910390f35b34801561048c575f80fd5b50610495610edf565b6040516104a2919061260b565b60405180910390f35b6104c560048036038101906104c09190612511565b610ee5565b005b3480156104d2575f80fd5b506104ed60048036038101906104e891906127cb565b6112dd565b005b3480156104fa575f80fd5b506105156004803603810190610510919061283c565b61136c565b005b348015610522575f80fd5b5061053d60048036038101906105389190612918565b6114e7565b005b34801561054a575f80fd5b50610553611549565b60405161056091906124be565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612511565b6115d5565b60405161059c91906124be565b60405180910390f35b3480156105b0575f80fd5b506105cb60048036038101906105c69190612998565b61167c565b6040516105d89190612435565b60405180910390f35b3480156105ec575f80fd5b5061060760048036038101906106029190612674565b61170a565b005b348015610614575f80fd5b5061061d6118b2565b60405161062a919061260b565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061070d575061070c826118b8565b5b9050919050565b60605f805461072290612a03565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612a03565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f6107ad82611921565b6107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e390612aa3565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61082e82610a77565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590612b31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108bd611989565b73ffffffffffffffffffffffffffffffffffffffff1614806108ec57506108eb816108e6611989565b61167c565b5b61092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612bbf565b60405180910390fd5b6109358383611990565b505050565b60095481565b61095161094b611989565b82611a46565b610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790612c4d565b60405180910390fd5b61099b838383611b22565b505050565b6109a8611989565b73ffffffffffffffffffffffffffffffffffffffff166109c6610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390612cb5565b60405180910390fd5b60085f9054906101000a900460ff161560085f6101000a81548160ff021916908315150217905550565b610a6083838360405180602001604052805f8152506114e7565b505050565b60085f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190612d43565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990612dd1565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610bdf611989565b73ffffffffffffffffffffffffffffffffffffffff16610bfd610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612cb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b610d45611989565b73ffffffffffffffffffffffffffffffffffffffff16610d63610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612cb5565b60405180910390fd5b8060078190555050565b606060018054610dd290612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90612a03565b8015610e495780601f10610e2057610100808354040283529160200191610e49565b820191905f5260205f20905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b600b8054610e6090612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8c90612a03565b8015610ed75780601f10610eae57610100808354040283529160200191610ed7565b820191905f5260205f20905b815481529060010190602001808311610eba57829003601f168201915b505050505081565b60075481565b60085f9054906101000a900460ff16610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90612e39565b60405180910390fd5b6005811115610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90612ec7565b60405180910390fd5b600581600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fc29190612f12565b1115611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90612f8f565b60405180910390fd5b5f6009549050610dac82826110189190612f12565b1115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612ff7565b60405180910390fd5b5f600754836110689190613015565b9050803410156110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a4906130a0565b60405180910390fd5b5f600190505b8381116110e0576110cf3382856110ca9190612f12565b611d72565b806110d9906130be565b90506110b3565b5082600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461112d9190612f12565b925050819055508260095f8282546111459190612f12565b925050819055505f81346111599190613105565b90505f81111561120d575f3373ffffffffffffffffffffffffffffffffffffffff168260405161118890613165565b5f6040518083038185875af1925050503d805f81146111c2576040519150601f19603f3d011682016040523d82523d5f602084013e6111c7565b606091505b505090508061120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906131c3565b60405180910390fd5b505b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161125390613165565b5f6040518083038185875af1925050503d805f811461128d576040519150601f19603f3d011682016040523d82523d5f602084013e611292565b606091505b50509050806112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061322b565b60405180910390fd5b5050505050565b6112e5611989565b73ffffffffffffffffffffffffffffffffffffffff16611303610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612cb5565b60405180910390fd5b80600b908161136891906133e6565b5050565b611374611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d8906134ff565b60405180910390fd5b8060055f6113ed611989565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611496611989565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114db9190612435565b60405180910390a35050565b6114f86114f2611989565b83611a46565b611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90612c4d565b60405180910390fd5b61154384848484611d8f565b50505050565b600c805461155690612a03565b80601f016020809104026020016040519081016040528092919081815260200182805461158290612a03565b80156115cd5780601f106115a4576101008083540402835291602001916115cd565b820191905f5260205f20905b8154815290600101906020018083116115b057829003601f168201915b505050505081565b60606115e082611921565b61161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061358d565b60405180910390fd5b5f611628611deb565b90505f8151116116465760405180602001604052805f815250611674565b8061165084611e7b565b600c60405160200161166493929190613665565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611712611989565b73ffffffffffffffffffffffffffffffffffffffff16611730610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90612cb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613705565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dac81565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0083610a77565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611a5082611921565b611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613793565b60405180910390fd5b5f611a9983610a77565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0857508373ffffffffffffffffffffffffffffffffffffffff16611af0846107a3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b195750611b18818561167c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4282610a77565b73ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90613821565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd906138af565b60405180910390fd5b611c11838383611fd4565b611c1b5f82611990565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611c689190613105565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cbc9190612f12565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d8b828260405180602001604052805f815250611fd9565b5050565b611d9a848484611b22565b611da684848484612033565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc9061393d565b60405180910390fd5b50505050565b6060600b8054611dfa90612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2690612a03565b8015611e715780601f10611e4857610100808354040283529160200191611e71565b820191905f5260205f20905b815481529060010190602001808311611e5457829003601f168201915b5050505050905090565b60605f8203611ec1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fcf565b5f8290505f5b5f8214611ef0578080611ed9906130be565b915050600a82611ee99190613988565b9150611ec7565b5f8167ffffffffffffffff811115611f0b57611f0a6126a7565b5b6040519080825280601f01601f191660200182016040528015611f3d5781602001600182028036833780820191505090505b5090505b5f8514611fc857600182611f559190613105565b9150600a85611f6491906139b8565b6030611f709190612f12565b60f81b818381518110611f8657611f856139e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611fc19190613988565b9450611f41565b8093505050505b919050565b505050565b611fe383836121b5565b611fef5f848484612033565b61202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120259061393d565b60405180910390fd5b505050565b5f6120538473ffffffffffffffffffffffffffffffffffffffff16612379565b156121a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261207c611989565b8786866040518563ffffffff1660e01b815260040161209e9493929190613a67565b6020604051808303815f875af19250505080156120d957506040513d601f19601f820116820180604052508101906120d69190613ac5565b60015b612158573d805f8114612107576040519150601f19603f3d011682016040523d82523d5f602084013e61210c565b606091505b505f815103612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121479061393d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ad565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613b3a565b60405180910390fd5b61222c81611921565b1561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613ba2565b60405180910390fd5b6122775f8383611fd4565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546122c49190612f12565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123cf8161239b565b81146123d9575f80fd5b50565b5f813590506123ea816123c6565b92915050565b5f6020828403121561240557612404612393565b5b5f612412848285016123dc565b91505092915050565b5f8115159050919050565b61242f8161241b565b82525050565b5f6020820190506124485f830184612426565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6124908261244e565b61249a8185612458565b93506124aa818560208601612468565b6124b381612476565b840191505092915050565b5f6020820190508181035f8301526124d68184612486565b905092915050565b5f819050919050565b6124f0816124de565b81146124fa575f80fd5b50565b5f8135905061250b816124e7565b92915050565b5f6020828403121561252657612525612393565b5b5f612533848285016124fd565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125658261253c565b9050919050565b6125758161255b565b82525050565b5f60208201905061258e5f83018461256c565b92915050565b61259d8161255b565b81146125a7575f80fd5b50565b5f813590506125b881612594565b92915050565b5f80604083850312156125d4576125d3612393565b5b5f6125e1858286016125aa565b92505060206125f2858286016124fd565b9150509250929050565b612605816124de565b82525050565b5f60208201905061261e5f8301846125fc565b92915050565b5f805f6060848603121561263b5761263a612393565b5b5f612648868287016125aa565b9350506020612659868287016125aa565b925050604061266a868287016124fd565b9150509250925092565b5f6020828403121561268957612688612393565b5b5f612696848285016125aa565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126dd82612476565b810181811067ffffffffffffffff821117156126fc576126fb6126a7565b5b80604052505050565b5f61270e61238a565b905061271a82826126d4565b919050565b5f67ffffffffffffffff821115612739576127386126a7565b5b61274282612476565b9050602081019050919050565b828183375f83830152505050565b5f61276f61276a8461271f565b612705565b90508281526020810184848401111561278b5761278a6126a3565b5b61279684828561274f565b509392505050565b5f82601f8301126127b2576127b161269f565b5b81356127c284826020860161275d565b91505092915050565b5f602082840312156127e0576127df612393565b5b5f82013567ffffffffffffffff8111156127fd576127fc612397565b5b6128098482850161279e565b91505092915050565b61281b8161241b565b8114612825575f80fd5b50565b5f8135905061283681612812565b92915050565b5f806040838503121561285257612851612393565b5b5f61285f858286016125aa565b925050602061287085828601612828565b9150509250929050565b5f67ffffffffffffffff821115612894576128936126a7565b5b61289d82612476565b9050602081019050919050565b5f6128bc6128b78461287a565b612705565b9050828152602081018484840111156128d8576128d76126a3565b5b6128e384828561274f565b509392505050565b5f82601f8301126128ff576128fe61269f565b5b813561290f8482602086016128aa565b91505092915050565b5f805f80608085870312156129305761292f612393565b5b5f61293d878288016125aa565b945050602061294e878288016125aa565b935050604061295f878288016124fd565b925050606085013567ffffffffffffffff8111156129805761297f612397565b5b61298c878288016128eb565b91505092959194509250565b5f80604083850312156129ae576129ad612393565b5b5f6129bb858286016125aa565b92505060206129cc858286016125aa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1a57607f821691505b602082108103612a2d57612a2c6129d6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f612a8d602c83612458565b9150612a9882612a33565b604082019050919050565b5f6020820190508181035f830152612aba81612a81565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f612b1b602183612458565b9150612b2682612ac1565b604082019050919050565b5f6020820190508181035f830152612b4881612b0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f612ba9603883612458565b9150612bb482612b4f565b604082019050919050565b5f6020820190508181035f830152612bd681612b9d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f612c37603183612458565b9150612c4282612bdd565b604082019050919050565b5f6020820190508181035f830152612c6481612c2b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612c9f602083612458565b9150612caa82612c6b565b602082019050919050565b5f6020820190508181035f830152612ccc81612c93565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f612d2d602983612458565b9150612d3882612cd3565b604082019050919050565b5f6020820190508181035f830152612d5a81612d21565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f612dbb602a83612458565b9150612dc682612d61565b604082019050919050565b5f6020820190508181035f830152612de881612daf565b9050919050565b7f5468652073616c65206973207061757365642e000000000000000000000000005f82015250565b5f612e23601383612458565b9150612e2e82612def565b602082019050919050565b5f6020820190508181035f830152612e5081612e17565b9050919050565b7f596f752063616e6e6f74206d696e742074686174206d616e7920696e206f6e655f8201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b5f612eb1602d83612458565b9150612ebc82612e57565b604082019050919050565b5f6020820190508181035f830152612ede81612ea5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f1c826124de565b9150612f27836124de565b9250828201905080821115612f3f57612f3e612ee5565b5b92915050565b7f596f752063616e6e6f74206d696e742074686174206d616e7920746f74616c2e5f82015250565b5f612f79602083612458565b9150612f8482612f45565b602082019050919050565b5f6020820190508181035f830152612fa681612f6d565b9050919050565b7f4578636565647320746f74616c20737570706c792e00000000000000000000005f82015250565b5f612fe1601583612458565b9150612fec82612fad565b602082019050919050565b5f6020820190508181035f83015261300e81612fd5565b9050919050565b5f61301f826124de565b915061302a836124de565b9250828202613038816124de565b9150828204841483151761304f5761304e612ee5565b5b5092915050565b7f496e73756666696369656e742066756e64732e000000000000000000000000005f82015250565b5f61308a601383612458565b915061309582613056565b602082019050919050565b5f6020820190508181035f8301526130b78161307e565b9050919050565b5f6130c8826124de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130fa576130f9612ee5565b5b600182019050919050565b5f61310f826124de565b915061311a836124de565b925082820390508181111561313257613131612ee5565b5b92915050565b5f81905092915050565b50565b5f6131505f83613138565b915061315b82613142565b5f82019050919050565b5f61316f82613145565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6131ad600e83612458565b91506131b882613179565b602082019050919050565b5f6020820190508181035f8301526131da816131a1565b9050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f613215601083612458565b9150613220826131e1565b602082019050919050565b5f6020820190508181035f83015261324281613209565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026132a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261326a565b6132af868361326a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6132ea6132e56132e0846124de565b6132c7565b6124de565b9050919050565b5f819050919050565b613303836132d0565b61331761330f826132f1565b848454613276565b825550505050565b5f90565b61332b61331f565b6133368184846132fa565b505050565b5b818110156133595761334e5f82613323565b60018101905061333c565b5050565b601f82111561339e5761336f81613249565b6133788461325b565b81016020851015613387578190505b61339b6133938561325b565b83018261333b565b50505b505050565b5f82821c905092915050565b5f6133be5f19846008026133a3565b1980831691505092915050565b5f6133d683836133af565b9150826002028217905092915050565b6133ef8261244e565b67ffffffffffffffff811115613408576134076126a7565b5b6134128254612a03565b61341d82828561335d565b5f60209050601f83116001811461344e575f841561343c578287015190505b61344685826133cb565b8655506134ad565b601f19841661345c86613249565b5f5b828110156134835784890151825560018201915060208501945060208101905061345e565b868310156134a0578489015161349c601f8916826133af565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6134e9601983612458565b91506134f4826134b5565b602082019050919050565b5f6020820190508181035f830152613516816134dd565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f613577602f83612458565b91506135828261351d565b604082019050919050565b5f6020820190508181035f8301526135a48161356b565b9050919050565b5f81905092915050565b5f6135bf8261244e565b6135c981856135ab565b93506135d9818560208601612468565b80840191505092915050565b5f81546135f181612a03565b6135fb81866135ab565b9450600182165f8114613615576001811461362a5761365c565b60ff198316865281151582028601935061365c565b61363385613249565b5f5b8381101561365457815481890152600182019150602081019050613635565b838801955050505b50505092915050565b5f61367082866135b5565b915061367c82856135b5565b915061368882846135e5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136ef602683612458565b91506136fa82613695565b604082019050919050565b5f6020820190508181035f83015261371c816136e3565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f61377d602c83612458565b915061378882613723565b604082019050919050565b5f6020820190508181035f8301526137aa81613771565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f61380b602983612458565b9150613816826137b1565b604082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613899602483612458565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613927603283612458565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613992826124de565b915061399d836124de565b9250826139ad576139ac61395b565b5b828204905092915050565b5f6139c2826124de565b91506139cd836124de565b9250826139dd576139dc61395b565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613a3982613a15565b613a438185613a1f565b9350613a53818560208601612468565b613a5c81612476565b840191505092915050565b5f608082019050613a7a5f83018761256c565b613a87602083018661256c565b613a9460408301856125fc565b8181036060830152613aa68184613a2f565b905095945050505050565b5f81519050613abf816123c6565b92915050565b5f60208284031215613ada57613ad9612393565b5b5f613ae784828501613ab1565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f613b24602083612458565b9150613b2f82613af0565b602082019050919050565b5f6020820190508181035f830152613b5181613b18565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613b8c601c83612458565b9150613b9782613b58565b602082019050919050565b5f6020820190508181035f830152613bb981613b80565b905091905056fea2646970667358221220b8369a9a5b3f12e7a3fe230c8c45ec615b4dbf568e7fc406e70562c351b881c764736f6c634300081a0033697066733a2f2f626166796265696661736a706e6a7a75726e6c6664376574666435356165757a767979627765786b6b6e70786f3668797473736e6d787761367a652f
Deployed Bytecode
0x60806040526004361061019b575f3560e01c80638ecad721116100eb578063a22cb46511610089578063c87b56dd11610063578063c87b56dd14610569578063e985e9c5146105a5578063f2fde38b146105e1578063f47c84c5146106095761019b565b8063a22cb465146104ef578063b88d4fde14610517578063c66828621461053f5761019b565b80639abc8320116100c55780639abc832014610457578063a035b1fe14610481578063a0712d68146104ab578063a0bcfc7f146104c75761019b565b80638ecad721146103db57806391b7f5ed1461040557806395d89b411461042d5761019b565b806334918dfd116101585780636352211e116101325780636352211e1461032357806370a082311461035f578063715018a61461039b5780638da5cb5b146103b15761019b565b806334918dfd146102bb57806342842e0e146102d1578063564566a8146102f95761019b565b806301ffc9a71461019f57806306fdde03146101db578063081812fc14610205578063095ea7b31461024157806318160ddd1461026957806323b872dd14610293575b5f80fd5b3480156101aa575f80fd5b506101c560048036038101906101c091906123f0565b610633565b6040516101d29190612435565b60405180910390f35b3480156101e6575f80fd5b506101ef610714565b6040516101fc91906124be565b60405180910390f35b348015610210575f80fd5b5061022b60048036038101906102269190612511565b6107a3565b604051610238919061257b565b60405180910390f35b34801561024c575f80fd5b50610267600480360381019061026291906125be565b610824565b005b348015610274575f80fd5b5061027d61093a565b60405161028a919061260b565b60405180910390f35b34801561029e575f80fd5b506102b960048036038101906102b49190612624565b610940565b005b3480156102c6575f80fd5b506102cf6109a0565b005b3480156102dc575f80fd5b506102f760048036038101906102f29190612624565b610a46565b005b348015610304575f80fd5b5061030d610a65565b60405161031a9190612435565b60405180910390f35b34801561032e575f80fd5b5061034960048036038101906103449190612511565b610a77565b604051610356919061257b565b60405180910390f35b34801561036a575f80fd5b5061038560048036038101906103809190612674565b610b23565b604051610392919061260b565b60405180910390f35b3480156103a6575f80fd5b506103af610bd7565b005b3480156103bc575f80fd5b506103c5610d10565b6040516103d2919061257b565b60405180910390f35b3480156103e6575f80fd5b506103ef610d38565b6040516103fc919061260b565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190612511565b610d3d565b005b348015610438575f80fd5b50610441610dc3565b60405161044e91906124be565b60405180910390f35b348015610462575f80fd5b5061046b610e53565b60405161047891906124be565b60405180910390f35b34801561048c575f80fd5b50610495610edf565b6040516104a2919061260b565b60405180910390f35b6104c560048036038101906104c09190612511565b610ee5565b005b3480156104d2575f80fd5b506104ed60048036038101906104e891906127cb565b6112dd565b005b3480156104fa575f80fd5b506105156004803603810190610510919061283c565b61136c565b005b348015610522575f80fd5b5061053d60048036038101906105389190612918565b6114e7565b005b34801561054a575f80fd5b50610553611549565b60405161056091906124be565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190612511565b6115d5565b60405161059c91906124be565b60405180910390f35b3480156105b0575f80fd5b506105cb60048036038101906105c69190612998565b61167c565b6040516105d89190612435565b60405180910390f35b3480156105ec575f80fd5b5061060760048036038101906106029190612674565b61170a565b005b348015610614575f80fd5b5061061d6118b2565b60405161062a919061260b565b60405180910390f35b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061070d575061070c826118b8565b5b9050919050565b60605f805461072290612a03565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612a03565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f6107ad82611921565b6107ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e390612aa3565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61082e82610a77565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590612b31565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108bd611989565b73ffffffffffffffffffffffffffffffffffffffff1614806108ec57506108eb816108e6611989565b61167c565b5b61092b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092290612bbf565b60405180910390fd5b6109358383611990565b505050565b60095481565b61095161094b611989565b82611a46565b610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790612c4d565b60405180910390fd5b61099b838383611b22565b505050565b6109a8611989565b73ffffffffffffffffffffffffffffffffffffffff166109c6610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1390612cb5565b60405180910390fd5b60085f9054906101000a900460ff161560085f6101000a81548160ff021916908315150217905550565b610a6083838360405180602001604052805f8152506114e7565b505050565b60085f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190612d43565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990612dd1565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610bdf611989565b73ffffffffffffffffffffffffffffffffffffffff16610bfd610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a90612cb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b610d45611989565b73ffffffffffffffffffffffffffffffffffffffff16610d63610d10565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612cb5565b60405180910390fd5b8060078190555050565b606060018054610dd290612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90612a03565b8015610e495780601f10610e2057610100808354040283529160200191610e49565b820191905f5260205f20905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b600b8054610e6090612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8c90612a03565b8015610ed75780601f10610eae57610100808354040283529160200191610ed7565b820191905f5260205f20905b815481529060010190602001808311610eba57829003601f168201915b505050505081565b60075481565b60085f9054906101000a900460ff16610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90612e39565b60405180910390fd5b6005811115610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e90612ec7565b60405180910390fd5b600581600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610fc29190612f12565b1115611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa90612f8f565b60405180910390fd5b5f6009549050610dac82826110189190612f12565b1115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612ff7565b60405180910390fd5b5f600754836110689190613015565b9050803410156110ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a4906130a0565b60405180910390fd5b5f600190505b8381116110e0576110cf3382856110ca9190612f12565b611d72565b806110d9906130be565b90506110b3565b5082600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461112d9190612f12565b925050819055508260095f8282546111459190612f12565b925050819055505f81346111599190613105565b90505f81111561120d575f3373ffffffffffffffffffffffffffffffffffffffff168260405161118890613165565b5f6040518083038185875af1925050503d805f81146111c2576040519150601f19603f3d011682016040523d82523d5f602084013e6111c7565b606091505b505090508061120b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611202906131c3565b60405180910390fd5b505b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161125390613165565b5f6040518083038185875af1925050503d805f811461128d576040519150601f19603f3d011682016040523d82523d5f602084013e611292565b606091505b50509050806112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061322b565b60405180910390fd5b5050505050565b6112e5611989565b73ffffffffffffffffffffffffffffffffffffffff16611303610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612cb5565b60405180910390fd5b80600b908161136891906133e6565b5050565b611374611989565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d8906134ff565b60405180910390fd5b8060055f6113ed611989565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611496611989565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114db9190612435565b60405180910390a35050565b6114f86114f2611989565b83611a46565b611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90612c4d565b60405180910390fd5b61154384848484611d8f565b50505050565b600c805461155690612a03565b80601f016020809104026020016040519081016040528092919081815260200182805461158290612a03565b80156115cd5780601f106115a4576101008083540402835291602001916115cd565b820191905f5260205f20905b8154815290600101906020018083116115b057829003601f168201915b505050505081565b60606115e082611921565b61161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061358d565b60405180910390fd5b5f611628611deb565b90505f8151116116465760405180602001604052805f815250611674565b8061165084611e7b565b600c60405160200161166493929190613665565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611712611989565b73ffffffffffffffffffffffffffffffffffffffff16611730610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d90612cb5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613705565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610dac81565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0083610a77565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611a5082611921565b611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613793565b60405180910390fd5b5f611a9983610a77565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0857508373ffffffffffffffffffffffffffffffffffffffff16611af0846107a3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b195750611b18818561167c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4282610a77565b73ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f90613821565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd906138af565b60405180910390fd5b611c11838383611fd4565b611c1b5f82611990565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611c689190613105565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cbc9190612f12565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d8b828260405180602001604052805f815250611fd9565b5050565b611d9a848484611b22565b611da684848484612033565b611de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddc9061393d565b60405180910390fd5b50505050565b6060600b8054611dfa90612a03565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2690612a03565b8015611e715780601f10611e4857610100808354040283529160200191611e71565b820191905f5260205f20905b815481529060010190602001808311611e5457829003601f168201915b5050505050905090565b60605f8203611ec1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fcf565b5f8290505f5b5f8214611ef0578080611ed9906130be565b915050600a82611ee99190613988565b9150611ec7565b5f8167ffffffffffffffff811115611f0b57611f0a6126a7565b5b6040519080825280601f01601f191660200182016040528015611f3d5781602001600182028036833780820191505090505b5090505b5f8514611fc857600182611f559190613105565b9150600a85611f6491906139b8565b6030611f709190612f12565b60f81b818381518110611f8657611f856139e8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85611fc19190613988565b9450611f41565b8093505050505b919050565b505050565b611fe383836121b5565b611fef5f848484612033565b61202e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120259061393d565b60405180910390fd5b505050565b5f6120538473ffffffffffffffffffffffffffffffffffffffff16612379565b156121a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261207c611989565b8786866040518563ffffffff1660e01b815260040161209e9493929190613a67565b6020604051808303815f875af19250505080156120d957506040513d601f19601f820116820180604052508101906120d69190613ac5565b60015b612158573d805f8114612107576040519150601f19603f3d011682016040523d82523d5f602084013e61210c565b606091505b505f815103612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121479061393d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ad565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613b3a565b60405180910390fd5b61222c81611921565b1561226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613ba2565b60405180910390fd5b6122775f8383611fd4565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546122c49190612f12565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123cf8161239b565b81146123d9575f80fd5b50565b5f813590506123ea816123c6565b92915050565b5f6020828403121561240557612404612393565b5b5f612412848285016123dc565b91505092915050565b5f8115159050919050565b61242f8161241b565b82525050565b5f6020820190506124485f830184612426565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6124908261244e565b61249a8185612458565b93506124aa818560208601612468565b6124b381612476565b840191505092915050565b5f6020820190508181035f8301526124d68184612486565b905092915050565b5f819050919050565b6124f0816124de565b81146124fa575f80fd5b50565b5f8135905061250b816124e7565b92915050565b5f6020828403121561252657612525612393565b5b5f612533848285016124fd565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125658261253c565b9050919050565b6125758161255b565b82525050565b5f60208201905061258e5f83018461256c565b92915050565b61259d8161255b565b81146125a7575f80fd5b50565b5f813590506125b881612594565b92915050565b5f80604083850312156125d4576125d3612393565b5b5f6125e1858286016125aa565b92505060206125f2858286016124fd565b9150509250929050565b612605816124de565b82525050565b5f60208201905061261e5f8301846125fc565b92915050565b5f805f6060848603121561263b5761263a612393565b5b5f612648868287016125aa565b9350506020612659868287016125aa565b925050604061266a868287016124fd565b9150509250925092565b5f6020828403121561268957612688612393565b5b5f612696848285016125aa565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6126dd82612476565b810181811067ffffffffffffffff821117156126fc576126fb6126a7565b5b80604052505050565b5f61270e61238a565b905061271a82826126d4565b919050565b5f67ffffffffffffffff821115612739576127386126a7565b5b61274282612476565b9050602081019050919050565b828183375f83830152505050565b5f61276f61276a8461271f565b612705565b90508281526020810184848401111561278b5761278a6126a3565b5b61279684828561274f565b509392505050565b5f82601f8301126127b2576127b161269f565b5b81356127c284826020860161275d565b91505092915050565b5f602082840312156127e0576127df612393565b5b5f82013567ffffffffffffffff8111156127fd576127fc612397565b5b6128098482850161279e565b91505092915050565b61281b8161241b565b8114612825575f80fd5b50565b5f8135905061283681612812565b92915050565b5f806040838503121561285257612851612393565b5b5f61285f858286016125aa565b925050602061287085828601612828565b9150509250929050565b5f67ffffffffffffffff821115612894576128936126a7565b5b61289d82612476565b9050602081019050919050565b5f6128bc6128b78461287a565b612705565b9050828152602081018484840111156128d8576128d76126a3565b5b6128e384828561274f565b509392505050565b5f82601f8301126128ff576128fe61269f565b5b813561290f8482602086016128aa565b91505092915050565b5f805f80608085870312156129305761292f612393565b5b5f61293d878288016125aa565b945050602061294e878288016125aa565b935050604061295f878288016124fd565b925050606085013567ffffffffffffffff8111156129805761297f612397565b5b61298c878288016128eb565b91505092959194509250565b5f80604083850312156129ae576129ad612393565b5b5f6129bb858286016125aa565b92505060206129cc858286016125aa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612a1a57607f821691505b602082108103612a2d57612a2c6129d6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f612a8d602c83612458565b9150612a9882612a33565b604082019050919050565b5f6020820190508181035f830152612aba81612a81565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f612b1b602183612458565b9150612b2682612ac1565b604082019050919050565b5f6020820190508181035f830152612b4881612b0f565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f612ba9603883612458565b9150612bb482612b4f565b604082019050919050565b5f6020820190508181035f830152612bd681612b9d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f612c37603183612458565b9150612c4282612bdd565b604082019050919050565b5f6020820190508181035f830152612c6481612c2b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612c9f602083612458565b9150612caa82612c6b565b602082019050919050565b5f6020820190508181035f830152612ccc81612c93565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f612d2d602983612458565b9150612d3882612cd3565b604082019050919050565b5f6020820190508181035f830152612d5a81612d21565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f612dbb602a83612458565b9150612dc682612d61565b604082019050919050565b5f6020820190508181035f830152612de881612daf565b9050919050565b7f5468652073616c65206973207061757365642e000000000000000000000000005f82015250565b5f612e23601383612458565b9150612e2e82612def565b602082019050919050565b5f6020820190508181035f830152612e5081612e17565b9050919050565b7f596f752063616e6e6f74206d696e742074686174206d616e7920696e206f6e655f8201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b5f612eb1602d83612458565b9150612ebc82612e57565b604082019050919050565b5f6020820190508181035f830152612ede81612ea5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f1c826124de565b9150612f27836124de565b9250828201905080821115612f3f57612f3e612ee5565b5b92915050565b7f596f752063616e6e6f74206d696e742074686174206d616e7920746f74616c2e5f82015250565b5f612f79602083612458565b9150612f8482612f45565b602082019050919050565b5f6020820190508181035f830152612fa681612f6d565b9050919050565b7f4578636565647320746f74616c20737570706c792e00000000000000000000005f82015250565b5f612fe1601583612458565b9150612fec82612fad565b602082019050919050565b5f6020820190508181035f83015261300e81612fd5565b9050919050565b5f61301f826124de565b915061302a836124de565b9250828202613038816124de565b9150828204841483151761304f5761304e612ee5565b5b5092915050565b7f496e73756666696369656e742066756e64732e000000000000000000000000005f82015250565b5f61308a601383612458565b915061309582613056565b602082019050919050565b5f6020820190508181035f8301526130b78161307e565b9050919050565b5f6130c8826124de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130fa576130f9612ee5565b5b600182019050919050565b5f61310f826124de565b915061311a836124de565b925082820390508181111561313257613131612ee5565b5b92915050565b5f81905092915050565b50565b5f6131505f83613138565b915061315b82613142565b5f82019050919050565b5f61316f82613145565b9150819050919050565b7f526566756e64206661696c65642e0000000000000000000000000000000000005f82015250565b5f6131ad600e83612458565b91506131b882613179565b602082019050919050565b5f6020820190508181035f8301526131da816131a1565b9050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f613215601083612458565b9150613220826131e1565b602082019050919050565b5f6020820190508181035f83015261324281613209565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026132a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261326a565b6132af868361326a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6132ea6132e56132e0846124de565b6132c7565b6124de565b9050919050565b5f819050919050565b613303836132d0565b61331761330f826132f1565b848454613276565b825550505050565b5f90565b61332b61331f565b6133368184846132fa565b505050565b5b818110156133595761334e5f82613323565b60018101905061333c565b5050565b601f82111561339e5761336f81613249565b6133788461325b565b81016020851015613387578190505b61339b6133938561325b565b83018261333b565b50505b505050565b5f82821c905092915050565b5f6133be5f19846008026133a3565b1980831691505092915050565b5f6133d683836133af565b9150826002028217905092915050565b6133ef8261244e565b67ffffffffffffffff811115613408576134076126a7565b5b6134128254612a03565b61341d82828561335d565b5f60209050601f83116001811461344e575f841561343c578287015190505b61344685826133cb565b8655506134ad565b601f19841661345c86613249565b5f5b828110156134835784890151825560018201915060208501945060208101905061345e565b868310156134a0578489015161349c601f8916826133af565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f6134e9601983612458565b91506134f4826134b5565b602082019050919050565b5f6020820190508181035f830152613516816134dd565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f613577602f83612458565b91506135828261351d565b604082019050919050565b5f6020820190508181035f8301526135a48161356b565b9050919050565b5f81905092915050565b5f6135bf8261244e565b6135c981856135ab565b93506135d9818560208601612468565b80840191505092915050565b5f81546135f181612a03565b6135fb81866135ab565b9450600182165f8114613615576001811461362a5761365c565b60ff198316865281151582028601935061365c565b61363385613249565b5f5b8381101561365457815481890152600182019150602081019050613635565b838801955050505b50505092915050565b5f61367082866135b5565b915061367c82856135b5565b915061368882846135e5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136ef602683612458565b91506136fa82613695565b604082019050919050565b5f6020820190508181035f83015261371c816136e3565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f61377d602c83612458565b915061378882613723565b604082019050919050565b5f6020820190508181035f8301526137aa81613771565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f61380b602983612458565b9150613816826137b1565b604082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613899602483612458565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613927603283612458565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613992826124de565b915061399d836124de565b9250826139ad576139ac61395b565b5b828204905092915050565b5f6139c2826124de565b91506139cd836124de565b9250826139dd576139dc61395b565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613a3982613a15565b613a438185613a1f565b9350613a53818560208601612468565b613a5c81612476565b840191505092915050565b5f608082019050613a7a5f83018761256c565b613a87602083018661256c565b613a9460408301856125fc565b8181036060830152613aa68184613a2f565b905095945050505050565b5f81519050613abf816123c6565b92915050565b5f60208284031215613ada57613ad9612393565b5b5f613ae784828501613ab1565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f613b24602083612458565b9150613b2f82613af0565b602082019050919050565b5f6020820190508181035f830152613b5181613b18565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f613b8c601c83612458565b9150613b9782613b58565b602082019050919050565b5f6020820190508181035f830152613bb981613b80565b905091905056fea2646970667358221220b8369a9a5b3f12e7a3fe230c8c45ec615b4dbf568e7fc406e70562c351b881c764736f6c634300081a0033
Deployed Bytecode Sourcemap
35803:3055:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21621:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22553:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24020:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23550:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36324:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24910:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38043:91;;;;;;;;;;;;;:::i;:::-;;25286:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36293:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22247:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21977:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35190:148;;;;;;;;;;;;;:::i;:::-;;34539:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36029:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38250:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22722:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36417:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35972:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36883:1152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38142:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24313:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25508:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36445:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38344:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24679:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35493:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35879:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21621:292;21723:4;21762:25;21747:40;;;:11;:40;;;;:105;;;;21819:33;21804:48;;;:11;:48;;;;21747:105;:158;;;;21869:36;21893:11;21869:23;:36::i;:::-;21747:158;21740:165;;21621:292;;;:::o;22553:100::-;22607:13;22640:5;22633:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22553:100;:::o;24020:221::-;24096:7;24124:16;24132:7;24124;:16::i;:::-;24116:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24209:15;:24;24225:7;24209:24;;;;;;;;;;;;;;;;;;;;;24202:31;;24020:221;;;:::o;23550:404::-;23631:13;23647:23;23662:7;23647:14;:23::i;:::-;23631:39;;23695:5;23689:11;;:2;:11;;;23681:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23775:5;23759:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;23784:44;23808:5;23815:12;:10;:12::i;:::-;23784:23;:44::i;:::-;23759:69;23751:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;23925:21;23934:2;23938:7;23925:8;:21::i;:::-;23620:334;23550:404;;:::o;36324:26::-;;;;:::o;24910:305::-;25071:41;25090:12;:10;:12::i;:::-;25104:7;25071:18;:41::i;:::-;25063:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25179:28;25189:4;25195:2;25199:7;25179:9;:28::i;:::-;24910:305;;;:::o;38043:91::-;34770:12;:10;:12::i;:::-;34759:23;;:7;:5;:7::i;:::-;:23;;;34751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38114:12:::1;;;;;;;;;;;38113:13;38098:12;;:28;;;;;;;;;;;;;;;;;;38043:91::o:0;25286:151::-;25390:39;25407:4;25413:2;25417:7;25390:39;;;;;;;;;;;;:16;:39::i;:::-;25286:151;;;:::o;36293:24::-;;;;;;;;;;;;;:::o;22247:239::-;22319:7;22339:13;22355:7;:16;22363:7;22355:16;;;;;;;;;;;;;;;;;;;;;22339:32;;22407:1;22390:19;;:5;:19;;;22382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22473:5;22466:12;;;22247:239;;;:::o;21977:208::-;22049:7;22094:1;22077:19;;:5;:19;;;22069:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22161:9;:16;22171:5;22161:16;;;;;;;;;;;;;;;;22154:23;;21977:208;;;:::o;35190:148::-;34770:12;:10;:12::i;:::-;34759:23;;:7;:5;:7::i;:::-;:23;;;34751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35297:1:::1;35260:40;;35281:6;;;;;;;;;;;35260:40;;;;;;;;;;;;35328:1;35311:6;;:19;;;;;;;;;;;;;;;;;;35190:148::o:0;34539:87::-;34585:7;34612:6;;;;;;;;;;;34605:13;;34539:87;:::o;36029:43::-;36071:1;36029:43;:::o;38250:86::-;34770:12;:10;:12::i;:::-;34759:23;;:7;:5;:7::i;:::-;:23;;;34751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38322:6:::1;38314:5;:14;;;;38250:86:::0;:::o;22722:104::-;22778:13;22811:7;22804:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:104;:::o;36417:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35972:27::-;;;;:::o;36883:1152::-;36953:12;;;;;;;;;;;36945:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36071:1;37008:10;:29;;37000:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36071:1;37136:10;37106:15;:27;37122:10;37106:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:59;;37098:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;37213:22;37238:11;;37213:36;;35913:4;37285:10;37268:14;:27;;;;:::i;:::-;:41;;37260:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37348:18;37382:5;;37369:10;:18;;;;:::i;:::-;37348:39;;37419:10;37406:9;:23;;37398:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37470:9;37482:1;37470:13;;37466:109;37490:10;37485:1;:15;37466:109;;37522:41;37532:10;37561:1;37544:14;:18;;;;:::i;:::-;37522:9;:41::i;:::-;37502:3;;;;:::i;:::-;;;37466:109;;;;37616:10;37585:15;:27;37601:10;37585:27;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;37652:10;37637:11;;:25;;;;;;;:::i;:::-;;;;;;;;37675:19;37709:10;37697:9;:22;;;;:::i;:::-;37675:44;;37748:1;37734:11;:15;37730:176;;;37767:18;37799:10;37791:24;;37823:11;37791:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37766:73;;;37862:13;37854:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;37751:155;37730:176;37919:12;37937:15;;;;;;;;;;;:20;;37965:10;37937:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37918:62;;;37999:7;37991:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36934:1101;;;;36883:1152;:::o;38142:100::-;34770:12;:10;:12::i;:::-;34759:23;;:7;:5;:7::i;:::-;:23;;;34751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38226:8:::1;38216:7;:18;;;;;;:::i;:::-;;38142:100:::0;:::o;24313:295::-;24428:12;:10;:12::i;:::-;24416:24;;:8;:24;;;24408:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24528:8;24483:18;:32;24502:12;:10;:12::i;:::-;24483:32;;;;;;;;;;;;;;;:42;24516:8;24483:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24581:8;24552:48;;24567:12;:10;:12::i;:::-;24552:48;;;24591:8;24552:48;;;;;;:::i;:::-;;;;;;;;24313:295;;:::o;25508:285::-;25640:41;25659:12;:10;:12::i;:::-;25673:7;25640:18;:41::i;:::-;25632:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25746:39;25760:4;25766:2;25770:7;25779:5;25746:13;:39::i;:::-;25508:285;;;;:::o;36445:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38344:394::-;38417:13;38451:16;38459:7;38451;:16::i;:::-;38443:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38530:28;38561:10;:8;:10::i;:::-;38530:41;;38620:1;38595:14;38589:28;:32;:141;;;;;;;;;;;;;;;;;38661:14;38677:18;:7;:16;:18::i;:::-;38697:13;38644:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38589:141;38582:148;;;38344:394;;;:::o;24679:164::-;24776:4;24800:18;:25;24819:5;24800:25;;;;;;;;;;;;;;;:35;24826:8;24800:35;;;;;;;;;;;;;;;;;;;;;;;;;24793:42;;24679:164;;;;:::o;35493:244::-;34770:12;:10;:12::i;:::-;34759:23;;:7;:5;:7::i;:::-;:23;;;34751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35602:1:::1;35582:22;;:8;:22;;::::0;35574:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:8;35663:38;;35684:6;;;;;;;;;;;35663:38;;;;;;;;;;;;35721:8;35712:6;;:17;;;;;;;;;;;;;;;;;;35493:244:::0;:::o;35879:38::-;35913:4;35879:38;:::o;20111:157::-;20196:4;20235:25;20220:40;;;:11;:40;;;;20213:47;;20111:157;;;:::o;27260:127::-;27325:4;27377:1;27349:30;;:7;:16;27357:7;27349:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27342:37;;27260:127;;;:::o;16889:98::-;16942:7;16969:10;16962:17;;16889:98;:::o;31144:174::-;31246:2;31219:15;:24;31235:7;31219:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31302:7;31298:2;31264:46;;31273:23;31288:7;31273:14;:23::i;:::-;31264:46;;;;;;;;;;;;31144:174;;:::o;27554:355::-;27647:4;27672:16;27680:7;27672;:16::i;:::-;27664:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:13;27764:23;27779:7;27764:14;:23::i;:::-;27748:39;;27817:5;27806:16;;:7;:16;;;:51;;;;27850:7;27826:31;;:20;27838:7;27826:11;:20::i;:::-;:31;;;27806:51;:94;;;;27861:39;27885:5;27892:7;27861:23;:39::i;:::-;27806:94;27798:103;;;27554:355;;;;:::o;30482:544::-;30607:4;30580:31;;:23;30595:7;30580:14;:23::i;:::-;:31;;;30572:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30690:1;30676:16;;:2;:16;;;30668:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30746:39;30767:4;30773:2;30777:7;30746:20;:39::i;:::-;30850:29;30867:1;30871:7;30850:8;:29::i;:::-;30911:1;30892:9;:15;30902:4;30892:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30940:1;30923:9;:13;30933:2;30923:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30971:2;30952:7;:16;30960:7;30952:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31010:7;31006:2;30991:27;;31000:4;30991:27;;;;;;;;;;;;30482:544;;;:::o;28251:110::-;28327:26;28337:2;28341:7;28327:26;;;;;;;;;;;;:9;:26::i;:::-;28251:110;;:::o;26675:272::-;26789:28;26799:4;26805:2;26809:7;26789:9;:28::i;:::-;26836:48;26859:4;26865:2;26869:7;26878:5;26836:22;:48::i;:::-;26828:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26675:272;;;;:::o;38747:108::-;38807:13;38840:7;38833:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38747:108;:::o;17550:723::-;17606:13;17836:1;17827:5;:10;17823:53;;17854:10;;;;;;;;;;;;;;;;;;;;;17823:53;17886:12;17901:5;17886:20;;17917:14;17942:78;17957:1;17949:4;:9;17942:78;;17975:8;;;;;:::i;:::-;;;;18006:2;17998:10;;;;;:::i;:::-;;;17942:78;;;18030:19;18062:6;18052:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18030:39;;18080:154;18096:1;18087:5;:10;18080:154;;18124:1;18114:11;;;;;:::i;:::-;;;18191:2;18183:5;:10;;;;:::i;:::-;18170:2;:24;;;;:::i;:::-;18157:39;;18140:6;18147;18140:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18220:2;18211:11;;;;;:::i;:::-;;;18080:154;;;18258:6;18244:21;;;;;17550:723;;;;:::o;33339:93::-;;;;:::o;28588:250::-;28684:18;28690:2;28694:7;28684:5;:18::i;:::-;28721:54;28752:1;28756:2;28760:7;28769:5;28721:22;:54::i;:::-;28713:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28588:250;;;:::o;31883:843::-;32004:4;32030:15;:2;:13;;;:15::i;:::-;32026:693;;;32082:2;32066:36;;;32103:12;:10;:12::i;:::-;32117:4;32123:7;32132:5;32066:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32062:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32329:1;32312:6;:13;:18;32308:341;;32355:60;;;;;;;;;;:::i;:::-;;;;;;;;32308:341;32599:6;32593:13;32584:6;32580:2;32576:15;32569:38;32062:602;32199:45;;;32189:55;;;:6;:55;;;;32182:62;;;;;32026:693;32703:4;32696:11;;31883:843;;;;;;;:::o;29174:382::-;29268:1;29254:16;;:2;:16;;;29246:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29327:16;29335:7;29327;:16::i;:::-;29326:17;29318:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29389:45;29418:1;29422:2;29426:7;29389:20;:45::i;:::-;29464:1;29447:9;:13;29457:2;29447:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29495:2;29476:7;:16;29484:7;29476:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29540:7;29536:2;29515:33;;29532:1;29515:33;;;;;;;;;;;;29174:382;;:::o;9000:422::-;9060:4;9268:12;9379:7;9367:20;9359:28;;9413:1;9406:4;:8;9399:15;;;9000:422;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:77::-;2790:7;2819:5;2808:16;;2753:77;;;:::o;2836:122::-;2909:24;2927:5;2909:24;:::i;:::-;2902:5;2899:35;2889:63;;2948:1;2945;2938:12;2889:63;2836:122;:::o;2964:139::-;3010:5;3048:6;3035:20;3026:29;;3064:33;3091:5;3064:33;:::i;:::-;2964:139;;;;:::o;3109:329::-;3168:6;3217:2;3205:9;3196:7;3192:23;3188:32;3185:119;;;3223:79;;:::i;:::-;3185:119;3343:1;3368:53;3413:7;3404:6;3393:9;3389:22;3368:53;:::i;:::-;3358:63;;3314:117;3109:329;;;;:::o;3444:126::-;3481:7;3521:42;3514:5;3510:54;3499:65;;3444:126;;;:::o;3576:96::-;3613:7;3642:24;3660:5;3642:24;:::i;:::-;3631:35;;3576:96;;;:::o;3678:118::-;3765:24;3783:5;3765:24;:::i;:::-;3760:3;3753:37;3678:118;;:::o;3802:222::-;3895:4;3933:2;3922:9;3918:18;3910:26;;3946:71;4014:1;4003:9;3999:17;3990:6;3946:71;:::i;:::-;3802:222;;;;:::o;4030:122::-;4103:24;4121:5;4103:24;:::i;:::-;4096:5;4093:35;4083:63;;4142:1;4139;4132:12;4083:63;4030:122;:::o;4158:139::-;4204:5;4242:6;4229:20;4220:29;;4258:33;4285:5;4258:33;:::i;:::-;4158:139;;;;:::o;4303:474::-;4371:6;4379;4428:2;4416:9;4407:7;4403:23;4399:32;4396:119;;;4434:79;;:::i;:::-;4396:119;4554:1;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4525:117;4681:2;4707:53;4752:7;4743:6;4732:9;4728:22;4707:53;:::i;:::-;4697:63;;4652:118;4303:474;;;;;:::o;4783:118::-;4870:24;4888:5;4870:24;:::i;:::-;4865:3;4858:37;4783:118;;:::o;4907:222::-;5000:4;5038:2;5027:9;5023:18;5015:26;;5051:71;5119:1;5108:9;5104:17;5095:6;5051:71;:::i;:::-;4907:222;;;;:::o;5135:619::-;5212:6;5220;5228;5277:2;5265:9;5256:7;5252:23;5248:32;5245:119;;;5283:79;;:::i;:::-;5245:119;5403:1;5428:53;5473:7;5464:6;5453:9;5449:22;5428:53;:::i;:::-;5418:63;;5374:117;5530:2;5556:53;5601:7;5592:6;5581:9;5577:22;5556:53;:::i;:::-;5546:63;;5501:118;5658:2;5684:53;5729:7;5720:6;5709:9;5705:22;5684:53;:::i;:::-;5674:63;;5629:118;5135:619;;;;;:::o;5760:329::-;5819:6;5868:2;5856:9;5847:7;5843:23;5839:32;5836:119;;;5874:79;;:::i;:::-;5836:119;5994:1;6019:53;6064:7;6055:6;6044:9;6040:22;6019:53;:::i;:::-;6009:63;;5965:117;5760:329;;;;:::o;6095:117::-;6204:1;6201;6194:12;6218:117;6327:1;6324;6317:12;6341:180;6389:77;6386:1;6379:88;6486:4;6483:1;6476:15;6510:4;6507:1;6500:15;6527:281;6610:27;6632:4;6610:27;:::i;:::-;6602:6;6598:40;6740:6;6728:10;6725:22;6704:18;6692:10;6689:34;6686:62;6683:88;;;6751:18;;:::i;:::-;6683:88;6791:10;6787:2;6780:22;6570:238;6527:281;;:::o;6814:129::-;6848:6;6875:20;;:::i;:::-;6865:30;;6904:33;6932:4;6924:6;6904:33;:::i;:::-;6814:129;;;:::o;6949:308::-;7011:4;7101:18;7093:6;7090:30;7087:56;;;7123:18;;:::i;:::-;7087:56;7161:29;7183:6;7161:29;:::i;:::-;7153:37;;7245:4;7239;7235:15;7227:23;;6949:308;;;:::o;7263:148::-;7361:6;7356:3;7351;7338:30;7402:1;7393:6;7388:3;7384:16;7377:27;7263:148;;;:::o;7417:425::-;7495:5;7520:66;7536:49;7578:6;7536:49;:::i;:::-;7520:66;:::i;:::-;7511:75;;7609:6;7602:5;7595:21;7647:4;7640:5;7636:16;7685:3;7676:6;7671:3;7667:16;7664:25;7661:112;;;7692:79;;:::i;:::-;7661:112;7782:54;7829:6;7824:3;7819;7782:54;:::i;:::-;7501:341;7417:425;;;;;:::o;7862:340::-;7918:5;7967:3;7960:4;7952:6;7948:17;7944:27;7934:122;;7975:79;;:::i;:::-;7934:122;8092:6;8079:20;8117:79;8192:3;8184:6;8177:4;8169:6;8165:17;8117:79;:::i;:::-;8108:88;;7924:278;7862:340;;;;:::o;8208:509::-;8277:6;8326:2;8314:9;8305:7;8301:23;8297:32;8294:119;;;8332:79;;:::i;:::-;8294:119;8480:1;8469:9;8465:17;8452:31;8510:18;8502:6;8499:30;8496:117;;;8532:79;;:::i;:::-;8496:117;8637:63;8692:7;8683:6;8672:9;8668:22;8637:63;:::i;:::-;8627:73;;8423:287;8208:509;;;;:::o;8723:116::-;8793:21;8808:5;8793:21;:::i;:::-;8786:5;8783:32;8773:60;;8829:1;8826;8819:12;8773:60;8723:116;:::o;8845:133::-;8888:5;8926:6;8913:20;8904:29;;8942:30;8966:5;8942:30;:::i;:::-;8845:133;;;;:::o;8984:468::-;9049:6;9057;9106:2;9094:9;9085:7;9081:23;9077:32;9074:119;;;9112:79;;:::i;:::-;9074:119;9232:1;9257:53;9302:7;9293:6;9282:9;9278:22;9257:53;:::i;:::-;9247:63;;9203:117;9359:2;9385:50;9427:7;9418:6;9407:9;9403:22;9385:50;:::i;:::-;9375:60;;9330:115;8984:468;;;;;:::o;9458:307::-;9519:4;9609:18;9601:6;9598:30;9595:56;;;9631:18;;:::i;:::-;9595:56;9669:29;9691:6;9669:29;:::i;:::-;9661:37;;9753:4;9747;9743:15;9735:23;;9458:307;;;:::o;9771:423::-;9848:5;9873:65;9889:48;9930:6;9889:48;:::i;:::-;9873:65;:::i;:::-;9864:74;;9961:6;9954:5;9947:21;9999:4;9992:5;9988:16;10037:3;10028:6;10023:3;10019:16;10016:25;10013:112;;;10044:79;;:::i;:::-;10013:112;10134:54;10181:6;10176:3;10171;10134:54;:::i;:::-;9854:340;9771:423;;;;;:::o;10213:338::-;10268:5;10317:3;10310:4;10302:6;10298:17;10294:27;10284:122;;10325:79;;:::i;:::-;10284:122;10442:6;10429:20;10467:78;10541:3;10533:6;10526:4;10518:6;10514:17;10467:78;:::i;:::-;10458:87;;10274:277;10213:338;;;;:::o;10557:943::-;10652:6;10660;10668;10676;10725:3;10713:9;10704:7;10700:23;10696:33;10693:120;;;10732:79;;:::i;:::-;10693:120;10852:1;10877:53;10922:7;10913:6;10902:9;10898:22;10877:53;:::i;:::-;10867:63;;10823:117;10979:2;11005:53;11050:7;11041:6;11030:9;11026:22;11005:53;:::i;:::-;10995:63;;10950:118;11107:2;11133:53;11178:7;11169:6;11158:9;11154:22;11133:53;:::i;:::-;11123:63;;11078:118;11263:2;11252:9;11248:18;11235:32;11294:18;11286:6;11283:30;11280:117;;;11316:79;;:::i;:::-;11280:117;11421:62;11475:7;11466:6;11455:9;11451:22;11421:62;:::i;:::-;11411:72;;11206:287;10557:943;;;;;;;:::o;11506:474::-;11574:6;11582;11631:2;11619:9;11610:7;11606:23;11602:32;11599:119;;;11637:79;;:::i;:::-;11599:119;11757:1;11782:53;11827:7;11818:6;11807:9;11803:22;11782:53;:::i;:::-;11772:63;;11728:117;11884:2;11910:53;11955:7;11946:6;11935:9;11931:22;11910:53;:::i;:::-;11900:63;;11855:118;11506:474;;;;;:::o;11986:180::-;12034:77;12031:1;12024:88;12131:4;12128:1;12121:15;12155:4;12152:1;12145:15;12172:320;12216:6;12253:1;12247:4;12243:12;12233:22;;12300:1;12294:4;12290:12;12321:18;12311:81;;12377:4;12369:6;12365:17;12355:27;;12311:81;12439:2;12431:6;12428:14;12408:18;12405:38;12402:84;;12458:18;;:::i;:::-;12402:84;12223:269;12172:320;;;:::o;12498:231::-;12638:34;12634:1;12626:6;12622:14;12615:58;12707:14;12702:2;12694:6;12690:15;12683:39;12498:231;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:419::-;13273:4;13311:2;13300:9;13296:18;13288:26;;13360:9;13354:4;13350:20;13346:1;13335:9;13331:17;13324:47;13388:131;13514:4;13388:131;:::i;:::-;13380:139;;13107:419;;;:::o;13532:220::-;13672:34;13668:1;13660:6;13656:14;13649:58;13741:3;13736:2;13728:6;13724:15;13717:28;13532:220;:::o;13758:366::-;13900:3;13921:67;13985:2;13980:3;13921:67;:::i;:::-;13914:74;;13997:93;14086:3;13997:93;:::i;:::-;14115:2;14110:3;14106:12;14099:19;;13758:366;;;:::o;14130:419::-;14296:4;14334:2;14323:9;14319:18;14311:26;;14383:9;14377:4;14373:20;14369:1;14358:9;14354:17;14347:47;14411:131;14537:4;14411:131;:::i;:::-;14403:139;;14130:419;;;:::o;14555:243::-;14695:34;14691:1;14683:6;14679:14;14672:58;14764:26;14759:2;14751:6;14747:15;14740:51;14555:243;:::o;14804:366::-;14946:3;14967:67;15031:2;15026:3;14967:67;:::i;:::-;14960:74;;15043:93;15132:3;15043:93;:::i;:::-;15161:2;15156:3;15152:12;15145:19;;14804:366;;;:::o;15176:419::-;15342:4;15380:2;15369:9;15365:18;15357:26;;15429:9;15423:4;15419:20;15415:1;15404:9;15400:17;15393:47;15457:131;15583:4;15457:131;:::i;:::-;15449:139;;15176:419;;;:::o;15601:236::-;15741:34;15737:1;15729:6;15725:14;15718:58;15810:19;15805:2;15797:6;15793:15;15786:44;15601:236;:::o;15843:366::-;15985:3;16006:67;16070:2;16065:3;16006:67;:::i;:::-;15999:74;;16082:93;16171:3;16082:93;:::i;:::-;16200:2;16195:3;16191:12;16184:19;;15843:366;;;:::o;16215:419::-;16381:4;16419:2;16408:9;16404:18;16396:26;;16468:9;16462:4;16458:20;16454:1;16443:9;16439:17;16432:47;16496:131;16622:4;16496:131;:::i;:::-;16488:139;;16215:419;;;:::o;16640:182::-;16780:34;16776:1;16768:6;16764:14;16757:58;16640:182;:::o;16828:366::-;16970:3;16991:67;17055:2;17050:3;16991:67;:::i;:::-;16984:74;;17067:93;17156:3;17067:93;:::i;:::-;17185:2;17180:3;17176:12;17169:19;;16828:366;;;:::o;17200:419::-;17366:4;17404:2;17393:9;17389:18;17381:26;;17453:9;17447:4;17443:20;17439:1;17428:9;17424:17;17417:47;17481:131;17607:4;17481:131;:::i;:::-;17473:139;;17200:419;;;:::o;17625:228::-;17765:34;17761:1;17753:6;17749:14;17742:58;17834:11;17829:2;17821:6;17817:15;17810:36;17625:228;:::o;17859:366::-;18001:3;18022:67;18086:2;18081:3;18022:67;:::i;:::-;18015:74;;18098:93;18187:3;18098:93;:::i;:::-;18216:2;18211:3;18207:12;18200:19;;17859:366;;;:::o;18231:419::-;18397:4;18435:2;18424:9;18420:18;18412:26;;18484:9;18478:4;18474:20;18470:1;18459:9;18455:17;18448:47;18512:131;18638:4;18512:131;:::i;:::-;18504:139;;18231:419;;;:::o;18656:229::-;18796:34;18792:1;18784:6;18780:14;18773:58;18865:12;18860:2;18852:6;18848:15;18841:37;18656:229;:::o;18891:366::-;19033:3;19054:67;19118:2;19113:3;19054:67;:::i;:::-;19047:74;;19130:93;19219:3;19130:93;:::i;:::-;19248:2;19243:3;19239:12;19232:19;;18891:366;;;:::o;19263:419::-;19429:4;19467:2;19456:9;19452:18;19444:26;;19516:9;19510:4;19506:20;19502:1;19491:9;19487:17;19480:47;19544:131;19670:4;19544:131;:::i;:::-;19536:139;;19263:419;;;:::o;19688:169::-;19828:21;19824:1;19816:6;19812:14;19805:45;19688:169;:::o;19863:366::-;20005:3;20026:67;20090:2;20085:3;20026:67;:::i;:::-;20019:74;;20102:93;20191:3;20102:93;:::i;:::-;20220:2;20215:3;20211:12;20204:19;;19863:366;;;:::o;20235:419::-;20401:4;20439:2;20428:9;20424:18;20416:26;;20488:9;20482:4;20478:20;20474:1;20463:9;20459:17;20452:47;20516:131;20642:4;20516:131;:::i;:::-;20508:139;;20235:419;;;:::o;20660:232::-;20800:34;20796:1;20788:6;20784:14;20777:58;20869:15;20864:2;20856:6;20852:15;20845:40;20660:232;:::o;20898:366::-;21040:3;21061:67;21125:2;21120:3;21061:67;:::i;:::-;21054:74;;21137:93;21226:3;21137:93;:::i;:::-;21255:2;21250:3;21246:12;21239:19;;20898:366;;;:::o;21270:419::-;21436:4;21474:2;21463:9;21459:18;21451:26;;21523:9;21517:4;21513:20;21509:1;21498:9;21494:17;21487:47;21551:131;21677:4;21551:131;:::i;:::-;21543:139;;21270:419;;;:::o;21695:180::-;21743:77;21740:1;21733:88;21840:4;21837:1;21830:15;21864:4;21861:1;21854:15;21881:191;21921:3;21940:20;21958:1;21940:20;:::i;:::-;21935:25;;21974:20;21992:1;21974:20;:::i;:::-;21969:25;;22017:1;22014;22010:9;22003:16;;22038:3;22035:1;22032:10;22029:36;;;22045:18;;:::i;:::-;22029:36;21881:191;;;;:::o;22078:182::-;22218:34;22214:1;22206:6;22202:14;22195:58;22078:182;:::o;22266:366::-;22408:3;22429:67;22493:2;22488:3;22429:67;:::i;:::-;22422:74;;22505:93;22594:3;22505:93;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22266:366;;;:::o;22638:419::-;22804:4;22842:2;22831:9;22827:18;22819:26;;22891:9;22885:4;22881:20;22877:1;22866:9;22862:17;22855:47;22919:131;23045:4;22919:131;:::i;:::-;22911:139;;22638:419;;;:::o;23063:171::-;23203:23;23199:1;23191:6;23187:14;23180:47;23063:171;:::o;23240:366::-;23382:3;23403:67;23467:2;23462:3;23403:67;:::i;:::-;23396:74;;23479:93;23568:3;23479:93;:::i;:::-;23597:2;23592:3;23588:12;23581:19;;23240:366;;;:::o;23612:419::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23865:9;23859:4;23855:20;23851:1;23840:9;23836:17;23829:47;23893:131;24019:4;23893:131;:::i;:::-;23885:139;;23612:419;;;:::o;24037:410::-;24077:7;24100:20;24118:1;24100:20;:::i;:::-;24095:25;;24134:20;24152:1;24134:20;:::i;:::-;24129:25;;24189:1;24186;24182:9;24211:30;24229:11;24211:30;:::i;:::-;24200:41;;24390:1;24381:7;24377:15;24374:1;24371:22;24351:1;24344:9;24324:83;24301:139;;24420:18;;:::i;:::-;24301:139;24085:362;24037:410;;;;:::o;24453:169::-;24593:21;24589:1;24581:6;24577:14;24570:45;24453:169;:::o;24628:366::-;24770:3;24791:67;24855:2;24850:3;24791:67;:::i;:::-;24784:74;;24867:93;24956:3;24867:93;:::i;:::-;24985:2;24980:3;24976:12;24969:19;;24628:366;;;:::o;25000:419::-;25166:4;25204:2;25193:9;25189:18;25181:26;;25253:9;25247:4;25243:20;25239:1;25228:9;25224:17;25217:47;25281:131;25407:4;25281:131;:::i;:::-;25273:139;;25000:419;;;:::o;25425:233::-;25464:3;25487:24;25505:5;25487:24;:::i;:::-;25478:33;;25533:66;25526:5;25523:77;25520:103;;25603:18;;:::i;:::-;25520:103;25650:1;25643:5;25639:13;25632:20;;25425:233;;;:::o;25664:194::-;25704:4;25724:20;25742:1;25724:20;:::i;:::-;25719:25;;25758:20;25776:1;25758:20;:::i;:::-;25753:25;;25802:1;25799;25795:9;25787:17;;25826:1;25820:4;25817:11;25814:37;;;25831:18;;:::i;:::-;25814:37;25664:194;;;;:::o;25864:147::-;25965:11;26002:3;25987:18;;25864:147;;;;:::o;26017:114::-;;:::o;26137:398::-;26296:3;26317:83;26398:1;26393:3;26317:83;:::i;:::-;26310:90;;26409:93;26498:3;26409:93;:::i;:::-;26527:1;26522:3;26518:11;26511:18;;26137:398;;;:::o;26541:379::-;26725:3;26747:147;26890:3;26747:147;:::i;:::-;26740:154;;26911:3;26904:10;;26541:379;;;:::o;26926:164::-;27066:16;27062:1;27054:6;27050:14;27043:40;26926:164;:::o;27096:366::-;27238:3;27259:67;27323:2;27318:3;27259:67;:::i;:::-;27252:74;;27335:93;27424:3;27335:93;:::i;:::-;27453:2;27448:3;27444:12;27437:19;;27096:366;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:166::-;28033:18;28029:1;28021:6;28017:14;28010:42;27893:166;:::o;28065:366::-;28207:3;28228:67;28292:2;28287:3;28228:67;:::i;:::-;28221:74;;28304:93;28393:3;28304:93;:::i;:::-;28422:2;28417:3;28413:12;28406:19;;28065:366;;;:::o;28437:419::-;28603:4;28641:2;28630:9;28626:18;28618:26;;28690:9;28684:4;28680:20;28676:1;28665:9;28661:17;28654:47;28718:131;28844:4;28718:131;:::i;:::-;28710:139;;28437:419;;;:::o;28862:141::-;28911:4;28934:3;28926:11;;28957:3;28954:1;28947:14;28991:4;28988:1;28978:18;28970:26;;28862:141;;;:::o;29009:93::-;29046:6;29093:2;29088;29081:5;29077:14;29073:23;29063:33;;29009:93;;;:::o;29108:107::-;29152:8;29202:5;29196:4;29192:16;29171:37;;29108:107;;;;:::o;29221:393::-;29290:6;29340:1;29328:10;29324:18;29363:97;29393:66;29382:9;29363:97;:::i;:::-;29481:39;29511:8;29500:9;29481:39;:::i;:::-;29469:51;;29553:4;29549:9;29542:5;29538:21;29529:30;;29602:4;29592:8;29588:19;29581:5;29578:30;29568:40;;29297:317;;29221:393;;;;;:::o;29620:60::-;29648:3;29669:5;29662:12;;29620:60;;;:::o;29686:142::-;29736:9;29769:53;29787:34;29796:24;29814:5;29796:24;:::i;:::-;29787:34;:::i;:::-;29769:53;:::i;:::-;29756:66;;29686:142;;;:::o;29834:75::-;29877:3;29898:5;29891:12;;29834:75;;;:::o;29915:269::-;30025:39;30056:7;30025:39;:::i;:::-;30086:91;30135:41;30159:16;30135:41;:::i;:::-;30127:6;30120:4;30114:11;30086:91;:::i;:::-;30080:4;30073:105;29991:193;29915:269;;;:::o;30190:73::-;30235:3;30190:73;:::o;30269:189::-;30346:32;;:::i;:::-;30387:65;30445:6;30437;30431:4;30387:65;:::i;:::-;30322:136;30269:189;;:::o;30464:186::-;30524:120;30541:3;30534:5;30531:14;30524:120;;;30595:39;30632:1;30625:5;30595:39;:::i;:::-;30568:1;30561:5;30557:13;30548:22;;30524:120;;;30464:186;;:::o;30656:543::-;30757:2;30752:3;30749:11;30746:446;;;30791:38;30823:5;30791:38;:::i;:::-;30875:29;30893:10;30875:29;:::i;:::-;30865:8;30861:44;31058:2;31046:10;31043:18;31040:49;;;31079:8;31064:23;;31040:49;31102:80;31158:22;31176:3;31158:22;:::i;:::-;31148:8;31144:37;31131:11;31102:80;:::i;:::-;30761:431;;30746:446;30656:543;;;:::o;31205:117::-;31259:8;31309:5;31303:4;31299:16;31278:37;;31205:117;;;;:::o;31328:169::-;31372:6;31405:51;31453:1;31449:6;31441:5;31438:1;31434:13;31405:51;:::i;:::-;31401:56;31486:4;31480;31476:15;31466:25;;31379:118;31328:169;;;;:::o;31502:295::-;31578:4;31724:29;31749:3;31743:4;31724:29;:::i;:::-;31716:37;;31786:3;31783:1;31779:11;31773:4;31770:21;31762:29;;31502:295;;;;:::o;31802:1395::-;31919:37;31952:3;31919:37;:::i;:::-;32021:18;32013:6;32010:30;32007:56;;;32043:18;;:::i;:::-;32007:56;32087:38;32119:4;32113:11;32087:38;:::i;:::-;32172:67;32232:6;32224;32218:4;32172:67;:::i;:::-;32266:1;32290:4;32277:17;;32322:2;32314:6;32311:14;32339:1;32334:618;;;;32996:1;33013:6;33010:77;;;33062:9;33057:3;33053:19;33047:26;33038:35;;33010:77;33113:67;33173:6;33166:5;33113:67;:::i;:::-;33107:4;33100:81;32969:222;32304:887;;32334:618;32386:4;32382:9;32374:6;32370:22;32420:37;32452:4;32420:37;:::i;:::-;32479:1;32493:208;32507:7;32504:1;32501:14;32493:208;;;32586:9;32581:3;32577:19;32571:26;32563:6;32556:42;32637:1;32629:6;32625:14;32615:24;;32684:2;32673:9;32669:18;32656:31;;32530:4;32527:1;32523:12;32518:17;;32493:208;;;32729:6;32720:7;32717:19;32714:179;;;32787:9;32782:3;32778:19;32772:26;32830:48;32872:4;32864:6;32860:17;32849:9;32830:48;:::i;:::-;32822:6;32815:64;32737:156;32714:179;32939:1;32935;32927:6;32923:14;32919:22;32913:4;32906:36;32341:611;;;32304:887;;31894:1303;;;31802:1395;;:::o;33203:175::-;33343:27;33339:1;33331:6;33327:14;33320:51;33203:175;:::o;33384:366::-;33526:3;33547:67;33611:2;33606:3;33547:67;:::i;:::-;33540:74;;33623:93;33712:3;33623:93;:::i;:::-;33741:2;33736:3;33732:12;33725:19;;33384:366;;;:::o;33756:419::-;33922:4;33960:2;33949:9;33945:18;33937:26;;34009:9;34003:4;33999:20;33995:1;33984:9;33980:17;33973:47;34037:131;34163:4;34037:131;:::i;:::-;34029:139;;33756:419;;;:::o;34181:234::-;34321:34;34317:1;34309:6;34305:14;34298:58;34390:17;34385:2;34377:6;34373:15;34366:42;34181:234;:::o;34421:366::-;34563:3;34584:67;34648:2;34643:3;34584:67;:::i;:::-;34577:74;;34660:93;34749:3;34660:93;:::i;:::-;34778:2;34773:3;34769:12;34762:19;;34421:366;;;:::o;34793:419::-;34959:4;34997:2;34986:9;34982:18;34974:26;;35046:9;35040:4;35036:20;35032:1;35021:9;35017:17;35010:47;35074:131;35200:4;35074:131;:::i;:::-;35066:139;;34793:419;;;:::o;35218:148::-;35320:11;35357:3;35342:18;;35218:148;;;;:::o;35372:390::-;35478:3;35506:39;35539:5;35506:39;:::i;:::-;35561:89;35643:6;35638:3;35561:89;:::i;:::-;35554:96;;35659:65;35717:6;35712:3;35705:4;35698:5;35694:16;35659:65;:::i;:::-;35749:6;35744:3;35740:16;35733:23;;35482:280;35372:390;;;;:::o;35792:874::-;35895:3;35932:5;35926:12;35961:36;35987:9;35961:36;:::i;:::-;36013:89;36095:6;36090:3;36013:89;:::i;:::-;36006:96;;36133:1;36122:9;36118:17;36149:1;36144:166;;;;36324:1;36319:341;;;;36111:549;;36144:166;36228:4;36224:9;36213;36209:25;36204:3;36197:38;36290:6;36283:14;36276:22;36268:6;36264:35;36259:3;36255:45;36248:52;;36144:166;;36319:341;36386:38;36418:5;36386:38;:::i;:::-;36446:1;36460:154;36474:6;36471:1;36468:13;36460:154;;;36548:7;36542:14;36538:1;36533:3;36529:11;36522:35;36598:1;36589:7;36585:15;36574:26;;36496:4;36493:1;36489:12;36484:17;;36460:154;;;36643:6;36638:3;36634:16;36627:23;;36326:334;;36111:549;;35899:767;;35792:874;;;;:::o;36672:589::-;36897:3;36919:95;37010:3;37001:6;36919:95;:::i;:::-;36912:102;;37031:95;37122:3;37113:6;37031:95;:::i;:::-;37024:102;;37143:92;37231:3;37222:6;37143:92;:::i;:::-;37136:99;;37252:3;37245:10;;36672:589;;;;;;:::o;37267:225::-;37407:34;37403:1;37395:6;37391:14;37384:58;37476:8;37471:2;37463:6;37459:15;37452:33;37267:225;:::o;37498:366::-;37640:3;37661:67;37725:2;37720:3;37661:67;:::i;:::-;37654:74;;37737:93;37826:3;37737:93;:::i;:::-;37855:2;37850:3;37846:12;37839:19;;37498:366;;;:::o;37870:419::-;38036:4;38074:2;38063:9;38059:18;38051:26;;38123:9;38117:4;38113:20;38109:1;38098:9;38094:17;38087:47;38151:131;38277:4;38151:131;:::i;:::-;38143:139;;37870:419;;;:::o;38295:231::-;38435:34;38431:1;38423:6;38419:14;38412:58;38504:14;38499:2;38491:6;38487:15;38480:39;38295:231;:::o;38532:366::-;38674:3;38695:67;38759:2;38754:3;38695:67;:::i;:::-;38688:74;;38771:93;38860:3;38771:93;:::i;:::-;38889:2;38884:3;38880:12;38873:19;;38532:366;;;:::o;38904:419::-;39070:4;39108:2;39097:9;39093:18;39085:26;;39157:9;39151:4;39147:20;39143:1;39132:9;39128:17;39121:47;39185:131;39311:4;39185:131;:::i;:::-;39177:139;;38904:419;;;:::o;39329:228::-;39469:34;39465:1;39457:6;39453:14;39446:58;39538:11;39533:2;39525:6;39521:15;39514:36;39329:228;:::o;39563:366::-;39705:3;39726:67;39790:2;39785:3;39726:67;:::i;:::-;39719:74;;39802:93;39891:3;39802:93;:::i;:::-;39920:2;39915:3;39911:12;39904:19;;39563:366;;;:::o;39935:419::-;40101:4;40139:2;40128:9;40124:18;40116:26;;40188:9;40182:4;40178:20;40174:1;40163:9;40159:17;40152:47;40216:131;40342:4;40216:131;:::i;:::-;40208:139;;39935:419;;;:::o;40360:223::-;40500:34;40496:1;40488:6;40484:14;40477:58;40569:6;40564:2;40556:6;40552:15;40545:31;40360:223;:::o;40589:366::-;40731:3;40752:67;40816:2;40811:3;40752:67;:::i;:::-;40745:74;;40828:93;40917:3;40828:93;:::i;:::-;40946:2;40941:3;40937:12;40930:19;;40589:366;;;:::o;40961:419::-;41127:4;41165:2;41154:9;41150:18;41142:26;;41214:9;41208:4;41204:20;41200:1;41189:9;41185:17;41178:47;41242:131;41368:4;41242:131;:::i;:::-;41234:139;;40961:419;;;:::o;41386:237::-;41526:34;41522:1;41514:6;41510:14;41503:58;41595:20;41590:2;41582:6;41578:15;41571:45;41386:237;:::o;41629:366::-;41771:3;41792:67;41856:2;41851:3;41792:67;:::i;:::-;41785:74;;41868:93;41957:3;41868:93;:::i;:::-;41986:2;41981:3;41977:12;41970:19;;41629:366;;;:::o;42001:419::-;42167:4;42205:2;42194:9;42190:18;42182:26;;42254:9;42248:4;42244:20;42240:1;42229:9;42225:17;42218:47;42282:131;42408:4;42282:131;:::i;:::-;42274:139;;42001:419;;;:::o;42426:180::-;42474:77;42471:1;42464:88;42571:4;42568:1;42561:15;42595:4;42592:1;42585:15;42612:185;42652:1;42669:20;42687:1;42669:20;:::i;:::-;42664:25;;42703:20;42721:1;42703:20;:::i;:::-;42698:25;;42742:1;42732:35;;42747:18;;:::i;:::-;42732:35;42789:1;42786;42782:9;42777:14;;42612:185;;;;:::o;42803:176::-;42835:1;42852:20;42870:1;42852:20;:::i;:::-;42847:25;;42886:20;42904:1;42886:20;:::i;:::-;42881:25;;42925:1;42915:35;;42930:18;;:::i;:::-;42915:35;42971:1;42968;42964:9;42959:14;;42803:176;;;;:::o;42985:180::-;43033:77;43030:1;43023:88;43130:4;43127:1;43120:15;43154:4;43151:1;43144:15;43171:98;43222:6;43256:5;43250:12;43240:22;;43171:98;;;:::o;43275:168::-;43358:11;43392:6;43387:3;43380:19;43432:4;43427:3;43423:14;43408:29;;43275:168;;;;:::o;43449:373::-;43535:3;43563:38;43595:5;43563:38;:::i;:::-;43617:70;43680:6;43675:3;43617:70;:::i;:::-;43610:77;;43696:65;43754:6;43749:3;43742:4;43735:5;43731:16;43696:65;:::i;:::-;43786:29;43808:6;43786:29;:::i;:::-;43781:3;43777:39;43770:46;;43539:283;43449:373;;;;:::o;43828:640::-;44023:4;44061:3;44050:9;44046:19;44038:27;;44075:71;44143:1;44132:9;44128:17;44119:6;44075:71;:::i;:::-;44156:72;44224:2;44213:9;44209:18;44200:6;44156:72;:::i;:::-;44238;44306:2;44295:9;44291:18;44282:6;44238:72;:::i;:::-;44357:9;44351:4;44347:20;44342:2;44331:9;44327:18;44320:48;44385:76;44456:4;44447:6;44385:76;:::i;:::-;44377:84;;43828:640;;;;;;;:::o;44474:141::-;44530:5;44561:6;44555:13;44546:22;;44577:32;44603:5;44577:32;:::i;:::-;44474:141;;;;:::o;44621:349::-;44690:6;44739:2;44727:9;44718:7;44714:23;44710:32;44707:119;;;44745:79;;:::i;:::-;44707:119;44865:1;44890:63;44945:7;44936:6;44925:9;44921:22;44890:63;:::i;:::-;44880:73;;44836:127;44621:349;;;;:::o;44976:182::-;45116:34;45112:1;45104:6;45100:14;45093:58;44976:182;:::o;45164:366::-;45306:3;45327:67;45391:2;45386:3;45327:67;:::i;:::-;45320:74;;45403:93;45492:3;45403:93;:::i;:::-;45521:2;45516:3;45512:12;45505:19;;45164:366;;;:::o;45536:419::-;45702:4;45740:2;45729:9;45725:18;45717:26;;45789:9;45783:4;45779:20;45775:1;45764:9;45760:17;45753:47;45817:131;45943:4;45817:131;:::i;:::-;45809:139;;45536:419;;;:::o;45961:178::-;46101:30;46097:1;46089:6;46085:14;46078:54;45961:178;:::o;46145:366::-;46287:3;46308:67;46372:2;46367:3;46308:67;:::i;:::-;46301:74;;46384:93;46473:3;46384:93;:::i;:::-;46502:2;46497:3;46493:12;46486:19;;46145:366;;;:::o;46517:419::-;46683:4;46721:2;46710:9;46706:18;46698:26;;46770:9;46764:4;46760:20;46756:1;46745:9;46741:17;46734:47;46798:131;46924:4;46798:131;:::i;:::-;46790:139;;46517:419;;;:::o
Swarm Source
ipfs://b8369a9a5b3f12e7a3fe230c8c45ec615b4dbf568e7fc406e70562c351b881c7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.