Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 335 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21147984 | 18 days ago | IN | 0 ETH | 0.00029457 | ||||
Set Approval For... | 16105693 | 725 days ago | IN | 0 ETH | 0.00055665 | ||||
Set Approval For... | 15570748 | 799 days ago | IN | 0 ETH | 0.00027026 | ||||
Set Approval For... | 15312569 | 840 days ago | IN | 0 ETH | 0.00058722 | ||||
Set Approval For... | 15303418 | 842 days ago | IN | 0 ETH | 0.00137789 | ||||
Set Approval For... | 15085723 | 875 days ago | IN | 0 ETH | 0.00189208 | ||||
Set Approval For... | 14994527 | 891 days ago | IN | 0 ETH | 0.00075886 | ||||
Set Approval For... | 14465911 | 976 days ago | IN | 0 ETH | 0.00093389 | ||||
Set Approval For... | 14238645 | 1012 days ago | IN | 0 ETH | 0.0022428 | ||||
Set Approval For... | 14216247 | 1015 days ago | IN | 0 ETH | 0.0028035 | ||||
Set Approval For... | 14214874 | 1015 days ago | IN | 0 ETH | 0.00189268 | ||||
Set Approval For... | 14214873 | 1015 days ago | IN | 0 ETH | 0.00315542 | ||||
Set Approval For... | 14214788 | 1015 days ago | IN | 0 ETH | 0.00238839 | ||||
Set Approval For... | 14214771 | 1015 days ago | IN | 0 ETH | 0.00270785 | ||||
Set Approval For... | 14214636 | 1015 days ago | IN | 0 ETH | 0.00328657 | ||||
Set Approval For... | 14214463 | 1015 days ago | IN | 0 ETH | 0.00365219 | ||||
Set Approval For... | 14214302 | 1015 days ago | IN | 0 ETH | 0.00473278 | ||||
Set Approval For... | 14214067 | 1015 days ago | IN | 0 ETH | 0.00782846 | ||||
Transfer From | 14214057 | 1015 days ago | IN | 0 ETH | 0.01685205 | ||||
Set Approval For... | 14213935 | 1015 days ago | IN | 0 ETH | 0.00951293 | ||||
Set Approval For... | 14213897 | 1015 days ago | IN | 0 ETH | 0.01106938 | ||||
Set Approval For... | 14213792 | 1015 days ago | IN | 0 ETH | 0.00981225 | ||||
Set Approval For... | 14213707 | 1015 days ago | IN | 0 ETH | 0.0052867 | ||||
Set Approval For... | 14213638 | 1015 days ago | IN | 0 ETH | 0.00281873 | ||||
Set Approval For... | 14213573 | 1015 days ago | IN | 0 ETH | 0.00583956 |
Loading...
Loading
Contract Name:
caitlin_dao
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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: contracts/ERC721A.sol // Creators: locationtba.eth, 2pmflow.eth pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > currentIndex - 1) { endIndex = currentIndex - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/cait_dao.sol pragma solidity ^0.8.0; contract caitlin_dao is ERC721A, Ownable { uint256 public NFT_PRICE = 0.02 ether; uint256 public MAX_SUPPLY = 2222; uint256 public MAX_MINTS = 10; uint256 public MAX_MINTS_RESERVED = 5; uint256 public freeTokens = 555; string public projName = "SupCaitlinDAO"; string public projSym = "CDAO"; bool public DROP_ACTIVE = false; string public baseURI = "https://ipfs.io/ipfs/QmYLzM4uvqx3r8mA1VuaAKuZkSdXp2gB77mh5xt3vYxRWo/"; mapping(address => uint) addressToReservedMints; constructor() ERC721A(projName, projSym, MAX_MINTS, MAX_SUPPLY) {} function mint(uint256 numTokens) public payable { require(DROP_ACTIVE, "Sale not started"); require( numTokens > 0 && numTokens <= MAX_MINTS, "Must mint between 1 and 10 tokens" ); require(totalSupply() + numTokens <= MAX_SUPPLY, "Sold Out"); require( msg.value >= NFT_PRICE * numTokens, "Amount of ether sent is not enough" ); _safeMint(msg.sender, numTokens); } function freeMint(uint256 numTokens) public { require(DROP_ACTIVE, "Sale not started"); require( numTokens > 0 && numTokens <= MAX_MINTS_RESERVED, "Must mint between 1 and 5 tokens" ); require( addressToReservedMints[msg.sender] + numTokens <= MAX_MINTS_RESERVED, "Only 5 reserved mints per wallet" ); require(totalSupply() + numTokens <= MAX_SUPPLY, "Sold Out"); require( totalSupply() + numTokens <= freeTokens, "There are no reserved mints left" ); addressToReservedMints[msg.sender] += numTokens; _safeMint(msg.sender, numTokens); } function flipDropState() public onlyOwner { DROP_ACTIVE = !DROP_ACTIVE; } // function setBaseURI(string memory newBaseURI) public onlyOwner { // baseURI = newBaseURI; // } // function setPrice(uint256 newPrice) public onlyOwner { // NFT_PRICE = newPrice; // } // function setMaxMints(uint256 newMax) public onlyOwner { // MAX_MINTS = newMax; // } // function setSupply(uint256 newSupply) public onlyOwner { // MAX_SUPPLY = newSupply; // } // function setFreeTokens(uint256 newReserve) public onlyOwner { // freeTokens = newReserve; // } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function reservedMintedBy() external view returns (uint256) { return addressToReservedMints[msg.sender]; } function withdraw() public onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DROP_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINTS_RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipDropState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projSym","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedMintedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405260008055600060075566470de4df8200006009556108ae600a55600a600b556005600c5561022b600d556040518060400160405280600d81526020017f537570436169746c696e44414f00000000000000000000000000000000000000815250600e90805190602001906200007b92919062000417565b506040518060400160405280600481526020017f4344414f00000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c992919062000417565b506000601060006101000a81548160ff02191690831515021790555060405180608001604052806044815260200162004d9960449139601190805190602001906200011692919062000417565b503480156200012457600080fd5b50600e805462000134906200056a565b80601f016020809104026020016040519081016040528092919081815260200182805462000162906200056a565b8015620001b35780601f106200018757610100808354040283529160200191620001b3565b820191906000526020600020905b8154815290600101906020018083116200019557829003601f168201915b5050505050600f8054620001c7906200056a565b80601f0160208091040260200160405190810160405280929190818152602001828054620001f5906200056a565b8015620002465780601f106200021a5761010080835404028352916020019162000246565b820191906000526020600020905b8154815290600101906020018083116200022857829003601f168201915b5050505050600b54600a546000811162000297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028e9062000537565b60405180910390fd5b60008211620002dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d49062000515565b60405180910390fd5b8360019080519060200190620002f592919062000417565b5082600290805190602001906200030e92919062000417565b508160a0818152505080608081815250505050505062000343620003376200034960201b60201c565b6200035160201b60201c565b6200066d565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000425906200056a565b90600052602060002090601f01602090048101928262000449576000855562000495565b82601f106200046457805160ff191683800117855562000495565b8280016001018555821562000495579182015b828111156200049457825182559160200191906001019062000477565b5b509050620004a49190620004a8565b5090565b5b80821115620004c3576000816000905550600101620004a9565b5090565b6000620004d660278362000559565b9150620004e382620005cf565b604082019050919050565b6000620004fd602e8362000559565b91506200050a826200061e565b604082019050919050565b600060208201905081810360008301526200053081620004c7565b9050919050565b600060208201905081810360008301526200055281620004ee565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200058357607f821691505b602082108114156200059a5762000599620005a0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516146fb6200069e600039600081816122a0015281816122c9015261298a0152600050506146fb6000f3fe6080604052600436106101f95760003560e01c80637c928fe91161010d578063b88d4fde116100a0578063da241d061161006f578063da241d0614610704578063e03c69e81461072f578063e985e9c51461075a578063f2fde38b14610797578063f7cd09c7146107c0576101f9565b8063b88d4fde14610648578063c87b56dd14610671578063cce132d1146106ae578063d7224ba0146106d9576101f9565b8063a0712d68116100dc578063a0712d68146105ad578063a22cb465146105c9578063a7b8cd4d146105f2578063b875e2ce1461061d576101f9565b80637c928fe9146105175780638da5cb5b1461054057806395d89b411461056b57806396f8f6dd14610596576101f9565b80633ccfd60b11610190578063676dd5631161015f578063676dd563146104425780636c0360eb1461046d5780636fe8f9c51461049857806370a08231146104c3578063715018a614610500576101f9565b80633ccfd60b1461038857806342842e0e1461039f5780634f6ccce7146103c85780636352211e14610405576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c591461032057806332cb6b0c1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613091565b6107eb565b6040516102329190613652565b60405180910390f35b34801561024757600080fd5b50610250610935565b60405161025d919061366d565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906130eb565b6109c7565b60405161029a91906135eb565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613051565b610a4c565b005b3480156102d857600080fd5b506102e1610b65565b6040516102ee91906139ef565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190612f3b565b610b6e565b005b34801561032c57600080fd5b5061034760048036038101906103429190613051565b610b7e565b60405161035491906139ef565b60405180910390f35b34801561036957600080fd5b50610372610d7c565b60405161037f91906139ef565b60405180910390f35b34801561039457600080fd5b5061039d610d82565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612f3b565b610e3e565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906130eb565b610e5e565b6040516103fc91906139ef565b60405180910390f35b34801561041157600080fd5b5061042c600480360381019061042791906130eb565b610eb1565b60405161043991906135eb565b60405180910390f35b34801561044e57600080fd5b50610457610ec7565b60405161046491906139ef565b60405180910390f35b34801561047957600080fd5b50610482610ecd565b60405161048f919061366d565b60405180910390f35b3480156104a457600080fd5b506104ad610f5b565b6040516104ba91906139ef565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190612ece565b610f61565b6040516104f791906139ef565b60405180910390f35b34801561050c57600080fd5b5061051561104a565b005b34801561052357600080fd5b5061053e600480360381019061053991906130eb565b6110d2565b005b34801561054c57600080fd5b50610555611312565b60405161056291906135eb565b60405180910390f35b34801561057757600080fd5b5061058061133c565b60405161058d919061366d565b60405180910390f35b3480156105a257600080fd5b506105ab6113ce565b005b6105c760048036038101906105c291906130eb565b611476565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613011565b6115ca565b005b3480156105fe57600080fd5b5061060761174b565b60405161061491906139ef565b60405180910390f35b34801561062957600080fd5b50610632611792565b60405161063f91906139ef565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612f8e565b611798565b005b34801561067d57600080fd5b50610698600480360381019061069391906130eb565b6117f4565b6040516106a5919061366d565b60405180910390f35b3480156106ba57600080fd5b506106c361189b565b6040516106d091906139ef565b60405180910390f35b3480156106e557600080fd5b506106ee6118a1565b6040516106fb91906139ef565b60405180910390f35b34801561071057600080fd5b506107196118a7565b604051610726919061366d565b60405180910390f35b34801561073b57600080fd5b50610744611935565b604051610751919061366d565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612efb565b6119c3565b60405161078e9190613652565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190612ece565b611a57565b005b3480156107cc57600080fd5b506107d5611b4f565b6040516107e29190613652565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092e575061092d82611b62565b5b9050919050565b60606001805461094490613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461097090613d2e565b80156109bd5780601f10610992576101008083540402835291602001916109bd565b820191906000526020600020905b8154815290600101906020018083116109a057829003601f168201915b5050505050905090565b60006109d282611bcc565b610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906139af565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5782610eb1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906138ef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae7611bd9565b73ffffffffffffffffffffffffffffffffffffffff161480610b165750610b1581610b10611bd9565b6119c3565b5b610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906137cf565b60405180910390fd5b610b60838383611be1565b505050565b60008054905090565b610b79838383611c93565b505050565b6000610b8983610f61565b8210610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc19061368f565b60405180910390fd5b6000610bd4610b65565b905060008060005b83811015610d3a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cce57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d265786841415610d17578195505050505050610d76565b8380610d2290613d91565b9450505b508080610d3290613d91565b915050610bdc565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d9061396f565b60405180910390fd5b92915050565b600a5481565b610d8a611bd9565b73ffffffffffffffffffffffffffffffffffffffff16610da8611312565b73ffffffffffffffffffffffffffffffffffffffff1614610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df59061384f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e3c57600080fd5b565b610e5983838360405180602001604052806000815250611798565b505050565b6000610e68610b65565b8210610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061372f565b60405180910390fd5b819050919050565b6000610ebc8261224c565b600001519050919050565b60095481565b60118054610eda90613d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0690613d2e565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b505050505081565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc99061380f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611052611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611070611312565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd9061384f565b60405180910390fd5b6110d0600061244f565b565b601060009054906101000a900460ff16611121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611118906137af565b60405180910390fd5b6000811180156111335750600c548111155b611172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611169906137ef565b60405180910390fd5b600c5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c09190613ae9565b1115611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061370f565b60405180910390fd5b600a548161120d610b65565b6112179190613ae9565b1115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f906136af565b60405180910390fd5b600d5481611264610b65565b61126e9190613ae9565b11156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a69061376f565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112fe9190613ae9565b9250508190555061130f3382612515565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461134b90613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461137790613d2e565b80156113c45780601f10611399576101008083540402835291602001916113c4565b820191906000526020600020905b8154815290600101906020018083116113a757829003601f168201915b5050505050905090565b6113d6611bd9565b73ffffffffffffffffffffffffffffffffffffffff166113f4611312565b73ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061384f565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff166114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906137af565b60405180910390fd5b6000811180156114d75750600b548111155b611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906138cf565b60405180910390fd5b600a5481611522610b65565b61152c9190613ae9565b111561156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906136af565b60405180910390fd5b8060095461157b9190613b70565b3410156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b49061378f565b60405180910390fd5b6115c73382612515565b50565b6115d2611bd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116379061388f565b60405180910390fd5b806006600061164d611bd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116fa611bd9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161173f9190613652565b60405180910390a35050565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600c5481565b6117a3848484611c93565b6117af84848484612533565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061390f565b60405180910390fd5b50505050565b60606117ff82611bcc565b61183e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118359061386f565b60405180910390fd5b60006118486126ca565b905060008151116118685760405180602001604052806000815250611893565b806118728461275c565b6040516020016118839291906135bc565b6040516020818303038152906040525b915050919050565b600b5481565b60075481565b600f80546118b490613d2e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e090613d2e565b801561192d5780601f106119025761010080835404028352916020019161192d565b820191906000526020600020905b81548152906001019060200180831161191057829003601f168201915b505050505081565b600e805461194290613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461196e90613d2e565b80156119bb5780601f10611990576101008083540402835291602001916119bb565b820191906000526020600020905b81548152906001019060200180831161199e57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5f611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611a7d611312565b73ffffffffffffffffffffffffffffffffffffffff1614611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca9061384f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906136cf565b60405180910390fd5b611b4c8161244f565b50565b601060009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c9e8261224c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cc5611bd9565b73ffffffffffffffffffffffffffffffffffffffff161480611d215750611cea611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611d09846109c7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d3d5750611d3c8260000151611d37611bd9565b6119c3565b5b905080611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906138af565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de89061382f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061374f565b60405180910390fd5b611e6e85858560016128bd565b611e7e6000848460000151611be1565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611eec9190613bca565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f909190613aa3565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120969190613ae9565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121dc5761210c81611bcc565b156121db576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461224486868660016128c3565b505050505050565b612254612dbb565b61225d82611bcc565b61229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906136ef565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106123005760017f0000000000000000000000000000000000000000000000000000000000000000846122f39190613bfe565b6122fd9190613ae9565b90505b60008390505b81811061240e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123fa5780935050505061244a565b50808061240690613d04565b915050612306565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061398f565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252f8282604051806020016040528060008152506128c9565b5050565b60006125548473ffffffffffffffffffffffffffffffffffffffff16612da8565b156126bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261257d611bd9565b8786866040518563ffffffff1660e01b815260040161259f9493929190613606565b602060405180830381600087803b1580156125b957600080fd5b505af19250505080156125ea57506040513d601f19601f820116820180604052508101906125e791906130be565b60015b61266d573d806000811461261a576040519150601f19603f3d011682016040523d82523d6000602084013e61261f565b606091505b50600081511415612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9061390f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126c2565b600190505b949350505050565b6060601180546126d990613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461270590613d2e565b80156127525780601f1061272757610100808354040283529160200191612752565b820191906000526020600020905b81548152906001019060200180831161273557829003601f168201915b5050505050905090565b606060008214156127a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128b8565b600082905060005b600082146127d65780806127bf90613d91565b915050600a826127cf9190613b3f565b91506127ac565b60008167ffffffffffffffff8111156127f2576127f1613ec7565b5b6040519080825280601f01601f1916602001820160405280156128245781602001600182028036833780820191505090505b5090505b600085146128b15760018261283d9190613bfe565b9150600a8561284c9190613dda565b60306128589190613ae9565b60f81b81838151811061286e5761286d613e98565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128aa9190613b3f565b9450612828565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561293f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129369061394f565b60405180910390fd5b61294881611bcc565b15612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f9061392f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906139cf565b60405180910390fd5b6129f860008583866128bd565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612af59190613aa3565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b1c9190613aa3565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612d8b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2b6000888488612533565b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d619061390f565b60405180910390fd5b8180612d7590613d91565b9250508080612d8390613d91565b915050612cba565b5080600081905550612da060008785886128c3565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000612e08612e0384613a2f565b613a0a565b905082815260208101848484011115612e2457612e23613efb565b5b612e2f848285613cc2565b509392505050565b600081359050612e4681614669565b92915050565b600081359050612e5b81614680565b92915050565b600081359050612e7081614697565b92915050565b600081519050612e8581614697565b92915050565b600082601f830112612ea057612e9f613ef6565b5b8135612eb0848260208601612df5565b91505092915050565b600081359050612ec8816146ae565b92915050565b600060208284031215612ee457612ee3613f05565b5b6000612ef284828501612e37565b91505092915050565b60008060408385031215612f1257612f11613f05565b5b6000612f2085828601612e37565b9250506020612f3185828601612e37565b9150509250929050565b600080600060608486031215612f5457612f53613f05565b5b6000612f6286828701612e37565b9350506020612f7386828701612e37565b9250506040612f8486828701612eb9565b9150509250925092565b60008060008060808587031215612fa857612fa7613f05565b5b6000612fb687828801612e37565b9450506020612fc787828801612e37565b9350506040612fd887828801612eb9565b925050606085013567ffffffffffffffff811115612ff957612ff8613f00565b5b61300587828801612e8b565b91505092959194509250565b6000806040838503121561302857613027613f05565b5b600061303685828601612e37565b925050602061304785828601612e4c565b9150509250929050565b6000806040838503121561306857613067613f05565b5b600061307685828601612e37565b925050602061308785828601612eb9565b9150509250929050565b6000602082840312156130a7576130a6613f05565b5b60006130b584828501612e61565b91505092915050565b6000602082840312156130d4576130d3613f05565b5b60006130e284828501612e76565b91505092915050565b60006020828403121561310157613100613f05565b5b600061310f84828501612eb9565b91505092915050565b61312181613c32565b82525050565b61313081613c44565b82525050565b600061314182613a60565b61314b8185613a76565b935061315b818560208601613cd1565b61316481613f0a565b840191505092915050565b600061317a82613a6b565b6131848185613a87565b9350613194818560208601613cd1565b61319d81613f0a565b840191505092915050565b60006131b382613a6b565b6131bd8185613a98565b93506131cd818560208601613cd1565b80840191505092915050565b60006131e6602283613a87565b91506131f182613f1b565b604082019050919050565b6000613209600883613a87565b915061321482613f6a565b602082019050919050565b600061322c602683613a87565b915061323782613f93565b604082019050919050565b600061324f602a83613a87565b915061325a82613fe2565b604082019050919050565b6000613272602083613a87565b915061327d82614031565b602082019050919050565b6000613295602383613a87565b91506132a08261405a565b604082019050919050565b60006132b8602583613a87565b91506132c3826140a9565b604082019050919050565b60006132db602083613a87565b91506132e6826140f8565b602082019050919050565b60006132fe602283613a87565b915061330982614121565b604082019050919050565b6000613321601083613a87565b915061332c82614170565b602082019050919050565b6000613344603983613a87565b915061334f82614199565b604082019050919050565b6000613367602083613a87565b9150613372826141e8565b602082019050919050565b600061338a602b83613a87565b915061339582614211565b604082019050919050565b60006133ad602683613a87565b91506133b882614260565b604082019050919050565b60006133d0600583613a98565b91506133db826142af565b600582019050919050565b60006133f3602083613a87565b91506133fe826142d8565b602082019050919050565b6000613416602f83613a87565b915061342182614301565b604082019050919050565b6000613439601a83613a87565b915061344482614350565b602082019050919050565b600061345c603283613a87565b915061346782614379565b604082019050919050565b600061347f602183613a87565b915061348a826143c8565b604082019050919050565b60006134a2602283613a87565b91506134ad82614417565b604082019050919050565b60006134c5603383613a87565b91506134d082614466565b604082019050919050565b60006134e8601d83613a87565b91506134f3826144b5565b602082019050919050565b600061350b602183613a87565b9150613516826144de565b604082019050919050565b600061352e602e83613a87565b91506135398261452d565b604082019050919050565b6000613551602f83613a87565b915061355c8261457c565b604082019050919050565b6000613574602d83613a87565b915061357f826145cb565b604082019050919050565b6000613597602283613a87565b91506135a28261461a565b604082019050919050565b6135b681613cb8565b82525050565b60006135c882856131a8565b91506135d482846131a8565b91506135df826133c3565b91508190509392505050565b60006020820190506136006000830184613118565b92915050565b600060808201905061361b6000830187613118565b6136286020830186613118565b61363560408301856135ad565b81810360608301526136478184613136565b905095945050505050565b60006020820190506136676000830184613127565b92915050565b60006020820190508181036000830152613687818461316f565b905092915050565b600060208201905081810360008301526136a8816131d9565b9050919050565b600060208201905081810360008301526136c8816131fc565b9050919050565b600060208201905081810360008301526136e88161321f565b9050919050565b6000602082019050818103600083015261370881613242565b9050919050565b6000602082019050818103600083015261372881613265565b9050919050565b6000602082019050818103600083015261374881613288565b9050919050565b60006020820190508181036000830152613768816132ab565b9050919050565b60006020820190508181036000830152613788816132ce565b9050919050565b600060208201905081810360008301526137a8816132f1565b9050919050565b600060208201905081810360008301526137c881613314565b9050919050565b600060208201905081810360008301526137e881613337565b9050919050565b600060208201905081810360008301526138088161335a565b9050919050565b600060208201905081810360008301526138288161337d565b9050919050565b60006020820190508181036000830152613848816133a0565b9050919050565b60006020820190508181036000830152613868816133e6565b9050919050565b6000602082019050818103600083015261388881613409565b9050919050565b600060208201905081810360008301526138a88161342c565b9050919050565b600060208201905081810360008301526138c88161344f565b9050919050565b600060208201905081810360008301526138e881613472565b9050919050565b6000602082019050818103600083015261390881613495565b9050919050565b60006020820190508181036000830152613928816134b8565b9050919050565b60006020820190508181036000830152613948816134db565b9050919050565b60006020820190508181036000830152613968816134fe565b9050919050565b6000602082019050818103600083015261398881613521565b9050919050565b600060208201905081810360008301526139a881613544565b9050919050565b600060208201905081810360008301526139c881613567565b9050919050565b600060208201905081810360008301526139e88161358a565b9050919050565b6000602082019050613a0460008301846135ad565b92915050565b6000613a14613a25565b9050613a208282613d60565b919050565b6000604051905090565b600067ffffffffffffffff821115613a4a57613a49613ec7565b5b613a5382613f0a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aae82613c7c565b9150613ab983613c7c565b9250826fffffffffffffffffffffffffffffffff03821115613ade57613add613e0b565b5b828201905092915050565b6000613af482613cb8565b9150613aff83613cb8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3457613b33613e0b565b5b828201905092915050565b6000613b4a82613cb8565b9150613b5583613cb8565b925082613b6557613b64613e3a565b5b828204905092915050565b6000613b7b82613cb8565b9150613b8683613cb8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bbf57613bbe613e0b565b5b828202905092915050565b6000613bd582613c7c565b9150613be083613c7c565b925082821015613bf357613bf2613e0b565b5b828203905092915050565b6000613c0982613cb8565b9150613c1483613cb8565b925082821015613c2757613c26613e0b565b5b828203905092915050565b6000613c3d82613c98565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cef578082015181840152602081019050613cd4565b83811115613cfe576000848401525b50505050565b6000613d0f82613cb8565b91506000821415613d2357613d22613e0b565b5b600182039050919050565b60006002820490506001821680613d4657607f821691505b60208210811415613d5a57613d59613e69565b5b50919050565b613d6982613f0a565b810181811067ffffffffffffffff82111715613d8857613d87613ec7565b5b80604052505050565b6000613d9c82613cb8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dcf57613dce613e0b565b5b600182019050919050565b6000613de582613cb8565b9150613df083613cb8565b925082613e0057613dff613e3a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4f6e6c792035207265736572766564206d696e7473207065722077616c6c6574600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f207265736572766564206d696e7473206c656674600082015250565b7f416d6f756e74206f662065746865722073656e74206973206e6f7420656e6f7560008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d757374206d696e74206265747765656e203120616e64203520746f6b656e73600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d757374206d696e74206265747765656e203120616e6420313020746f6b656e60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61467281613c32565b811461467d57600080fd5b50565b61468981613c44565b811461469457600080fd5b50565b6146a081613c50565b81146146ab57600080fd5b50565b6146b781613cb8565b81146146c257600080fd5b5056fea26469706673582212200b51b114d45b04dfb7031fc435bb3dd2b303ed1fa34aed7ce8720e84b455b60b64736f6c6343000807003368747470733a2f2f697066732e696f2f697066732f516d594c7a4d34757671783372386d4131567561414b755a6b5364587032674237376d683578743376597852576f2f
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80637c928fe91161010d578063b88d4fde116100a0578063da241d061161006f578063da241d0614610704578063e03c69e81461072f578063e985e9c51461075a578063f2fde38b14610797578063f7cd09c7146107c0576101f9565b8063b88d4fde14610648578063c87b56dd14610671578063cce132d1146106ae578063d7224ba0146106d9576101f9565b8063a0712d68116100dc578063a0712d68146105ad578063a22cb465146105c9578063a7b8cd4d146105f2578063b875e2ce1461061d576101f9565b80637c928fe9146105175780638da5cb5b1461054057806395d89b411461056b57806396f8f6dd14610596576101f9565b80633ccfd60b11610190578063676dd5631161015f578063676dd563146104425780636c0360eb1461046d5780636fe8f9c51461049857806370a08231146104c3578063715018a614610500576101f9565b80633ccfd60b1461038857806342842e0e1461039f5780634f6ccce7146103c85780636352211e14610405576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c591461032057806332cb6b0c1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613091565b6107eb565b6040516102329190613652565b60405180910390f35b34801561024757600080fd5b50610250610935565b60405161025d919061366d565b60405180910390f35b34801561027257600080fd5b5061028d600480360381019061028891906130eb565b6109c7565b60405161029a91906135eb565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613051565b610a4c565b005b3480156102d857600080fd5b506102e1610b65565b6040516102ee91906139ef565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190612f3b565b610b6e565b005b34801561032c57600080fd5b5061034760048036038101906103429190613051565b610b7e565b60405161035491906139ef565b60405180910390f35b34801561036957600080fd5b50610372610d7c565b60405161037f91906139ef565b60405180910390f35b34801561039457600080fd5b5061039d610d82565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612f3b565b610e3e565b005b3480156103d457600080fd5b506103ef60048036038101906103ea91906130eb565b610e5e565b6040516103fc91906139ef565b60405180910390f35b34801561041157600080fd5b5061042c600480360381019061042791906130eb565b610eb1565b60405161043991906135eb565b60405180910390f35b34801561044e57600080fd5b50610457610ec7565b60405161046491906139ef565b60405180910390f35b34801561047957600080fd5b50610482610ecd565b60405161048f919061366d565b60405180910390f35b3480156104a457600080fd5b506104ad610f5b565b6040516104ba91906139ef565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190612ece565b610f61565b6040516104f791906139ef565b60405180910390f35b34801561050c57600080fd5b5061051561104a565b005b34801561052357600080fd5b5061053e600480360381019061053991906130eb565b6110d2565b005b34801561054c57600080fd5b50610555611312565b60405161056291906135eb565b60405180910390f35b34801561057757600080fd5b5061058061133c565b60405161058d919061366d565b60405180910390f35b3480156105a257600080fd5b506105ab6113ce565b005b6105c760048036038101906105c291906130eb565b611476565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613011565b6115ca565b005b3480156105fe57600080fd5b5061060761174b565b60405161061491906139ef565b60405180910390f35b34801561062957600080fd5b50610632611792565b60405161063f91906139ef565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612f8e565b611798565b005b34801561067d57600080fd5b50610698600480360381019061069391906130eb565b6117f4565b6040516106a5919061366d565b60405180910390f35b3480156106ba57600080fd5b506106c361189b565b6040516106d091906139ef565b60405180910390f35b3480156106e557600080fd5b506106ee6118a1565b6040516106fb91906139ef565b60405180910390f35b34801561071057600080fd5b506107196118a7565b604051610726919061366d565b60405180910390f35b34801561073b57600080fd5b50610744611935565b604051610751919061366d565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612efb565b6119c3565b60405161078e9190613652565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190612ece565b611a57565b005b3480156107cc57600080fd5b506107d5611b4f565b6040516107e29190613652565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091e57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092e575061092d82611b62565b5b9050919050565b60606001805461094490613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461097090613d2e565b80156109bd5780601f10610992576101008083540402835291602001916109bd565b820191906000526020600020905b8154815290600101906020018083116109a057829003601f168201915b5050505050905090565b60006109d282611bcc565b610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906139af565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5782610eb1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906138ef565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae7611bd9565b73ffffffffffffffffffffffffffffffffffffffff161480610b165750610b1581610b10611bd9565b6119c3565b5b610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906137cf565b60405180910390fd5b610b60838383611be1565b505050565b60008054905090565b610b79838383611c93565b505050565b6000610b8983610f61565b8210610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc19061368f565b60405180910390fd5b6000610bd4610b65565b905060008060005b83811015610d3a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cce57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d265786841415610d17578195505050505050610d76565b8380610d2290613d91565b9450505b508080610d3290613d91565b915050610bdc565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d9061396f565b60405180910390fd5b92915050565b600a5481565b610d8a611bd9565b73ffffffffffffffffffffffffffffffffffffffff16610da8611312565b73ffffffffffffffffffffffffffffffffffffffff1614610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df59061384f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e3c57600080fd5b565b610e5983838360405180602001604052806000815250611798565b505050565b6000610e68610b65565b8210610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061372f565b60405180910390fd5b819050919050565b6000610ebc8261224c565b600001519050919050565b60095481565b60118054610eda90613d2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0690613d2e565b8015610f535780601f10610f2857610100808354040283529160200191610f53565b820191906000526020600020905b815481529060010190602001808311610f3657829003601f168201915b505050505081565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc99061380f565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611052611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611070611312565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd9061384f565b60405180910390fd5b6110d0600061244f565b565b601060009054906101000a900460ff16611121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611118906137af565b60405180910390fd5b6000811180156111335750600c548111155b611172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611169906137ef565b60405180910390fd5b600c5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c09190613ae9565b1115611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061370f565b60405180910390fd5b600a548161120d610b65565b6112179190613ae9565b1115611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f906136af565b60405180910390fd5b600d5481611264610b65565b61126e9190613ae9565b11156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a69061376f565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112fe9190613ae9565b9250508190555061130f3382612515565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461134b90613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461137790613d2e565b80156113c45780601f10611399576101008083540402835291602001916113c4565b820191906000526020600020905b8154815290600101906020018083116113a757829003601f168201915b5050505050905090565b6113d6611bd9565b73ffffffffffffffffffffffffffffffffffffffff166113f4611312565b73ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061384f565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b601060009054906101000a900460ff166114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906137af565b60405180910390fd5b6000811180156114d75750600b548111155b611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906138cf565b60405180910390fd5b600a5481611522610b65565b61152c9190613ae9565b111561156d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611564906136af565b60405180910390fd5b8060095461157b9190613b70565b3410156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b49061378f565b60405180910390fd5b6115c73382612515565b50565b6115d2611bd9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116379061388f565b60405180910390fd5b806006600061164d611bd9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116fa611bd9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161173f9190613652565b60405180910390a35050565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600c5481565b6117a3848484611c93565b6117af84848484612533565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061390f565b60405180910390fd5b50505050565b60606117ff82611bcc565b61183e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118359061386f565b60405180910390fd5b60006118486126ca565b905060008151116118685760405180602001604052806000815250611893565b806118728461275c565b6040516020016118839291906135bc565b6040516020818303038152906040525b915050919050565b600b5481565b60075481565b600f80546118b490613d2e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e090613d2e565b801561192d5780601f106119025761010080835404028352916020019161192d565b820191906000526020600020905b81548152906001019060200180831161191057829003601f168201915b505050505081565b600e805461194290613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461196e90613d2e565b80156119bb5780601f10611990576101008083540402835291602001916119bb565b820191906000526020600020905b81548152906001019060200180831161199e57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5f611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611a7d611312565b73ffffffffffffffffffffffffffffffffffffffff1614611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca9061384f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a906136cf565b60405180910390fd5b611b4c8161244f565b50565b601060009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611c9e8261224c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cc5611bd9565b73ffffffffffffffffffffffffffffffffffffffff161480611d215750611cea611bd9565b73ffffffffffffffffffffffffffffffffffffffff16611d09846109c7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d3d5750611d3c8260000151611d37611bd9565b6119c3565b5b905080611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906138af565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de89061382f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589061374f565b60405180910390fd5b611e6e85858560016128bd565b611e7e6000848460000151611be1565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611eec9190613bca565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f909190613aa3565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120969190613ae9565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121dc5761210c81611bcc565b156121db576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461224486868660016128c3565b505050505050565b612254612dbb565b61225d82611bcc565b61229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906136ef565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106123005760017f000000000000000000000000000000000000000000000000000000000000000a846122f39190613bfe565b6122fd9190613ae9565b90505b60008390505b81811061240e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123fa5780935050505061244a565b50808061240690613d04565b915050612306565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061398f565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61252f8282604051806020016040528060008152506128c9565b5050565b60006125548473ffffffffffffffffffffffffffffffffffffffff16612da8565b156126bd578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261257d611bd9565b8786866040518563ffffffff1660e01b815260040161259f9493929190613606565b602060405180830381600087803b1580156125b957600080fd5b505af19250505080156125ea57506040513d601f19601f820116820180604052508101906125e791906130be565b60015b61266d573d806000811461261a576040519150601f19603f3d011682016040523d82523d6000602084013e61261f565b606091505b50600081511415612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9061390f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126c2565b600190505b949350505050565b6060601180546126d990613d2e565b80601f016020809104026020016040519081016040528092919081815260200182805461270590613d2e565b80156127525780601f1061272757610100808354040283529160200191612752565b820191906000526020600020905b81548152906001019060200180831161273557829003601f168201915b5050505050905090565b606060008214156127a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128b8565b600082905060005b600082146127d65780806127bf90613d91565b915050600a826127cf9190613b3f565b91506127ac565b60008167ffffffffffffffff8111156127f2576127f1613ec7565b5b6040519080825280601f01601f1916602001820160405280156128245781602001600182028036833780820191505090505b5090505b600085146128b15760018261283d9190613bfe565b9150600a8561284c9190613dda565b60306128589190613ae9565b60f81b81838151811061286e5761286d613e98565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128aa9190613b3f565b9450612828565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561293f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129369061394f565b60405180910390fd5b61294881611bcc565b15612988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297f9061392f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8311156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906139cf565b60405180910390fd5b6129f860008583866128bd565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612af59190613aa3565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b1c9190613aa3565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612d8b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d2b6000888488612533565b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d619061390f565b60405180910390fd5b8180612d7590613d91565b9250508080612d8390613d91565b915050612cba565b5080600081905550612da060008785886128c3565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000612e08612e0384613a2f565b613a0a565b905082815260208101848484011115612e2457612e23613efb565b5b612e2f848285613cc2565b509392505050565b600081359050612e4681614669565b92915050565b600081359050612e5b81614680565b92915050565b600081359050612e7081614697565b92915050565b600081519050612e8581614697565b92915050565b600082601f830112612ea057612e9f613ef6565b5b8135612eb0848260208601612df5565b91505092915050565b600081359050612ec8816146ae565b92915050565b600060208284031215612ee457612ee3613f05565b5b6000612ef284828501612e37565b91505092915050565b60008060408385031215612f1257612f11613f05565b5b6000612f2085828601612e37565b9250506020612f3185828601612e37565b9150509250929050565b600080600060608486031215612f5457612f53613f05565b5b6000612f6286828701612e37565b9350506020612f7386828701612e37565b9250506040612f8486828701612eb9565b9150509250925092565b60008060008060808587031215612fa857612fa7613f05565b5b6000612fb687828801612e37565b9450506020612fc787828801612e37565b9350506040612fd887828801612eb9565b925050606085013567ffffffffffffffff811115612ff957612ff8613f00565b5b61300587828801612e8b565b91505092959194509250565b6000806040838503121561302857613027613f05565b5b600061303685828601612e37565b925050602061304785828601612e4c565b9150509250929050565b6000806040838503121561306857613067613f05565b5b600061307685828601612e37565b925050602061308785828601612eb9565b9150509250929050565b6000602082840312156130a7576130a6613f05565b5b60006130b584828501612e61565b91505092915050565b6000602082840312156130d4576130d3613f05565b5b60006130e284828501612e76565b91505092915050565b60006020828403121561310157613100613f05565b5b600061310f84828501612eb9565b91505092915050565b61312181613c32565b82525050565b61313081613c44565b82525050565b600061314182613a60565b61314b8185613a76565b935061315b818560208601613cd1565b61316481613f0a565b840191505092915050565b600061317a82613a6b565b6131848185613a87565b9350613194818560208601613cd1565b61319d81613f0a565b840191505092915050565b60006131b382613a6b565b6131bd8185613a98565b93506131cd818560208601613cd1565b80840191505092915050565b60006131e6602283613a87565b91506131f182613f1b565b604082019050919050565b6000613209600883613a87565b915061321482613f6a565b602082019050919050565b600061322c602683613a87565b915061323782613f93565b604082019050919050565b600061324f602a83613a87565b915061325a82613fe2565b604082019050919050565b6000613272602083613a87565b915061327d82614031565b602082019050919050565b6000613295602383613a87565b91506132a08261405a565b604082019050919050565b60006132b8602583613a87565b91506132c3826140a9565b604082019050919050565b60006132db602083613a87565b91506132e6826140f8565b602082019050919050565b60006132fe602283613a87565b915061330982614121565b604082019050919050565b6000613321601083613a87565b915061332c82614170565b602082019050919050565b6000613344603983613a87565b915061334f82614199565b604082019050919050565b6000613367602083613a87565b9150613372826141e8565b602082019050919050565b600061338a602b83613a87565b915061339582614211565b604082019050919050565b60006133ad602683613a87565b91506133b882614260565b604082019050919050565b60006133d0600583613a98565b91506133db826142af565b600582019050919050565b60006133f3602083613a87565b91506133fe826142d8565b602082019050919050565b6000613416602f83613a87565b915061342182614301565b604082019050919050565b6000613439601a83613a87565b915061344482614350565b602082019050919050565b600061345c603283613a87565b915061346782614379565b604082019050919050565b600061347f602183613a87565b915061348a826143c8565b604082019050919050565b60006134a2602283613a87565b91506134ad82614417565b604082019050919050565b60006134c5603383613a87565b91506134d082614466565b604082019050919050565b60006134e8601d83613a87565b91506134f3826144b5565b602082019050919050565b600061350b602183613a87565b9150613516826144de565b604082019050919050565b600061352e602e83613a87565b91506135398261452d565b604082019050919050565b6000613551602f83613a87565b915061355c8261457c565b604082019050919050565b6000613574602d83613a87565b915061357f826145cb565b604082019050919050565b6000613597602283613a87565b91506135a28261461a565b604082019050919050565b6135b681613cb8565b82525050565b60006135c882856131a8565b91506135d482846131a8565b91506135df826133c3565b91508190509392505050565b60006020820190506136006000830184613118565b92915050565b600060808201905061361b6000830187613118565b6136286020830186613118565b61363560408301856135ad565b81810360608301526136478184613136565b905095945050505050565b60006020820190506136676000830184613127565b92915050565b60006020820190508181036000830152613687818461316f565b905092915050565b600060208201905081810360008301526136a8816131d9565b9050919050565b600060208201905081810360008301526136c8816131fc565b9050919050565b600060208201905081810360008301526136e88161321f565b9050919050565b6000602082019050818103600083015261370881613242565b9050919050565b6000602082019050818103600083015261372881613265565b9050919050565b6000602082019050818103600083015261374881613288565b9050919050565b60006020820190508181036000830152613768816132ab565b9050919050565b60006020820190508181036000830152613788816132ce565b9050919050565b600060208201905081810360008301526137a8816132f1565b9050919050565b600060208201905081810360008301526137c881613314565b9050919050565b600060208201905081810360008301526137e881613337565b9050919050565b600060208201905081810360008301526138088161335a565b9050919050565b600060208201905081810360008301526138288161337d565b9050919050565b60006020820190508181036000830152613848816133a0565b9050919050565b60006020820190508181036000830152613868816133e6565b9050919050565b6000602082019050818103600083015261388881613409565b9050919050565b600060208201905081810360008301526138a88161342c565b9050919050565b600060208201905081810360008301526138c88161344f565b9050919050565b600060208201905081810360008301526138e881613472565b9050919050565b6000602082019050818103600083015261390881613495565b9050919050565b60006020820190508181036000830152613928816134b8565b9050919050565b60006020820190508181036000830152613948816134db565b9050919050565b60006020820190508181036000830152613968816134fe565b9050919050565b6000602082019050818103600083015261398881613521565b9050919050565b600060208201905081810360008301526139a881613544565b9050919050565b600060208201905081810360008301526139c881613567565b9050919050565b600060208201905081810360008301526139e88161358a565b9050919050565b6000602082019050613a0460008301846135ad565b92915050565b6000613a14613a25565b9050613a208282613d60565b919050565b6000604051905090565b600067ffffffffffffffff821115613a4a57613a49613ec7565b5b613a5382613f0a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aae82613c7c565b9150613ab983613c7c565b9250826fffffffffffffffffffffffffffffffff03821115613ade57613add613e0b565b5b828201905092915050565b6000613af482613cb8565b9150613aff83613cb8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3457613b33613e0b565b5b828201905092915050565b6000613b4a82613cb8565b9150613b5583613cb8565b925082613b6557613b64613e3a565b5b828204905092915050565b6000613b7b82613cb8565b9150613b8683613cb8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bbf57613bbe613e0b565b5b828202905092915050565b6000613bd582613c7c565b9150613be083613c7c565b925082821015613bf357613bf2613e0b565b5b828203905092915050565b6000613c0982613cb8565b9150613c1483613cb8565b925082821015613c2757613c26613e0b565b5b828203905092915050565b6000613c3d82613c98565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cef578082015181840152602081019050613cd4565b83811115613cfe576000848401525b50505050565b6000613d0f82613cb8565b91506000821415613d2357613d22613e0b565b5b600182039050919050565b60006002820490506001821680613d4657607f821691505b60208210811415613d5a57613d59613e69565b5b50919050565b613d6982613f0a565b810181811067ffffffffffffffff82111715613d8857613d87613ec7565b5b80604052505050565b6000613d9c82613cb8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dcf57613dce613e0b565b5b600182019050919050565b6000613de582613cb8565b9150613df083613cb8565b925082613e0057613dff613e3a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4f6e6c792035207265736572766564206d696e7473207065722077616c6c6574600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f207265736572766564206d696e7473206c656674600082015250565b7f416d6f756e74206f662065746865722073656e74206973206e6f7420656e6f7560008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d757374206d696e74206265747765656e203120616e64203520746f6b656e73600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d757374206d696e74206265747765656e203120616e6420313020746f6b656e60008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61467281613c32565b811461467d57600080fd5b50565b61468981613c44565b811461469457600080fd5b50565b6146a081613c50565b81146146ab57600080fd5b50565b6146b781613cb8565b81146146c257600080fd5b5056fea26469706673582212200b51b114d45b04dfb7031fc435bb3dd2b303ed1fa34aed7ce8720e84b455b60b64736f6c63430008070033
Deployed Bytecode Sourcemap
42139:2847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27310:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29036:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30570:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30133:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25874:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31420:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26502:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42230:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44871:112;;;;;;;;;;;;;:::i;:::-;;31625:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26037:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28859:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42186:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42513:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42349:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27736:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41248:103;;;;;;;;;;;;;:::i;:::-;;43241:711;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40597:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29191:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43960:87;;;;;;;;;;;;;:::i;:::-;;42748:485;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30838:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44743:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42305:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31845:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29352:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42269:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36176:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42434:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42387:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31175:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41506:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42473:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27310:370;27437:4;27482:25;27467:40;;;:11;:40;;;;:99;;;;27533:33;27518:48;;;:11;:48;;;;27467:99;:160;;;;27592:35;27577:50;;;:11;:50;;;;27467:160;:207;;;;27638:36;27662:11;27638:23;:36::i;:::-;27467:207;27453:221;;27310:370;;;:::o;29036:94::-;29090:13;29119:5;29112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29036:94;:::o;30570:204::-;30638:7;30662:16;30670:7;30662;:16::i;:::-;30654:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30744:15;:24;30760:7;30744:24;;;;;;;;;;;;;;;;;;;;;30737:31;;30570:204;;;:::o;30133:379::-;30202:13;30218:24;30234:7;30218:15;:24::i;:::-;30202:40;;30263:5;30257:11;;:2;:11;;;;30249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30348:5;30332:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30357:37;30374:5;30381:12;:10;:12::i;:::-;30357:16;:37::i;:::-;30332:62;30316:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30478:28;30487:2;30491:7;30500:5;30478:8;:28::i;:::-;30195:317;30133:379;;:::o;25874:94::-;25927:7;25950:12;;25943:19;;25874:94;:::o;31420:142::-;31528:28;31538:4;31544:2;31548:7;31528:9;:28::i;:::-;31420:142;;;:::o;26502:744::-;26611:7;26646:16;26656:5;26646:9;:16::i;:::-;26638:5;:24;26630:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26708:22;26733:13;:11;:13::i;:::-;26708:38;;26753:19;26783:25;26833:9;26828:350;26852:14;26848:1;:18;26828:350;;;26882:31;26916:11;:14;26928:1;26916:14;;;;;;;;;;;26882:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26969:1;26943:28;;:9;:14;;;:28;;;26939:89;;27004:9;:14;;;26984:34;;26939:89;27061:5;27040:26;;:17;:26;;;27036:135;;;27098:5;27083:11;:20;27079:59;;;27125:1;27118:8;;;;;;;;;27079:59;27148:13;;;;;:::i;:::-;;;;27036:135;26873:305;26868:3;;;;;:::i;:::-;;;;26828:350;;;;27184:56;;;;;;;;;;:::i;:::-;;;;;;;;26502:744;;;;;:::o;42230:32::-;;;;:::o;44871:112::-;40828:12;:10;:12::i;:::-;40817:23;;:7;:5;:7::i;:::-;:23;;;40809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44935:10:::1;44927:24;;:47;44952:21;44927:47;;;;;;;;;;;;;;;;;;;;;;;44919:56;;;::::0;::::1;;44871:112::o:0;31625:157::-;31737:39;31754:4;31760:2;31764:7;31737:39;;;;;;;;;;;;:16;:39::i;:::-;31625:157;;;:::o;26037:177::-;26104:7;26136:13;:11;:13::i;:::-;26128:5;:21;26120:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26203:5;26196:12;;26037:177;;;:::o;28859:118::-;28923:7;28946:20;28958:7;28946:11;:20::i;:::-;:25;;;28939:32;;28859:118;;;:::o;42186:37::-;;;;:::o;42513:94::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42349:31::-;;;;:::o;27736:211::-;27800:7;27841:1;27824:19;;:5;:19;;;;27816:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27913:12;:19;27926:5;27913:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27905:36;;27898:43;;27736:211;;;:::o;41248:103::-;40828:12;:10;:12::i;:::-;40817:23;;:7;:5;:7::i;:::-;:23;;;40809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41313:30:::1;41340:1;41313:18;:30::i;:::-;41248:103::o:0;43241:711::-;43304:11;;;;;;;;;;;43296:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;43381:1;43369:9;:13;:48;;;;;43399:18;;43386:9;:31;;43369:48;43347:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;43560:18;;43547:9;43510:22;:34;43533:10;43510:34;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:68;;43488:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;43686:10;;43673:9;43657:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;43649:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43771:10;;43758:9;43742:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;43720:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;43892:9;43854:22;:34;43877:10;43854:34;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;43912:32;43922:10;43934:9;43912;:32::i;:::-;43241:711;:::o;40597:87::-;40643:7;40670:6;;;;;;;;;;;40663:13;;40597:87;:::o;29191:98::-;29247:13;29276:7;29269:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29191:98;:::o;43960:87::-;40828:12;:10;:12::i;:::-;40817:23;;:7;:5;:7::i;:::-;:23;;;40809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44028:11:::1;;;;;;;;;;;44027:12;44013:11;;:26;;;;;;;;;;;;;;;;;;43960:87::o:0;42748:485::-;42815:11;;;;;;;;;;;42807:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42892:1;42880:9;:13;:39;;;;;42910:9;;42897;:22;;42880:39;42858:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;43028:10;;43015:9;42999:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;42991:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43109:9;43097;;:21;;;;:::i;:::-;43084:9;:34;;43062:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43193:32;43203:10;43215:9;43193;:32::i;:::-;42748:485;:::o;30838:274::-;30941:12;:10;:12::i;:::-;30929:24;;:8;:24;;;;30921:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31038:8;30993:18;:32;31012:12;:10;:12::i;:::-;30993:32;;;;;;;;;;;;;;;:42;31026:8;30993:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31087:8;31058:48;;31073:12;:10;:12::i;:::-;31058:48;;;31097:8;31058:48;;;;;;:::i;:::-;;;;;;;;30838:274;;:::o;44743:120::-;44794:7;44821:22;:34;44844:10;44821:34;;;;;;;;;;;;;;;;44814:41;;44743:120;:::o;42305:37::-;;;;:::o;31845:311::-;31982:28;31992:4;31998:2;32002:7;31982:9;:28::i;:::-;32033:48;32056:4;32062:2;32066:7;32075:5;32033:22;:48::i;:::-;32017:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;31845:311;;;;:::o;29352:403::-;29450:13;29491:16;29499:7;29491;:16::i;:::-;29475:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;29581:21;29605:10;:8;:10::i;:::-;29581:34;;29660:1;29642:7;29636:21;:25;:113;;;;;;;;;;;;;;;;;29697:7;29706:18;:7;:16;:18::i;:::-;29680:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29636:113;29622:127;;;29352:403;;;:::o;42269:29::-;;;;:::o;36176:43::-;;;;:::o;42434:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42387:40::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31175:186::-;31297:4;31320:18;:25;31339:5;31320:25;;;;;;;;;;;;;;;:35;31346:8;31320:35;;;;;;;;;;;;;;;;;;;;;;;;;31313:42;;31175:186;;;;:::o;41506:201::-;40828:12;:10;:12::i;:::-;40817:23;;:7;:5;:7::i;:::-;:23;;;40809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41615:1:::1;41595:22;;:8;:22;;;;41587:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41671:28;41690:8;41671:18;:28::i;:::-;41506:201:::0;:::o;42473:31::-;;;;;;;;;;;;;:::o;13121:157::-;13206:4;13245:25;13230:40;;;:11;:40;;;;13223:47;;13121:157;;;:::o;32395:105::-;32452:4;32482:12;;32472:7;:22;32465:29;;32395:105;;;:::o;23471:98::-;23524:7;23551:10;23544:17;;23471:98;:::o;35998:172::-;36122:2;36095:15;:24;36111:7;36095:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36156:7;36152:2;36136:28;;36145:5;36136:28;;;;;;;;;;;;35998:172;;;:::o;34363:1529::-;34460:35;34498:20;34510:7;34498:11;:20::i;:::-;34460:58;;34527:22;34569:13;:18;;;34553:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;34622:12;:10;:12::i;:::-;34598:36;;:20;34610:7;34598:11;:20::i;:::-;:36;;;34553:81;:142;;;;34645:50;34662:13;:18;;;34682:12;:10;:12::i;:::-;34645:16;:50::i;:::-;34553:142;34527:169;;34721:17;34705:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34853:4;34831:26;;:13;:18;;;:26;;;34815:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;34942:1;34928:16;;:2;:16;;;;34920:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34995:43;35017:4;35023:2;35027:7;35036:1;34995:21;:43::i;:::-;35095:49;35112:1;35116:7;35125:13;:18;;;35095:8;:49::i;:::-;35183:1;35153:12;:18;35166:4;35153:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35219:1;35191:12;:16;35204:2;35191:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35250:43;;;;;;;;35265:2;35250:43;;;;;;35276:15;35250:43;;;;;35227:11;:20;35239:7;35227:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35521:19;35553:1;35543:7;:11;;;;:::i;:::-;35521:33;;35606:1;35565:43;;:11;:24;35577:11;35565:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35561:236;;;35623:20;35631:11;35623:7;:20::i;:::-;35619:171;;;35683:97;;;;;;;;35710:13;:18;;;35683:97;;;;;;35741:13;:28;;;35683:97;;;;;35656:11;:24;35668:11;35656:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35619:171;35561:236;35829:7;35825:2;35810:27;;35819:4;35810:27;;;;;;;;;;;;35844:42;35865:4;35871:2;35875:7;35884:1;35844:20;:42::i;:::-;34453:1439;;;34363:1529;;;:::o;28199:606::-;28275:21;;:::i;:::-;28316:16;28324:7;28316;:16::i;:::-;28308:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28388:26;28436:12;28425:7;:23;28421:93;;28505:1;28490:12;28480:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28459:47;;28421:93;28527:12;28542:7;28527:22;;28522:212;28559:18;28551:4;:26;28522:212;;28596:31;28630:11;:17;28642:4;28630:17;;;;;;;;;;;28596:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28686:1;28660:28;;:9;:14;;;:28;;;28656:71;;28708:9;28701:16;;;;;;;28656:71;28587:147;28579:6;;;;;:::i;:::-;;;;28522:212;;;;28742:57;;;;;;;;;;:::i;:::-;;;;;;;;28199:606;;;;:::o;41867:191::-;41941:16;41960:6;;;;;;;;;;;41941:25;;41986:8;41977:6;;:17;;;;;;;;;;;;;;;;;;42041:8;42010:40;;42031:8;42010:40;;;;;;;;;;;;41930:128;41867:191;:::o;32506:98::-;32571:27;32581:2;32585:8;32571:27;;;;;;;;;;;;:9;:27::i;:::-;32506:98;;:::o;37709:690::-;37846:4;37863:15;:2;:13;;;:15::i;:::-;37859:535;;;37918:2;37902:36;;;37939:12;:10;:12::i;:::-;37953:4;37959:7;37968:5;37902:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37889:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38150:1;38133:6;:13;:18;38129:215;;;38166:61;;;;;;;;;;:::i;:::-;;;;;;;;38129:215;38312:6;38306:13;38297:6;38293:2;38289:15;38282:38;37889:464;38034:45;;;38024:55;;;:6;:55;;;;38017:62;;;;;37859:535;38382:4;38375:11;;37709:690;;;;;;;:::o;44623:108::-;44683:13;44716:7;44709:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44623:108;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;38861:141::-;;;;;:::o;39388:140::-;;;;;:::o;32859:1272::-;32964:20;32987:12;;32964:35;;33028:1;33014:16;;:2;:16;;;;33006:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33205:21;33213:12;33205:7;:21::i;:::-;33204:22;33196:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33287:12;33275:8;:24;;33267:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33347:61;33377:1;33381:2;33385:12;33399:8;33347:21;:61::i;:::-;33417:30;33450:12;:16;33463:2;33450:16;;;;;;;;;;;;;;;33417:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33492:119;;;;;;;;33542:8;33512:11;:19;;;:39;;;;:::i;:::-;33492:119;;;;;;33595:8;33560:11;:24;;;:44;;;;:::i;:::-;33492:119;;;;;33473:12;:16;33486:2;33473:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33646:43;;;;;;;;33661:2;33646:43;;;;;;33672:15;33646:43;;;;;33618:11;:25;33630:12;33618:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33698:20;33721:12;33698:35;;33747:9;33742:281;33766:8;33762:1;:12;33742:281;;;33820:12;33816:2;33795:38;;33812:1;33795:38;;;;;;;;;;;;33860:59;33891:1;33895:2;33899:12;33913:5;33860:22;:59::i;:::-;33842:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:14;;;;;:::i;:::-;;;;33776:3;;;;;:::i;:::-;;;;33742:281;;;;34046:12;34031;:27;;;;34065:60;34094:1;34098:2;34102:12;34116:8;34065:20;:60::i;:::-;32957:1174;;;32859:1272;;;:::o;2977:387::-;3037:4;3245:12;3312:7;3300:20;3292:28;;3355:1;3348:4;:8;3341:15;;;2977:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:365::-;7737:3;7758:66;7822:1;7817:3;7758:66;:::i;:::-;7751:73;;7833:93;7922:3;7833:93;:::i;:::-;7951:2;7946:3;7942:12;7935:19;;7595:365;;;:::o;7966:366::-;8108:3;8129:67;8193:2;8188:3;8129:67;:::i;:::-;8122:74;;8205:93;8294:3;8205:93;:::i;:::-;8323:2;8318:3;8314:12;8307:19;;7966:366;;;:::o;8338:::-;8480:3;8501:67;8565:2;8560:3;8501:67;:::i;:::-;8494:74;;8577:93;8666:3;8577:93;:::i;:::-;8695:2;8690:3;8686:12;8679:19;;8338:366;;;:::o;8710:::-;8852:3;8873:67;8937:2;8932:3;8873:67;:::i;:::-;8866:74;;8949:93;9038:3;8949:93;:::i;:::-;9067:2;9062:3;9058:12;9051:19;;8710:366;;;:::o;9082:::-;9224:3;9245:67;9309:2;9304:3;9245:67;:::i;:::-;9238:74;;9321:93;9410:3;9321:93;:::i;:::-;9439:2;9434:3;9430:12;9423:19;;9082:366;;;:::o;9454:::-;9596:3;9617:67;9681:2;9676:3;9617:67;:::i;:::-;9610:74;;9693:93;9782:3;9693:93;:::i;:::-;9811:2;9806:3;9802:12;9795:19;;9454:366;;;:::o;9826:::-;9968:3;9989:67;10053:2;10048:3;9989:67;:::i;:::-;9982:74;;10065:93;10154:3;10065:93;:::i;:::-;10183:2;10178:3;10174:12;10167:19;;9826:366;;;:::o;10198:::-;10340:3;10361:67;10425:2;10420:3;10361:67;:::i;:::-;10354:74;;10437:93;10526:3;10437:93;:::i;:::-;10555:2;10550:3;10546:12;10539:19;;10198:366;;;:::o;10570:::-;10712:3;10733:67;10797:2;10792:3;10733:67;:::i;:::-;10726:74;;10809:93;10898:3;10809:93;:::i;:::-;10927:2;10922:3;10918:12;10911:19;;10570:366;;;:::o;10942:::-;11084:3;11105:67;11169:2;11164:3;11105:67;:::i;:::-;11098:74;;11181:93;11270:3;11181:93;:::i;:::-;11299:2;11294:3;11290:12;11283:19;;10942:366;;;:::o;11314:::-;11456:3;11477:67;11541:2;11536:3;11477:67;:::i;:::-;11470:74;;11553:93;11642:3;11553:93;:::i;:::-;11671:2;11666:3;11662:12;11655:19;;11314:366;;;:::o;11686:::-;11828:3;11849:67;11913:2;11908:3;11849:67;:::i;:::-;11842:74;;11925:93;12014:3;11925:93;:::i;:::-;12043:2;12038:3;12034:12;12027:19;;11686:366;;;:::o;12058:::-;12200:3;12221:67;12285:2;12280:3;12221:67;:::i;:::-;12214:74;;12297:93;12386:3;12297:93;:::i;:::-;12415:2;12410:3;12406:12;12399:19;;12058:366;;;:::o;12430:400::-;12590:3;12611:84;12693:1;12688:3;12611:84;:::i;:::-;12604:91;;12704:93;12793:3;12704:93;:::i;:::-;12822:1;12817:3;12813:11;12806:18;;12430:400;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:::-;13722:3;13743:67;13807:2;13802:3;13743:67;:::i;:::-;13736:74;;13819:93;13908:3;13819:93;:::i;:::-;13937:2;13932:3;13928:12;13921:19;;13580:366;;;:::o;13952:::-;14094:3;14115:67;14179:2;14174:3;14115:67;:::i;:::-;14108:74;;14191:93;14280:3;14191:93;:::i;:::-;14309:2;14304:3;14300:12;14293:19;;13952:366;;;:::o;14324:::-;14466:3;14487:67;14551:2;14546:3;14487:67;:::i;:::-;14480:74;;14563:93;14652:3;14563:93;:::i;:::-;14681:2;14676:3;14672:12;14665:19;;14324:366;;;:::o;14696:::-;14838:3;14859:67;14923:2;14918:3;14859:67;:::i;:::-;14852:74;;14935:93;15024:3;14935:93;:::i;:::-;15053:2;15048:3;15044:12;15037:19;;14696:366;;;:::o;15068:::-;15210:3;15231:67;15295:2;15290:3;15231:67;:::i;:::-;15224:74;;15307:93;15396:3;15307:93;:::i;:::-;15425:2;15420:3;15416:12;15409:19;;15068:366;;;:::o;15440:::-;15582:3;15603:67;15667:2;15662:3;15603:67;:::i;:::-;15596:74;;15679:93;15768:3;15679:93;:::i;:::-;15797:2;15792:3;15788:12;15781:19;;15440:366;;;:::o;15812:::-;15954:3;15975:67;16039:2;16034:3;15975:67;:::i;:::-;15968:74;;16051:93;16140:3;16051:93;:::i;:::-;16169:2;16164:3;16160:12;16153:19;;15812:366;;;:::o;16184:::-;16326:3;16347:67;16411:2;16406:3;16347:67;:::i;:::-;16340:74;;16423:93;16512:3;16423:93;:::i;:::-;16541:2;16536:3;16532:12;16525:19;;16184:366;;;:::o;16556:::-;16698:3;16719:67;16783:2;16778:3;16719:67;:::i;:::-;16712:74;;16795:93;16884:3;16795:93;:::i;:::-;16913:2;16908:3;16904:12;16897:19;;16556:366;;;:::o;16928:::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:::-;17442:3;17463:67;17527:2;17522:3;17463:67;:::i;:::-;17456:74;;17539:93;17628:3;17539:93;:::i;:::-;17657:2;17652:3;17648:12;17641:19;;17300:366;;;:::o;17672:118::-;17759:24;17777:5;17759:24;:::i;:::-;17754:3;17747:37;17672:118;;:::o;17796:701::-;18077:3;18099:95;18190:3;18181:6;18099:95;:::i;:::-;18092:102;;18211:95;18302:3;18293:6;18211:95;:::i;:::-;18204:102;;18323:148;18467:3;18323:148;:::i;:::-;18316:155;;18488:3;18481:10;;17796:701;;;;;:::o;18503:222::-;18596:4;18634:2;18623:9;18619:18;18611:26;;18647:71;18715:1;18704:9;18700:17;18691:6;18647:71;:::i;:::-;18503:222;;;;:::o;18731:640::-;18926:4;18964:3;18953:9;18949:19;18941:27;;18978:71;19046:1;19035:9;19031:17;19022:6;18978:71;:::i;:::-;19059:72;19127:2;19116:9;19112:18;19103:6;19059:72;:::i;:::-;19141;19209:2;19198:9;19194:18;19185:6;19141:72;:::i;:::-;19260:9;19254:4;19250:20;19245:2;19234:9;19230:18;19223:48;19288:76;19359:4;19350:6;19288:76;:::i;:::-;19280:84;;18731:640;;;;;;;:::o;19377:210::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19515:65;19577:1;19566:9;19562:17;19553:6;19515:65;:::i;:::-;19377:210;;;;:::o;19593:313::-;19706:4;19744:2;19733:9;19729:18;19721:26;;19793:9;19787:4;19783:20;19779:1;19768:9;19764:17;19757:47;19821:78;19894:4;19885:6;19821:78;:::i;:::-;19813:86;;19593:313;;;;:::o;19912:419::-;20078:4;20116:2;20105:9;20101:18;20093:26;;20165:9;20159:4;20155:20;20151:1;20140:9;20136:17;20129:47;20193:131;20319:4;20193:131;:::i;:::-;20185:139;;19912:419;;;:::o;20337:::-;20503:4;20541:2;20530:9;20526:18;20518:26;;20590:9;20584:4;20580:20;20576:1;20565:9;20561:17;20554:47;20618:131;20744:4;20618:131;:::i;:::-;20610:139;;20337:419;;;:::o;20762:::-;20928:4;20966:2;20955:9;20951:18;20943:26;;21015:9;21009:4;21005:20;21001:1;20990:9;20986:17;20979:47;21043:131;21169:4;21043:131;:::i;:::-;21035:139;;20762:419;;;:::o;21187:::-;21353:4;21391:2;21380:9;21376:18;21368:26;;21440:9;21434:4;21430:20;21426:1;21415:9;21411:17;21404:47;21468:131;21594:4;21468:131;:::i;:::-;21460:139;;21187:419;;;:::o;21612:::-;21778:4;21816:2;21805:9;21801:18;21793:26;;21865:9;21859:4;21855:20;21851:1;21840:9;21836:17;21829:47;21893:131;22019:4;21893:131;:::i;:::-;21885:139;;21612:419;;;:::o;22037:::-;22203:4;22241:2;22230:9;22226:18;22218:26;;22290:9;22284:4;22280:20;22276:1;22265:9;22261:17;22254:47;22318:131;22444:4;22318:131;:::i;:::-;22310:139;;22037:419;;;:::o;22462:::-;22628:4;22666:2;22655:9;22651:18;22643:26;;22715:9;22709:4;22705:20;22701:1;22690:9;22686:17;22679:47;22743:131;22869:4;22743:131;:::i;:::-;22735:139;;22462:419;;;:::o;22887:::-;23053:4;23091:2;23080:9;23076:18;23068:26;;23140:9;23134:4;23130:20;23126:1;23115:9;23111:17;23104:47;23168:131;23294:4;23168:131;:::i;:::-;23160:139;;22887:419;;;:::o;23312:::-;23478:4;23516:2;23505:9;23501:18;23493:26;;23565:9;23559:4;23555:20;23551:1;23540:9;23536:17;23529:47;23593:131;23719:4;23593:131;:::i;:::-;23585:139;;23312:419;;;:::o;23737:::-;23903:4;23941:2;23930:9;23926:18;23918:26;;23990:9;23984:4;23980:20;23976:1;23965:9;23961:17;23954:47;24018:131;24144:4;24018:131;:::i;:::-;24010:139;;23737:419;;;:::o;24162:::-;24328:4;24366:2;24355:9;24351:18;24343:26;;24415:9;24409:4;24405:20;24401:1;24390:9;24386:17;24379:47;24443:131;24569:4;24443:131;:::i;:::-;24435:139;;24162:419;;;:::o;24587:::-;24753:4;24791:2;24780:9;24776:18;24768:26;;24840:9;24834:4;24830:20;24826:1;24815:9;24811:17;24804:47;24868:131;24994:4;24868:131;:::i;:::-;24860:139;;24587:419;;;:::o;25012:::-;25178:4;25216:2;25205:9;25201:18;25193:26;;25265:9;25259:4;25255:20;25251:1;25240:9;25236:17;25229:47;25293:131;25419:4;25293:131;:::i;:::-;25285:139;;25012:419;;;:::o;25437:::-;25603:4;25641:2;25630:9;25626:18;25618:26;;25690:9;25684:4;25680:20;25676:1;25665:9;25661:17;25654:47;25718:131;25844:4;25718:131;:::i;:::-;25710:139;;25437:419;;;:::o;25862:::-;26028:4;26066:2;26055:9;26051:18;26043:26;;26115:9;26109:4;26105:20;26101:1;26090:9;26086:17;26079:47;26143:131;26269:4;26143:131;:::i;:::-;26135:139;;25862:419;;;:::o;26287:::-;26453:4;26491:2;26480:9;26476:18;26468:26;;26540:9;26534:4;26530:20;26526:1;26515:9;26511:17;26504:47;26568:131;26694:4;26568:131;:::i;:::-;26560:139;;26287:419;;;:::o;26712:::-;26878:4;26916:2;26905:9;26901:18;26893:26;;26965:9;26959:4;26955:20;26951:1;26940:9;26936:17;26929:47;26993:131;27119:4;26993:131;:::i;:::-;26985:139;;26712:419;;;:::o;27137:::-;27303:4;27341:2;27330:9;27326:18;27318:26;;27390:9;27384:4;27380:20;27376:1;27365:9;27361:17;27354:47;27418:131;27544:4;27418:131;:::i;:::-;27410:139;;27137:419;;;:::o;27562:::-;27728:4;27766:2;27755:9;27751:18;27743:26;;27815:9;27809:4;27805:20;27801:1;27790:9;27786:17;27779:47;27843:131;27969:4;27843:131;:::i;:::-;27835:139;;27562:419;;;:::o;27987:::-;28153:4;28191:2;28180:9;28176:18;28168:26;;28240:9;28234:4;28230:20;28226:1;28215:9;28211:17;28204:47;28268:131;28394:4;28268:131;:::i;:::-;28260:139;;27987:419;;;:::o;28412:::-;28578:4;28616:2;28605:9;28601:18;28593:26;;28665:9;28659:4;28655:20;28651:1;28640:9;28636:17;28629:47;28693:131;28819:4;28693:131;:::i;:::-;28685:139;;28412:419;;;:::o;28837:::-;29003:4;29041:2;29030:9;29026:18;29018:26;;29090:9;29084:4;29080:20;29076:1;29065:9;29061:17;29054:47;29118:131;29244:4;29118:131;:::i;:::-;29110:139;;28837:419;;;:::o;29262:::-;29428:4;29466:2;29455:9;29451:18;29443:26;;29515:9;29509:4;29505:20;29501:1;29490:9;29486:17;29479:47;29543:131;29669:4;29543:131;:::i;:::-;29535:139;;29262:419;;;:::o;29687:::-;29853:4;29891:2;29880:9;29876:18;29868:26;;29940:9;29934:4;29930:20;29926:1;29915:9;29911:17;29904:47;29968:131;30094:4;29968:131;:::i;:::-;29960:139;;29687:419;;;:::o;30112:::-;30278:4;30316:2;30305:9;30301:18;30293:26;;30365:9;30359:4;30355:20;30351:1;30340:9;30336:17;30329:47;30393:131;30519:4;30393:131;:::i;:::-;30385:139;;30112:419;;;:::o;30537:::-;30703:4;30741:2;30730:9;30726:18;30718:26;;30790:9;30784:4;30780:20;30776:1;30765:9;30761:17;30754:47;30818:131;30944:4;30818:131;:::i;:::-;30810:139;;30537:419;;;:::o;30962:::-;31128:4;31166:2;31155:9;31151:18;31143:26;;31215:9;31209:4;31205:20;31201:1;31190:9;31186:17;31179:47;31243:131;31369:4;31243:131;:::i;:::-;31235:139;;30962:419;;;:::o;31387:222::-;31480:4;31518:2;31507:9;31503:18;31495:26;;31531:71;31599:1;31588:9;31584:17;31575:6;31531:71;:::i;:::-;31387:222;;;;:::o;31615:129::-;31649:6;31676:20;;:::i;:::-;31666:30;;31705:33;31733:4;31725:6;31705:33;:::i;:::-;31615:129;;;:::o;31750:75::-;31783:6;31816:2;31810:9;31800:19;;31750:75;:::o;31831:307::-;31892:4;31982:18;31974:6;31971:30;31968:56;;;32004:18;;:::i;:::-;31968:56;32042:29;32064:6;32042:29;:::i;:::-;32034:37;;32126:4;32120;32116:15;32108:23;;31831:307;;;:::o;32144:98::-;32195:6;32229:5;32223:12;32213:22;;32144:98;;;:::o;32248:99::-;32300:6;32334:5;32328:12;32318:22;;32248:99;;;:::o;32353:168::-;32436:11;32470:6;32465:3;32458:19;32510:4;32505:3;32501:14;32486:29;;32353:168;;;;:::o;32527:169::-;32611:11;32645:6;32640:3;32633:19;32685:4;32680:3;32676:14;32661:29;;32527:169;;;;:::o;32702:148::-;32804:11;32841:3;32826:18;;32702:148;;;;:::o;32856:273::-;32896:3;32915:20;32933:1;32915:20;:::i;:::-;32910:25;;32949:20;32967:1;32949:20;:::i;:::-;32944:25;;33071:1;33035:34;33031:42;33028:1;33025:49;33022:75;;;33077:18;;:::i;:::-;33022:75;33121:1;33118;33114:9;33107:16;;32856:273;;;;:::o;33135:305::-;33175:3;33194:20;33212:1;33194:20;:::i;:::-;33189:25;;33228:20;33246:1;33228:20;:::i;:::-;33223:25;;33382:1;33314:66;33310:74;33307:1;33304:81;33301:107;;;33388:18;;:::i;:::-;33301:107;33432:1;33429;33425:9;33418:16;;33135:305;;;;:::o;33446:185::-;33486:1;33503:20;33521:1;33503:20;:::i;:::-;33498:25;;33537:20;33555:1;33537:20;:::i;:::-;33532:25;;33576:1;33566:35;;33581:18;;:::i;:::-;33566:35;33623:1;33620;33616:9;33611:14;;33446:185;;;;:::o;33637:348::-;33677:7;33700:20;33718:1;33700:20;:::i;:::-;33695:25;;33734:20;33752:1;33734:20;:::i;:::-;33729:25;;33922:1;33854:66;33850:74;33847:1;33844:81;33839:1;33832:9;33825:17;33821:105;33818:131;;;33929:18;;:::i;:::-;33818:131;33977:1;33974;33970:9;33959:20;;33637:348;;;;:::o;33991:191::-;34031:4;34051:20;34069:1;34051:20;:::i;:::-;34046:25;;34085:20;34103:1;34085:20;:::i;:::-;34080:25;;34124:1;34121;34118:8;34115:34;;;34129:18;;:::i;:::-;34115:34;34174:1;34171;34167:9;34159:17;;33991:191;;;;:::o;34188:::-;34228:4;34248:20;34266:1;34248:20;:::i;:::-;34243:25;;34282:20;34300:1;34282:20;:::i;:::-;34277:25;;34321:1;34318;34315:8;34312:34;;;34326:18;;:::i;:::-;34312:34;34371:1;34368;34364:9;34356:17;;34188:191;;;;:::o;34385:96::-;34422:7;34451:24;34469:5;34451:24;:::i;:::-;34440:35;;34385:96;;;:::o;34487:90::-;34521:7;34564:5;34557:13;34550:21;34539:32;;34487:90;;;:::o;34583:149::-;34619:7;34659:66;34652:5;34648:78;34637:89;;34583:149;;;:::o;34738:118::-;34775:7;34815:34;34808:5;34804:46;34793:57;;34738:118;;;:::o;34862:126::-;34899:7;34939:42;34932:5;34928:54;34917:65;;34862:126;;;:::o;34994:77::-;35031:7;35060:5;35049:16;;34994:77;;;:::o;35077:154::-;35161:6;35156:3;35151;35138:30;35223:1;35214:6;35209:3;35205:16;35198:27;35077:154;;;:::o;35237:307::-;35305:1;35315:113;35329:6;35326:1;35323:13;35315:113;;;35414:1;35409:3;35405:11;35399:18;35395:1;35390:3;35386:11;35379:39;35351:2;35348:1;35344:10;35339:15;;35315:113;;;35446:6;35443:1;35440:13;35437:101;;;35526:1;35517:6;35512:3;35508:16;35501:27;35437:101;35286:258;35237:307;;;:::o;35550:171::-;35589:3;35612:24;35630:5;35612:24;:::i;:::-;35603:33;;35658:4;35651:5;35648:15;35645:41;;;35666:18;;:::i;:::-;35645:41;35713:1;35706:5;35702:13;35695:20;;35550:171;;;:::o;35727:320::-;35771:6;35808:1;35802:4;35798:12;35788:22;;35855:1;35849:4;35845:12;35876:18;35866:81;;35932:4;35924:6;35920:17;35910:27;;35866:81;35994:2;35986:6;35983:14;35963:18;35960:38;35957:84;;;36013:18;;:::i;:::-;35957:84;35778:269;35727:320;;;:::o;36053:281::-;36136:27;36158:4;36136:27;:::i;:::-;36128:6;36124:40;36266:6;36254:10;36251:22;36230:18;36218:10;36215:34;36212:62;36209:88;;;36277:18;;:::i;:::-;36209:88;36317:10;36313:2;36306:22;36096:238;36053:281;;:::o;36340:233::-;36379:3;36402:24;36420:5;36402:24;:::i;:::-;36393:33;;36448:66;36441:5;36438:77;36435:103;;;36518:18;;:::i;:::-;36435:103;36565:1;36558:5;36554:13;36547:20;;36340:233;;;:::o;36579:176::-;36611:1;36628:20;36646:1;36628:20;:::i;:::-;36623:25;;36662:20;36680:1;36662:20;:::i;:::-;36657:25;;36701:1;36691:35;;36706:18;;:::i;:::-;36691:35;36747:1;36744;36740:9;36735:14;;36579:176;;;;:::o;36761:180::-;36809:77;36806:1;36799:88;36906:4;36903:1;36896:15;36930:4;36927:1;36920:15;36947:180;36995:77;36992:1;36985:88;37092:4;37089:1;37082:15;37116:4;37113:1;37106:15;37133:180;37181:77;37178:1;37171:88;37278:4;37275:1;37268:15;37302:4;37299:1;37292:15;37319:180;37367:77;37364:1;37357:88;37464:4;37461:1;37454:15;37488:4;37485:1;37478:15;37505:180;37553:77;37550:1;37543:88;37650:4;37647:1;37640:15;37674:4;37671:1;37664:15;37691:117;37800:1;37797;37790:12;37814:117;37923:1;37920;37913:12;37937:117;38046:1;38043;38036:12;38060:117;38169:1;38166;38159:12;38183:102;38224:6;38275:2;38271:7;38266:2;38259:5;38255:14;38251:28;38241:38;;38183:102;;;:::o;38291:221::-;38431:34;38427:1;38419:6;38415:14;38408:58;38500:4;38495:2;38487:6;38483:15;38476:29;38291:221;:::o;38518:158::-;38658:10;38654:1;38646:6;38642:14;38635:34;38518:158;:::o;38682:225::-;38822:34;38818:1;38810:6;38806:14;38799:58;38891:8;38886:2;38878:6;38874:15;38867:33;38682:225;:::o;38913:229::-;39053:34;39049:1;39041:6;39037:14;39030:58;39122:12;39117:2;39109:6;39105:15;39098:37;38913:229;:::o;39148:182::-;39288:34;39284:1;39276:6;39272:14;39265:58;39148:182;:::o;39336:222::-;39476:34;39472:1;39464:6;39460:14;39453:58;39545:5;39540:2;39532:6;39528:15;39521:30;39336:222;:::o;39564:224::-;39704:34;39700:1;39692:6;39688:14;39681:58;39773:7;39768:2;39760:6;39756:15;39749:32;39564:224;:::o;39794:182::-;39934:34;39930:1;39922:6;39918:14;39911:58;39794:182;:::o;39982:221::-;40122:34;40118:1;40110:6;40106:14;40099:58;40191:4;40186:2;40178:6;40174:15;40167:29;39982:221;:::o;40209:166::-;40349:18;40345:1;40337:6;40333:14;40326:42;40209:166;:::o;40381:244::-;40521:34;40517:1;40509:6;40505:14;40498:58;40590:27;40585:2;40577:6;40573:15;40566:52;40381:244;:::o;40631:182::-;40771:34;40767:1;40759:6;40755:14;40748:58;40631:182;:::o;40819:230::-;40959:34;40955:1;40947:6;40943:14;40936:58;41028:13;41023:2;41015:6;41011:15;41004:38;40819:230;:::o;41055:225::-;41195:34;41191:1;41183:6;41179:14;41172:58;41264:8;41259:2;41251:6;41247:15;41240:33;41055:225;:::o;41286:155::-;41426:7;41422:1;41414:6;41410:14;41403:31;41286:155;:::o;41447:182::-;41587:34;41583:1;41575:6;41571:14;41564:58;41447:182;:::o;41635:234::-;41775:34;41771:1;41763:6;41759:14;41752:58;41844:17;41839:2;41831:6;41827:15;41820:42;41635:234;:::o;41875:176::-;42015:28;42011:1;42003:6;41999:14;41992:52;41875:176;:::o;42057:237::-;42197:34;42193:1;42185:6;42181:14;42174:58;42266:20;42261:2;42253:6;42249:15;42242:45;42057:237;:::o;42300:220::-;42440:34;42436:1;42428:6;42424:14;42417:58;42509:3;42504:2;42496:6;42492:15;42485:28;42300:220;:::o;42526:221::-;42666:34;42662:1;42654:6;42650:14;42643:58;42735:4;42730:2;42722:6;42718:15;42711:29;42526:221;:::o;42753:238::-;42893:34;42889:1;42881:6;42877:14;42870:58;42962:21;42957:2;42949:6;42945:15;42938:46;42753:238;:::o;42997:179::-;43137:31;43133:1;43125:6;43121:14;43114:55;42997:179;:::o;43182:220::-;43322:34;43318:1;43310:6;43306:14;43299:58;43391:3;43386:2;43378:6;43374:15;43367:28;43182:220;:::o;43408:233::-;43548:34;43544:1;43536:6;43532:14;43525:58;43617:16;43612:2;43604:6;43600:15;43593:41;43408:233;:::o;43647:234::-;43787:34;43783:1;43775:6;43771:14;43764:58;43856:17;43851:2;43843:6;43839:15;43832:42;43647:234;:::o;43887:232::-;44027:34;44023:1;44015:6;44011:14;44004:58;44096:15;44091:2;44083:6;44079:15;44072:40;43887:232;:::o;44125:221::-;44265:34;44261:1;44253:6;44249:14;44242:58;44334:4;44329:2;44321:6;44317:15;44310:29;44125:221;:::o;44352:122::-;44425:24;44443:5;44425:24;:::i;:::-;44418:5;44415:35;44405:63;;44464:1;44461;44454:12;44405:63;44352:122;:::o;44480:116::-;44550:21;44565:5;44550:21;:::i;:::-;44543:5;44540:32;44530:60;;44586:1;44583;44576:12;44530:60;44480:116;:::o;44602:120::-;44674:23;44691:5;44674:23;:::i;:::-;44667:5;44664:34;44654:62;;44712:1;44709;44702:12;44654:62;44602:120;:::o;44728:122::-;44801:24;44819:5;44801:24;:::i;:::-;44794:5;44791:35;44781:63;;44840:1;44837;44830:12;44781:63;44728:122;:::o
Swarm Source
ipfs://0b51b114d45b04dfb7031fc435bb3dd2b303ed1fa34aed7ce8720e84b455b60b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.