ERC-721
Overview
Max Total Supply
58 SFM
Holders
18
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SFMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpoiledFrenchieMafia
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-04 */ // File: operator-filter-registry/src/IOperatorFilterRegistry.sol pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: operator-filter-registry/src/OperatorFilterer.sol pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } // File: operator-filter-registry/src/DefaultOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-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` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/12_SpoiledFrenchieMafia.sol pragma solidity ^0.8.17; abstract contract Admission { function balanceOf(address owner) public view virtual returns (uint256); function burnAdmission(uint256 tokenId, address _address) public virtual; function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256); function ownerOf(uint256 tokenId) public view virtual returns (address); } contract SpoiledFrenchieMafia is ERC721, Ownable, DefaultOperatorFilterer { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; string public _baseTokenURI = ""; bool public isSaleActive = false; bool public areBooksOpen = false; uint256 private whitelistMintCounter = 0; uint256 public tokenPrice = 50000000000000000; uint256 private constant TEAM_TOKEN_COUNT = 50; uint256 public constant MAXIMUM_TOKEN_COUNT = 5555; uint256 public constant MAXIMUM_WHITELIST_TOKEN_COUNT = 100; uint256 public constant MAXIMUM_TOKEN_COUNT_PER_TRANSACTION = 10; uint256 public constant MAXIMUM_TOKEN_COUNT_PER_WALLET = 10; mapping(uint256 => string) private rankOfToken; mapping(uint256 => string) private tokenRanks; mapping(address => bool) private whitelistedAddresses; mapping(address => bool) private claimedWhitelistAddresses; Admission private bossAdmissionContract; Admission private degenAdmissionContract; Admission private mferAdmissionContract; constructor() ERC721("SpoiledFrenchieMafia", "SFM") { tokenRanks[0] = "FREN"; tokenRanks[1] = "MFER"; tokenRanks[2] = "DEGEN"; tokenRanks[3] = "BOSS"; // mint initial tokens to contract owner for (uint256 i = 1; i <= TEAM_TOKEN_COUNT; i++) { _tokenSupply.increment(); _safeMint(msg.sender, _tokenSupply.current()); rankOfToken[_tokenSupply.current()] = tokenRanks[0]; } } function totalSupply() public view returns (uint256) { return _tokenSupply.current(); } function isWhitelisted(address _address) public view returns (bool) { return whitelistedAddresses[_address] == true; } function canClaimWhitelist(address _address) public view returns (bool) { require(isWhitelisted(_address), "Address not whitelisted."); return claimedWhitelistAddresses[_address] != true; } function addToWhitelist(address _address) external onlyOwner { whitelistedAddresses[_address] = true; } function whitelistMint() external payable { _tokenSupply.increment(); uint256 _tokenCount = 1; // validate that sale is active require(isSaleActive, "Sale is not active."); // validate that address is whitelisted require(isWhitelisted(msg.sender), "Address not whitelisted."); // validate that address has not claimed free whitelist mint yet require(canClaimWhitelist(msg.sender), "Whitelist mint claimed already by address."); // validate that MAXIMUM_WHITELIST_TOKEN_COUNT is not exceeded require(whitelistMintCounter + _tokenCount <= MAXIMUM_WHITELIST_TOKEN_COUNT, "Requested token count exceeds total whitelist supply."); // validate that MAXIMUM_TOKEN_COUNT_PER_WALLET is not exceeded require(balanceOf(msg.sender) + _tokenCount <= MAXIMUM_TOKEN_COUNT_PER_WALLET, "You can only mint 10 tokens per wallet."); // validate that MAXIMUM_TOKEN_COUNT is not exceeded require(_tokenSupply.current() <= MAXIMUM_TOKEN_COUNT, "Requested token count exceeds total supply."); _safeMint(msg.sender, _tokenSupply.current()); rankOfToken[_tokenSupply.current()] = tokenRanks[0]; claimedWhitelistAddresses[msg.sender] = true; whitelistMintCounter++; } // ranking system methods function getRank(uint256 _tokenId) public view returns (string memory) { return rankOfToken[_tokenId]; } function performInitiation(uint256 _tokenId) public { require(msg.sender == ownerOf(_tokenId), "Not the owner of the requested token."); require(areBooksOpen, "The books are not open."); require(keccak256(abi.encodePacked(getRank(_tokenId))) == keccak256(abi.encodePacked(("FREN"))), "Must be FREN to be eligible for initiation."); require(isAdmissable(msg.sender, mferAdmissionContract), "Not elligible for initiation."); rankOfToken[_tokenId] = tokenRanks[1]; burnAdmission(msg.sender, mferAdmissionContract); } function promoteToBoss(uint256 _tokenId) public { require(msg.sender == ownerOf(_tokenId), "Not the owner of the requested token."); require(keccak256(abi.encodePacked(getRank(_tokenId))) == keccak256(abi.encodePacked(("DEGEN"))), "Must be DEGEN to be eligible for promotion to BOSS."); require(isAdmissable(msg.sender, bossAdmissionContract), "Not elligible for promotion to BOSS."); rankOfToken[_tokenId] = tokenRanks[3]; burnAdmission(msg.sender, bossAdmissionContract); } function promoteToDegen(uint256 _tokenId) public { require(msg.sender == ownerOf(_tokenId), "Not the owner of the requested token."); require(keccak256(abi.encodePacked(getRank(_tokenId))) == keccak256(abi.encodePacked(("MFER"))), "Must be MFER to be eligible for promotion to DEGEN."); require(isAdmissable(msg.sender, degenAdmissionContract), "Not elligible for promotion to DEGEN."); rankOfToken[_tokenId] = tokenRanks[2]; burnAdmission(msg.sender, degenAdmissionContract); } function burnAdmission(address _address, Admission _admissionContract) private { uint256 tokenId = _admissionContract.tokenOfOwnerByIndex(_address, 0); require(msg.sender == _admissionContract.ownerOf(tokenId), "Not the owner of the requested token."); _admissionContract.burnAdmission(tokenId, _address); } function isAdmissable(address owner, Admission _admissionContract) public view returns (bool) { return _admissionContract.balanceOf(owner) >= 1; } function mint(uint256 _tokenCount) external payable { // validate that sale is active require(isSaleActive, "Sale is not active."); // validate that MAXIMUM_TOKENS_PER_TRANSACTION is not exceeded require(_tokenCount <= MAXIMUM_TOKEN_COUNT_PER_TRANSACTION, "You can only mint 10 tokens per transaction."); // validate that MAXIMUM_TOKEN_COUNT_PER_WALLET is not exceeded require(balanceOf(msg.sender) + _tokenCount <= MAXIMUM_TOKEN_COUNT_PER_WALLET, "You can only mint 10 tokens per wallet."); // validate that MAXIMUM_TOKEN_COUNT is not exceeded require(_tokenSupply.current() + _tokenCount <= MAXIMUM_TOKEN_COUNT, "Requested token count exceeds total supply."); // validate that supplied funds are sufficient require(tokenPrice * _tokenCount <= msg.value, "Insufficient funds for requested transaction."); for (uint256 i = 1; i <= _tokenCount; i++) { _tokenSupply.increment(); _safeMint(msg.sender, _tokenSupply.current()); rankOfToken[_tokenSupply.current()] = tokenRanks[0]; } } // Only owner methods function setBaseUri(string memory _baseUri) external onlyOwner { _baseTokenURI = _baseUri; } function setMferAdmissionContract(address _address) external onlyOwner { mferAdmissionContract = Admission(_address); } function setDegenAdmissionContractContract(address _address) external onlyOwner { degenAdmissionContract = Admission(_address); } function setBossAdmissionContractContract(address _address) external onlyOwner { bossAdmissionContract = Admission(_address); } function toggleSaleState() external onlyOwner { isSaleActive = !isSaleActive; } function toggleBooksState() external onlyOwner { areBooksOpen = !areBooksOpen; } function withdrawFunds() external payable onlyOwner { uint256 contractBalance = address(this).balance; require(payable(msg.sender).send(contractBalance), "Withdrawal failed."); } // Internal method overrides function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return super.supportsInterface(interfaceId); } function setApprovalForAll(address operator, bool approved) public override (ERC721) onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override (ERC721) onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override (ERC721) onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override (ERC721) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override (ERC721) onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"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":"MAXIMUM_TOKEN_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TOKEN_COUNT_PER_TRANSACTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TOKEN_COUNT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_WHITELIST_TOKEN_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBooksOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"canClaimWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getRank","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract Admission","name":"_admissionContract","type":"address"}],"name":"isAdmissable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"_address","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenCount","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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"performInitiation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"promoteToBoss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"promoteToDegen","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_address","type":"address"}],"name":"setBossAdmissionContractContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setDegenAdmissionContractContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMferAdmissionContract","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":[],"name":"toggleBooksState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052604051806020016040528060008152506008908162000024919062000dab565b506000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506000600a5566b1a2bc2ec50000600b553480156200007857600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601481526020017f53706f696c65644672656e636869654d616669610000000000000000000000008152506040518060400160405280600381526020017f53464d000000000000000000000000000000000000000000000000000000000081525081600090816200010d919062000dab565b5080600190816200011f919062000dab565b50505062000142620001366200055360201b60201c565b6200055b60201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111562000337578015620001fd576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620001c392919062000ed7565b600060405180830381600087803b158015620001de57600080fd5b505af1158015620001f3573d6000803e3d6000fd5b5050505062000336565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002b7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200027d92919062000ed7565b600060405180830381600087803b1580156200029857600080fd5b505af1158015620002ad573d6000803e3d6000fd5b5050505062000335565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000300919062000f04565b600060405180830381600087803b1580156200031b57600080fd5b505af115801562000330573d6000803e3d6000fd5b505050505b5b5b50506040518060400160405280600481526020017f4652454e00000000000000000000000000000000000000000000000000000000815250600d6000808152602001908152602001600020908162000390919062000dab565b506040518060400160405280600481526020017f4d46455200000000000000000000000000000000000000000000000000000000815250600d6000600181526020019081526020016000209081620003e9919062000dab565b506040518060400160405280600581526020017f444547454e000000000000000000000000000000000000000000000000000000815250600d600060028152602001908152602001600020908162000442919062000dab565b506040518060400160405280600481526020017f424f535300000000000000000000000000000000000000000000000000000000815250600d60006003815260200190815260200160002090816200049b919062000dab565b506000600190505b603281116200054c57620004c360076200062160201b62001f661760201c565b620004eb33620004df60076200063760201b62001f7c1760201c565b6200064560201b60201c565b600d6000808152602001908152602001600020600c60006200051960076200063760201b62001f7c1760201c565b8152602001908152602001600020908162000535919062000f4e565b50808062000543906200107e565b915050620004a3565b5062001426565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081600001549050919050565b620006678282604051806020016040528060008152506200066b60201b60201c565b5050565b6200067d8383620006d960201b60201c565b620006926000848484620008d260201b60201c565b620006d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cb9062001152565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200074b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074290620011c4565b60405180910390fd5b6200075c8162000a7b60201b60201c565b156200079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007969062001236565b60405180910390fd5b620007b36000838362000ae760201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000805919062001258565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620008ce6000838362000b0460201b60201c565b5050565b6000620009008473ffffffffffffffffffffffffffffffffffffffff1662000b0960201b62001f8a1760201c565b1562000a6e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009326200055360201b60201c565b8786866040518563ffffffff1660e01b81526004016200095694939291906200133e565b6020604051808303816000875af19250505080156200099557506040513d601f19601f82011682018060405250810190620009929190620013f4565b60015b62000a1d573d8060008114620009c8576040519150601f19603f3d011682016040523d82523d6000602084013e620009cd565b606091505b50600081510362000a15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0c9062001152565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a73565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000aff83838362000b2c60201b62001fad1760201c565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bb357607f821691505b60208210810362000bc95762000bc862000b6b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf4565b62000c3f868362000bf4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c8c62000c8662000c808462000c57565b62000c61565b62000c57565b9050919050565b6000819050919050565b62000ca88362000c6b565b62000cc062000cb78262000c93565b84845462000c01565b825550505050565b600090565b62000cd762000cc8565b62000ce481848462000c9d565b505050565b5b8181101562000d0c5762000d0060008262000ccd565b60018101905062000cea565b5050565b601f82111562000d5b5762000d258162000bcf565b62000d308462000be4565b8101602085101562000d40578190505b62000d5862000d4f8562000be4565b83018262000ce9565b50505b505050565b600082821c905092915050565b600062000d806000198460080262000d60565b1980831691505092915050565b600062000d9b838362000d6d565b9150826002028217905092915050565b62000db68262000b31565b67ffffffffffffffff81111562000dd25762000dd162000b3c565b5b62000dde825462000b9a565b62000deb82828562000d10565b600060209050601f83116001811462000e23576000841562000e0e578287015190505b62000e1a858262000d8d565b86555062000e8a565b601f19841662000e338662000bcf565b60005b8281101562000e5d5784890151825560018201915060208501945060208101905062000e36565b8683101562000e7d578489015162000e79601f89168262000d6d565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ebf8262000e92565b9050919050565b62000ed18162000eb2565b82525050565b600060408201905062000eee600083018562000ec6565b62000efd602083018462000ec6565b9392505050565b600060208201905062000f1b600083018462000ec6565b92915050565b60008154905062000f328162000b9a565b9050919050565b60008190508160005260206000209050919050565b81810362000f5e5750506200104d565b62000f698262000f21565b67ffffffffffffffff81111562000f855762000f8462000b3c565b5b62000f91825462000b9a565b62000f9e82828562000d10565b6000601f83116001811462000fd2576000841562000fbd578287015490505b62000fc9858262000d8d565b86555062001046565b601f19841662000fe28762000f39565b965062000fef8662000bcf565b60005b82811015620010195784890154825560018201915060018501945060208101905062000ff2565b8683101562001039578489015462001035601f89168262000d6d565b8355505b6001600288020188555050505b5050505050505b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200108b8262000c57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620010c057620010bf6200104f565b5b600182019050919050565b600082825260208201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200113a603283620010cb565b91506200114782620010dc565b604082019050919050565b600060208201905081810360008301526200116d816200112b565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620011ac602083620010cb565b9150620011b98262001174565b602082019050919050565b60006020820190508181036000830152620011df816200119d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006200121e601c83620010cb565b91506200122b82620011e6565b602082019050919050565b6000602082019050818103600083015262001251816200120f565b9050919050565b6000620012658262000c57565b9150620012728362000c57565b92508282019050808211156200128d576200128c6200104f565b5b92915050565b6200129e8162000c57565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620012e0578082015181840152602081019050620012c3565b60008484015250505050565b6000601f19601f8301169050919050565b60006200130a82620012a4565b620013168185620012af565b935062001328818560208601620012c0565b6200133381620012ec565b840191505092915050565b600060808201905062001355600083018762000ec6565b62001364602083018662000ec6565b62001373604083018562001293565b8181036060830152620013878184620012fd565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620013ce8162001397565b8114620013da57600080fd5b50565b600081519050620013ee81620013c3565b92915050565b6000602082840312156200140d576200140c62001392565b5b60006200141d84828501620013dd565b91505092915050565b61547680620014366000396000f3fe60806040526004361061025c5760003560e01c8063804f43cd11610144578063c87b56dd116100b6578063dda2987c1161007a578063dda2987c146108a9578063e43252d7146108d4578063e4bef924146108fd578063e76c6a3c14610914578063e985e9c51461093f578063f2fde38b1461097c5761025c565b8063c87b56dd146107d6578063caae6a0b14610813578063cca988d51461083e578063cfc86f7b14610867578063daaeec86146108925761025c565b8063a0712d6811610108578063a0712d68146106d9578063a0bcfc7f146106f5578063a22cb4651461071e578063a5099bae14610747578063b88d4fde14610784578063c7950001146107ad5761025c565b8063804f43cd146106275780638a55d3f1146106315780638da5cb5b1461065a5780638eff09451461068557806395d89b41146106ae5761025c565b806341f43434116101dd57806365bd4a91116101a157806365bd4a911461051757806367979106146105545780636d2f29fe1461057d57806370a08231146105a8578063715018a6146105e55780637ff9b596146105fc5761025c565b806341f434341461043257806342842e0e1461045d5780634775433414610486578063564566a8146104af5780636352211e146104da5761025c565b806323b872dd1161022457806323b872dd1461035a57806324600fc3146103835780632d061af21461038d5780633800346f146103b85780633af32abf146103f55761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906133af565b6109a5565b60405161029591906133f7565b60405180910390f35b3480156102aa57600080fd5b506102b36109b7565b6040516102c091906134a2565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906134fa565b610a49565b6040516102fd9190613568565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906135af565b610a8f565b005b34801561033b57600080fd5b50610344610aa8565b60405161035191906135fe565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613619565b610ab9565b005b61038b610b08565b005b34801561039957600080fd5b506103a2610b8c565b6040516103af91906135fe565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da919061366c565b610b91565b6040516103ec91906133f7565b60405180910390f35b34801561040157600080fd5b5061041c6004803603810190610417919061366c565b610c37565b60405161042991906133f7565b60405180910390f35b34801561043e57600080fd5b50610447610c94565b60405161045491906136f8565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613619565b610ca6565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061366c565b610cf5565b005b3480156104bb57600080fd5b506104c4610d41565b6040516104d191906133f7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906134fa565b610d54565b60405161050e9190613568565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613751565b610e05565b60405161054b91906133f7565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906134fa565b610e8d565b005b34801561058957600080fd5b50610592611065565b60405161059f91906135fe565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca919061366c565b61106b565b6040516105dc91906135fe565b60405180910390f35b3480156105f157600080fd5b506105fa611122565b005b34801561060857600080fd5b50610611611136565b60405161061e91906135fe565b60405180910390f35b61062f61113c565b005b34801561063d57600080fd5b50610658600480360381019061065391906134fa565b6113e3565b005b34801561066657600080fd5b5061066f61160a565b60405161067c9190613568565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a791906134fa565b611634565b005b3480156106ba57600080fd5b506106c361180c565b6040516106d091906134a2565b60405180910390f35b6106f360048036038101906106ee91906134fa565b61189e565b005b34801561070157600080fd5b5061071c600480360381019061071791906138c6565b611aaf565b005b34801561072a57600080fd5b506107456004803603810190610740919061393b565b611aca565b005b34801561075357600080fd5b5061076e600480360381019061076991906134fa565b611ae3565b60405161077b91906134a2565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190613a1c565b611b88565b005b3480156107b957600080fd5b506107d460048036038101906107cf919061366c565b611bd9565b005b3480156107e257600080fd5b506107fd60048036038101906107f891906134fa565b611c25565b60405161080a91906134a2565b60405180910390f35b34801561081f57600080fd5b50610828611c8d565b60405161083591906133f7565b60405180910390f35b34801561084a57600080fd5b506108656004803603810190610860919061366c565b611ca0565b005b34801561087357600080fd5b5061087c611cec565b60405161088991906134a2565b60405180910390f35b34801561089e57600080fd5b506108a7611d7a565b005b3480156108b557600080fd5b506108be611dae565b6040516108cb91906135fe565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f6919061366c565b611db3565b005b34801561090957600080fd5b50610912611e16565b005b34801561092057600080fd5b50610929611e4a565b60405161093691906135fe565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613a9f565b611e4f565b60405161097391906133f7565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e919061366c565b611ee3565b005b60006109b082611fb2565b9050919050565b6060600080546109c690613b0e565b80601f01602080910402602001604051908101604052809291908181526020018280546109f290613b0e565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505050905090565b6000610a5482612094565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610a99816120df565b610aa383836121dc565b505050565b6000610ab46007611f7c565b905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af757610af6336120df565b5b610b028484846122f3565b50505050565b610b10612353565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613b8b565b60405180910390fd5b50565b606481565b6000610b9c82610c37565b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613bf7565b60405180910390fd5b60011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514159050919050565b600060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515149050919050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ce457610ce3336120df565b5b610cef8484846123d1565b50505050565b610cfd612353565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613c63565b60405180910390fd5b80915050919050565b600060018273ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610e429190613568565b602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613c98565b1015905092915050565b610e9681610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90613d37565b60405180910390fd5b604051602001610f1290613dae565b60405160208183030381529060405280519060200120610f3182611ae3565b604051602001610f419190613df4565b6040516020818303038152906040528051906020012014610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90613e7d565b60405180910390fd5b610fc333601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613f0f565b60405180910390fd5b600d600060038152602001908152602001600020600c6000838152602001908152602001600020908161103591906140fc565b5061106233601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b6115b381565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614256565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a612353565b61113460006125cb565b565b600b5481565b6111466007611f66565b600060019050600960009054906101000a900460ff1661119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611192906142c2565b60405180910390fd5b6111a433610c37565b6111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90613bf7565b60405180910390fd5b6111ec33610b91565b61122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290614354565b60405180910390fd5b606481600a5461123b91906143a3565b111561127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390614449565b60405180910390fd5b600a816112883361106b565b61129291906143a3565b11156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906144db565b60405180910390fd5b6115b36112e06007611f7c565b1115611321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113189061456d565b60405180910390fd5b6113343361132f6007611f7c565b612691565b600d6000808152602001908152602001600020600c60006113556007611f7c565b8152602001908152602001600020908161136f91906140fc565b506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60008154809291906113db9061458d565b919050555050565b6113ec81610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613d37565b60405180910390fd5b600960019054906101000a900460ff166114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614621565b60405180910390fd5b6040516020016114b79061468d565b604051602081830303815290604052805190602001206114d682611ae3565b6040516020016114e69190613df4565b604051602081830303815290604052805190602001201461153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390614714565b60405180910390fd5b61156833601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b6115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614780565b60405180910390fd5b600d600060018152602001908152602001600020600c600083815260200190815260200160002090816115da91906140fc565b5061160733601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163d81610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613d37565b60405180910390fd5b6040516020016116b9906147ec565b604051602081830303815290604052805190602001206116d882611ae3565b6040516020016116e89190613df4565b604051602081830303815290604052805190602001201461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590614873565b60405180910390fd5b61176a33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614905565b60405180910390fd5b600d600060028152602001908152602001600020600c600083815260200190815260200160002090816117dc91906140fc565b5061180933601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b60606001805461181b90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461184790613b0e565b80156118945780601f1061186957610100808354040283529160200191611894565b820191906000526020600020905b81548152906001019060200180831161187757829003601f168201915b5050505050905090565b600960009054906101000a900460ff166118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906142c2565b60405180910390fd5b600a811115611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890614997565b60405180910390fd5b600a8161193d3361106b565b61194791906143a3565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906144db565b60405180910390fd5b6115b3816119966007611f7c565b6119a091906143a3565b11156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061456d565b60405180910390fd5b3481600b546119f091906149b7565b1115611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614a6b565b60405180910390fd5b6000600190505b818111611aab57611a496007611f66565b611a5c33611a576007611f7c565b612691565b600d6000808152602001908152602001600020600c6000611a7d6007611f7c565b81526020019081526020016000209081611a9791906140fc565b508080611aa39061458d565b915050611a38565b5050565b611ab7612353565b8060089081611ac69190614a8b565b5050565b81611ad4816120df565b611ade83836126af565b505050565b6060600c60008381526020019081526020016000208054611b0390613b0e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2f90613b0e565b8015611b7c5780601f10611b5157610100808354040283529160200191611b7c565b820191906000526020600020905b815481529060010190602001808311611b5f57829003601f168201915b50505050509050919050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611bc657611bc5336120df565b5b611bd2858585856126c5565b5050505050565b611be1612353565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060611c3082612094565b6000611c3a612727565b90506000815111611c5a5760405180602001604052806000815250611c85565b80611c64846127b9565b604051602001611c75929190614b5d565b6040516020818303038152906040525b915050919050565b600960019054906101000a900460ff1681565b611ca8612353565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60088054611cf990613b0e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2590613b0e565b8015611d725780601f10611d4757610100808354040283529160200191611d72565b820191906000526020600020905b815481529060010190602001808311611d5557829003601f168201915b505050505081565b611d82612353565b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b600a81565b611dbb612353565b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e1e612353565b600960019054906101000a900460ff1615600960016101000a81548160ff021916908315150217905550565b600a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611eeb612353565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614bf3565b60405180910390fd5b611f63816125cb565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061207d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061208d575061208c82612919565b5b9050919050565b61209d81612983565b6120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390613c63565b60405180910390fd5b50565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156121d9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612156929190614c13565b602060405180830381865afa158015612173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121979190614c51565b6121d857806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016121cf9190613568565b60405180910390fd5b5b50565b60006121e782610d54565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614cf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166122766129ef565b73ffffffffffffffffffffffffffffffffffffffff1614806122a557506122a48161229f6129ef565b611e4f565b5b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614d82565b60405180910390fd5b6122ee83836129f7565b505050565b6123046122fe6129ef565b82612ab0565b612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614e14565b60405180910390fd5b61234e838383612b45565b505050565b61235b6129ef565b73ffffffffffffffffffffffffffffffffffffffff1661237961160a565b73ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614e80565b60405180910390fd5b565b6123ec83838360405180602001604052806000815250611b88565b505050565b60008173ffffffffffffffffffffffffffffffffffffffff16632f745c598460006040518363ffffffff1660e01b815260040161242f929190614edb565b602060405180830381865afa15801561244c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124709190613c98565b90508173ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016124ab91906135fe565b602060405180830381865afa1580156124c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ec9190614f19565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255090613d37565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166342b0921f82856040518363ffffffff1660e01b8152600401612594929190614f46565b600060405180830381600087803b1580156125ae57600080fd5b505af11580156125c2573d6000803e3d6000fd5b50505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126ab828260405180602001604052806000815250612dab565b5050565b6126c16126ba6129ef565b8383612e06565b5050565b6126d66126d06129ef565b83612ab0565b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614e14565b60405180910390fd5b61272184848484612f72565b50505050565b60606008805461273690613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461276290613b0e565b80156127af5780601f10612784576101008083540402835291602001916127af565b820191906000526020600020905b81548152906001019060200180831161279257829003601f168201915b5050505050905090565b606060008203612800576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612914565b600082905060005b6000821461283257808061281b9061458d565b915050600a8261282b9190614f9e565b9150612808565b60008167ffffffffffffffff81111561284e5761284d61379b565b5b6040519080825280601f01601f1916602001820160405280156128805781602001600182028036833780820191505090505b5090505b6000851461290d576001826128999190614fcf565b9150600a856128a89190615003565b60306128b491906143a3565b60f81b8183815181106128ca576128c9615034565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129069190614f9e565b9450612884565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a6a83610d54565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612abc83610d54565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612afe5750612afd8185611e4f565b5b80612b3c57508373ffffffffffffffffffffffffffffffffffffffff16612b2484610a49565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6582610d54565b73ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190615167565b60405180910390fd5b612c35838383612fce565b612c406000826129f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c909190614fcf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ce791906143a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612da6838383612fde565b505050565b612db58383612fe3565b612dc260008484846131bc565b612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df8906151f9565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90615265565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f6591906133f7565b60405180910390a3505050565b612f7d848484612b45565b612f89848484846131bc565b612fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbf906151f9565b60405180910390fd5b50505050565b612fd9838383611fad565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613049906152d1565b60405180910390fd5b61305b81612983565b1561309b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130929061533d565b60405180910390fd5b6130a760008383612fce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f791906143a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131b860008383612fde565b5050565b60006131dd8473ffffffffffffffffffffffffffffffffffffffff16611f8a565b15613336578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132066129ef565b8786866040518563ffffffff1660e01b815260040161322894939291906153b2565b6020604051808303816000875af192505050801561326457506040513d601f19601f820116820180604052508101906132619190615413565b60015b6132e6573d8060008114613294576040519150601f19603f3d011682016040523d82523d6000602084013e613299565b606091505b5060008151036132de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d5906151f9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061333b565b600190505b949350505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61338c81613357565b811461339757600080fd5b50565b6000813590506133a981613383565b92915050565b6000602082840312156133c5576133c461334d565b5b60006133d38482850161339a565b91505092915050565b60008115159050919050565b6133f1816133dc565b82525050565b600060208201905061340c60008301846133e8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561344c578082015181840152602081019050613431565b60008484015250505050565b6000601f19601f8301169050919050565b600061347482613412565b61347e818561341d565b935061348e81856020860161342e565b61349781613458565b840191505092915050565b600060208201905081810360008301526134bc8184613469565b905092915050565b6000819050919050565b6134d7816134c4565b81146134e257600080fd5b50565b6000813590506134f4816134ce565b92915050565b6000602082840312156135105761350f61334d565b5b600061351e848285016134e5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061355282613527565b9050919050565b61356281613547565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c81613547565b811461359757600080fd5b50565b6000813590506135a981613583565b92915050565b600080604083850312156135c6576135c561334d565b5b60006135d48582860161359a565b92505060206135e5858286016134e5565b9150509250929050565b6135f8816134c4565b82525050565b600060208201905061361360008301846135ef565b92915050565b6000806000606084860312156136325761363161334d565b5b60006136408682870161359a565b93505060206136518682870161359a565b9250506040613662868287016134e5565b9150509250925092565b6000602082840312156136825761368161334d565b5b60006136908482850161359a565b91505092915050565b6000819050919050565b60006136be6136b96136b484613527565b613699565b613527565b9050919050565b60006136d0826136a3565b9050919050565b60006136e2826136c5565b9050919050565b6136f2816136d7565b82525050565b600060208201905061370d60008301846136e9565b92915050565b600061371e82613547565b9050919050565b61372e81613713565b811461373957600080fd5b50565b60008135905061374b81613725565b92915050565b600080604083850312156137685761376761334d565b5b60006137768582860161359a565b92505060206137878582860161373c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137d382613458565b810181811067ffffffffffffffff821117156137f2576137f161379b565b5b80604052505050565b6000613805613343565b905061381182826137ca565b919050565b600067ffffffffffffffff8211156138315761383061379b565b5b61383a82613458565b9050602081019050919050565b82818337600083830152505050565b600061386961386484613816565b6137fb565b90508281526020810184848401111561388557613884613796565b5b613890848285613847565b509392505050565b600082601f8301126138ad576138ac613791565b5b81356138bd848260208601613856565b91505092915050565b6000602082840312156138dc576138db61334d565b5b600082013567ffffffffffffffff8111156138fa576138f9613352565b5b61390684828501613898565b91505092915050565b613918816133dc565b811461392357600080fd5b50565b6000813590506139358161390f565b92915050565b600080604083850312156139525761395161334d565b5b60006139608582860161359a565b925050602061397185828601613926565b9150509250929050565b600067ffffffffffffffff8211156139965761399561379b565b5b61399f82613458565b9050602081019050919050565b60006139bf6139ba8461397b565b6137fb565b9050828152602081018484840111156139db576139da613796565b5b6139e6848285613847565b509392505050565b600082601f830112613a0357613a02613791565b5b8135613a138482602086016139ac565b91505092915050565b60008060008060808587031215613a3657613a3561334d565b5b6000613a448782880161359a565b9450506020613a558782880161359a565b9350506040613a66878288016134e5565b925050606085013567ffffffffffffffff811115613a8757613a86613352565b5b613a93878288016139ee565b91505092959194509250565b60008060408385031215613ab657613ab561334d565b5b6000613ac48582860161359a565b9250506020613ad58582860161359a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2657607f821691505b602082108103613b3957613b38613adf565b5b50919050565b7f5769746864726177616c206661696c65642e0000000000000000000000000000600082015250565b6000613b7560128361341d565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f41646472657373206e6f742077686974656c69737465642e0000000000000000600082015250565b6000613be160188361341d565b9150613bec82613bab565b602082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c4d60188361341d565b9150613c5882613c17565b602082019050919050565b60006020820190508181036000830152613c7c81613c40565b9050919050565b600081519050613c92816134ce565b92915050565b600060208284031215613cae57613cad61334d565b5b6000613cbc84828501613c83565b91505092915050565b7f4e6f7420746865206f776e6572206f662074686520726571756573746564207460008201527f6f6b656e2e000000000000000000000000000000000000000000000000000000602082015250565b6000613d2160258361341d565b9150613d2c82613cc5565b604082019050919050565b60006020820190508181036000830152613d5081613d14565b9050919050565b600081905092915050565b7f444547454e000000000000000000000000000000000000000000000000000000600082015250565b6000613d98600583613d57565b9150613da382613d62565b600582019050919050565b6000613db982613d8b565b9150819050919050565b6000613dce82613412565b613dd88185613d57565b9350613de881856020860161342e565b80840191505092915050565b6000613e008284613dc3565b915081905092915050565b7f4d75737420626520444547454e20746f20626520656c696769626c6520666f7260008201527f2070726f6d6f74696f6e20746f20424f53532e00000000000000000000000000602082015250565b6000613e6760338361341d565b9150613e7282613e0b565b604082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f4e6f7420656c6c696769626c6520666f722070726f6d6f74696f6e20746f204260008201527f4f53532e00000000000000000000000000000000000000000000000000000000602082015250565b6000613ef960248361341d565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b600081549050613f3e81613b0e565b9050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fbc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f7f565b613fc68683613f7f565b95508019841693508086168417925050509392505050565b6000613ff9613ff4613fef846134c4565b613699565b6134c4565b9050919050565b6000819050919050565b61401383613fde565b61402761401f82614000565b848454613f8c565b825550505050565b600090565b61403c61402f565b61404781848461400a565b505050565b5b8181101561406b57614060600082614034565b60018101905061404d565b5050565b601f8211156140b05761408181613f45565b61408a84613f6f565b81016020851015614099578190505b6140ad6140a585613f6f565b83018261404c565b50505b505050565b600082821c905092915050565b60006140d3600019846008026140b5565b1980831691505092915050565b60006140ec83836140c2565b9150826002028217905092915050565b81810361410a5750506141e2565b61411382613f2f565b67ffffffffffffffff81111561412c5761412b61379b565b5b6141368254613b0e565b61414182828561406f565b6000601f831160018114614170576000841561415e578287015490505b61416885826140e0565b8655506141db565b601f19841661417e87613f5a565b965061418986613f45565b60005b828110156141b15784890154825560018201915060018501945060208101905061418c565b868310156141ce57848901546141ca601f8916826140c2565b8355505b6001600288020188555050505b5050505050505b565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061424060298361341d565b915061424b826141e4565b604082019050919050565b6000602082019050818103600083015261426f81614233565b9050919050565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b60006142ac60138361341d565b91506142b782614276565b602082019050919050565b600060208201905081810360008301526142db8161429f565b9050919050565b7f57686974656c697374206d696e7420636c61696d656420616c7265616479206260008201527f7920616464726573732e00000000000000000000000000000000000000000000602082015250565b600061433e602a8361341d565b9150614349826142e2565b604082019050919050565b6000602082019050818103600083015261436d81614331565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143ae826134c4565b91506143b9836134c4565b92508282019050808211156143d1576143d0614374565b5b92915050565b7f52657175657374656420746f6b656e20636f756e74206578636565647320746f60008201527f74616c2077686974656c69737420737570706c792e0000000000000000000000602082015250565b600061443360358361341d565b915061443e826143d7565b604082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f596f752063616e206f6e6c79206d696e7420313020746f6b656e73207065722060008201527f77616c6c65742e00000000000000000000000000000000000000000000000000602082015250565b60006144c560278361341d565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f52657175657374656420746f6b656e20636f756e74206578636565647320746f60008201527f74616c20737570706c792e000000000000000000000000000000000000000000602082015250565b6000614557602b8361341d565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b6000614598826134c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ca576145c9614374565b5b600182019050919050565b7f54686520626f6f6b7320617265206e6f74206f70656e2e000000000000000000600082015250565b600061460b60178361341d565b9150614616826145d5565b602082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4652454e00000000000000000000000000000000000000000000000000000000600082015250565b6000614677600483613d57565b915061468282614641565b600482019050919050565b60006146988261466a565b9150819050919050565b7f4d757374206265204652454e20746f20626520656c696769626c6520666f722060008201527f696e6974696174696f6e2e000000000000000000000000000000000000000000602082015250565b60006146fe602b8361341d565b9150614709826146a2565b604082019050919050565b6000602082019050818103600083015261472d816146f1565b9050919050565b7f4e6f7420656c6c696769626c6520666f7220696e6974696174696f6e2e000000600082015250565b600061476a601d8361341d565b915061477582614734565b602082019050919050565b600060208201905081810360008301526147998161475d565b9050919050565b7f4d46455200000000000000000000000000000000000000000000000000000000600082015250565b60006147d6600483613d57565b91506147e1826147a0565b600482019050919050565b60006147f7826147c9565b9150819050919050565b7f4d757374206265204d46455220746f20626520656c696769626c6520666f722060008201527f70726f6d6f74696f6e20746f20444547454e2e00000000000000000000000000602082015250565b600061485d60338361341d565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f4e6f7420656c6c696769626c6520666f722070726f6d6f74696f6e20746f204460008201527f4547454e2e000000000000000000000000000000000000000000000000000000602082015250565b60006148ef60258361341d565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f596f752063616e206f6e6c79206d696e7420313020746f6b656e73207065722060008201527f7472616e73616374696f6e2e0000000000000000000000000000000000000000602082015250565b6000614981602c8361341d565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b60006149c2826134c4565b91506149cd836134c4565b92508282026149db816134c4565b915082820484148315176149f2576149f1614374565b5b5092915050565b7f496e73756666696369656e742066756e647320666f722072657175657374656460008201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b6000614a55602d8361341d565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b614a9482613412565b67ffffffffffffffff811115614aad57614aac61379b565b5b614ab78254613b0e565b614ac282828561406f565b600060209050601f831160018114614af55760008415614ae3578287015190505b614aed85826140e0565b865550614b55565b601f198416614b0386613f45565b60005b82811015614b2b57848901518255600182019150602085019450602081019050614b06565b86831015614b485784890151614b44601f8916826140c2565b8355505b6001600288020188555050505b505050505050565b6000614b698285613dc3565b9150614b758284613dc3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bdd60268361341d565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b6000604082019050614c286000830185613559565b614c356020830184613559565b9392505050565b600081519050614c4b8161390f565b92915050565b600060208284031215614c6757614c6661334d565b5b6000614c7584828501614c3c565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cda60218361341d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000614d6c603e8361341d565b9150614d7782614d10565b604082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614dfe602e8361341d565b9150614e0982614da2565b604082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e6a60208361341d565b9150614e7582614e34565b602082019050919050565b60006020820190508181036000830152614e9981614e5d565b9050919050565b6000819050919050565b6000614ec5614ec0614ebb84614ea0565b613699565b6134c4565b9050919050565b614ed581614eaa565b82525050565b6000604082019050614ef06000830185613559565b614efd6020830184614ecc565b9392505050565b600081519050614f1381613583565b92915050565b600060208284031215614f2f57614f2e61334d565b5b6000614f3d84828501614f04565b91505092915050565b6000604082019050614f5b60008301856135ef565b614f686020830184613559565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa9826134c4565b9150614fb4836134c4565b925082614fc457614fc3614f6f565b5b828204905092915050565b6000614fda826134c4565b9150614fe5836134c4565b9250828203905081811115614ffd57614ffc614374565b5b92915050565b600061500e826134c4565b9150615019836134c4565b92508261502957615028614f6f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006150bf60258361341d565b91506150ca82615063565b604082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061515160248361341d565b915061515c826150f5565b604082019050919050565b6000602082019050818103600083015261518081615144565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006151e360328361341d565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061524f60198361341d565b915061525a82615219565b602082019050919050565b6000602082019050818103600083015261527e81615242565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152bb60208361341d565b91506152c682615285565b602082019050919050565b600060208201905081810360008301526152ea816152ae565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615327601c8361341d565b9150615332826152f1565b602082019050919050565b600060208201905081810360008301526153568161531a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006153848261535d565b61538e8185615368565b935061539e81856020860161342e565b6153a781613458565b840191505092915050565b60006080820190506153c76000830187613559565b6153d46020830186613559565b6153e160408301856135ef565b81810360608301526153f38184615379565b905095945050505050565b60008151905061540d81613383565b92915050565b6000602082840312156154295761542861334d565b5b6000615437848285016153fe565b9150509291505056fea26469706673582212205bc57fd92e8b0e08816c81ea80b6a3e6cfbb1a100293b6fa84ad0f385aa46aad64736f6c63430008110033
Deployed Bytecode
0x60806040526004361061025c5760003560e01c8063804f43cd11610144578063c87b56dd116100b6578063dda2987c1161007a578063dda2987c146108a9578063e43252d7146108d4578063e4bef924146108fd578063e76c6a3c14610914578063e985e9c51461093f578063f2fde38b1461097c5761025c565b8063c87b56dd146107d6578063caae6a0b14610813578063cca988d51461083e578063cfc86f7b14610867578063daaeec86146108925761025c565b8063a0712d6811610108578063a0712d68146106d9578063a0bcfc7f146106f5578063a22cb4651461071e578063a5099bae14610747578063b88d4fde14610784578063c7950001146107ad5761025c565b8063804f43cd146106275780638a55d3f1146106315780638da5cb5b1461065a5780638eff09451461068557806395d89b41146106ae5761025c565b806341f43434116101dd57806365bd4a91116101a157806365bd4a911461051757806367979106146105545780636d2f29fe1461057d57806370a08231146105a8578063715018a6146105e55780637ff9b596146105fc5761025c565b806341f434341461043257806342842e0e1461045d5780634775433414610486578063564566a8146104af5780636352211e146104da5761025c565b806323b872dd1161022457806323b872dd1461035a57806324600fc3146103835780632d061af21461038d5780633800346f146103b85780633af32abf146103f55761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906133af565b6109a5565b60405161029591906133f7565b60405180910390f35b3480156102aa57600080fd5b506102b36109b7565b6040516102c091906134a2565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906134fa565b610a49565b6040516102fd9190613568565b60405180910390f35b34801561031257600080fd5b5061032d600480360381019061032891906135af565b610a8f565b005b34801561033b57600080fd5b50610344610aa8565b60405161035191906135fe565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613619565b610ab9565b005b61038b610b08565b005b34801561039957600080fd5b506103a2610b8c565b6040516103af91906135fe565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da919061366c565b610b91565b6040516103ec91906133f7565b60405180910390f35b34801561040157600080fd5b5061041c6004803603810190610417919061366c565b610c37565b60405161042991906133f7565b60405180910390f35b34801561043e57600080fd5b50610447610c94565b60405161045491906136f8565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613619565b610ca6565b005b34801561049257600080fd5b506104ad60048036038101906104a8919061366c565b610cf5565b005b3480156104bb57600080fd5b506104c4610d41565b6040516104d191906133f7565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc91906134fa565b610d54565b60405161050e9190613568565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613751565b610e05565b60405161054b91906133f7565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906134fa565b610e8d565b005b34801561058957600080fd5b50610592611065565b60405161059f91906135fe565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca919061366c565b61106b565b6040516105dc91906135fe565b60405180910390f35b3480156105f157600080fd5b506105fa611122565b005b34801561060857600080fd5b50610611611136565b60405161061e91906135fe565b60405180910390f35b61062f61113c565b005b34801561063d57600080fd5b50610658600480360381019061065391906134fa565b6113e3565b005b34801561066657600080fd5b5061066f61160a565b60405161067c9190613568565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a791906134fa565b611634565b005b3480156106ba57600080fd5b506106c361180c565b6040516106d091906134a2565b60405180910390f35b6106f360048036038101906106ee91906134fa565b61189e565b005b34801561070157600080fd5b5061071c600480360381019061071791906138c6565b611aaf565b005b34801561072a57600080fd5b506107456004803603810190610740919061393b565b611aca565b005b34801561075357600080fd5b5061076e600480360381019061076991906134fa565b611ae3565b60405161077b91906134a2565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a69190613a1c565b611b88565b005b3480156107b957600080fd5b506107d460048036038101906107cf919061366c565b611bd9565b005b3480156107e257600080fd5b506107fd60048036038101906107f891906134fa565b611c25565b60405161080a91906134a2565b60405180910390f35b34801561081f57600080fd5b50610828611c8d565b60405161083591906133f7565b60405180910390f35b34801561084a57600080fd5b506108656004803603810190610860919061366c565b611ca0565b005b34801561087357600080fd5b5061087c611cec565b60405161088991906134a2565b60405180910390f35b34801561089e57600080fd5b506108a7611d7a565b005b3480156108b557600080fd5b506108be611dae565b6040516108cb91906135fe565b60405180910390f35b3480156108e057600080fd5b506108fb60048036038101906108f6919061366c565b611db3565b005b34801561090957600080fd5b50610912611e16565b005b34801561092057600080fd5b50610929611e4a565b60405161093691906135fe565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613a9f565b611e4f565b60405161097391906133f7565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e919061366c565b611ee3565b005b60006109b082611fb2565b9050919050565b6060600080546109c690613b0e565b80601f01602080910402602001604051908101604052809291908181526020018280546109f290613b0e565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b5050505050905090565b6000610a5482612094565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610a99816120df565b610aa383836121dc565b505050565b6000610ab46007611f7c565b905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610af757610af6336120df565b5b610b028484846122f3565b50505050565b610b10612353565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613b8b565b60405180910390fd5b50565b606481565b6000610b9c82610c37565b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290613bf7565b60405180910390fd5b60011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514159050919050565b600060011515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515149050919050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ce457610ce3336120df565b5b610cef8484846123d1565b50505050565b610cfd612353565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390613c63565b60405180910390fd5b80915050919050565b600060018273ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610e429190613568565b602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613c98565b1015905092915050565b610e9681610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90613d37565b60405180910390fd5b604051602001610f1290613dae565b60405160208183030381529060405280519060200120610f3182611ae3565b604051602001610f419190613df4565b6040516020818303038152906040528051906020012014610f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8e90613e7d565b60405180910390fd5b610fc333601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613f0f565b60405180910390fd5b600d600060038152602001908152602001600020600c6000838152602001908152602001600020908161103591906140fc565b5061106233601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b6115b381565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614256565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a612353565b61113460006125cb565b565b600b5481565b6111466007611f66565b600060019050600960009054906101000a900460ff1661119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611192906142c2565b60405180910390fd5b6111a433610c37565b6111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90613bf7565b60405180910390fd5b6111ec33610b91565b61122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290614354565b60405180910390fd5b606481600a5461123b91906143a3565b111561127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390614449565b60405180910390fd5b600a816112883361106b565b61129291906143a3565b11156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906144db565b60405180910390fd5b6115b36112e06007611f7c565b1115611321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113189061456d565b60405180910390fd5b6113343361132f6007611f7c565b612691565b600d6000808152602001908152602001600020600c60006113556007611f7c565b8152602001908152602001600020908161136f91906140fc565b506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60008154809291906113db9061458d565b919050555050565b6113ec81610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613d37565b60405180910390fd5b600960019054906101000a900460ff166114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614621565b60405180910390fd5b6040516020016114b79061468d565b604051602081830303815290604052805190602001206114d682611ae3565b6040516020016114e69190613df4565b604051602081830303815290604052805190602001201461153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390614714565b60405180910390fd5b61156833601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b6115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614780565b60405180910390fd5b600d600060018152602001908152602001600020600c600083815260200190815260200160002090816115da91906140fc565b5061160733601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163d81610d54565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613d37565b60405180910390fd5b6040516020016116b9906147ec565b604051602081830303815290604052805190602001206116d882611ae3565b6040516020016116e89190613df4565b604051602081830303815290604052805190602001201461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590614873565b60405180910390fd5b61176a33601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e05565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614905565b60405180910390fd5b600d600060028152602001908152602001600020600c600083815260200190815260200160002090816117dc91906140fc565b5061180933601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166123f1565b50565b60606001805461181b90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461184790613b0e565b80156118945780601f1061186957610100808354040283529160200191611894565b820191906000526020600020905b81548152906001019060200180831161187757829003601f168201915b5050505050905090565b600960009054906101000a900460ff166118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e4906142c2565b60405180910390fd5b600a811115611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890614997565b60405180910390fd5b600a8161193d3361106b565b61194791906143a3565b1115611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f906144db565b60405180910390fd5b6115b3816119966007611f7c565b6119a091906143a3565b11156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061456d565b60405180910390fd5b3481600b546119f091906149b7565b1115611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614a6b565b60405180910390fd5b6000600190505b818111611aab57611a496007611f66565b611a5c33611a576007611f7c565b612691565b600d6000808152602001908152602001600020600c6000611a7d6007611f7c565b81526020019081526020016000209081611a9791906140fc565b508080611aa39061458d565b915050611a38565b5050565b611ab7612353565b8060089081611ac69190614a8b565b5050565b81611ad4816120df565b611ade83836126af565b505050565b6060600c60008381526020019081526020016000208054611b0390613b0e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2f90613b0e565b8015611b7c5780601f10611b5157610100808354040283529160200191611b7c565b820191906000526020600020905b815481529060010190602001808311611b5f57829003601f168201915b50505050509050919050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611bc657611bc5336120df565b5b611bd2858585856126c5565b5050505050565b611be1612353565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060611c3082612094565b6000611c3a612727565b90506000815111611c5a5760405180602001604052806000815250611c85565b80611c64846127b9565b604051602001611c75929190614b5d565b6040516020818303038152906040525b915050919050565b600960019054906101000a900460ff1681565b611ca8612353565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60088054611cf990613b0e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2590613b0e565b8015611d725780601f10611d4757610100808354040283529160200191611d72565b820191906000526020600020905b815481529060010190602001808311611d5557829003601f168201915b505050505081565b611d82612353565b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b600a81565b611dbb612353565b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e1e612353565b600960019054906101000a900460ff1615600960016101000a81548160ff021916908315150217905550565b600a81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611eeb612353565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5190614bf3565b60405180910390fd5b611f63816125cb565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061207d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061208d575061208c82612919565b5b9050919050565b61209d81612983565b6120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390613c63565b60405180910390fd5b50565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156121d9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401612156929190614c13565b602060405180830381865afa158015612173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121979190614c51565b6121d857806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016121cf9190613568565b60405180910390fd5b5b50565b60006121e782610d54565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614cf0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166122766129ef565b73ffffffffffffffffffffffffffffffffffffffff1614806122a557506122a48161229f6129ef565b611e4f565b5b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614d82565b60405180910390fd5b6122ee83836129f7565b505050565b6123046122fe6129ef565b82612ab0565b612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614e14565b60405180910390fd5b61234e838383612b45565b505050565b61235b6129ef565b73ffffffffffffffffffffffffffffffffffffffff1661237961160a565b73ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690614e80565b60405180910390fd5b565b6123ec83838360405180602001604052806000815250611b88565b505050565b60008173ffffffffffffffffffffffffffffffffffffffff16632f745c598460006040518363ffffffff1660e01b815260040161242f929190614edb565b602060405180830381865afa15801561244c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124709190613c98565b90508173ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016124ab91906135fe565b602060405180830381865afa1580156124c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ec9190614f19565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255090613d37565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166342b0921f82856040518363ffffffff1660e01b8152600401612594929190614f46565b600060405180830381600087803b1580156125ae57600080fd5b505af11580156125c2573d6000803e3d6000fd5b50505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126ab828260405180602001604052806000815250612dab565b5050565b6126c16126ba6129ef565b8383612e06565b5050565b6126d66126d06129ef565b83612ab0565b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614e14565b60405180910390fd5b61272184848484612f72565b50505050565b60606008805461273690613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461276290613b0e565b80156127af5780601f10612784576101008083540402835291602001916127af565b820191906000526020600020905b81548152906001019060200180831161279257829003601f168201915b5050505050905090565b606060008203612800576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612914565b600082905060005b6000821461283257808061281b9061458d565b915050600a8261282b9190614f9e565b9150612808565b60008167ffffffffffffffff81111561284e5761284d61379b565b5b6040519080825280601f01601f1916602001820160405280156128805781602001600182028036833780820191505090505b5090505b6000851461290d576001826128999190614fcf565b9150600a856128a89190615003565b60306128b491906143a3565b60f81b8183815181106128ca576128c9615034565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129069190614f9e565b9450612884565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a6a83610d54565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612abc83610d54565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612afe5750612afd8185611e4f565b5b80612b3c57508373ffffffffffffffffffffffffffffffffffffffff16612b2484610a49565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b6582610d54565b73ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2190615167565b60405180910390fd5b612c35838383612fce565b612c406000826129f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c909190614fcf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ce791906143a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612da6838383612fde565b505050565b612db58383612fe3565b612dc260008484846131bc565b612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df8906151f9565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90615265565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f6591906133f7565b60405180910390a3505050565b612f7d848484612b45565b612f89848484846131bc565b612fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbf906151f9565b60405180910390fd5b50505050565b612fd9838383611fad565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613052576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613049906152d1565b60405180910390fd5b61305b81612983565b1561309b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130929061533d565b60405180910390fd5b6130a760008383612fce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130f791906143a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131b860008383612fde565b5050565b60006131dd8473ffffffffffffffffffffffffffffffffffffffff16611f8a565b15613336578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132066129ef565b8786866040518563ffffffff1660e01b815260040161322894939291906153b2565b6020604051808303816000875af192505050801561326457506040513d601f19601f820116820180604052508101906132619190615413565b60015b6132e6573d8060008114613294576040519150601f19603f3d011682016040523d82523d6000602084013e613299565b606091505b5060008151036132de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d5906151f9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061333b565b600190505b949350505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61338c81613357565b811461339757600080fd5b50565b6000813590506133a981613383565b92915050565b6000602082840312156133c5576133c461334d565b5b60006133d38482850161339a565b91505092915050565b60008115159050919050565b6133f1816133dc565b82525050565b600060208201905061340c60008301846133e8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561344c578082015181840152602081019050613431565b60008484015250505050565b6000601f19601f8301169050919050565b600061347482613412565b61347e818561341d565b935061348e81856020860161342e565b61349781613458565b840191505092915050565b600060208201905081810360008301526134bc8184613469565b905092915050565b6000819050919050565b6134d7816134c4565b81146134e257600080fd5b50565b6000813590506134f4816134ce565b92915050565b6000602082840312156135105761350f61334d565b5b600061351e848285016134e5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061355282613527565b9050919050565b61356281613547565b82525050565b600060208201905061357d6000830184613559565b92915050565b61358c81613547565b811461359757600080fd5b50565b6000813590506135a981613583565b92915050565b600080604083850312156135c6576135c561334d565b5b60006135d48582860161359a565b92505060206135e5858286016134e5565b9150509250929050565b6135f8816134c4565b82525050565b600060208201905061361360008301846135ef565b92915050565b6000806000606084860312156136325761363161334d565b5b60006136408682870161359a565b93505060206136518682870161359a565b9250506040613662868287016134e5565b9150509250925092565b6000602082840312156136825761368161334d565b5b60006136908482850161359a565b91505092915050565b6000819050919050565b60006136be6136b96136b484613527565b613699565b613527565b9050919050565b60006136d0826136a3565b9050919050565b60006136e2826136c5565b9050919050565b6136f2816136d7565b82525050565b600060208201905061370d60008301846136e9565b92915050565b600061371e82613547565b9050919050565b61372e81613713565b811461373957600080fd5b50565b60008135905061374b81613725565b92915050565b600080604083850312156137685761376761334d565b5b60006137768582860161359a565b92505060206137878582860161373c565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137d382613458565b810181811067ffffffffffffffff821117156137f2576137f161379b565b5b80604052505050565b6000613805613343565b905061381182826137ca565b919050565b600067ffffffffffffffff8211156138315761383061379b565b5b61383a82613458565b9050602081019050919050565b82818337600083830152505050565b600061386961386484613816565b6137fb565b90508281526020810184848401111561388557613884613796565b5b613890848285613847565b509392505050565b600082601f8301126138ad576138ac613791565b5b81356138bd848260208601613856565b91505092915050565b6000602082840312156138dc576138db61334d565b5b600082013567ffffffffffffffff8111156138fa576138f9613352565b5b61390684828501613898565b91505092915050565b613918816133dc565b811461392357600080fd5b50565b6000813590506139358161390f565b92915050565b600080604083850312156139525761395161334d565b5b60006139608582860161359a565b925050602061397185828601613926565b9150509250929050565b600067ffffffffffffffff8211156139965761399561379b565b5b61399f82613458565b9050602081019050919050565b60006139bf6139ba8461397b565b6137fb565b9050828152602081018484840111156139db576139da613796565b5b6139e6848285613847565b509392505050565b600082601f830112613a0357613a02613791565b5b8135613a138482602086016139ac565b91505092915050565b60008060008060808587031215613a3657613a3561334d565b5b6000613a448782880161359a565b9450506020613a558782880161359a565b9350506040613a66878288016134e5565b925050606085013567ffffffffffffffff811115613a8757613a86613352565b5b613a93878288016139ee565b91505092959194509250565b60008060408385031215613ab657613ab561334d565b5b6000613ac48582860161359a565b9250506020613ad58582860161359a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b2657607f821691505b602082108103613b3957613b38613adf565b5b50919050565b7f5769746864726177616c206661696c65642e0000000000000000000000000000600082015250565b6000613b7560128361341d565b9150613b8082613b3f565b602082019050919050565b60006020820190508181036000830152613ba481613b68565b9050919050565b7f41646472657373206e6f742077686974656c69737465642e0000000000000000600082015250565b6000613be160188361341d565b9150613bec82613bab565b602082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c4d60188361341d565b9150613c5882613c17565b602082019050919050565b60006020820190508181036000830152613c7c81613c40565b9050919050565b600081519050613c92816134ce565b92915050565b600060208284031215613cae57613cad61334d565b5b6000613cbc84828501613c83565b91505092915050565b7f4e6f7420746865206f776e6572206f662074686520726571756573746564207460008201527f6f6b656e2e000000000000000000000000000000000000000000000000000000602082015250565b6000613d2160258361341d565b9150613d2c82613cc5565b604082019050919050565b60006020820190508181036000830152613d5081613d14565b9050919050565b600081905092915050565b7f444547454e000000000000000000000000000000000000000000000000000000600082015250565b6000613d98600583613d57565b9150613da382613d62565b600582019050919050565b6000613db982613d8b565b9150819050919050565b6000613dce82613412565b613dd88185613d57565b9350613de881856020860161342e565b80840191505092915050565b6000613e008284613dc3565b915081905092915050565b7f4d75737420626520444547454e20746f20626520656c696769626c6520666f7260008201527f2070726f6d6f74696f6e20746f20424f53532e00000000000000000000000000602082015250565b6000613e6760338361341d565b9150613e7282613e0b565b604082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f4e6f7420656c6c696769626c6520666f722070726f6d6f74696f6e20746f204260008201527f4f53532e00000000000000000000000000000000000000000000000000000000602082015250565b6000613ef960248361341d565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b600081549050613f3e81613b0e565b9050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fbc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f7f565b613fc68683613f7f565b95508019841693508086168417925050509392505050565b6000613ff9613ff4613fef846134c4565b613699565b6134c4565b9050919050565b6000819050919050565b61401383613fde565b61402761401f82614000565b848454613f8c565b825550505050565b600090565b61403c61402f565b61404781848461400a565b505050565b5b8181101561406b57614060600082614034565b60018101905061404d565b5050565b601f8211156140b05761408181613f45565b61408a84613f6f565b81016020851015614099578190505b6140ad6140a585613f6f565b83018261404c565b50505b505050565b600082821c905092915050565b60006140d3600019846008026140b5565b1980831691505092915050565b60006140ec83836140c2565b9150826002028217905092915050565b81810361410a5750506141e2565b61411382613f2f565b67ffffffffffffffff81111561412c5761412b61379b565b5b6141368254613b0e565b61414182828561406f565b6000601f831160018114614170576000841561415e578287015490505b61416885826140e0565b8655506141db565b601f19841661417e87613f5a565b965061418986613f45565b60005b828110156141b15784890154825560018201915060018501945060208101905061418c565b868310156141ce57848901546141ca601f8916826140c2565b8355505b6001600288020188555050505b5050505050505b565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061424060298361341d565b915061424b826141e4565b604082019050919050565b6000602082019050818103600083015261426f81614233565b9050919050565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b60006142ac60138361341d565b91506142b782614276565b602082019050919050565b600060208201905081810360008301526142db8161429f565b9050919050565b7f57686974656c697374206d696e7420636c61696d656420616c7265616479206260008201527f7920616464726573732e00000000000000000000000000000000000000000000602082015250565b600061433e602a8361341d565b9150614349826142e2565b604082019050919050565b6000602082019050818103600083015261436d81614331565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143ae826134c4565b91506143b9836134c4565b92508282019050808211156143d1576143d0614374565b5b92915050565b7f52657175657374656420746f6b656e20636f756e74206578636565647320746f60008201527f74616c2077686974656c69737420737570706c792e0000000000000000000000602082015250565b600061443360358361341d565b915061443e826143d7565b604082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f596f752063616e206f6e6c79206d696e7420313020746f6b656e73207065722060008201527f77616c6c65742e00000000000000000000000000000000000000000000000000602082015250565b60006144c560278361341d565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f52657175657374656420746f6b656e20636f756e74206578636565647320746f60008201527f74616c20737570706c792e000000000000000000000000000000000000000000602082015250565b6000614557602b8361341d565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b6000614598826134c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ca576145c9614374565b5b600182019050919050565b7f54686520626f6f6b7320617265206e6f74206f70656e2e000000000000000000600082015250565b600061460b60178361341d565b9150614616826145d5565b602082019050919050565b6000602082019050818103600083015261463a816145fe565b9050919050565b7f4652454e00000000000000000000000000000000000000000000000000000000600082015250565b6000614677600483613d57565b915061468282614641565b600482019050919050565b60006146988261466a565b9150819050919050565b7f4d757374206265204652454e20746f20626520656c696769626c6520666f722060008201527f696e6974696174696f6e2e000000000000000000000000000000000000000000602082015250565b60006146fe602b8361341d565b9150614709826146a2565b604082019050919050565b6000602082019050818103600083015261472d816146f1565b9050919050565b7f4e6f7420656c6c696769626c6520666f7220696e6974696174696f6e2e000000600082015250565b600061476a601d8361341d565b915061477582614734565b602082019050919050565b600060208201905081810360008301526147998161475d565b9050919050565b7f4d46455200000000000000000000000000000000000000000000000000000000600082015250565b60006147d6600483613d57565b91506147e1826147a0565b600482019050919050565b60006147f7826147c9565b9150819050919050565b7f4d757374206265204d46455220746f20626520656c696769626c6520666f722060008201527f70726f6d6f74696f6e20746f20444547454e2e00000000000000000000000000602082015250565b600061485d60338361341d565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f4e6f7420656c6c696769626c6520666f722070726f6d6f74696f6e20746f204460008201527f4547454e2e000000000000000000000000000000000000000000000000000000602082015250565b60006148ef60258361341d565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f596f752063616e206f6e6c79206d696e7420313020746f6b656e73207065722060008201527f7472616e73616374696f6e2e0000000000000000000000000000000000000000602082015250565b6000614981602c8361341d565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b60006149c2826134c4565b91506149cd836134c4565b92508282026149db816134c4565b915082820484148315176149f2576149f1614374565b5b5092915050565b7f496e73756666696369656e742066756e647320666f722072657175657374656460008201527f207472616e73616374696f6e2e00000000000000000000000000000000000000602082015250565b6000614a55602d8361341d565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b614a9482613412565b67ffffffffffffffff811115614aad57614aac61379b565b5b614ab78254613b0e565b614ac282828561406f565b600060209050601f831160018114614af55760008415614ae3578287015190505b614aed85826140e0565b865550614b55565b601f198416614b0386613f45565b60005b82811015614b2b57848901518255600182019150602085019450602081019050614b06565b86831015614b485784890151614b44601f8916826140c2565b8355505b6001600288020188555050505b505050505050565b6000614b698285613dc3565b9150614b758284613dc3565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bdd60268361341d565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b6000604082019050614c286000830185613559565b614c356020830184613559565b9392505050565b600081519050614c4b8161390f565b92915050565b600060208284031215614c6757614c6661334d565b5b6000614c7584828501614c3c565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cda60218361341d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000614d6c603e8361341d565b9150614d7782614d10565b604082019050919050565b60006020820190508181036000830152614d9b81614d5f565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614dfe602e8361341d565b9150614e0982614da2565b604082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e6a60208361341d565b9150614e7582614e34565b602082019050919050565b60006020820190508181036000830152614e9981614e5d565b9050919050565b6000819050919050565b6000614ec5614ec0614ebb84614ea0565b613699565b6134c4565b9050919050565b614ed581614eaa565b82525050565b6000604082019050614ef06000830185613559565b614efd6020830184614ecc565b9392505050565b600081519050614f1381613583565b92915050565b600060208284031215614f2f57614f2e61334d565b5b6000614f3d84828501614f04565b91505092915050565b6000604082019050614f5b60008301856135ef565b614f686020830184613559565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa9826134c4565b9150614fb4836134c4565b925082614fc457614fc3614f6f565b5b828204905092915050565b6000614fda826134c4565b9150614fe5836134c4565b9250828203905081811115614ffd57614ffc614374565b5b92915050565b600061500e826134c4565b9150615019836134c4565b92508261502957615028614f6f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006150bf60258361341d565b91506150ca82615063565b604082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061515160248361341d565b915061515c826150f5565b604082019050919050565b6000602082019050818103600083015261518081615144565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006151e360328361341d565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061524f60198361341d565b915061525a82615219565b602082019050919050565b6000602082019050818103600083015261527e81615242565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006152bb60208361341d565b91506152c682615285565b602082019050919050565b600060208201905081810360008301526152ea816152ae565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615327601c8361341d565b9150615332826152f1565b602082019050919050565b600060208201905081810360008301526153568161531a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006153848261535d565b61538e8185615368565b935061539e81856020860161342e565b6153a781613458565b840191505092915050565b60006080820190506153c76000830187613559565b6153d46020830186613559565b6153e160408301856135ef565b81810360608301526153f38184615379565b905095945050505050565b60008151905061540d81613383565b92915050565b6000602082840312156154295761542861334d565b5b6000615437848285016153fe565b9150509291505056fea26469706673582212205bc57fd92e8b0e08816c81ea80b6a3e6cfbb1a100293b6fa84ad0f385aa46aad64736f6c63430008110033
Deployed Bytecode Sourcemap
45273:9564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53643:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28389:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29902:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54055:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46872:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54229:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53065:201;;;:::i;:::-;;45804:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47121:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46981:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2927:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54409:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52562:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45515:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28100:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50960:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49536:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45747:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27831:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42527:103;;;;;;;;;;;;;:::i;:::-;;45642:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47466:1323;;;:::i;:::-;;48954:574;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41879:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50071:530;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28558:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51128:1144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52307:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53862:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48828:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54597:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52713:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28733:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45554:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52421:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45474:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52862:93;;;;;;;;;;;;;:::i;:::-;;45941:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47341:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52963:94;;;;;;;;;;;;;:::i;:::-;;45870:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30371:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42785:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53643:211;53781:4;53810:36;53834:11;53810:23;:36::i;:::-;53803:43;;53643:211;;;:::o;28389:100::-;28443:13;28476:5;28469:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28389:100;:::o;29902:171::-;29978:7;29998:23;30013:7;29998:14;:23::i;:::-;30041:15;:24;30057:7;30041:24;;;;;;;;;;;;;;;;;;;;;30034:31;;29902:171;;;:::o;54055:166::-;54160:8;4448:30;4469:8;4448:20;:30::i;:::-;54181:32:::1;54195:8;54205:7;54181:13;:32::i;:::-;54055:166:::0;;;:::o;46872:101::-;46916:7;46943:22;:12;:20;:22::i;:::-;46936:29;;46872:101;:::o;54229:172::-;54339:4;4276:10;4268:18;;:4;:18;;;4264:83;;4303:32;4324:10;4303:20;:32::i;:::-;4264:83;54356:37:::1;54375:4;54381:2;54385:7;54356:18;:37::i;:::-;54229:172:::0;;;;:::o;53065:201::-;41765:13;:11;:13::i;:::-;53128:23:::1;53154:21;53128:47;;53202:10;53194:24;;:41;53219:15;53194:41;;;;;;;;;;;;;;;;;;;;;;;53186:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53117:149;53065:201::o:0;45804:59::-;45860:3;45804:59;:::o;47121:212::-;47187:4;47212:23;47226:8;47212:13;:23::i;:::-;47204:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47321:4;47282:43;;:25;:35;47308:8;47282:35;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;47275:50;;47121:212;;;:::o;46981:132::-;47043:4;47101;47067:38;;:20;:30;47088:8;47067:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;47060:45;;46981:132;;;:::o;2927:143::-;3027:42;2927:143;:::o;54409:180::-;54523:4;4276:10;4268:18;;:4;:18;;;4264:83;;4303:32;4324:10;4303:20;:32::i;:::-;4264:83;54540:41:::1;54563:4;54569:2;54573:7;54540:22;:41::i;:::-;54409:180:::0;;;;:::o;52562:143::-;41765:13;:11;:13::i;:::-;52688:8:::1;52653:22;;:44;;;;;;;;;;;;;;;;;;52562:143:::0;:::o;45515:32::-;;;;;;;;;;;;;:::o;28100:222::-;28172:7;28192:13;28208:7;:16;28216:7;28208:16;;;;;;;;;;;;;;;;;;;;;28192:32;;28260:1;28243:19;;:5;:19;;;28235:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28309:5;28302:12;;;28100:222;;;:::o;50960:160::-;51048:4;51111:1;51072:18;:28;;;51101:5;51072:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;51065:47;;50960:160;;;;:::o;49536:527::-;49617:17;49625:8;49617:7;:17::i;:::-;49603:31;;:10;:31;;;49595:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49755:27;;;;;;;:::i;:::-;;;;;;;;;;;;;49745:38;;;;;;49722:17;49730:8;49722:7;:17::i;:::-;49705:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;49695:46;;;;;;:88;49687:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;49858:47;49871:10;49883:21;;;;;;;;;;;49858:12;:47::i;:::-;49850:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;49983:10;:13;49994:1;49983:13;;;;;;;;;;;49959:11;:21;49971:8;49959:21;;;;;;;;;;;:37;;;;;;:::i;:::-;;50007:48;50021:10;50033:21;;;;;;;;;;;50007:13;:48::i;:::-;49536:527;:::o;45747:50::-;45793:4;45747:50;:::o;27831:207::-;27903:7;27948:1;27931:19;;:5;:19;;;27923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28014:9;:16;28024:5;28014:16;;;;;;;;;;;;;;;;28007:23;;27831:207;;;:::o;42527:103::-;41765:13;:11;:13::i;:::-;42592:30:::1;42619:1;42592:18;:30::i;:::-;42527:103::o:0;45642:45::-;;;;:::o;47466:1323::-;47519:24;:12;:22;:24::i;:::-;47556:19;47578:1;47556:23;;47641:12;;;;;;;;;;;47633:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47747:25;47761:10;47747:13;:25::i;:::-;47739:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47896:29;47914:10;47896:17;:29::i;:::-;47888:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45860:3;48088:11;48065:20;;:34;;;;:::i;:::-;:67;;48057:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;45998:2;48308:11;48284:21;48294:10;48284:9;:21::i;:::-;:35;;;;:::i;:::-;:69;;48276:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;45793:4;48480:22;:12;:20;:22::i;:::-;:45;;48472:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;48586:45;48596:10;48608:22;:12;:20;:22::i;:::-;48586:9;:45::i;:::-;48680:10;:13;48691:1;48680:13;;;;;;;;;;;48642:11;:35;48654:22;:12;:20;:22::i;:::-;48642:35;;;;;;;;;;;:51;;;;;;:::i;:::-;;48744:4;48704:25;:37;48730:10;48704:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;48759:20;;:22;;;;;;;;;:::i;:::-;;;;;;47508:1281;47466:1323::o;48954:574::-;49039:17;49047:8;49039:7;:17::i;:::-;49025:31;;:10;:31;;;49017:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49117:12;;;;;;;;;;;49109:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;49236:26;;;;;;;:::i;:::-;;;;;;;;;;;;;49226:37;;;;;;49203:17;49211:8;49203:7;:17::i;:::-;49186:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;49176:46;;;;;;:87;49168:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;49330:47;49343:10;49355:21;;;;;;;;;;;49330:12;:47::i;:::-;49322:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;49448:10;:13;49459:1;49448:13;;;;;;;;;;;49424:11;:21;49436:8;49424:21;;;;;;;;;;;:37;;;;;;:::i;:::-;;49472:48;49486:10;49498:21;;;;;;;;;;;49472:13;:48::i;:::-;48954:574;:::o;41879:87::-;41925:7;41952:6;;;;;;;;;;;41945:13;;41879:87;:::o;50071:530::-;50153:17;50161:8;50153:7;:17::i;:::-;50139:31;;:10;:31;;;50131:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50291:26;;;;;;;:::i;:::-;;;;;;;;;;;;;50281:37;;;;;;50258:17;50266:8;50258:7;:17::i;:::-;50241:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;50231:46;;;;;;:87;50223:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;50393:48;50406:10;50418:22;;;;;;;;;;;50393:12;:48::i;:::-;50385:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;50520:10;:13;50531:1;50520:13;;;;;;;;;;;50496:11;:21;50508:8;50496:21;;;;;;;;;;;:37;;;;;;:::i;:::-;;50544:49;50558:10;50570:22;;;;;;;;;;;50544:13;:49::i;:::-;50071:530;:::o;28558:104::-;28614:13;28647:7;28640:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28558:104;:::o;51128:1144::-;51240:12;;;;;;;;;;;51232:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;45932:2;51370:11;:50;;51362:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;45998:2;51587:11;51563:21;51573:10;51563:9;:21::i;:::-;:35;;;;:::i;:::-;:69;;51555:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;45793:4;51784:11;51759:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:59;;51751:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;51971:9;51956:11;51943:10;;:24;;;;:::i;:::-;:37;;51935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;52048:9;52060:1;52048:13;;52043:222;52068:11;52063:1;:16;52043:222;;52101:24;:12;:22;:24::i;:::-;52142:45;52152:10;52164:22;:12;:20;:22::i;:::-;52142:9;:45::i;:::-;52240:10;:13;52251:1;52240:13;;;;;;;;;;;52202:11;:35;52214:22;:12;:20;:22::i;:::-;52202:35;;;;;;;;;;;:51;;;;;;:::i;:::-;;52081:3;;;;;:::i;:::-;;;;52043:222;;;;51128:1144;:::o;52307:106::-;41765:13;:11;:13::i;:::-;52397:8:::1;52381:13;:24;;;;;;:::i;:::-;;52307:106:::0;:::o;53862:185::-;53975:8;4448:30;4469:8;4448:20;:30::i;:::-;53996:43:::1;54020:8;54030;53996:23;:43::i;:::-;53862:185:::0;;;:::o;48828:118::-;48884:13;48917:11;:21;48929:8;48917:21;;;;;;;;;;;48910:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48828:118;;;:::o;54597:237::-;54757:4;4276:10;4268:18;;:4;:18;;;4264:83;;4303:32;4324:10;4303:20;:32::i;:::-;4264:83;54779:47:::1;54802:4;54808:2;54812:7;54821:4;54779:22;:47::i;:::-;54597:237:::0;;;;;:::o;52713:141::-;41765:13;:11;:13::i;:::-;52837:8:::1;52803:21;;:43;;;;;;;;;;;;;;;;;;52713:141:::0;:::o;28733:281::-;28806:13;28832:23;28847:7;28832:14;:23::i;:::-;28868:21;28892:10;:8;:10::i;:::-;28868:34;;28944:1;28926:7;28920:21;:25;:86;;;;;;;;;;;;;;;;;28972:7;28981:18;:7;:16;:18::i;:::-;28955:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28920:86;28913:93;;;28733:281;;;:::o;45554:32::-;;;;;;;;;;;;;:::o;52421:133::-;41765:13;:11;:13::i;:::-;52537:8:::1;52503:21;;:43;;;;;;;;;;;;;;;;;;52421:133:::0;:::o;45474:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52862:93::-;41765:13;:11;:13::i;:::-;52935:12:::1;;;;;;;;;;;52934:13;52919:12;;:28;;;;;;;;;;;;;;;;;;52862:93::o:0;45941:59::-;45998:2;45941:59;:::o;47341:117::-;41765:13;:11;:13::i;:::-;47446:4:::1;47413:20;:30;47434:8;47413:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;47341:117:::0;:::o;52963:94::-;41765:13;:11;:13::i;:::-;53037:12:::1;;;;;;;;;;;53036:13;53021:12;;:28;;;;;;;;;;;;;;;;;;52963:94::o:0;45870:64::-;45932:2;45870:64;:::o;30371:164::-;30468:4;30492:18;:25;30511:5;30492:25;;;;;;;;;;;;;;;:35;30518:8;30492:35;;;;;;;;;;;;;;;;;;;;;;;;;30485:42;;30371:164;;;;:::o;42785:201::-;41765:13;:11;:13::i;:::-;42894:1:::1;42874:22;;:8;:22;;::::0;42866:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42950:28;42969:8;42950:18;:28::i;:::-;42785:201:::0;:::o;44338:127::-;44445:1;44427:7;:14;;;:19;;;;;;;;;;;44338:127;:::o;44216:114::-;44281:7;44308;:14;;;44301:21;;44216:114;;;:::o;9155:326::-;9215:4;9472:1;9450:7;:19;;;:23;9443:30;;9155:326;;;:::o;40001:126::-;;;;:::o;27462:305::-;27564:4;27616:25;27601:40;;;:11;:40;;;;:105;;;;27673:33;27658:48;;;:11;:48;;;;27601:105;:158;;;;27723:36;27747:11;27723:23;:36::i;:::-;27601:158;27581:178;;27462:305;;;:::o;37877:135::-;37959:16;37967:7;37959;:16::i;:::-;37951:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37877:135;:::o;4506:419::-;4745:1;3027:42;4697:45;;;:49;4693:225;;;3027:42;4768;;;4819:4;4826:8;4768:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4763:144;;4882:8;4863:28;;;;;;;;;;;:::i;:::-;;;;;;;;4763:144;4693:225;4506:419;:::o;29419:417::-;29500:13;29516:23;29531:7;29516:14;:23::i;:::-;29500:39;;29564:5;29558:11;;:2;:11;;;29550:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29658:5;29642:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29667:37;29684:5;29691:12;:10;:12::i;:::-;29667:16;:37::i;:::-;29642:62;29620:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29807:21;29816:2;29820:7;29807:8;:21::i;:::-;29489:347;29419:417;;:::o;30602:336::-;30797:41;30816:12;:10;:12::i;:::-;30830:7;30797:18;:41::i;:::-;30789:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:28;30912:4;30918:2;30922:7;30902:9;:28::i;:::-;30602:336;;;:::o;42044:132::-;42119:12;:10;:12::i;:::-;42108:23;;:7;:5;:7::i;:::-;:23;;;42100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42044:132::o;31009:185::-;31147:39;31164:4;31170:2;31174:7;31147:39;;;;;;;;;;;;:16;:39::i;:::-;31009:185;;;:::o;50609:343::-;50699:15;50717:18;:38;;;50756:8;50766:1;50717:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50699:69;;50803:18;:26;;;50830:7;50803:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50789:49;;:10;:49;;;50781:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;50893:18;:32;;;50926:7;50935:8;50893:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50688:264;50609:343;;:::o;43146:191::-;43220:16;43239:6;;;;;;;;;;;43220:25;;43265:8;43256:6;;:17;;;;;;;;;;;;;;;;;;43320:8;43289:40;;43310:8;43289:40;;;;;;;;;;;;43209:128;43146:191;:::o;33995:110::-;34071:26;34081:2;34085:7;34071:26;;;;;;;;;;;;:9;:26::i;:::-;33995:110;;:::o;30145:155::-;30240:52;30259:12;:10;:12::i;:::-;30273:8;30283;30240:18;:52::i;:::-;30145:155;;:::o;31265:323::-;31439:41;31458:12;:10;:12::i;:::-;31472:7;31439:18;:41::i;:::-;31431:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31542:38;31556:4;31562:2;31566:7;31575:4;31542:13;:38::i;:::-;31265:323;;;;:::o;53308:114::-;53368:13;53401;53394:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53308:114;:::o;5855:723::-;5911:13;6141:1;6132:5;:10;6128:53;;6159:10;;;;;;;;;;;;;;;;;;;;;6128:53;6191:12;6206:5;6191:20;;6222:14;6247:78;6262:1;6254:4;:9;6247:78;;6280:8;;;;;:::i;:::-;;;;6311:2;6303:10;;;;;:::i;:::-;;;6247:78;;;6335:19;6367:6;6357:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6335:39;;6385:154;6401:1;6392:5;:10;6385:154;;6429:1;6419:11;;;;;:::i;:::-;;;6496:2;6488:5;:10;;;;:::i;:::-;6475:2;:24;;;;:::i;:::-;6462:39;;6445:6;6452;6445:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6525:2;6516:11;;;;;:::i;:::-;;;6385:154;;;6563:6;6549:21;;;;;5855:723;;;;:::o;19311:157::-;19396:4;19435:25;19420:40;;;:11;:40;;;;19413:47;;19311:157;;;:::o;33095:127::-;33160:4;33212:1;33184:30;;:7;:16;33192:7;33184:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33177:37;;33095:127;;;:::o;25841:98::-;25894:7;25921:10;25914:17;;25841:98;:::o;37156:174::-;37258:2;37231:15;:24;37247:7;37231:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37314:7;37310:2;37276:46;;37285:23;37300:7;37285:14;:23::i;:::-;37276:46;;;;;;;;;;;;37156:174;;:::o;33389:264::-;33482:4;33499:13;33515:23;33530:7;33515:14;:23::i;:::-;33499:39;;33568:5;33557:16;;:7;:16;;;:52;;;;33577:32;33594:5;33601:7;33577:16;:32::i;:::-;33557:52;:87;;;;33637:7;33613:31;;:20;33625:7;33613:11;:20::i;:::-;:31;;;33557:87;33549:96;;;33389:264;;;;:::o;36412:625::-;36571:4;36544:31;;:23;36559:7;36544:14;:23::i;:::-;:31;;;36536:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36650:1;36636:16;;:2;:16;;;36628:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36706:39;36727:4;36733:2;36737:7;36706:20;:39::i;:::-;36810:29;36827:1;36831:7;36810:8;:29::i;:::-;36871:1;36852:9;:15;36862:4;36852:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36900:1;36883:9;:13;36893:2;36883:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36931:2;36912:7;:16;36920:7;36912:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36970:7;36966:2;36951:27;;36960:4;36951:27;;;;;;;;;;;;36991:38;37011:4;37017:2;37021:7;36991:19;:38::i;:::-;36412:625;;;:::o;34332:319::-;34461:18;34467:2;34471:7;34461:5;:18::i;:::-;34512:53;34543:1;34547:2;34551:7;34560:4;34512:22;:53::i;:::-;34490:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34332:319;;;:::o;37473:315::-;37628:8;37619:17;;:5;:17;;;37611:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37715:8;37677:18;:25;37696:5;37677:25;;;;;;;;;;;;;;;:35;37703:8;37677:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37761:8;37739:41;;37754:5;37739:41;;;37771:8;37739:41;;;;;;:::i;:::-;;;;;;;;37473:315;;;:::o;32469:313::-;32625:28;32635:4;32641:2;32645:7;32625:9;:28::i;:::-;32672:47;32695:4;32701:2;32705:7;32714:4;32672:22;:47::i;:::-;32664:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32469:313;;;;:::o;53430:205::-;53582:45;53609:4;53615:2;53619:7;53582:26;:45::i;:::-;53430:205;;;:::o;40512:125::-;;;;:::o;34987:439::-;35081:1;35067:16;;:2;:16;;;35059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35140:16;35148:7;35140;:16::i;:::-;35139:17;35131:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35202:45;35231:1;35235:2;35239:7;35202:20;:45::i;:::-;35277:1;35260:9;:13;35270:2;35260:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35308:2;35289:7;:16;35297:7;35289:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35353:7;35349:2;35328:33;;35345:1;35328:33;;;;;;;;;;;;35374:44;35402:1;35406:2;35410:7;35374:19;:44::i;:::-;34987:439;;:::o;38576:853::-;38730:4;38751:15;:2;:13;;;:15::i;:::-;38747:675;;;38803:2;38787:36;;;38824:12;:10;:12::i;:::-;38838:4;38844:7;38853:4;38787:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38783:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39045:1;39028:6;:13;:18;39024:328;;39071:60;;;;;;;;;;:::i;:::-;;;;;;;;39024:328;39302:6;39296:13;39287:6;39283:2;39279:15;39272:38;38783:584;38919:41;;;38909:51;;;:6;:51;;;;38902:58;;;;;38747:675;39406:4;39399:11;;38576:853;;;;;;;:::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:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:60::-;6230:3;6251:5;6244:12;;6202:60;;;:::o;6268:142::-;6318:9;6351:53;6369:34;6378:24;6396:5;6378:24;:::i;:::-;6369:34;:::i;:::-;6351:53;:::i;:::-;6338:66;;6268:142;;;:::o;6416:126::-;6466:9;6499:37;6530:5;6499:37;:::i;:::-;6486:50;;6416:126;;;:::o;6548:157::-;6629:9;6662:37;6693:5;6662:37;:::i;:::-;6649:50;;6548:157;;;:::o;6711:193::-;6829:68;6891:5;6829:68;:::i;:::-;6824:3;6817:81;6711:193;;:::o;6910:284::-;7034:4;7072:2;7061:9;7057:18;7049:26;;7085:102;7184:1;7173:9;7169:17;7160:6;7085:102;:::i;:::-;6910:284;;;;:::o;7200:114::-;7255:7;7284:24;7302:5;7284:24;:::i;:::-;7273:35;;7200:114;;;:::o;7320:158::-;7411:42;7447:5;7411:42;:::i;:::-;7404:5;7401:53;7391:81;;7468:1;7465;7458:12;7391:81;7320:158;:::o;7484:175::-;7548:5;7586:6;7573:20;7564:29;;7602:51;7647:5;7602:51;:::i;:::-;7484:175;;;;:::o;7665:510::-;7751:6;7759;7808:2;7796:9;7787:7;7783:23;7779:32;7776:119;;;7814:79;;:::i;:::-;7776:119;7934:1;7959:53;8004:7;7995:6;7984:9;7980:22;7959:53;:::i;:::-;7949:63;;7905:117;8061:2;8087:71;8150:7;8141:6;8130:9;8126:22;8087:71;:::i;:::-;8077:81;;8032:136;7665:510;;;;;:::o;8181:117::-;8290:1;8287;8280:12;8304:117;8413:1;8410;8403:12;8427:180;8475:77;8472:1;8465:88;8572:4;8569:1;8562:15;8596:4;8593:1;8586:15;8613:281;8696:27;8718:4;8696:27;:::i;:::-;8688:6;8684:40;8826:6;8814:10;8811:22;8790:18;8778:10;8775:34;8772:62;8769:88;;;8837:18;;:::i;:::-;8769:88;8877:10;8873:2;8866:22;8656:238;8613:281;;:::o;8900:129::-;8934:6;8961:20;;:::i;:::-;8951:30;;8990:33;9018:4;9010:6;8990:33;:::i;:::-;8900:129;;;:::o;9035:308::-;9097:4;9187:18;9179:6;9176:30;9173:56;;;9209:18;;:::i;:::-;9173:56;9247:29;9269:6;9247:29;:::i;:::-;9239:37;;9331:4;9325;9321:15;9313:23;;9035:308;;;:::o;9349:146::-;9446:6;9441:3;9436;9423:30;9487:1;9478:6;9473:3;9469:16;9462:27;9349:146;;;:::o;9501:425::-;9579:5;9604:66;9620:49;9662:6;9620:49;:::i;:::-;9604:66;:::i;:::-;9595:75;;9693:6;9686:5;9679:21;9731:4;9724:5;9720:16;9769:3;9760:6;9755:3;9751:16;9748:25;9745:112;;;9776:79;;:::i;:::-;9745:112;9866:54;9913:6;9908:3;9903;9866:54;:::i;:::-;9585:341;9501:425;;;;;:::o;9946:340::-;10002:5;10051:3;10044:4;10036:6;10032:17;10028:27;10018:122;;10059:79;;:::i;:::-;10018:122;10176:6;10163:20;10201:79;10276:3;10268:6;10261:4;10253:6;10249:17;10201:79;:::i;:::-;10192:88;;10008:278;9946:340;;;;:::o;10292:509::-;10361:6;10410:2;10398:9;10389:7;10385:23;10381:32;10378:119;;;10416:79;;:::i;:::-;10378:119;10564:1;10553:9;10549:17;10536:31;10594:18;10586:6;10583:30;10580:117;;;10616:79;;:::i;:::-;10580:117;10721:63;10776:7;10767:6;10756:9;10752:22;10721:63;:::i;:::-;10711:73;;10507:287;10292:509;;;;:::o;10807:116::-;10877:21;10892:5;10877:21;:::i;:::-;10870:5;10867:32;10857:60;;10913:1;10910;10903:12;10857:60;10807:116;:::o;10929:133::-;10972:5;11010:6;10997:20;10988:29;;11026:30;11050:5;11026:30;:::i;:::-;10929:133;;;;:::o;11068:468::-;11133:6;11141;11190:2;11178:9;11169:7;11165:23;11161:32;11158:119;;;11196:79;;:::i;:::-;11158:119;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:50;11511:7;11502:6;11491:9;11487:22;11469:50;:::i;:::-;11459:60;;11414:115;11068:468;;;;;:::o;11542:307::-;11603:4;11693:18;11685:6;11682:30;11679:56;;;11715:18;;:::i;:::-;11679:56;11753:29;11775:6;11753:29;:::i;:::-;11745:37;;11837:4;11831;11827:15;11819:23;;11542:307;;;:::o;11855:423::-;11932:5;11957:65;11973:48;12014:6;11973:48;:::i;:::-;11957:65;:::i;:::-;11948:74;;12045:6;12038:5;12031:21;12083:4;12076:5;12072:16;12121:3;12112:6;12107:3;12103:16;12100:25;12097:112;;;12128:79;;:::i;:::-;12097:112;12218:54;12265:6;12260:3;12255;12218:54;:::i;:::-;11938:340;11855:423;;;;;:::o;12297:338::-;12352:5;12401:3;12394:4;12386:6;12382:17;12378:27;12368:122;;12409:79;;:::i;:::-;12368:122;12526:6;12513:20;12551:78;12625:3;12617:6;12610:4;12602:6;12598:17;12551:78;:::i;:::-;12542:87;;12358:277;12297:338;;;;:::o;12641:943::-;12736:6;12744;12752;12760;12809:3;12797:9;12788:7;12784:23;12780:33;12777:120;;;12816:79;;:::i;:::-;12777:120;12936:1;12961:53;13006:7;12997:6;12986:9;12982:22;12961:53;:::i;:::-;12951:63;;12907:117;13063:2;13089:53;13134:7;13125:6;13114:9;13110:22;13089:53;:::i;:::-;13079:63;;13034:118;13191:2;13217:53;13262:7;13253:6;13242:9;13238:22;13217:53;:::i;:::-;13207:63;;13162:118;13347:2;13336:9;13332:18;13319:32;13378:18;13370:6;13367:30;13364:117;;;13400:79;;:::i;:::-;13364:117;13505:62;13559:7;13550:6;13539:9;13535:22;13505:62;:::i;:::-;13495:72;;13290:287;12641:943;;;;;;;:::o;13590:474::-;13658:6;13666;13715:2;13703:9;13694:7;13690:23;13686:32;13683:119;;;13721:79;;:::i;:::-;13683:119;13841:1;13866:53;13911:7;13902:6;13891:9;13887:22;13866:53;:::i;:::-;13856:63;;13812:117;13968:2;13994:53;14039:7;14030:6;14019:9;14015:22;13994:53;:::i;:::-;13984:63;;13939:118;13590:474;;;;;:::o;14070:180::-;14118:77;14115:1;14108:88;14215:4;14212:1;14205:15;14239:4;14236:1;14229:15;14256:320;14300:6;14337:1;14331:4;14327:12;14317:22;;14384:1;14378:4;14374:12;14405:18;14395:81;;14461:4;14453:6;14449:17;14439:27;;14395:81;14523:2;14515:6;14512:14;14492:18;14489:38;14486:84;;14542:18;;:::i;:::-;14486:84;14307:269;14256:320;;;:::o;14582:168::-;14722:20;14718:1;14710:6;14706:14;14699:44;14582:168;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:419::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15381:9;15375:4;15371:20;15367:1;15356:9;15352:17;15345:47;15409:131;15535:4;15409:131;:::i;:::-;15401:139;;15128:419;;;:::o;15553:174::-;15693:26;15689:1;15681:6;15677:14;15670:50;15553:174;:::o;15733:366::-;15875:3;15896:67;15960:2;15955:3;15896:67;:::i;:::-;15889:74;;15972:93;16061:3;15972:93;:::i;:::-;16090:2;16085:3;16081:12;16074:19;;15733:366;;;:::o;16105:419::-;16271:4;16309:2;16298:9;16294:18;16286:26;;16358:9;16352:4;16348:20;16344:1;16333:9;16329:17;16322:47;16386:131;16512:4;16386:131;:::i;:::-;16378:139;;16105:419;;;:::o;16530:174::-;16670:26;16666:1;16658:6;16654:14;16647:50;16530:174;:::o;16710:366::-;16852:3;16873:67;16937:2;16932:3;16873:67;:::i;:::-;16866:74;;16949:93;17038:3;16949:93;:::i;:::-;17067:2;17062:3;17058:12;17051:19;;16710:366;;;:::o;17082:419::-;17248:4;17286:2;17275:9;17271:18;17263:26;;17335:9;17329:4;17325:20;17321:1;17310:9;17306:17;17299:47;17363:131;17489:4;17363:131;:::i;:::-;17355:139;;17082:419;;;:::o;17507:143::-;17564:5;17595:6;17589:13;17580:22;;17611:33;17638:5;17611:33;:::i;:::-;17507:143;;;;:::o;17656:351::-;17726:6;17775:2;17763:9;17754:7;17750:23;17746:32;17743:119;;;17781:79;;:::i;:::-;17743:119;17901:1;17926:64;17982:7;17973:6;17962:9;17958:22;17926:64;:::i;:::-;17916:74;;17872:128;17656:351;;;;:::o;18013:224::-;18153:34;18149:1;18141:6;18137:14;18130:58;18222:7;18217:2;18209:6;18205:15;18198:32;18013:224;:::o;18243:366::-;18385:3;18406:67;18470:2;18465:3;18406:67;:::i;:::-;18399:74;;18482:93;18571:3;18482:93;:::i;:::-;18600:2;18595:3;18591:12;18584:19;;18243:366;;;:::o;18615:419::-;18781:4;18819:2;18808:9;18804:18;18796:26;;18868:9;18862:4;18858:20;18854:1;18843:9;18839:17;18832:47;18896:131;19022:4;18896:131;:::i;:::-;18888:139;;18615:419;;;:::o;19040:148::-;19142:11;19179:3;19164:18;;19040:148;;;;:::o;19194:155::-;19334:7;19330:1;19322:6;19318:14;19311:31;19194:155;:::o;19355:400::-;19515:3;19536:84;19618:1;19613:3;19536:84;:::i;:::-;19529:91;;19629:93;19718:3;19629:93;:::i;:::-;19747:1;19742:3;19738:11;19731:18;;19355:400;;;:::o;19761:381::-;19946:3;19968:148;20112:3;19968:148;:::i;:::-;19961:155;;20133:3;20126:10;;19761:381;;;:::o;20148:390::-;20254:3;20282:39;20315:5;20282:39;:::i;:::-;20337:89;20419:6;20414:3;20337:89;:::i;:::-;20330:96;;20435:65;20493:6;20488:3;20481:4;20474:5;20470:16;20435:65;:::i;:::-;20525:6;20520:3;20516:16;20509:23;;20258:280;20148:390;;;;:::o;20544:275::-;20676:3;20698:95;20789:3;20780:6;20698:95;:::i;:::-;20691:102;;20810:3;20803:10;;20544:275;;;;:::o;20825:238::-;20965:34;20961:1;20953:6;20949:14;20942:58;21034:21;21029:2;21021:6;21017:15;21010:46;20825:238;:::o;21069:366::-;21211:3;21232:67;21296:2;21291:3;21232:67;:::i;:::-;21225:74;;21308:93;21397:3;21308:93;:::i;:::-;21426:2;21421:3;21417:12;21410:19;;21069:366;;;:::o;21441:419::-;21607:4;21645:2;21634:9;21630:18;21622:26;;21694:9;21688:4;21684:20;21680:1;21669:9;21665:17;21658:47;21722:131;21848:4;21722:131;:::i;:::-;21714:139;;21441:419;;;:::o;21866:223::-;22006:34;22002:1;21994:6;21990:14;21983:58;22075:6;22070:2;22062:6;22058:15;22051:31;21866:223;:::o;22095:366::-;22237:3;22258:67;22322:2;22317:3;22258:67;:::i;:::-;22251:74;;22334:93;22423:3;22334:93;:::i;:::-;22452:2;22447:3;22443:12;22436:19;;22095:366;;;:::o;22467:419::-;22633:4;22671:2;22660:9;22656:18;22648:26;;22720:9;22714:4;22710:20;22706:1;22695:9;22691:17;22684:47;22748:131;22874:4;22748:131;:::i;:::-;22740:139;;22467:419;;;:::o;22892:153::-;22945:6;22979:5;22973:12;22963:22;;23005:33;23031:6;23005:33;:::i;:::-;22995:43;;22892:153;;;:::o;23051:141::-;23100:4;23123:3;23115:11;;23146:3;23143:1;23136:14;23180:4;23177:1;23167:18;23159:26;;23051:141;;;:::o;23198:145::-;23251:4;23274:3;23266:11;;23297:3;23294:1;23287:14;23331:4;23328:1;23318:18;23310:26;;23198:145;;;:::o;23349:93::-;23386:6;23433:2;23428;23421:5;23417:14;23413:23;23403:33;;23349:93;;;:::o;23448:107::-;23492:8;23542:5;23536:4;23532:16;23511:37;;23448:107;;;;:::o;23561:393::-;23630:6;23680:1;23668:10;23664:18;23703:97;23733:66;23722:9;23703:97;:::i;:::-;23821:39;23851:8;23840:9;23821:39;:::i;:::-;23809:51;;23893:4;23889:9;23882:5;23878:21;23869:30;;23942:4;23932:8;23928:19;23921:5;23918:30;23908:40;;23637:317;;23561:393;;;;;:::o;23960:142::-;24010:9;24043:53;24061:34;24070:24;24088:5;24070:24;:::i;:::-;24061:34;:::i;:::-;24043:53;:::i;:::-;24030:66;;23960:142;;;:::o;24108:75::-;24151:3;24172:5;24165:12;;24108:75;;;:::o;24189:269::-;24299:39;24330:7;24299:39;:::i;:::-;24360:91;24409:41;24433:16;24409:41;:::i;:::-;24401:6;24394:4;24388:11;24360:91;:::i;:::-;24354:4;24347:105;24265:193;24189:269;;;:::o;24464:73::-;24509:3;24464:73;:::o;24543:189::-;24620:32;;:::i;:::-;24661:65;24719:6;24711;24705:4;24661:65;:::i;:::-;24596:136;24543:189;;:::o;24738:186::-;24798:120;24815:3;24808:5;24805:14;24798:120;;;24869:39;24906:1;24899:5;24869:39;:::i;:::-;24842:1;24835:5;24831:13;24822:22;;24798:120;;;24738:186;;:::o;24930:543::-;25031:2;25026:3;25023:11;25020:446;;;25065:38;25097:5;25065:38;:::i;:::-;25149:29;25167:10;25149:29;:::i;:::-;25139:8;25135:44;25332:2;25320:10;25317:18;25314:49;;;25353:8;25338:23;;25314:49;25376:80;25432:22;25450:3;25432:22;:::i;:::-;25422:8;25418:37;25405:11;25376:80;:::i;:::-;25035:431;;25020:446;24930:543;;;:::o;25479:117::-;25533:8;25583:5;25577:4;25573:16;25552:37;;25479:117;;;;:::o;25602:169::-;25646:6;25679:51;25727:1;25723:6;25715:5;25712:1;25708:13;25679:51;:::i;:::-;25675:56;25760:4;25754;25750:15;25740:25;;25653:118;25602:169;;;;:::o;25776:295::-;25852:4;25998:29;26023:3;26017:4;25998:29;:::i;:::-;25990:37;;26060:3;26057:1;26053:11;26047:4;26044:21;26036:29;;25776:295;;;;:::o;26076:1463::-;26191:3;26185:4;26182:13;26179:26;;26198:5;;;;26179:26;26229:38;26263:3;26229:38;:::i;:::-;26332:18;26324:6;26321:30;26318:56;;;26354:18;;:::i;:::-;26318:56;26398:38;26430:4;26424:11;26398:38;:::i;:::-;26483:67;26543:6;26535;26529:4;26483:67;:::i;:::-;26577:1;26606:2;26598:6;26595:14;26623:1;26618:676;;;;27338:1;27355:6;27352:77;;;27404:9;27399:3;27395:19;27389:26;27380:35;;27352:77;27455:67;27515:6;27508:5;27455:67;:::i;:::-;27449:4;27442:81;27311:222;26588:945;;26618:676;26670:4;26666:9;26658:6;26654:22;26696:40;26732:3;26696:40;:::i;:::-;26689:47;;26763:37;26795:4;26763:37;:::i;:::-;26822:1;26836:207;26850:7;26847:1;26844:14;26836:207;;;26929:9;26924:3;26920:19;26914:26;26906:6;26899:42;26980:1;26972:6;26968:14;26958:24;;27027:1;27016:9;27012:17;26999:30;;26873:4;26870:1;26866:12;26861:17;;26836:207;;;27071:6;27062:7;27059:19;27056:179;;;27129:9;27124:3;27120:19;27114:26;27172:48;27214:4;27206:6;27202:17;27191:9;27172:48;:::i;:::-;27164:6;27157:64;27079:156;27056:179;27281:1;27277;27269:6;27265:14;27261:22;27255:4;27248:36;26625:669;;;26588:945;;26169:1370;;;26076:1463;;;:::o;27545:228::-;27685:34;27681:1;27673:6;27669:14;27662:58;27754:11;27749:2;27741:6;27737:15;27730:36;27545:228;:::o;27779:366::-;27921:3;27942:67;28006:2;28001:3;27942:67;:::i;:::-;27935:74;;28018:93;28107:3;28018:93;:::i;:::-;28136:2;28131:3;28127:12;28120:19;;27779:366;;;:::o;28151:419::-;28317:4;28355:2;28344:9;28340:18;28332:26;;28404:9;28398:4;28394:20;28390:1;28379:9;28375:17;28368:47;28432:131;28558:4;28432:131;:::i;:::-;28424:139;;28151:419;;;:::o;28576:169::-;28716:21;28712:1;28704:6;28700:14;28693:45;28576:169;:::o;28751:366::-;28893:3;28914:67;28978:2;28973:3;28914:67;:::i;:::-;28907:74;;28990:93;29079:3;28990:93;:::i;:::-;29108:2;29103:3;29099:12;29092:19;;28751:366;;;:::o;29123:419::-;29289:4;29327:2;29316:9;29312:18;29304:26;;29376:9;29370:4;29366:20;29362:1;29351:9;29347:17;29340:47;29404:131;29530:4;29404:131;:::i;:::-;29396:139;;29123:419;;;:::o;29548:229::-;29688:34;29684:1;29676:6;29672:14;29665:58;29757:12;29752:2;29744:6;29740:15;29733:37;29548:229;:::o;29783:366::-;29925:3;29946:67;30010:2;30005:3;29946:67;:::i;:::-;29939:74;;30022:93;30111:3;30022:93;:::i;:::-;30140:2;30135:3;30131:12;30124:19;;29783:366;;;:::o;30155:419::-;30321:4;30359:2;30348:9;30344:18;30336:26;;30408:9;30402:4;30398:20;30394:1;30383:9;30379:17;30372:47;30436:131;30562:4;30436:131;:::i;:::-;30428:139;;30155:419;;;:::o;30580:180::-;30628:77;30625:1;30618:88;30725:4;30722:1;30715:15;30749:4;30746:1;30739:15;30766:191;30806:3;30825:20;30843:1;30825:20;:::i;:::-;30820:25;;30859:20;30877:1;30859:20;:::i;:::-;30854:25;;30902:1;30899;30895:9;30888:16;;30923:3;30920:1;30917:10;30914:36;;;30930:18;;:::i;:::-;30914:36;30766:191;;;;:::o;30963:240::-;31103:34;31099:1;31091:6;31087:14;31080:58;31172:23;31167:2;31159:6;31155:15;31148:48;30963:240;:::o;31209:366::-;31351:3;31372:67;31436:2;31431:3;31372:67;:::i;:::-;31365:74;;31448:93;31537:3;31448:93;:::i;:::-;31566:2;31561:3;31557:12;31550:19;;31209:366;;;:::o;31581:419::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31834:9;31828:4;31824:20;31820:1;31809:9;31805:17;31798:47;31862:131;31988:4;31862:131;:::i;:::-;31854:139;;31581:419;;;:::o;32006:226::-;32146:34;32142:1;32134:6;32130:14;32123:58;32215:9;32210:2;32202:6;32198:15;32191:34;32006:226;:::o;32238:366::-;32380:3;32401:67;32465:2;32460:3;32401:67;:::i;:::-;32394:74;;32477:93;32566:3;32477:93;:::i;:::-;32595:2;32590:3;32586:12;32579:19;;32238:366;;;:::o;32610:419::-;32776:4;32814:2;32803:9;32799:18;32791:26;;32863:9;32857:4;32853:20;32849:1;32838:9;32834:17;32827:47;32891:131;33017:4;32891:131;:::i;:::-;32883:139;;32610:419;;;:::o;33035:230::-;33175:34;33171:1;33163:6;33159:14;33152:58;33244:13;33239:2;33231:6;33227:15;33220:38;33035:230;:::o;33271:366::-;33413:3;33434:67;33498:2;33493:3;33434:67;:::i;:::-;33427:74;;33510:93;33599:3;33510:93;:::i;:::-;33628:2;33623:3;33619:12;33612:19;;33271:366;;;:::o;33643:419::-;33809:4;33847:2;33836:9;33832:18;33824:26;;33896:9;33890:4;33886:20;33882:1;33871:9;33867:17;33860:47;33924:131;34050:4;33924:131;:::i;:::-;33916:139;;33643:419;;;:::o;34068:233::-;34107:3;34130:24;34148:5;34130:24;:::i;:::-;34121:33;;34176:66;34169:5;34166:77;34163:103;;34246:18;;:::i;:::-;34163:103;34293:1;34286:5;34282:13;34275:20;;34068:233;;;:::o;34307:173::-;34447:25;34443:1;34435:6;34431:14;34424:49;34307:173;:::o;34486:366::-;34628:3;34649:67;34713:2;34708:3;34649:67;:::i;:::-;34642:74;;34725:93;34814:3;34725:93;:::i;:::-;34843:2;34838:3;34834:12;34827:19;;34486:366;;;:::o;34858:419::-;35024:4;35062:2;35051:9;35047:18;35039:26;;35111:9;35105:4;35101:20;35097:1;35086:9;35082:17;35075:47;35139:131;35265:4;35139:131;:::i;:::-;35131:139;;34858:419;;;:::o;35283:154::-;35423:6;35419:1;35411:6;35407:14;35400:30;35283:154;:::o;35443:400::-;35603:3;35624:84;35706:1;35701:3;35624:84;:::i;:::-;35617:91;;35717:93;35806:3;35717:93;:::i;:::-;35835:1;35830:3;35826:11;35819:18;;35443:400;;;:::o;35849:381::-;36034:3;36056:148;36200:3;36056:148;:::i;:::-;36049:155;;36221:3;36214:10;;35849:381;;;:::o;36236:230::-;36376:34;36372:1;36364:6;36360:14;36353:58;36445:13;36440:2;36432:6;36428:15;36421:38;36236:230;:::o;36472:366::-;36614:3;36635:67;36699:2;36694:3;36635:67;:::i;:::-;36628:74;;36711:93;36800:3;36711:93;:::i;:::-;36829:2;36824:3;36820:12;36813:19;;36472:366;;;:::o;36844:419::-;37010:4;37048:2;37037:9;37033:18;37025:26;;37097:9;37091:4;37087:20;37083:1;37072:9;37068:17;37061:47;37125:131;37251:4;37125:131;:::i;:::-;37117:139;;36844:419;;;:::o;37269:179::-;37409:31;37405:1;37397:6;37393:14;37386:55;37269:179;:::o;37454:366::-;37596:3;37617:67;37681:2;37676:3;37617:67;:::i;:::-;37610:74;;37693:93;37782:3;37693:93;:::i;:::-;37811:2;37806:3;37802:12;37795:19;;37454:366;;;:::o;37826:419::-;37992:4;38030:2;38019:9;38015:18;38007:26;;38079:9;38073:4;38069:20;38065:1;38054:9;38050:17;38043:47;38107:131;38233:4;38107:131;:::i;:::-;38099:139;;37826:419;;;:::o;38251:154::-;38391:6;38387:1;38379:6;38375:14;38368:30;38251:154;:::o;38411:400::-;38571:3;38592:84;38674:1;38669:3;38592:84;:::i;:::-;38585:91;;38685:93;38774:3;38685:93;:::i;:::-;38803:1;38798:3;38794:11;38787:18;;38411:400;;;:::o;38817:381::-;39002:3;39024:148;39168:3;39024:148;:::i;:::-;39017:155;;39189:3;39182:10;;38817:381;;;:::o;39204:238::-;39344:34;39340:1;39332:6;39328:14;39321:58;39413:21;39408:2;39400:6;39396:15;39389:46;39204:238;:::o;39448:366::-;39590:3;39611:67;39675:2;39670:3;39611:67;:::i;:::-;39604:74;;39687:93;39776:3;39687:93;:::i;:::-;39805:2;39800:3;39796:12;39789:19;;39448:366;;;:::o;39820:419::-;39986:4;40024:2;40013:9;40009:18;40001:26;;40073:9;40067:4;40063:20;40059:1;40048:9;40044:17;40037:47;40101:131;40227:4;40101:131;:::i;:::-;40093:139;;39820:419;;;:::o;40245:224::-;40385:34;40381:1;40373:6;40369:14;40362:58;40454:7;40449:2;40441:6;40437:15;40430:32;40245:224;:::o;40475:366::-;40617:3;40638:67;40702:2;40697:3;40638:67;:::i;:::-;40631:74;;40714:93;40803:3;40714:93;:::i;:::-;40832:2;40827:3;40823:12;40816:19;;40475:366;;;:::o;40847:419::-;41013:4;41051:2;41040:9;41036:18;41028:26;;41100:9;41094:4;41090:20;41086:1;41075:9;41071:17;41064:47;41128:131;41254:4;41128:131;:::i;:::-;41120:139;;40847:419;;;:::o;41272:231::-;41412:34;41408:1;41400:6;41396:14;41389:58;41481:14;41476:2;41468:6;41464:15;41457:39;41272:231;:::o;41509:366::-;41651:3;41672:67;41736:2;41731:3;41672:67;:::i;:::-;41665:74;;41748:93;41837:3;41748:93;:::i;:::-;41866:2;41861:3;41857:12;41850:19;;41509:366;;;:::o;41881:419::-;42047:4;42085:2;42074:9;42070:18;42062:26;;42134:9;42128:4;42124:20;42120:1;42109:9;42105:17;42098:47;42162:131;42288:4;42162:131;:::i;:::-;42154:139;;41881:419;;;:::o;42306:410::-;42346:7;42369:20;42387:1;42369:20;:::i;:::-;42364:25;;42403:20;42421:1;42403:20;:::i;:::-;42398:25;;42458:1;42455;42451:9;42480:30;42498:11;42480:30;:::i;:::-;42469:41;;42659:1;42650:7;42646:15;42643:1;42640:22;42620:1;42613:9;42593:83;42570:139;;42689:18;;:::i;:::-;42570:139;42354:362;42306:410;;;;:::o;42722:232::-;42862:34;42858:1;42850:6;42846:14;42839:58;42931:15;42926:2;42918:6;42914:15;42907:40;42722:232;:::o;42960:366::-;43102:3;43123:67;43187:2;43182:3;43123:67;:::i;:::-;43116:74;;43199:93;43288:3;43199:93;:::i;:::-;43317:2;43312:3;43308:12;43301:19;;42960:366;;;:::o;43332:419::-;43498:4;43536:2;43525:9;43521:18;43513:26;;43585:9;43579:4;43575:20;43571:1;43560:9;43556:17;43549:47;43613:131;43739:4;43613:131;:::i;:::-;43605:139;;43332:419;;;:::o;43757:1395::-;43874:37;43907:3;43874:37;:::i;:::-;43976:18;43968:6;43965:30;43962:56;;;43998:18;;:::i;:::-;43962:56;44042:38;44074:4;44068:11;44042:38;:::i;:::-;44127:67;44187:6;44179;44173:4;44127:67;:::i;:::-;44221:1;44245:4;44232:17;;44277:2;44269:6;44266:14;44294:1;44289:618;;;;44951:1;44968:6;44965:77;;;45017:9;45012:3;45008:19;45002:26;44993:35;;44965:77;45068:67;45128:6;45121:5;45068:67;:::i;:::-;45062:4;45055:81;44924:222;44259:887;;44289:618;44341:4;44337:9;44329:6;44325:22;44375:37;44407:4;44375:37;:::i;:::-;44434:1;44448:208;44462:7;44459:1;44456:14;44448:208;;;44541:9;44536:3;44532:19;44526:26;44518:6;44511:42;44592:1;44584:6;44580:14;44570:24;;44639:2;44628:9;44624:18;44611:31;;44485:4;44482:1;44478:12;44473:17;;44448:208;;;44684:6;44675:7;44672:19;44669:179;;;44742:9;44737:3;44733:19;44727:26;44785:48;44827:4;44819:6;44815:17;44804:9;44785:48;:::i;:::-;44777:6;44770:64;44692:156;44669:179;44894:1;44890;44882:6;44878:14;44874:22;44868:4;44861:36;44296:611;;;44259:887;;43849:1303;;;43757:1395;;:::o;45158:435::-;45338:3;45360:95;45451:3;45442:6;45360:95;:::i;:::-;45353:102;;45472:95;45563:3;45554:6;45472:95;:::i;:::-;45465:102;;45584:3;45577:10;;45158:435;;;;;:::o;45599:225::-;45739:34;45735:1;45727:6;45723:14;45716:58;45808:8;45803:2;45795:6;45791:15;45784:33;45599:225;:::o;45830:366::-;45972:3;45993:67;46057:2;46052:3;45993:67;:::i;:::-;45986:74;;46069:93;46158:3;46069:93;:::i;:::-;46187:2;46182:3;46178:12;46171:19;;45830:366;;;:::o;46202:419::-;46368:4;46406:2;46395:9;46391:18;46383:26;;46455:9;46449:4;46445:20;46441:1;46430:9;46426:17;46419:47;46483:131;46609:4;46483:131;:::i;:::-;46475:139;;46202:419;;;:::o;46627:332::-;46748:4;46786:2;46775:9;46771:18;46763:26;;46799:71;46867:1;46856:9;46852:17;46843:6;46799:71;:::i;:::-;46880:72;46948:2;46937:9;46933:18;46924:6;46880:72;:::i;:::-;46627:332;;;;;:::o;46965:137::-;47019:5;47050:6;47044:13;47035:22;;47066:30;47090:5;47066:30;:::i;:::-;46965:137;;;;:::o;47108:345::-;47175:6;47224:2;47212:9;47203:7;47199:23;47195:32;47192:119;;;47230:79;;:::i;:::-;47192:119;47350:1;47375:61;47428:7;47419:6;47408:9;47404:22;47375:61;:::i;:::-;47365:71;;47321:125;47108:345;;;;:::o;47459:220::-;47599:34;47595:1;47587:6;47583:14;47576:58;47668:3;47663:2;47655:6;47651:15;47644:28;47459:220;:::o;47685:366::-;47827:3;47848:67;47912:2;47907:3;47848:67;:::i;:::-;47841:74;;47924:93;48013:3;47924:93;:::i;:::-;48042:2;48037:3;48033:12;48026:19;;47685:366;;;:::o;48057:419::-;48223:4;48261:2;48250:9;48246:18;48238:26;;48310:9;48304:4;48300:20;48296:1;48285:9;48281:17;48274:47;48338:131;48464:4;48338:131;:::i;:::-;48330:139;;48057:419;;;:::o;48482:249::-;48622:34;48618:1;48610:6;48606:14;48599:58;48691:32;48686:2;48678:6;48674:15;48667:57;48482:249;:::o;48737:366::-;48879:3;48900:67;48964:2;48959:3;48900:67;:::i;:::-;48893:74;;48976:93;49065:3;48976:93;:::i;:::-;49094:2;49089:3;49085:12;49078:19;;48737:366;;;:::o;49109:419::-;49275:4;49313:2;49302:9;49298:18;49290:26;;49362:9;49356:4;49352:20;49348:1;49337:9;49333:17;49326:47;49390:131;49516:4;49390:131;:::i;:::-;49382:139;;49109:419;;;:::o;49534:233::-;49674:34;49670:1;49662:6;49658:14;49651:58;49743:16;49738:2;49730:6;49726:15;49719:41;49534:233;:::o;49773:366::-;49915:3;49936:67;50000:2;49995:3;49936:67;:::i;:::-;49929:74;;50012:93;50101:3;50012:93;:::i;:::-;50130:2;50125:3;50121:12;50114:19;;49773:366;;;:::o;50145:419::-;50311:4;50349:2;50338:9;50334:18;50326:26;;50398:9;50392:4;50388:20;50384:1;50373:9;50369:17;50362:47;50426:131;50552:4;50426:131;:::i;:::-;50418:139;;50145:419;;;:::o;50570:182::-;50710:34;50706:1;50698:6;50694:14;50687:58;50570:182;:::o;50758:366::-;50900:3;50921:67;50985:2;50980:3;50921:67;:::i;:::-;50914:74;;50997:93;51086:3;50997:93;:::i;:::-;51115:2;51110:3;51106:12;51099:19;;50758:366;;;:::o;51130:419::-;51296:4;51334:2;51323:9;51319:18;51311:26;;51383:9;51377:4;51373:20;51369:1;51358:9;51354:17;51347:47;51411:131;51537:4;51411:131;:::i;:::-;51403:139;;51130:419;;;:::o;51555:85::-;51600:7;51629:5;51618:16;;51555:85;;;:::o;51646:158::-;51704:9;51737:61;51755:42;51764:32;51790:5;51764:32;:::i;:::-;51755:42;:::i;:::-;51737:61;:::i;:::-;51724:74;;51646:158;;;:::o;51810:147::-;51905:45;51944:5;51905:45;:::i;:::-;51900:3;51893:58;51810:147;;:::o;51963:348::-;52092:4;52130:2;52119:9;52115:18;52107:26;;52143:71;52211:1;52200:9;52196:17;52187:6;52143:71;:::i;:::-;52224:80;52300:2;52289:9;52285:18;52276:6;52224:80;:::i;:::-;51963:348;;;;;:::o;52317:143::-;52374:5;52405:6;52399:13;52390:22;;52421:33;52448:5;52421:33;:::i;:::-;52317:143;;;;:::o;52466:351::-;52536:6;52585:2;52573:9;52564:7;52560:23;52556:32;52553:119;;;52591:79;;:::i;:::-;52553:119;52711:1;52736:64;52792:7;52783:6;52772:9;52768:22;52736:64;:::i;:::-;52726:74;;52682:128;52466:351;;;;:::o;52823:332::-;52944:4;52982:2;52971:9;52967:18;52959:26;;52995:71;53063:1;53052:9;53048:17;53039:6;52995:71;:::i;:::-;53076:72;53144:2;53133:9;53129:18;53120:6;53076:72;:::i;:::-;52823:332;;;;;:::o;53161:180::-;53209:77;53206:1;53199:88;53306:4;53303:1;53296:15;53330:4;53327:1;53320:15;53347:185;53387:1;53404:20;53422:1;53404:20;:::i;:::-;53399:25;;53438:20;53456:1;53438:20;:::i;:::-;53433:25;;53477:1;53467:35;;53482:18;;:::i;:::-;53467:35;53524:1;53521;53517:9;53512:14;;53347:185;;;;:::o;53538:194::-;53578:4;53598:20;53616:1;53598:20;:::i;:::-;53593:25;;53632:20;53650:1;53632:20;:::i;:::-;53627:25;;53676:1;53673;53669:9;53661:17;;53700:1;53694:4;53691:11;53688:37;;;53705:18;;:::i;:::-;53688:37;53538:194;;;;:::o;53738:176::-;53770:1;53787:20;53805:1;53787:20;:::i;:::-;53782:25;;53821:20;53839:1;53821:20;:::i;:::-;53816:25;;53860:1;53850:35;;53865:18;;:::i;:::-;53850:35;53906:1;53903;53899:9;53894:14;;53738:176;;;;:::o;53920:180::-;53968:77;53965:1;53958:88;54065:4;54062:1;54055:15;54089:4;54086:1;54079:15;54106:224;54246:34;54242:1;54234:6;54230:14;54223:58;54315:7;54310:2;54302:6;54298:15;54291:32;54106:224;:::o;54336:366::-;54478:3;54499:67;54563:2;54558:3;54499:67;:::i;:::-;54492:74;;54575:93;54664:3;54575:93;:::i;:::-;54693:2;54688:3;54684:12;54677:19;;54336:366;;;:::o;54708:419::-;54874:4;54912:2;54901:9;54897:18;54889:26;;54961:9;54955:4;54951:20;54947:1;54936:9;54932:17;54925:47;54989:131;55115:4;54989:131;:::i;:::-;54981:139;;54708:419;;;:::o;55133:223::-;55273:34;55269:1;55261:6;55257:14;55250:58;55342:6;55337:2;55329:6;55325:15;55318:31;55133:223;:::o;55362:366::-;55504:3;55525:67;55589:2;55584:3;55525:67;:::i;:::-;55518:74;;55601:93;55690:3;55601:93;:::i;:::-;55719:2;55714:3;55710:12;55703:19;;55362:366;;;:::o;55734:419::-;55900:4;55938:2;55927:9;55923:18;55915:26;;55987:9;55981:4;55977:20;55973:1;55962:9;55958:17;55951:47;56015:131;56141:4;56015:131;:::i;:::-;56007:139;;55734:419;;;:::o;56159:237::-;56299:34;56295:1;56287:6;56283:14;56276:58;56368:20;56363:2;56355:6;56351:15;56344:45;56159:237;:::o;56402:366::-;56544:3;56565:67;56629:2;56624:3;56565:67;:::i;:::-;56558:74;;56641:93;56730:3;56641:93;:::i;:::-;56759:2;56754:3;56750:12;56743:19;;56402:366;;;:::o;56774:419::-;56940:4;56978:2;56967:9;56963:18;56955:26;;57027:9;57021:4;57017:20;57013:1;57002:9;56998:17;56991:47;57055:131;57181:4;57055:131;:::i;:::-;57047:139;;56774:419;;;:::o;57199:175::-;57339:27;57335:1;57327:6;57323:14;57316:51;57199:175;:::o;57380:366::-;57522:3;57543:67;57607:2;57602:3;57543:67;:::i;:::-;57536:74;;57619:93;57708:3;57619:93;:::i;:::-;57737:2;57732:3;57728:12;57721:19;;57380:366;;;:::o;57752:419::-;57918:4;57956:2;57945:9;57941:18;57933:26;;58005:9;57999:4;57995:20;57991:1;57980:9;57976:17;57969:47;58033:131;58159:4;58033:131;:::i;:::-;58025:139;;57752:419;;;:::o;58177:182::-;58317:34;58313:1;58305:6;58301:14;58294:58;58177:182;:::o;58365:366::-;58507:3;58528:67;58592:2;58587:3;58528:67;:::i;:::-;58521:74;;58604:93;58693:3;58604:93;:::i;:::-;58722:2;58717:3;58713:12;58706:19;;58365:366;;;:::o;58737:419::-;58903:4;58941:2;58930:9;58926:18;58918:26;;58990:9;58984:4;58980:20;58976:1;58965:9;58961:17;58954:47;59018:131;59144:4;59018:131;:::i;:::-;59010:139;;58737:419;;;:::o;59162:178::-;59302:30;59298:1;59290:6;59286:14;59279:54;59162:178;:::o;59346:366::-;59488:3;59509:67;59573:2;59568:3;59509:67;:::i;:::-;59502:74;;59585:93;59674:3;59585:93;:::i;:::-;59703:2;59698:3;59694:12;59687:19;;59346:366;;;:::o;59718:419::-;59884:4;59922:2;59911:9;59907:18;59899:26;;59971:9;59965:4;59961:20;59957:1;59946:9;59942:17;59935:47;59999:131;60125:4;59999:131;:::i;:::-;59991:139;;59718:419;;;:::o;60143:98::-;60194:6;60228:5;60222:12;60212:22;;60143:98;;;:::o;60247:168::-;60330:11;60364:6;60359:3;60352:19;60404:4;60399:3;60395:14;60380:29;;60247:168;;;;:::o;60421:373::-;60507:3;60535:38;60567:5;60535:38;:::i;:::-;60589:70;60652:6;60647:3;60589:70;:::i;:::-;60582:77;;60668:65;60726:6;60721:3;60714:4;60707:5;60703:16;60668:65;:::i;:::-;60758:29;60780:6;60758:29;:::i;:::-;60753:3;60749:39;60742:46;;60511:283;60421:373;;;;:::o;60800:640::-;60995:4;61033:3;61022:9;61018:19;61010:27;;61047:71;61115:1;61104:9;61100:17;61091:6;61047:71;:::i;:::-;61128:72;61196:2;61185:9;61181:18;61172:6;61128:72;:::i;:::-;61210;61278:2;61267:9;61263:18;61254:6;61210:72;:::i;:::-;61329:9;61323:4;61319:20;61314:2;61303:9;61299:18;61292:48;61357:76;61428:4;61419:6;61357:76;:::i;:::-;61349:84;;60800:640;;;;;;;:::o;61446:141::-;61502:5;61533:6;61527:13;61518:22;;61549:32;61575:5;61549:32;:::i;:::-;61446:141;;;;:::o;61593:349::-;61662:6;61711:2;61699:9;61690:7;61686:23;61682:32;61679:119;;;61717:79;;:::i;:::-;61679:119;61837:1;61862:63;61917:7;61908:6;61897:9;61893:22;61862:63;:::i;:::-;61852:73;;61808:127;61593:349;;;;:::o
Swarm Source
ipfs://5bc57fd92e8b0e08816c81ea80b6a3e6cfbb1a100293b6fa84ad0f385aa46aad
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.