ERC-721
NFT
Overview
Max Total Supply
62 $7DS
Holders
31
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ManicMinter
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-05 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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 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/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/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 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/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/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/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/7DS.sol // Created by MikaelJ // The 7 Deadly Sins pragma solidity ^0.8.0; contract ManicMinter is ERC721Enumerable, Ownable { using Strings for uint256; string public _name = "The Seven Deadly Sins"; string public _symbol = "$7DS"; string public baseURI; string public baseExtension = ".json"; uint256 public whitelistCost = 25000000 gwei; uint256 public earlyAccessCost = 40000000 gwei; uint256 public baseCost = 80000000 gwei; uint256 public maxSupply = 7000; uint256 public batch; uint256 public released = 0; uint256 public dropTime; uint256 public maxMintAmount = 5; struct history { uint256 lastBatch; uint256 mints; } mapping(address => history) public sinners; bool public paused = false; constructor() ERC721(_name, _symbol) { } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); uint256 _cost = cost(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= released); if(sinners[_to].lastBatch == batch){ require(sinners[_to].mints + _mintAmount <= maxMintAmount); } else { sinners[_to].lastBatch = batch; sinners[_to].mints = _mintAmount; } if(released >= supply) { require(msg.value >= _cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner() { baseCost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function dropBatch(uint256 batchNumber, uint256 batchLimit, string memory _newBaseURI) public onlyOwner { batch = batchNumber; baseURI = _newBaseURI; released = batchLimit; dropTime = block.timestamp; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function cost() public view returns(uint256){ if(block.timestamp <= dropTime + 12 hours) { if(block.timestamp <= dropTime + 6 hours) { return whitelistCost; } return earlyAccessCost; } return baseCost; } function setReleased(uint256 _released) public onlyOwner { released = _released; } function withdraw() public payable { require(msg.sender == 0x61F301803bb26c3F9f93B4E87bbA6461953d8923); uint256 value = address(this).balance; require(payable(0x61F301803bb26c3F9f93B4E87bbA6461953d8923).send(value)); } }
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":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"baseCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchNumber","type":"uint256"},{"internalType":"uint256","name":"batchLimit","type":"uint256"},{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"dropBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyAccessCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_released","type":"uint256"}],"name":"setReleased","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sinners","outputs":[{"internalType":"uint256","name":"lastBatch","type":"uint256"},{"internalType":"uint256","name":"mints","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601581526020017f54686520536576656e20446561646c792053696e730000000000000000000000815250600b90805190602001906200005192919062000397565b506040518060400160405280600481526020017f2437445300000000000000000000000000000000000000000000000000000000815250600c90805190602001906200009f92919062000397565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000ed92919062000397565b506658d15e17628000600f55668e1bc9bf04000060105567011c37937e080000601155611b58601255600060145560056016556000601860006101000a81548160ff0219169083151502179055503480156200014857600080fd5b50600b8054620001589062000447565b80601f0160208091040260200160405190810160405280929190818152602001828054620001869062000447565b8015620001d75780601f10620001ab57610100808354040283529160200191620001d7565b820191906000526020600020905b815481529060010190602001808311620001b957829003601f168201915b5050505050600c8054620001eb9062000447565b80601f0160208091040260200160405190810160405280929190818152602001828054620002199062000447565b80156200026a5780601f106200023e576101008083540402835291602001916200026a565b820191906000526020600020905b8154815290600101906020018083116200024c57829003601f168201915b505050505081600090805190602001906200028792919062000397565b508060019080519060200190620002a092919062000397565b505050620002c3620002b7620002c960201b60201c565b620002d160201b60201c565b620004ac565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003a59062000447565b90600052602060002090601f016020900481019282620003c9576000855562000415565b82601f10620003e457805160ff191683800117855562000415565b8280016001018555821562000415579182015b8281111562000414578251825591602001919060010190620003f7565b5b50905062000424919062000428565b5090565b5b808211156200044357600081600090555060010162000429565b5090565b600060028204905060018216806200046057607f821691505b602082108114156200047757620004766200047d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61476880620004bc6000396000f3fe60806040526004361061025c5760003560e01c80636c0360eb11610144578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb01146108e3578063da3ef23f1461090e578063e3e0c4f814610937578063e7b99ec714610962578063e985e9c51461098d578063f2fde38b146109ca5761025c565b8063b88d4fde146107fc578063bec449b214610825578063c668286214610850578063c87b56dd1461087b578063d28d8852146108b85761025c565b8063938225571161010857806393822557146106fc57806395d89b41146107275780639613252114610752578063a22cb4651461077d578063af713566146107a6578063b09f1266146107d15761025c565b80636c0360eb1461062957806370a0823114610654578063715018a6146106915780637f00c7a6146106a85780638da5cb5b146106d15761025c565b80633b72deb8116101dd57806344a0d68a116101a157806344a0d68a146104f4578063474d896c1461051d5780634f6ccce7146105465780635c975abb1461058357806361121a19146105ae5780636352211e146105ec5761025c565b80633b72deb81461043f5780633ccfd60b1461046857806340c10f191461047257806342842e0e1461048e578063438b6300146104b75761025c565b806313faede61161022457806313faede61461035857806318160ddd14610383578063239c70ae146103ae57806323b872dd146103d95780632f745c59146104025761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061346b565b6109f3565b6040516102959190613a92565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613442565b610a6d565b005b3480156102d357600080fd5b506102dc610b06565b6040516102e99190613aad565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906134fe565b610b98565b6040516103269190613a09565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613406565b610c1d565b005b34801561036457600080fd5b5061036d610d35565b60405161037a9190613d0f565b60405180910390f35b34801561038f57600080fd5b50610398610d80565b6040516103a59190613d0f565b60405180910390f35b3480156103ba57600080fd5b506103c3610d8d565b6040516103d09190613d0f565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613300565b610d93565b005b34801561040e57600080fd5b5061042960048036038101906104249190613406565b610df3565b6040516104369190613d0f565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613527565b610e98565b005b610470610f45565b005b61048c60048036038101906104879190613406565b610feb565b005b34801561049a57600080fd5b506104b560048036038101906104b09190613300565b6111f0565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061329b565b611210565b6040516104eb9190613a70565b60405180910390f35b34801561050057600080fd5b5061051b600480360381019061051691906134fe565b61130a565b005b34801561052957600080fd5b50610544600480360381019061053f91906134fe565b611390565b005b34801561055257600080fd5b5061056d600480360381019061056891906134fe565b611416565b60405161057a9190613d0f565b60405180910390f35b34801561058f57600080fd5b506105986114ad565b6040516105a59190613a92565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061329b565b6114c0565b6040516105e3929190613d2a565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e91906134fe565b6114e4565b6040516106209190613a09565b60405180910390f35b34801561063557600080fd5b5061063e611596565b60405161064b9190613aad565b60405180910390f35b34801561066057600080fd5b5061067b6004803603810190610676919061329b565b611624565b6040516106889190613d0f565b60405180910390f35b34801561069d57600080fd5b506106a66116dc565b005b3480156106b457600080fd5b506106cf60048036038101906106ca91906134fe565b611764565b005b3480156106dd57600080fd5b506106e66117ea565b6040516106f39190613a09565b60405180910390f35b34801561070857600080fd5b50610711611814565b60405161071e9190613d0f565b60405180910390f35b34801561073357600080fd5b5061073c61181a565b6040516107499190613aad565b60405180910390f35b34801561075e57600080fd5b506107676118ac565b6040516107749190613d0f565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906133ca565b6118b2565b005b3480156107b257600080fd5b506107bb611a33565b6040516107c89190613d0f565b60405180910390f35b3480156107dd57600080fd5b506107e6611a39565b6040516107f39190613aad565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061334f565b611ac7565b005b34801561083157600080fd5b5061083a611b29565b6040516108479190613d0f565b60405180910390f35b34801561085c57600080fd5b50610865611b2f565b6040516108729190613aad565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d91906134fe565b611bbd565b6040516108af9190613aad565b60405180910390f35b3480156108c457600080fd5b506108cd611c67565b6040516108da9190613aad565b60405180910390f35b3480156108ef57600080fd5b506108f8611cf5565b6040516109059190613d0f565b60405180910390f35b34801561091a57600080fd5b50610935600480360381019061093091906134bd565b611cfb565b005b34801561094357600080fd5b5061094c611d91565b6040516109599190613d0f565b60405180910390f35b34801561096e57600080fd5b50610977611d97565b6040516109849190613d0f565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af91906132c4565b611d9d565b6040516109c19190613a92565b60405180910390f35b3480156109d657600080fd5b506109f160048036038101906109ec919061329b565b611e31565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a665750610a6582611f29565b5b9050919050565b610a7561200b565b73ffffffffffffffffffffffffffffffffffffffff16610a936117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613c4f565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b606060008054610b1590614036565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614036565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610ba382612013565b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613c2f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c28826114e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613caf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb861200b565b73ffffffffffffffffffffffffffffffffffffffff161480610ce75750610ce681610ce161200b565b611d9d565b5b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613baf565b60405180910390fd5b610d30838361207f565b505050565b600061a8c0601554610d479190613e6b565b4211610d7757615460601554610d5d9190613e6b565b4211610d6d57600f549050610d7d565b6010549050610d7d565b60115490505b90565b6000600880549050905090565b60165481565b610da4610d9e61200b565b82612138565b610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613ccf565b60405180910390fd5b610dee838383612216565b505050565b6000610dfe83611624565b8210610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613acf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ea061200b565b73ffffffffffffffffffffffffffffffffffffffff16610ebe6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90613c4f565b60405180910390fd5b8260138190555080600d9080519060200190610f319291906130bf565b508160148190555042601581905550505050565b7361f301803bb26c3f9f93b4e87bba6461953d892373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9157600080fd5b60004790507361f301803bb26c3f9f93b4e87bba6461953d892373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fe857600080fd5b50565b6000610ff5610d80565b90506000611001610d35565b9050601860009054906101000a900460ff161561101d57600080fd5b6000831161102a57600080fd5b60165483111561103957600080fd5b60145483836110489190613e6b565b111561105357600080fd5b601354601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156111005760165483601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546110f09190613e6b565b11156110fb57600080fd5b611191565b601354601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b81601454106111b35782816111a69190613ef2565b3410156111b257600080fd5b5b6000600190505b8381116111e9576111d68582856111d19190613e6b565b612472565b80806111e190614099565b9150506111ba565b5050505050565b61120b83838360405180602001604052806000815250611ac7565b505050565b6060600061121d83611624565b905060008167ffffffffffffffff811115611261577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561128f5781602001602082028036833780820191505090505b50905060005b828110156112ff576112a78582610df3565b8282815181106112e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112f790614099565b915050611295565b508092505050919050565b61131261200b565b73ffffffffffffffffffffffffffffffffffffffff166113306117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90613c4f565b60405180910390fd5b8060118190555050565b61139861200b565b73ffffffffffffffffffffffffffffffffffffffff166113b66117ea565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613c4f565b60405180910390fd5b8060148190555050565b6000611420610d80565b8210611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613cef565b60405180910390fd5b6008828154811061149b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601860009054906101000a900460ff1681565b60176020528060005260406000206000915090508060000154908060010154905082565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613bef565b60405180910390fd5b80915050919050565b600d80546115a390614036565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf90614036565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90613bcf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e461200b565b73ffffffffffffffffffffffffffffffffffffffff166117026117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613c4f565b60405180910390fd5b6117626000612490565b565b61176c61200b565b73ffffffffffffffffffffffffffffffffffffffff1661178a6117ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613c4f565b60405180910390fd5b8060168190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606001805461182990614036565b80601f016020809104026020016040519081016040528092919081815260200182805461185590614036565b80156118a25780601f10611877576101008083540402835291602001916118a2565b820191906000526020600020905b81548152906001019060200180831161188557829003601f168201915b5050505050905090565b60145481565b6118ba61200b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90613b6f565b60405180910390fd5b806005600061193561200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e261200b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a279190613a92565b60405180910390a35050565b60135481565b600c8054611a4690614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7290614036565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b505050505081565b611ad8611ad261200b565b83612138565b611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613ccf565b60405180910390fd5b611b2384848484612556565b50505050565b60105481565b600e8054611b3c90614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6890614036565b8015611bb55780601f10611b8a57610100808354040283529160200191611bb5565b820191906000526020600020905b815481529060010190602001808311611b9857829003601f168201915b505050505081565b6060611bc882612013565b611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90613c8f565b60405180910390fd5b6000611c116125b2565b90506000815111611c315760405180602001604052806000815250611c5f565b80611c3b84612644565b600e604051602001611c4f939291906139d8565b6040516020818303038152906040525b915050919050565b600b8054611c7490614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca090614036565b8015611ced5780601f10611cc257610100808354040283529160200191611ced565b820191906000526020600020905b815481529060010190602001808311611cd057829003601f168201915b505050505081565b60125481565b611d0361200b565b73ffffffffffffffffffffffffffffffffffffffff16611d216117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90613c4f565b60405180910390fd5b80600e9080519060200190611d8d9291906130bf565b5050565b60155481565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e3961200b565b73ffffffffffffffffffffffffffffffffffffffff16611e576117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613c4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613b0f565b60405180910390fd5b611f2681612490565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ff457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120045750612003826127f1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120f2836114e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061214382612013565b612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990613b8f565b60405180910390fd5b600061218d836114e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121fc57508373ffffffffffffffffffffffffffffffffffffffff166121e484610b98565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220d575061220c8185611d9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612236826114e4565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f390613b4f565b60405180910390fd5b61230783838361285b565b61231260008261207f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123629190613f4c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b99190613e6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61248c82826040518060200160405280600081525061296f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484612216565b61256d848484846129ca565b6125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390613aef565b60405180910390fd5b50505050565b6060600d80546125c190614036565b80601f01602080910402602001604051908101604052809291908181526020018280546125ed90614036565b801561263a5780601f1061260f5761010080835404028352916020019161263a565b820191906000526020600020905b81548152906001019060200180831161261d57829003601f168201915b5050505050905090565b6060600082141561268c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ec565b600082905060005b600082146126be5780806126a790614099565b915050600a826126b79190613ec1565b9150612694565b60008167ffffffffffffffff811115612700577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127325781602001600182028036833780820191505090505b5090505b600085146127e55760018261274b9190613f4c565b9150600a8561275a91906140e2565b60306127669190613e6b565b60f81b8183815181106127a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127de9190613ec1565b9450612736565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612866838383612b61565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a9576128a481612b66565b6128e8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128e7576128e68382612baf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561292b5761292681612d1c565b61296a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612969576129688282612e5f565b5b5b505050565b6129798383612ede565b61298660008484846129ca565b6129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613aef565b60405180910390fd5b505050565b60006129eb8473ffffffffffffffffffffffffffffffffffffffff166130ac565b15612b54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a1461200b565b8786866040518563ffffffff1660e01b8152600401612a369493929190613a24565b602060405180830381600087803b158015612a5057600080fd5b505af1925050508015612a8157506040513d601f19601f82011682018060405250810190612a7e9190613494565b60015b612b04573d8060008114612ab1576040519150601f19603f3d011682016040523d82523d6000602084013e612ab6565b606091505b50600081511415612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390613aef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b59565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bbc84611624565b612bc69190613f4c565b9050600060076000848152602001908152602001600020549050818114612cab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d309190613f4c565b9050600060096000848152602001908152602001600020549050600060088381548110612d86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e6a83611624565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590613c0f565b60405180910390fd5b612f5781612013565b15612f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8e90613b2f565b60405180910390fd5b612fa36000838361285b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff39190613e6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130cb90614036565b90600052602060002090601f0160209004810192826130ed5760008555613134565b82601f1061310657805160ff1916838001178555613134565b82800160010185558215613134579182015b82811115613133578251825591602001919060010190613118565b5b5090506131419190613145565b5090565b5b8082111561315e576000816000905550600101613146565b5090565b600061317561317084613d78565b613d53565b90508281526020810184848401111561318d57600080fd5b613198848285613ff4565b509392505050565b60006131b36131ae84613da9565b613d53565b9050828152602081018484840111156131cb57600080fd5b6131d6848285613ff4565b509392505050565b6000813590506131ed816146d6565b92915050565b600081359050613202816146ed565b92915050565b60008135905061321781614704565b92915050565b60008151905061322c81614704565b92915050565b600082601f83011261324357600080fd5b8135613253848260208601613162565b91505092915050565b600082601f83011261326d57600080fd5b813561327d8482602086016131a0565b91505092915050565b6000813590506132958161471b565b92915050565b6000602082840312156132ad57600080fd5b60006132bb848285016131de565b91505092915050565b600080604083850312156132d757600080fd5b60006132e5858286016131de565b92505060206132f6858286016131de565b9150509250929050565b60008060006060848603121561331557600080fd5b6000613323868287016131de565b9350506020613334868287016131de565b925050604061334586828701613286565b9150509250925092565b6000806000806080858703121561336557600080fd5b6000613373878288016131de565b9450506020613384878288016131de565b935050604061339587828801613286565b925050606085013567ffffffffffffffff8111156133b257600080fd5b6133be87828801613232565b91505092959194509250565b600080604083850312156133dd57600080fd5b60006133eb858286016131de565b92505060206133fc858286016131f3565b9150509250929050565b6000806040838503121561341957600080fd5b6000613427858286016131de565b925050602061343885828601613286565b9150509250929050565b60006020828403121561345457600080fd5b6000613462848285016131f3565b91505092915050565b60006020828403121561347d57600080fd5b600061348b84828501613208565b91505092915050565b6000602082840312156134a657600080fd5b60006134b48482850161321d565b91505092915050565b6000602082840312156134cf57600080fd5b600082013567ffffffffffffffff8111156134e957600080fd5b6134f58482850161325c565b91505092915050565b60006020828403121561351057600080fd5b600061351e84828501613286565b91505092915050565b60008060006060848603121561353c57600080fd5b600061354a86828701613286565b935050602061355b86828701613286565b925050604084013567ffffffffffffffff81111561357857600080fd5b6135848682870161325c565b9150509250925092565b600061359a83836139ba565b60208301905092915050565b6135af81613f80565b82525050565b60006135c082613dff565b6135ca8185613e2d565b93506135d583613dda565b8060005b838110156136065781516135ed888261358e565b97506135f883613e20565b9250506001810190506135d9565b5085935050505092915050565b61361c81613f92565b82525050565b600061362d82613e0a565b6136378185613e3e565b9350613647818560208601614003565b613650816141cf565b840191505092915050565b600061366682613e15565b6136708185613e4f565b9350613680818560208601614003565b613689816141cf565b840191505092915050565b600061369f82613e15565b6136a98185613e60565b93506136b9818560208601614003565b80840191505092915050565b600081546136d281614036565b6136dc8186613e60565b945060018216600081146136f757600181146137085761373b565b60ff1983168652818601935061373b565b61371185613dea565b60005b8381101561373357815481890152600182019150602081019050613714565b838801955050505b50505092915050565b6000613751602b83613e4f565b915061375c826141e0565b604082019050919050565b6000613774603283613e4f565b915061377f8261422f565b604082019050919050565b6000613797602683613e4f565b91506137a28261427e565b604082019050919050565b60006137ba601c83613e4f565b91506137c5826142cd565b602082019050919050565b60006137dd602483613e4f565b91506137e8826142f6565b604082019050919050565b6000613800601983613e4f565b915061380b82614345565b602082019050919050565b6000613823602c83613e4f565b915061382e8261436e565b604082019050919050565b6000613846603883613e4f565b9150613851826143bd565b604082019050919050565b6000613869602a83613e4f565b91506138748261440c565b604082019050919050565b600061388c602983613e4f565b91506138978261445b565b604082019050919050565b60006138af602083613e4f565b91506138ba826144aa565b602082019050919050565b60006138d2602c83613e4f565b91506138dd826144d3565b604082019050919050565b60006138f5602083613e4f565b915061390082614522565b602082019050919050565b6000613918602983613e4f565b91506139238261454b565b604082019050919050565b600061393b602f83613e4f565b91506139468261459a565b604082019050919050565b600061395e602183613e4f565b9150613969826145e9565b604082019050919050565b6000613981603183613e4f565b915061398c82614638565b604082019050919050565b60006139a4602c83613e4f565b91506139af82614687565b604082019050919050565b6139c381613fea565b82525050565b6139d281613fea565b82525050565b60006139e48286613694565b91506139f08285613694565b91506139fc82846136c5565b9150819050949350505050565b6000602082019050613a1e60008301846135a6565b92915050565b6000608082019050613a3960008301876135a6565b613a4660208301866135a6565b613a5360408301856139c9565b8181036060830152613a658184613622565b905095945050505050565b60006020820190508181036000830152613a8a81846135b5565b905092915050565b6000602082019050613aa76000830184613613565b92915050565b60006020820190508181036000830152613ac7818461365b565b905092915050565b60006020820190508181036000830152613ae881613744565b9050919050565b60006020820190508181036000830152613b0881613767565b9050919050565b60006020820190508181036000830152613b288161378a565b9050919050565b60006020820190508181036000830152613b48816137ad565b9050919050565b60006020820190508181036000830152613b68816137d0565b9050919050565b60006020820190508181036000830152613b88816137f3565b9050919050565b60006020820190508181036000830152613ba881613816565b9050919050565b60006020820190508181036000830152613bc881613839565b9050919050565b60006020820190508181036000830152613be88161385c565b9050919050565b60006020820190508181036000830152613c088161387f565b9050919050565b60006020820190508181036000830152613c28816138a2565b9050919050565b60006020820190508181036000830152613c48816138c5565b9050919050565b60006020820190508181036000830152613c68816138e8565b9050919050565b60006020820190508181036000830152613c888161390b565b9050919050565b60006020820190508181036000830152613ca88161392e565b9050919050565b60006020820190508181036000830152613cc881613951565b9050919050565b60006020820190508181036000830152613ce881613974565b9050919050565b60006020820190508181036000830152613d0881613997565b9050919050565b6000602082019050613d2460008301846139c9565b92915050565b6000604082019050613d3f60008301856139c9565b613d4c60208301846139c9565b9392505050565b6000613d5d613d6e565b9050613d698282614068565b919050565b6000604051905090565b600067ffffffffffffffff821115613d9357613d926141a0565b5b613d9c826141cf565b9050602081019050919050565b600067ffffffffffffffff821115613dc457613dc36141a0565b5b613dcd826141cf565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7682613fea565b9150613e8183613fea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eb657613eb5614113565b5b828201905092915050565b6000613ecc82613fea565b9150613ed783613fea565b925082613ee757613ee6614142565b5b828204905092915050565b6000613efd82613fea565b9150613f0883613fea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4157613f40614113565b5b828202905092915050565b6000613f5782613fea565b9150613f6283613fea565b925082821015613f7557613f74614113565b5b828203905092915050565b6000613f8b82613fca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614021578082015181840152602081019050614006565b83811115614030576000848401525b50505050565b6000600282049050600182168061404e57607f821691505b6020821081141561406257614061614171565b5b50919050565b614071826141cf565b810181811067ffffffffffffffff821117156140905761408f6141a0565b5b80604052505050565b60006140a482613fea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140d7576140d6614113565b5b600182019050919050565b60006140ed82613fea565b91506140f883613fea565b92508261410857614107614142565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6146df81613f80565b81146146ea57600080fd5b50565b6146f681613f92565b811461470157600080fd5b50565b61470d81613f9e565b811461471857600080fd5b50565b61472481613fea565b811461472f57600080fd5b5056fea2646970667358221220dfded1faf864b3ed376b99754f67dd7ef1aa579317f4bc6106eb1bde16655bc164736f6c63430008040033
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80636c0360eb11610144578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb01146108e3578063da3ef23f1461090e578063e3e0c4f814610937578063e7b99ec714610962578063e985e9c51461098d578063f2fde38b146109ca5761025c565b8063b88d4fde146107fc578063bec449b214610825578063c668286214610850578063c87b56dd1461087b578063d28d8852146108b85761025c565b8063938225571161010857806393822557146106fc57806395d89b41146107275780639613252114610752578063a22cb4651461077d578063af713566146107a6578063b09f1266146107d15761025c565b80636c0360eb1461062957806370a0823114610654578063715018a6146106915780637f00c7a6146106a85780638da5cb5b146106d15761025c565b80633b72deb8116101dd57806344a0d68a116101a157806344a0d68a146104f4578063474d896c1461051d5780634f6ccce7146105465780635c975abb1461058357806361121a19146105ae5780636352211e146105ec5761025c565b80633b72deb81461043f5780633ccfd60b1461046857806340c10f191461047257806342842e0e1461048e578063438b6300146104b75761025c565b806313faede61161022457806313faede61461035857806318160ddd14610383578063239c70ae146103ae57806323b872dd146103d95780632f745c59146104025761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c7578063081812fc146102f2578063095ea7b31461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061346b565b6109f3565b6040516102959190613a92565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613442565b610a6d565b005b3480156102d357600080fd5b506102dc610b06565b6040516102e99190613aad565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906134fe565b610b98565b6040516103269190613a09565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613406565b610c1d565b005b34801561036457600080fd5b5061036d610d35565b60405161037a9190613d0f565b60405180910390f35b34801561038f57600080fd5b50610398610d80565b6040516103a59190613d0f565b60405180910390f35b3480156103ba57600080fd5b506103c3610d8d565b6040516103d09190613d0f565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613300565b610d93565b005b34801561040e57600080fd5b5061042960048036038101906104249190613406565b610df3565b6040516104369190613d0f565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613527565b610e98565b005b610470610f45565b005b61048c60048036038101906104879190613406565b610feb565b005b34801561049a57600080fd5b506104b560048036038101906104b09190613300565b6111f0565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061329b565b611210565b6040516104eb9190613a70565b60405180910390f35b34801561050057600080fd5b5061051b600480360381019061051691906134fe565b61130a565b005b34801561052957600080fd5b50610544600480360381019061053f91906134fe565b611390565b005b34801561055257600080fd5b5061056d600480360381019061056891906134fe565b611416565b60405161057a9190613d0f565b60405180910390f35b34801561058f57600080fd5b506105986114ad565b6040516105a59190613a92565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061329b565b6114c0565b6040516105e3929190613d2a565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e91906134fe565b6114e4565b6040516106209190613a09565b60405180910390f35b34801561063557600080fd5b5061063e611596565b60405161064b9190613aad565b60405180910390f35b34801561066057600080fd5b5061067b6004803603810190610676919061329b565b611624565b6040516106889190613d0f565b60405180910390f35b34801561069d57600080fd5b506106a66116dc565b005b3480156106b457600080fd5b506106cf60048036038101906106ca91906134fe565b611764565b005b3480156106dd57600080fd5b506106e66117ea565b6040516106f39190613a09565b60405180910390f35b34801561070857600080fd5b50610711611814565b60405161071e9190613d0f565b60405180910390f35b34801561073357600080fd5b5061073c61181a565b6040516107499190613aad565b60405180910390f35b34801561075e57600080fd5b506107676118ac565b6040516107749190613d0f565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906133ca565b6118b2565b005b3480156107b257600080fd5b506107bb611a33565b6040516107c89190613d0f565b60405180910390f35b3480156107dd57600080fd5b506107e6611a39565b6040516107f39190613aad565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061334f565b611ac7565b005b34801561083157600080fd5b5061083a611b29565b6040516108479190613d0f565b60405180910390f35b34801561085c57600080fd5b50610865611b2f565b6040516108729190613aad565b60405180910390f35b34801561088757600080fd5b506108a2600480360381019061089d91906134fe565b611bbd565b6040516108af9190613aad565b60405180910390f35b3480156108c457600080fd5b506108cd611c67565b6040516108da9190613aad565b60405180910390f35b3480156108ef57600080fd5b506108f8611cf5565b6040516109059190613d0f565b60405180910390f35b34801561091a57600080fd5b50610935600480360381019061093091906134bd565b611cfb565b005b34801561094357600080fd5b5061094c611d91565b6040516109599190613d0f565b60405180910390f35b34801561096e57600080fd5b50610977611d97565b6040516109849190613d0f565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af91906132c4565b611d9d565b6040516109c19190613a92565b60405180910390f35b3480156109d657600080fd5b506109f160048036038101906109ec919061329b565b611e31565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a665750610a6582611f29565b5b9050919050565b610a7561200b565b73ffffffffffffffffffffffffffffffffffffffff16610a936117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613c4f565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b606060008054610b1590614036565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614036565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b5050505050905090565b6000610ba382612013565b610be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd990613c2f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c28826114e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613caf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb861200b565b73ffffffffffffffffffffffffffffffffffffffff161480610ce75750610ce681610ce161200b565b611d9d565b5b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613baf565b60405180910390fd5b610d30838361207f565b505050565b600061a8c0601554610d479190613e6b565b4211610d7757615460601554610d5d9190613e6b565b4211610d6d57600f549050610d7d565b6010549050610d7d565b60115490505b90565b6000600880549050905090565b60165481565b610da4610d9e61200b565b82612138565b610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613ccf565b60405180910390fd5b610dee838383612216565b505050565b6000610dfe83611624565b8210610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613acf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ea061200b565b73ffffffffffffffffffffffffffffffffffffffff16610ebe6117ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90613c4f565b60405180910390fd5b8260138190555080600d9080519060200190610f319291906130bf565b508160148190555042601581905550505050565b7361f301803bb26c3f9f93b4e87bba6461953d892373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9157600080fd5b60004790507361f301803bb26c3f9f93b4e87bba6461953d892373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fe857600080fd5b50565b6000610ff5610d80565b90506000611001610d35565b9050601860009054906101000a900460ff161561101d57600080fd5b6000831161102a57600080fd5b60165483111561103957600080fd5b60145483836110489190613e6b565b111561105357600080fd5b601354601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156111005760165483601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546110f09190613e6b565b11156110fb57600080fd5b611191565b601354601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b81601454106111b35782816111a69190613ef2565b3410156111b257600080fd5b5b6000600190505b8381116111e9576111d68582856111d19190613e6b565b612472565b80806111e190614099565b9150506111ba565b5050505050565b61120b83838360405180602001604052806000815250611ac7565b505050565b6060600061121d83611624565b905060008167ffffffffffffffff811115611261577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561128f5781602001602082028036833780820191505090505b50905060005b828110156112ff576112a78582610df3565b8282815181106112e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112f790614099565b915050611295565b508092505050919050565b61131261200b565b73ffffffffffffffffffffffffffffffffffffffff166113306117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90613c4f565b60405180910390fd5b8060118190555050565b61139861200b565b73ffffffffffffffffffffffffffffffffffffffff166113b66117ea565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390613c4f565b60405180910390fd5b8060148190555050565b6000611420610d80565b8210611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613cef565b60405180910390fd5b6008828154811061149b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601860009054906101000a900460ff1681565b60176020528060005260406000206000915090508060000154908060010154905082565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613bef565b60405180910390fd5b80915050919050565b600d80546115a390614036565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf90614036565b801561161c5780601f106115f15761010080835404028352916020019161161c565b820191906000526020600020905b8154815290600101906020018083116115ff57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90613bcf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e461200b565b73ffffffffffffffffffffffffffffffffffffffff166117026117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f90613c4f565b60405180910390fd5b6117626000612490565b565b61176c61200b565b73ffffffffffffffffffffffffffffffffffffffff1661178a6117ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613c4f565b60405180910390fd5b8060168190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606001805461182990614036565b80601f016020809104026020016040519081016040528092919081815260200182805461185590614036565b80156118a25780601f10611877576101008083540402835291602001916118a2565b820191906000526020600020905b81548152906001019060200180831161188557829003601f168201915b5050505050905090565b60145481565b6118ba61200b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90613b6f565b60405180910390fd5b806005600061193561200b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119e261200b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a279190613a92565b60405180910390a35050565b60135481565b600c8054611a4690614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7290614036565b8015611abf5780601f10611a9457610100808354040283529160200191611abf565b820191906000526020600020905b815481529060010190602001808311611aa257829003601f168201915b505050505081565b611ad8611ad261200b565b83612138565b611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90613ccf565b60405180910390fd5b611b2384848484612556565b50505050565b60105481565b600e8054611b3c90614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6890614036565b8015611bb55780601f10611b8a57610100808354040283529160200191611bb5565b820191906000526020600020905b815481529060010190602001808311611b9857829003601f168201915b505050505081565b6060611bc882612013565b611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90613c8f565b60405180910390fd5b6000611c116125b2565b90506000815111611c315760405180602001604052806000815250611c5f565b80611c3b84612644565b600e604051602001611c4f939291906139d8565b6040516020818303038152906040525b915050919050565b600b8054611c7490614036565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca090614036565b8015611ced5780601f10611cc257610100808354040283529160200191611ced565b820191906000526020600020905b815481529060010190602001808311611cd057829003601f168201915b505050505081565b60125481565b611d0361200b565b73ffffffffffffffffffffffffffffffffffffffff16611d216117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90613c4f565b60405180910390fd5b80600e9080519060200190611d8d9291906130bf565b5050565b60155481565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e3961200b565b73ffffffffffffffffffffffffffffffffffffffff16611e576117ea565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613c4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1490613b0f565b60405180910390fd5b611f2681612490565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ff457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120045750612003826127f1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120f2836114e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061214382612013565b612182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217990613b8f565b60405180910390fd5b600061218d836114e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121fc57508373ffffffffffffffffffffffffffffffffffffffff166121e484610b98565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220d575061220c8185611d9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612236826114e4565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613c6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f390613b4f565b60405180910390fd5b61230783838361285b565b61231260008261207f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123629190613f4c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b99190613e6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61248c82826040518060200160405280600081525061296f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484612216565b61256d848484846129ca565b6125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390613aef565b60405180910390fd5b50505050565b6060600d80546125c190614036565b80601f01602080910402602001604051908101604052809291908181526020018280546125ed90614036565b801561263a5780601f1061260f5761010080835404028352916020019161263a565b820191906000526020600020905b81548152906001019060200180831161261d57829003601f168201915b5050505050905090565b6060600082141561268c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ec565b600082905060005b600082146126be5780806126a790614099565b915050600a826126b79190613ec1565b9150612694565b60008167ffffffffffffffff811115612700577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127325781602001600182028036833780820191505090505b5090505b600085146127e55760018261274b9190613f4c565b9150600a8561275a91906140e2565b60306127669190613e6b565b60f81b8183815181106127a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127de9190613ec1565b9450612736565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612866838383612b61565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128a9576128a481612b66565b6128e8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128e7576128e68382612baf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561292b5761292681612d1c565b61296a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612969576129688282612e5f565b5b5b505050565b6129798383612ede565b61298660008484846129ca565b6129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613aef565b60405180910390fd5b505050565b60006129eb8473ffffffffffffffffffffffffffffffffffffffff166130ac565b15612b54578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a1461200b565b8786866040518563ffffffff1660e01b8152600401612a369493929190613a24565b602060405180830381600087803b158015612a5057600080fd5b505af1925050508015612a8157506040513d601f19601f82011682018060405250810190612a7e9190613494565b60015b612b04573d8060008114612ab1576040519150601f19603f3d011682016040523d82523d6000602084013e612ab6565b606091505b50600081511415612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af390613aef565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b59565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bbc84611624565b612bc69190613f4c565b9050600060076000848152602001908152602001600020549050818114612cab576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d309190613f4c565b9050600060096000848152602001908152602001600020549050600060088381548110612d86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612dce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e6a83611624565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4590613c0f565b60405180910390fd5b612f5781612013565b15612f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8e90613b2f565b60405180910390fd5b612fa36000838361285b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff39190613e6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130cb90614036565b90600052602060002090601f0160209004810192826130ed5760008555613134565b82601f1061310657805160ff1916838001178555613134565b82800160010185558215613134579182015b82811115613133578251825591602001919060010190613118565b5b5090506131419190613145565b5090565b5b8082111561315e576000816000905550600101613146565b5090565b600061317561317084613d78565b613d53565b90508281526020810184848401111561318d57600080fd5b613198848285613ff4565b509392505050565b60006131b36131ae84613da9565b613d53565b9050828152602081018484840111156131cb57600080fd5b6131d6848285613ff4565b509392505050565b6000813590506131ed816146d6565b92915050565b600081359050613202816146ed565b92915050565b60008135905061321781614704565b92915050565b60008151905061322c81614704565b92915050565b600082601f83011261324357600080fd5b8135613253848260208601613162565b91505092915050565b600082601f83011261326d57600080fd5b813561327d8482602086016131a0565b91505092915050565b6000813590506132958161471b565b92915050565b6000602082840312156132ad57600080fd5b60006132bb848285016131de565b91505092915050565b600080604083850312156132d757600080fd5b60006132e5858286016131de565b92505060206132f6858286016131de565b9150509250929050565b60008060006060848603121561331557600080fd5b6000613323868287016131de565b9350506020613334868287016131de565b925050604061334586828701613286565b9150509250925092565b6000806000806080858703121561336557600080fd5b6000613373878288016131de565b9450506020613384878288016131de565b935050604061339587828801613286565b925050606085013567ffffffffffffffff8111156133b257600080fd5b6133be87828801613232565b91505092959194509250565b600080604083850312156133dd57600080fd5b60006133eb858286016131de565b92505060206133fc858286016131f3565b9150509250929050565b6000806040838503121561341957600080fd5b6000613427858286016131de565b925050602061343885828601613286565b9150509250929050565b60006020828403121561345457600080fd5b6000613462848285016131f3565b91505092915050565b60006020828403121561347d57600080fd5b600061348b84828501613208565b91505092915050565b6000602082840312156134a657600080fd5b60006134b48482850161321d565b91505092915050565b6000602082840312156134cf57600080fd5b600082013567ffffffffffffffff8111156134e957600080fd5b6134f58482850161325c565b91505092915050565b60006020828403121561351057600080fd5b600061351e84828501613286565b91505092915050565b60008060006060848603121561353c57600080fd5b600061354a86828701613286565b935050602061355b86828701613286565b925050604084013567ffffffffffffffff81111561357857600080fd5b6135848682870161325c565b9150509250925092565b600061359a83836139ba565b60208301905092915050565b6135af81613f80565b82525050565b60006135c082613dff565b6135ca8185613e2d565b93506135d583613dda565b8060005b838110156136065781516135ed888261358e565b97506135f883613e20565b9250506001810190506135d9565b5085935050505092915050565b61361c81613f92565b82525050565b600061362d82613e0a565b6136378185613e3e565b9350613647818560208601614003565b613650816141cf565b840191505092915050565b600061366682613e15565b6136708185613e4f565b9350613680818560208601614003565b613689816141cf565b840191505092915050565b600061369f82613e15565b6136a98185613e60565b93506136b9818560208601614003565b80840191505092915050565b600081546136d281614036565b6136dc8186613e60565b945060018216600081146136f757600181146137085761373b565b60ff1983168652818601935061373b565b61371185613dea565b60005b8381101561373357815481890152600182019150602081019050613714565b838801955050505b50505092915050565b6000613751602b83613e4f565b915061375c826141e0565b604082019050919050565b6000613774603283613e4f565b915061377f8261422f565b604082019050919050565b6000613797602683613e4f565b91506137a28261427e565b604082019050919050565b60006137ba601c83613e4f565b91506137c5826142cd565b602082019050919050565b60006137dd602483613e4f565b91506137e8826142f6565b604082019050919050565b6000613800601983613e4f565b915061380b82614345565b602082019050919050565b6000613823602c83613e4f565b915061382e8261436e565b604082019050919050565b6000613846603883613e4f565b9150613851826143bd565b604082019050919050565b6000613869602a83613e4f565b91506138748261440c565b604082019050919050565b600061388c602983613e4f565b91506138978261445b565b604082019050919050565b60006138af602083613e4f565b91506138ba826144aa565b602082019050919050565b60006138d2602c83613e4f565b91506138dd826144d3565b604082019050919050565b60006138f5602083613e4f565b915061390082614522565b602082019050919050565b6000613918602983613e4f565b91506139238261454b565b604082019050919050565b600061393b602f83613e4f565b91506139468261459a565b604082019050919050565b600061395e602183613e4f565b9150613969826145e9565b604082019050919050565b6000613981603183613e4f565b915061398c82614638565b604082019050919050565b60006139a4602c83613e4f565b91506139af82614687565b604082019050919050565b6139c381613fea565b82525050565b6139d281613fea565b82525050565b60006139e48286613694565b91506139f08285613694565b91506139fc82846136c5565b9150819050949350505050565b6000602082019050613a1e60008301846135a6565b92915050565b6000608082019050613a3960008301876135a6565b613a4660208301866135a6565b613a5360408301856139c9565b8181036060830152613a658184613622565b905095945050505050565b60006020820190508181036000830152613a8a81846135b5565b905092915050565b6000602082019050613aa76000830184613613565b92915050565b60006020820190508181036000830152613ac7818461365b565b905092915050565b60006020820190508181036000830152613ae881613744565b9050919050565b60006020820190508181036000830152613b0881613767565b9050919050565b60006020820190508181036000830152613b288161378a565b9050919050565b60006020820190508181036000830152613b48816137ad565b9050919050565b60006020820190508181036000830152613b68816137d0565b9050919050565b60006020820190508181036000830152613b88816137f3565b9050919050565b60006020820190508181036000830152613ba881613816565b9050919050565b60006020820190508181036000830152613bc881613839565b9050919050565b60006020820190508181036000830152613be88161385c565b9050919050565b60006020820190508181036000830152613c088161387f565b9050919050565b60006020820190508181036000830152613c28816138a2565b9050919050565b60006020820190508181036000830152613c48816138c5565b9050919050565b60006020820190508181036000830152613c68816138e8565b9050919050565b60006020820190508181036000830152613c888161390b565b9050919050565b60006020820190508181036000830152613ca88161392e565b9050919050565b60006020820190508181036000830152613cc881613951565b9050919050565b60006020820190508181036000830152613ce881613974565b9050919050565b60006020820190508181036000830152613d0881613997565b9050919050565b6000602082019050613d2460008301846139c9565b92915050565b6000604082019050613d3f60008301856139c9565b613d4c60208301846139c9565b9392505050565b6000613d5d613d6e565b9050613d698282614068565b919050565b6000604051905090565b600067ffffffffffffffff821115613d9357613d926141a0565b5b613d9c826141cf565b9050602081019050919050565b600067ffffffffffffffff821115613dc457613dc36141a0565b5b613dcd826141cf565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7682613fea565b9150613e8183613fea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eb657613eb5614113565b5b828201905092915050565b6000613ecc82613fea565b9150613ed783613fea565b925082613ee757613ee6614142565b5b828204905092915050565b6000613efd82613fea565b9150613f0883613fea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4157613f40614113565b5b828202905092915050565b6000613f5782613fea565b9150613f6283613fea565b925082821015613f7557613f74614113565b5b828203905092915050565b6000613f8b82613fca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614021578082015181840152602081019050614006565b83811115614030576000848401525b50505050565b6000600282049050600182168061404e57607f821691505b6020821081141561406257614061614171565b5b50919050565b614071826141cf565b810181811067ffffffffffffffff821117156140905761408f6141a0565b5b80604052505050565b60006140a482613fea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140d7576140d6614113565b5b600182019050919050565b60006140ed82613fea565b91506140f883613fea565b92508261410857614107614142565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6146df81613f80565b81146146ea57600080fd5b50565b6146f681613f92565b811461470157600080fd5b50565b61470d81613f9e565b811461471857600080fd5b50565b61472481613fea565b811461472f57600080fd5b5056fea2646970667358221220dfded1faf864b3ed376b99754f67dd7ef1aa579317f4bc6106eb1bde16655bc164736f6c63430008040033
Deployed Bytecode Sourcemap
43196:3661:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34666:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46167:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46246:267;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35306:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43703:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25007:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34974:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45808:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46618:236;;;:::i;:::-;;44082:705;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25417:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44793:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45592:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46519:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35496:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43864:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43817:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;22252:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43368:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21982:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42455:94;;;;;;;;;;;;;:::i;:::-;;45684:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41804:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43536:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43641:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24410:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43616:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43333:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25673:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43485:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43394:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45147:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43283:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43580:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46039:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43673:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43436:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24776:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42704:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34666:224;34768:4;34807:35;34792:50;;;:11;:50;;;;:90;;;;34846:36;34870:11;34846:23;:36::i;:::-;34792:90;34785:97;;34666:224;;;:::o;46167:73::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46228:6:::1;46219;;:15;;;;;;;;;;;;;;;;;;46167:73:::0;:::o;22558:100::-;22612:13;22645:5;22638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:100;:::o;24117:221::-;24193:7;24221:16;24229:7;24221;:16::i;:::-;24213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24306:15;:24;24322:7;24306:24;;;;;;;;;;;;;;;;;;;;;24299:31;;24117:221;;;:::o;23640:411::-;23721:13;23737:23;23752:7;23737:14;:23::i;:::-;23721:39;;23785:5;23779:11;;:2;:11;;;;23771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23879:5;23863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23888:37;23905:5;23912:12;:10;:12::i;:::-;23888:16;:37::i;:::-;23863:62;23841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24022:21;24031:2;24035:7;24022:8;:21::i;:::-;23640:411;;;:::o;46246:267::-;46282:7;46331:8;46320;;:19;;;;:::i;:::-;46301:15;:38;46298:188;;46386:7;46375:8;;:18;;;;:::i;:::-;46356:15;:37;46353:91;;46418:13;;46411:20;;;;46353:91;46462:15;;46455:22;;;;46298:188;46500:8;;46493:15;;46246:267;;:::o;35306:113::-;35367:7;35394:10;:17;;;;35387:24;;35306:113;:::o;43703:32::-;;;;:::o;25007:339::-;25202:41;25221:12;:10;:12::i;:::-;25235:7;25202:18;:41::i;:::-;25194:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25310:28;25320:4;25326:2;25330:7;25310:9;:28::i;:::-;25007:339;;;:::o;34974:256::-;35071:7;35107:23;35124:5;35107:16;:23::i;:::-;35099:5;:31;35091:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35196:12;:19;35209:5;35196:19;;;;;;;;;;;;;;;:26;35216:5;35196:26;;;;;;;;;;;;35189:33;;34974:256;;;;:::o;45808:225::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45927:11:::1;45919:5;:19;;;;45955:11;45945:7;:21;;;;;;;;;;;;:::i;:::-;;45984:10;45973:8;:21;;;;46012:15;46001:8;:26;;;;45808:225:::0;;;:::o;46618:236::-;46682:42;46668:56;;:10;:56;;;46660:65;;;;;;46732:13;46748:21;46732:37;;46792:42;46784:56;;:63;46841:5;46784:63;;;;;;;;;;;;;;;;;;;;;;;46776:72;;;;;;46618:236;:::o;44082:705::-;44152:14;44169:13;:11;:13::i;:::-;44152:30;;44189:13;44205:6;:4;:6::i;:::-;44189:22;;44233:6;;;;;;;;;;;44232:7;44224:16;;;;;;44269:1;44255:11;:15;44247:24;;;;;;44301:13;;44286:11;:28;;44278:37;;;;;;44354:8;;44339:11;44330:6;:20;;;;:::i;:::-;:32;;44322:41;;;;;;44405:5;;44379:7;:12;44387:3;44379:12;;;;;;;;;;;;;;;:22;;;:31;44376:214;;;44470:13;;44455:11;44434:7;:12;44442:3;44434:12;;;;;;;;;;;;;;;:18;;;:32;;;;:::i;:::-;:49;;44426:58;;;;;;44376:214;;;44534:5;;44509:7;:12;44517:3;44509:12;;;;;;;;;;;;;;;:22;;:30;;;;44571:11;44550:7;:12;44558:3;44550:12;;;;;;;;;;;;;;;:18;;:32;;;;44376:214;44617:6;44605:8;;:18;44602:84;;44666:11;44658:5;:19;;;;:::i;:::-;44645:9;:32;;44637:41;;;;;;44602:84;44701:9;44713:1;44701:13;;44696:86;44721:11;44716:1;:16;44696:86;;44748:26;44758:3;44772:1;44763:6;:10;;;;:::i;:::-;44748:9;:26::i;:::-;44734:3;;;;;:::i;:::-;;;;44696:86;;;;44082:705;;;;:::o;25417:185::-;25555:39;25572:4;25578:2;25582:7;25555:39;;;;;;;;;;;;:16;:39::i;:::-;25417:185;;;:::o;44793:348::-;44868:16;44896:23;44922:17;44932:6;44922:9;:17::i;:::-;44896:43;;44946:25;44988:15;44974:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44946:58;;45016:9;45011:103;45031:15;45027:1;:19;45011:103;;;45076:30;45096:6;45104:1;45076:19;:30::i;:::-;45062:8;45071:1;45062:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45048:3;;;;;:::i;:::-;;;;45011:103;;;;45127:8;45120:15;;;;44793:348;;;:::o;45592:86::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45664:8:::1;45653;:19;;;;45592:86:::0;:::o;46519:90::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46594:9:::1;46583:8;:20;;;;46519:90:::0;:::o;35496:233::-;35571:7;35607:30;:28;:30::i;:::-;35599:5;:38;35591:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35704:10;35715:5;35704:17;;;;;;;;;;;;;;;;;;;;;;;;35697:24;;35496:233;;;:::o;43864:26::-;;;;;;;;;;;;;:::o;43817:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22252:239::-;22324:7;22344:13;22360:7;:16;22368:7;22360:16;;;;;;;;;;;;;;;;;;;;;22344:32;;22412:1;22395:19;;:5;:19;;;;22387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22478:5;22471:12;;;22252:239;;;:::o;43368:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21982:208::-;22054:7;22099:1;22082:19;;:5;:19;;;;22074:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22166:9;:16;22176:5;22166:16;;;;;;;;;;;;;;;;22159:23;;21982:208;;;:::o;42455:94::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42520:21:::1;42538:1;42520:9;:21::i;:::-;42455:94::o:0;45684:118::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45779:17:::1;45763:13;:33;;;;45684:118:::0;:::o;41804:87::-;41850:7;41877:6;;;;;;;;;;;41870:13;;41804:87;:::o;43536:39::-;;;;:::o;22727:104::-;22783:13;22816:7;22809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22727:104;:::o;43641:27::-;;;;:::o;24410:295::-;24525:12;:10;:12::i;:::-;24513:24;;:8;:24;;;;24505:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24625:8;24580:18;:32;24599:12;:10;:12::i;:::-;24580:32;;;;;;;;;;;;;;;:42;24613:8;24580:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24678:8;24649:48;;24664:12;:10;:12::i;:::-;24649:48;;;24688:8;24649:48;;;;;;:::i;:::-;;;;;;;;24410:295;;:::o;43616:20::-;;;;:::o;43333:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25673:328::-;25848:41;25867:12;:10;:12::i;:::-;25881:7;25848:18;:41::i;:::-;25840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25954:39;25968:4;25974:2;25978:7;25987:5;25954:13;:39::i;:::-;25673:328;;;;:::o;43485:46::-;;;;:::o;43394:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45147:423::-;45245:13;45286:16;45294:7;45286;:16::i;:::-;45270:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45376:28;45407:10;:8;:10::i;:::-;45376:41;;45462:1;45437:14;45431:28;:32;:133;;;;;;;;;;;;;;;;;45499:14;45515:18;:7;:16;:18::i;:::-;45535:13;45482:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45431:133;45424:140;;;45147:423;;;:::o;43283:45::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43580:31::-;;;;:::o;46039:122::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46138:17:::1;46122:13;:33;;;;;;;;;;;;:::i;:::-;;46039:122:::0;:::o;43673:23::-;;;;:::o;43436:44::-;;;;:::o;24776:164::-;24873:4;24897:18;:25;24916:5;24897:25;;;;;;;;;;;;;;;:35;24923:8;24897:35;;;;;;;;;;;;;;;;;;;;;;;;;24890:42;;24776:164;;;;:::o;42704:192::-;42035:12;:10;:12::i;:::-;42024:23;;:7;:5;:7::i;:::-;:23;;;42016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42813:1:::1;42793:22;;:8;:22;;;;42785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42869:19;42879:8;42869:9;:19::i;:::-;42704:192:::0;:::o;21613:305::-;21715:4;21767:25;21752:40;;;:11;:40;;;;:105;;;;21824:33;21809:48;;;:11;:48;;;;21752:105;:158;;;;21874:36;21898:11;21874:23;:36::i;:::-;21752:158;21732:178;;21613:305;;;:::o;20087:98::-;20140:7;20167:10;20160:17;;20087:98;:::o;27511:127::-;27576:4;27628:1;27600:30;;:7;:16;27608:7;27600:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27593:37;;27511:127;;;:::o;31493:174::-;31595:2;31568:15;:24;31584:7;31568:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31651:7;31647:2;31613:46;;31622:23;31637:7;31622:14;:23::i;:::-;31613:46;;;;;;;;;;;;31493:174;;:::o;27805:348::-;27898:4;27923:16;27931:7;27923;:16::i;:::-;27915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27999:13;28015:23;28030:7;28015:14;:23::i;:::-;27999:39;;28068:5;28057:16;;:7;:16;;;:51;;;;28101:7;28077:31;;:20;28089:7;28077:11;:20::i;:::-;:31;;;28057:51;:87;;;;28112:32;28129:5;28136:7;28112:16;:32::i;:::-;28057:87;28049:96;;;27805:348;;;;:::o;30797:578::-;30956:4;30929:31;;:23;30944:7;30929:14;:23::i;:::-;:31;;;30921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31039:1;31025:16;;:2;:16;;;;31017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31095:39;31116:4;31122:2;31126:7;31095:20;:39::i;:::-;31199:29;31216:1;31220:7;31199:8;:29::i;:::-;31260:1;31241:9;:15;31251:4;31241:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31289:1;31272:9;:13;31282:2;31272:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31320:2;31301:7;:16;31309:7;31301:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31359:7;31355:2;31340:27;;31349:4;31340:27;;;;;;;;;;;;30797:578;;;:::o;28495:110::-;28571:26;28581:2;28585:7;28571:26;;;;;;;;;;;;:9;:26::i;:::-;28495:110;;:::o;42904:173::-;42960:16;42979:6;;;;;;;;;;;42960:25;;43005:8;42996:6;;:17;;;;;;;;;;;;;;;;;;43060:8;43029:40;;43050:8;43029:40;;;;;;;;;;;;42904:173;;:::o;26883:315::-;27040:28;27050:4;27056:2;27060:7;27040:9;:28::i;:::-;27087:48;27110:4;27116:2;27120:7;27129:5;27087:22;:48::i;:::-;27079:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26883:315;;;;:::o;43961:102::-;44021:13;44050:7;44043:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43961:102;:::o;7919:723::-;7975:13;8205:1;8196:5;:10;8192:53;;;8223:10;;;;;;;;;;;;;;;;;;;;;8192:53;8255:12;8270:5;8255:20;;8286:14;8311:78;8326:1;8318:4;:9;8311:78;;8344:8;;;;;:::i;:::-;;;;8375:2;8367:10;;;;;:::i;:::-;;;8311:78;;;8399:19;8431:6;8421:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8399:39;;8449:154;8465:1;8456:5;:10;8449:154;;8493:1;8483:11;;;;;:::i;:::-;;;8560:2;8552:5;:10;;;;:::i;:::-;8539:2;:24;;;;:::i;:::-;8526:39;;8509:6;8516;8509:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;8589:2;8580:11;;;;;:::i;:::-;;;8449:154;;;8627:6;8613:21;;;;;7919:723;;;;:::o;7444:157::-;7529:4;7568:25;7553:40;;;:11;:40;;;;7546:47;;7444:157;;;:::o;36342:589::-;36486:45;36513:4;36519:2;36523:7;36486:26;:45::i;:::-;36564:1;36548:18;;:4;:18;;;36544:187;;;36583:40;36615:7;36583:31;:40::i;:::-;36544:187;;;36653:2;36645:10;;:4;:10;;;36641:90;;36672:47;36705:4;36711:7;36672:32;:47::i;:::-;36641:90;36544:187;36759:1;36745:16;;:2;:16;;;36741:183;;;36778:45;36815:7;36778:36;:45::i;:::-;36741:183;;;36851:4;36845:10;;:2;:10;;;36841:83;;36872:40;36900:2;36904:7;36872:27;:40::i;:::-;36841:83;36741:183;36342:589;;;:::o;28832:321::-;28962:18;28968:2;28972:7;28962:5;:18::i;:::-;29013:54;29044:1;29048:2;29052:7;29061:5;29013:22;:54::i;:::-;28991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28832:321;;;:::o;32232:799::-;32387:4;32408:15;:2;:13;;;:15::i;:::-;32404:620;;;32460:2;32444:36;;;32481:12;:10;:12::i;:::-;32495:4;32501:7;32510:5;32444:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32703:1;32686:6;:13;:18;32682:272;;;32729:60;;;;;;;;;;:::i;:::-;;;;;;;;32682:272;32904:6;32898:13;32889:6;32885:2;32881:15;32874:38;32440:529;32577:41;;;32567:51;;;:6;:51;;;;32560:58;;;;;32404:620;33008:4;33001:11;;32232:799;;;;;;;:::o;33603:126::-;;;;:::o;37654:164::-;37758:10;:17;;;;37731:15;:24;37747:7;37731:24;;;;;;;;;;;:44;;;;37786:10;37802:7;37786:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37654:164;:::o;38445:988::-;38711:22;38761:1;38736:22;38753:4;38736:16;:22::i;:::-;:26;;;;:::i;:::-;38711:51;;38773:18;38794:17;:26;38812:7;38794:26;;;;;;;;;;;;38773:47;;38941:14;38927:10;:28;38923:328;;38972:19;38994:12;:18;39007:4;38994:18;;;;;;;;;;;;;;;:34;39013:14;38994:34;;;;;;;;;;;;38972:56;;39078:11;39045:12;:18;39058:4;39045:18;;;;;;;;;;;;;;;:30;39064:10;39045:30;;;;;;;;;;;:44;;;;39195:10;39162:17;:30;39180:11;39162:30;;;;;;;;;;;:43;;;;38923:328;;39347:17;:26;39365:7;39347:26;;;;;;;;;;;39340:33;;;39391:12;:18;39404:4;39391:18;;;;;;;;;;;;;;;:34;39410:14;39391:34;;;;;;;;;;;39384:41;;;38445:988;;;;:::o;39728:1079::-;39981:22;40026:1;40006:10;:17;;;;:21;;;;:::i;:::-;39981:46;;40038:18;40059:15;:24;40075:7;40059:24;;;;;;;;;;;;40038:45;;40410:19;40432:10;40443:14;40432:26;;;;;;;;;;;;;;;;;;;;;;;;40410:48;;40496:11;40471:10;40482;40471:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40607:10;40576:15;:28;40592:11;40576:28;;;;;;;;;;;:41;;;;40748:15;:24;40764:7;40748:24;;;;;;;;;;;40741:31;;;40783:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39728:1079;;;;:::o;37232:221::-;37317:14;37334:20;37351:2;37334:16;:20::i;:::-;37317:37;;37392:7;37365:12;:16;37378:2;37365:16;;;;;;;;;;;;;;;:24;37382:6;37365:24;;;;;;;;;;;:34;;;;37439:6;37410:17;:26;37428:7;37410:26;;;;;;;;;;;:35;;;;37232:221;;;:::o;29489:382::-;29583:1;29569:16;;:2;:16;;;;29561:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29642:16;29650:7;29642;:16::i;:::-;29641:17;29633:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29704:45;29733:1;29737:2;29741:7;29704:20;:45::i;:::-;29779:1;29762:9;:13;29772:2;29762:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29810:2;29791:7;:16;29799:7;29791:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29855:7;29851:2;29830:33;;29847:1;29830:33;;;;;;;;;;;;29489:382;;:::o;10444:387::-;10504:4;10712:12;10779:7;10767:20;10759:28;;10822:1;10815:4;:8;10808:15;;;10444:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:665::-;6435:6;6443;6451;6500:2;6488:9;6479:7;6475:23;6471:32;6468:2;;;6516:1;6513;6506:12;6468:2;6559:1;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;:::i;:::-;6574:63;;6530:117;6686:2;6712:53;6757:7;6748:6;6737:9;6733:22;6712:53;:::i;:::-;6702:63;;6657:118;6842:2;6831:9;6827:18;6814:32;6873:18;6865:6;6862:30;6859:2;;;6905:1;6902;6895:12;6859:2;6933:63;6988:7;6979:6;6968:9;6964:22;6933:63;:::i;:::-;6923:73;;6785:221;6458:555;;;;;:::o;7019:179::-;7088:10;7109:46;7151:3;7143:6;7109:46;:::i;:::-;7187:4;7182:3;7178:14;7164:28;;7099:99;;;;:::o;7204:118::-;7291:24;7309:5;7291:24;:::i;:::-;7286:3;7279:37;7269:53;;:::o;7358:732::-;7477:3;7506:54;7554:5;7506:54;:::i;:::-;7576:86;7655:6;7650:3;7576:86;:::i;:::-;7569:93;;7686:56;7736:5;7686:56;:::i;:::-;7765:7;7796:1;7781:284;7806:6;7803:1;7800:13;7781:284;;;7882:6;7876:13;7909:63;7968:3;7953:13;7909:63;:::i;:::-;7902:70;;7995:60;8048:6;7995:60;:::i;:::-;7985:70;;7841:224;7828:1;7825;7821:9;7816:14;;7781:284;;;7785:14;8081:3;8074:10;;7482:608;;;;;;;:::o;8096:109::-;8177:21;8192:5;8177:21;:::i;:::-;8172:3;8165:34;8155:50;;:::o;8211:360::-;8297:3;8325:38;8357:5;8325:38;:::i;:::-;8379:70;8442:6;8437:3;8379:70;:::i;:::-;8372:77;;8458:52;8503:6;8498:3;8491:4;8484:5;8480:16;8458:52;:::i;:::-;8535:29;8557:6;8535:29;:::i;:::-;8530:3;8526:39;8519:46;;8301:270;;;;;:::o;8577:364::-;8665:3;8693:39;8726:5;8693:39;:::i;:::-;8748:71;8812:6;8807:3;8748:71;:::i;:::-;8741:78;;8828:52;8873:6;8868:3;8861:4;8854:5;8850:16;8828:52;:::i;:::-;8905:29;8927:6;8905:29;:::i;:::-;8900:3;8896:39;8889:46;;8669:272;;;;;:::o;8947:377::-;9053:3;9081:39;9114:5;9081:39;:::i;:::-;9136:89;9218:6;9213:3;9136:89;:::i;:::-;9129:96;;9234:52;9279:6;9274:3;9267:4;9260:5;9256:16;9234:52;:::i;:::-;9311:6;9306:3;9302:16;9295:23;;9057:267;;;;;:::o;9354:845::-;9457:3;9494:5;9488:12;9523:36;9549:9;9523:36;:::i;:::-;9575:89;9657:6;9652:3;9575:89;:::i;:::-;9568:96;;9695:1;9684:9;9680:17;9711:1;9706:137;;;;9857:1;9852:341;;;;9673:520;;9706:137;9790:4;9786:9;9775;9771:25;9766:3;9759:38;9826:6;9821:3;9817:16;9810:23;;9706:137;;9852:341;9919:38;9951:5;9919:38;:::i;:::-;9979:1;9993:154;10007:6;10004:1;10001:13;9993:154;;;10081:7;10075:14;10071:1;10066:3;10062:11;10055:35;10131:1;10122:7;10118:15;10107:26;;10029:4;10026:1;10022:12;10017:17;;9993:154;;;10176:6;10171:3;10167:16;10160:23;;9859:334;;9673:520;;9461:738;;;;;;:::o;10205:366::-;10347:3;10368:67;10432:2;10427:3;10368:67;:::i;:::-;10361:74;;10444:93;10533:3;10444:93;:::i;:::-;10562:2;10557:3;10553:12;10546:19;;10351:220;;;:::o;10577:366::-;10719:3;10740:67;10804:2;10799:3;10740:67;:::i;:::-;10733:74;;10816:93;10905:3;10816:93;:::i;:::-;10934:2;10929:3;10925:12;10918:19;;10723:220;;;:::o;10949:366::-;11091:3;11112:67;11176:2;11171:3;11112:67;:::i;:::-;11105:74;;11188:93;11277:3;11188:93;:::i;:::-;11306:2;11301:3;11297:12;11290:19;;11095:220;;;:::o;11321:366::-;11463:3;11484:67;11548:2;11543:3;11484:67;:::i;:::-;11477:74;;11560:93;11649:3;11560:93;:::i;:::-;11678:2;11673:3;11669:12;11662:19;;11467:220;;;:::o;11693:366::-;11835:3;11856:67;11920:2;11915:3;11856:67;:::i;:::-;11849:74;;11932:93;12021:3;11932:93;:::i;:::-;12050:2;12045:3;12041:12;12034:19;;11839:220;;;:::o;12065:366::-;12207:3;12228:67;12292:2;12287:3;12228:67;:::i;:::-;12221:74;;12304:93;12393:3;12304:93;:::i;:::-;12422:2;12417:3;12413:12;12406:19;;12211:220;;;:::o;12437:366::-;12579:3;12600:67;12664:2;12659:3;12600:67;:::i;:::-;12593:74;;12676:93;12765:3;12676:93;:::i;:::-;12794:2;12789:3;12785:12;12778:19;;12583:220;;;:::o;12809:366::-;12951:3;12972:67;13036:2;13031:3;12972:67;:::i;:::-;12965:74;;13048:93;13137:3;13048:93;:::i;:::-;13166:2;13161:3;13157:12;13150:19;;12955:220;;;:::o;13181:366::-;13323:3;13344:67;13408:2;13403:3;13344:67;:::i;:::-;13337:74;;13420:93;13509:3;13420:93;:::i;:::-;13538:2;13533:3;13529:12;13522:19;;13327:220;;;:::o;13553:366::-;13695:3;13716:67;13780:2;13775:3;13716:67;:::i;:::-;13709:74;;13792:93;13881:3;13792:93;:::i;:::-;13910:2;13905:3;13901:12;13894:19;;13699:220;;;:::o;13925:366::-;14067:3;14088:67;14152:2;14147:3;14088:67;:::i;:::-;14081:74;;14164:93;14253:3;14164:93;:::i;:::-;14282:2;14277:3;14273:12;14266:19;;14071:220;;;:::o;14297:366::-;14439:3;14460:67;14524:2;14519:3;14460:67;:::i;:::-;14453:74;;14536:93;14625:3;14536:93;:::i;:::-;14654:2;14649:3;14645:12;14638:19;;14443:220;;;:::o;14669:366::-;14811:3;14832:67;14896:2;14891:3;14832:67;:::i;:::-;14825:74;;14908:93;14997:3;14908:93;:::i;:::-;15026:2;15021:3;15017:12;15010:19;;14815:220;;;:::o;15041:366::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15187:220;;;:::o;15413:366::-;15555:3;15576:67;15640:2;15635:3;15576:67;:::i;:::-;15569:74;;15652:93;15741:3;15652:93;:::i;:::-;15770:2;15765:3;15761:12;15754:19;;15559:220;;;:::o;15785:366::-;15927:3;15948:67;16012:2;16007:3;15948:67;:::i;:::-;15941:74;;16024:93;16113:3;16024:93;:::i;:::-;16142:2;16137:3;16133:12;16126:19;;15931:220;;;:::o;16157:366::-;16299:3;16320:67;16384:2;16379:3;16320:67;:::i;:::-;16313:74;;16396:93;16485:3;16396:93;:::i;:::-;16514:2;16509:3;16505:12;16498:19;;16303:220;;;:::o;16529:366::-;16671:3;16692:67;16756:2;16751:3;16692:67;:::i;:::-;16685:74;;16768:93;16857:3;16768:93;:::i;:::-;16886:2;16881:3;16877:12;16870:19;;16675:220;;;:::o;16901:108::-;16978:24;16996:5;16978:24;:::i;:::-;16973:3;16966:37;16956:53;;:::o;17015:118::-;17102:24;17120:5;17102:24;:::i;:::-;17097:3;17090:37;17080:53;;:::o;17139:589::-;17364:3;17386:95;17477:3;17468:6;17386:95;:::i;:::-;17379:102;;17498:95;17589:3;17580:6;17498:95;:::i;:::-;17491:102;;17610:92;17698:3;17689:6;17610:92;:::i;:::-;17603:99;;17719:3;17712:10;;17368:360;;;;;;:::o;17734:222::-;17827:4;17865:2;17854:9;17850:18;17842:26;;17878:71;17946:1;17935:9;17931:17;17922:6;17878:71;:::i;:::-;17832:124;;;;:::o;17962:640::-;18157:4;18195:3;18184:9;18180:19;18172:27;;18209:71;18277:1;18266:9;18262:17;18253:6;18209:71;:::i;:::-;18290:72;18358:2;18347:9;18343:18;18334:6;18290:72;:::i;:::-;18372;18440:2;18429:9;18425:18;18416:6;18372:72;:::i;:::-;18491:9;18485:4;18481:20;18476:2;18465:9;18461:18;18454:48;18519:76;18590:4;18581:6;18519:76;:::i;:::-;18511:84;;18162:440;;;;;;;:::o;18608:373::-;18751:4;18789:2;18778:9;18774:18;18766:26;;18838:9;18832:4;18828:20;18824:1;18813:9;18809:17;18802:47;18866:108;18969:4;18960:6;18866:108;:::i;:::-;18858:116;;18756:225;;;;:::o;18987:210::-;19074:4;19112:2;19101:9;19097:18;19089:26;;19125:65;19187:1;19176:9;19172:17;19163:6;19125:65;:::i;:::-;19079:118;;;;:::o;19203:313::-;19316:4;19354:2;19343:9;19339:18;19331:26;;19403:9;19397:4;19393:20;19389:1;19378:9;19374:17;19367:47;19431:78;19504:4;19495:6;19431:78;:::i;:::-;19423:86;;19321:195;;;;:::o;19522:419::-;19688:4;19726:2;19715:9;19711:18;19703:26;;19775:9;19769:4;19765:20;19761:1;19750:9;19746:17;19739:47;19803:131;19929:4;19803:131;:::i;:::-;19795:139;;19693:248;;;:::o;19947:419::-;20113:4;20151:2;20140:9;20136:18;20128:26;;20200:9;20194:4;20190:20;20186:1;20175:9;20171:17;20164:47;20228:131;20354:4;20228:131;:::i;:::-;20220:139;;20118:248;;;:::o;20372:419::-;20538:4;20576:2;20565:9;20561:18;20553:26;;20625:9;20619:4;20615:20;20611:1;20600:9;20596:17;20589:47;20653:131;20779:4;20653:131;:::i;:::-;20645:139;;20543:248;;;:::o;20797:419::-;20963:4;21001:2;20990:9;20986:18;20978:26;;21050:9;21044:4;21040:20;21036:1;21025:9;21021:17;21014:47;21078:131;21204:4;21078:131;:::i;:::-;21070:139;;20968:248;;;:::o;21222:419::-;21388:4;21426:2;21415:9;21411:18;21403:26;;21475:9;21469:4;21465:20;21461:1;21450:9;21446:17;21439:47;21503:131;21629:4;21503:131;:::i;:::-;21495:139;;21393:248;;;:::o;21647:419::-;21813:4;21851:2;21840:9;21836:18;21828:26;;21900:9;21894:4;21890:20;21886:1;21875:9;21871:17;21864:47;21928:131;22054:4;21928:131;:::i;:::-;21920:139;;21818:248;;;:::o;22072:419::-;22238:4;22276:2;22265:9;22261:18;22253:26;;22325:9;22319:4;22315:20;22311:1;22300:9;22296:17;22289:47;22353:131;22479:4;22353:131;:::i;:::-;22345:139;;22243:248;;;:::o;22497:419::-;22663:4;22701:2;22690:9;22686:18;22678:26;;22750:9;22744:4;22740:20;22736:1;22725:9;22721:17;22714:47;22778:131;22904:4;22778:131;:::i;:::-;22770:139;;22668:248;;;:::o;22922:419::-;23088:4;23126:2;23115:9;23111:18;23103:26;;23175:9;23169:4;23165:20;23161:1;23150:9;23146:17;23139:47;23203:131;23329:4;23203:131;:::i;:::-;23195:139;;23093:248;;;:::o;23347:419::-;23513:4;23551:2;23540:9;23536:18;23528:26;;23600:9;23594:4;23590:20;23586:1;23575:9;23571:17;23564:47;23628:131;23754:4;23628:131;:::i;:::-;23620:139;;23518:248;;;:::o;23772:419::-;23938:4;23976:2;23965:9;23961:18;23953:26;;24025:9;24019:4;24015:20;24011:1;24000:9;23996:17;23989:47;24053:131;24179:4;24053:131;:::i;:::-;24045:139;;23943:248;;;:::o;24197:419::-;24363:4;24401:2;24390:9;24386:18;24378:26;;24450:9;24444:4;24440:20;24436:1;24425:9;24421:17;24414:47;24478:131;24604:4;24478:131;:::i;:::-;24470:139;;24368:248;;;:::o;24622:419::-;24788:4;24826:2;24815:9;24811:18;24803:26;;24875:9;24869:4;24865:20;24861:1;24850:9;24846:17;24839:47;24903:131;25029:4;24903:131;:::i;:::-;24895:139;;24793:248;;;:::o;25047:419::-;25213:4;25251:2;25240:9;25236:18;25228:26;;25300:9;25294:4;25290:20;25286:1;25275:9;25271:17;25264:47;25328:131;25454:4;25328:131;:::i;:::-;25320:139;;25218:248;;;:::o;25472:419::-;25638:4;25676:2;25665:9;25661:18;25653:26;;25725:9;25719:4;25715:20;25711:1;25700:9;25696:17;25689:47;25753:131;25879:4;25753:131;:::i;:::-;25745:139;;25643:248;;;:::o;25897:419::-;26063:4;26101:2;26090:9;26086:18;26078:26;;26150:9;26144:4;26140:20;26136:1;26125:9;26121:17;26114:47;26178:131;26304:4;26178:131;:::i;:::-;26170:139;;26068:248;;;:::o;26322:419::-;26488:4;26526:2;26515:9;26511:18;26503:26;;26575:9;26569:4;26565:20;26561:1;26550:9;26546:17;26539:47;26603:131;26729:4;26603:131;:::i;:::-;26595:139;;26493:248;;;:::o;26747:419::-;26913:4;26951:2;26940:9;26936:18;26928:26;;27000:9;26994:4;26990:20;26986:1;26975:9;26971:17;26964:47;27028:131;27154:4;27028:131;:::i;:::-;27020:139;;26918:248;;;:::o;27172:222::-;27265:4;27303:2;27292:9;27288:18;27280:26;;27316:71;27384:1;27373:9;27369:17;27360:6;27316:71;:::i;:::-;27270:124;;;;:::o;27400:332::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27572:71;27640:1;27629:9;27625:17;27616:6;27572:71;:::i;:::-;27653:72;27721:2;27710:9;27706:18;27697:6;27653:72;:::i;:::-;27526:206;;;;;:::o;27738:129::-;27772:6;27799:20;;:::i;:::-;27789:30;;27828:33;27856:4;27848:6;27828:33;:::i;:::-;27779:88;;;:::o;27873:75::-;27906:6;27939:2;27933:9;27923:19;;27913:35;:::o;27954:307::-;28015:4;28105:18;28097:6;28094:30;28091:2;;;28127:18;;:::i;:::-;28091:2;28165:29;28187:6;28165:29;:::i;:::-;28157:37;;28249:4;28243;28239:15;28231:23;;28020:241;;;:::o;28267:308::-;28329:4;28419:18;28411:6;28408:30;28405:2;;;28441:18;;:::i;:::-;28405:2;28479:29;28501:6;28479:29;:::i;:::-;28471:37;;28563:4;28557;28553:15;28545:23;;28334:241;;;:::o;28581:132::-;28648:4;28671:3;28663:11;;28701:4;28696:3;28692:14;28684:22;;28653:60;;;:::o;28719:141::-;28768:4;28791:3;28783:11;;28814:3;28811:1;28804:14;28848:4;28845:1;28835:18;28827:26;;28773:87;;;:::o;28866:114::-;28933:6;28967:5;28961:12;28951:22;;28940:40;;;:::o;28986:98::-;29037:6;29071:5;29065:12;29055:22;;29044:40;;;:::o;29090:99::-;29142:6;29176:5;29170:12;29160:22;;29149:40;;;:::o;29195:113::-;29265:4;29297;29292:3;29288:14;29280:22;;29270:38;;;:::o;29314:184::-;29413:11;29447:6;29442:3;29435:19;29487:4;29482:3;29478:14;29463:29;;29425:73;;;;:::o;29504:168::-;29587:11;29621:6;29616:3;29609:19;29661:4;29656:3;29652:14;29637:29;;29599:73;;;;:::o;29678:169::-;29762:11;29796:6;29791:3;29784:19;29836:4;29831:3;29827:14;29812:29;;29774:73;;;;:::o;29853:148::-;29955:11;29992:3;29977:18;;29967:34;;;;:::o;30007:305::-;30047:3;30066:20;30084:1;30066:20;:::i;:::-;30061:25;;30100:20;30118:1;30100:20;:::i;:::-;30095:25;;30254:1;30186:66;30182:74;30179:1;30176:81;30173:2;;;30260:18;;:::i;:::-;30173:2;30304:1;30301;30297:9;30290:16;;30051:261;;;;:::o;30318:185::-;30358:1;30375:20;30393:1;30375:20;:::i;:::-;30370:25;;30409:20;30427:1;30409:20;:::i;:::-;30404:25;;30448:1;30438:2;;30453:18;;:::i;:::-;30438:2;30495:1;30492;30488:9;30483:14;;30360:143;;;;:::o;30509:348::-;30549:7;30572:20;30590:1;30572:20;:::i;:::-;30567:25;;30606:20;30624:1;30606:20;:::i;:::-;30601:25;;30794:1;30726:66;30722:74;30719:1;30716:81;30711:1;30704:9;30697:17;30693:105;30690:2;;;30801:18;;:::i;:::-;30690:2;30849:1;30846;30842:9;30831:20;;30557:300;;;;:::o;30863:191::-;30903:4;30923:20;30941:1;30923:20;:::i;:::-;30918:25;;30957:20;30975:1;30957:20;:::i;:::-;30952:25;;30996:1;30993;30990:8;30987:2;;;31001:18;;:::i;:::-;30987:2;31046:1;31043;31039:9;31031:17;;30908:146;;;;:::o;31060:96::-;31097:7;31126:24;31144:5;31126:24;:::i;:::-;31115:35;;31105:51;;;:::o;31162:90::-;31196:7;31239:5;31232:13;31225:21;31214:32;;31204:48;;;:::o;31258:149::-;31294:7;31334:66;31327:5;31323:78;31312:89;;31302:105;;;:::o;31413:126::-;31450:7;31490:42;31483:5;31479:54;31468:65;;31458:81;;;:::o;31545:77::-;31582:7;31611:5;31600:16;;31590:32;;;:::o;31628:154::-;31712:6;31707:3;31702;31689:30;31774:1;31765:6;31760:3;31756:16;31749:27;31679:103;;;:::o;31788:307::-;31856:1;31866:113;31880:6;31877:1;31874:13;31866:113;;;31965:1;31960:3;31956:11;31950:18;31946:1;31941:3;31937:11;31930:39;31902:2;31899:1;31895:10;31890:15;;31866:113;;;31997:6;31994:1;31991:13;31988:2;;;32077:1;32068:6;32063:3;32059:16;32052:27;31988:2;31837:258;;;;:::o;32101:320::-;32145:6;32182:1;32176:4;32172:12;32162:22;;32229:1;32223:4;32219:12;32250:18;32240:2;;32306:4;32298:6;32294:17;32284:27;;32240:2;32368;32360:6;32357:14;32337:18;32334:38;32331:2;;;32387:18;;:::i;:::-;32331:2;32152:269;;;;:::o;32427:281::-;32510:27;32532:4;32510:27;:::i;:::-;32502:6;32498:40;32640:6;32628:10;32625:22;32604:18;32592:10;32589:34;32586:62;32583:2;;;32651:18;;:::i;:::-;32583:2;32691:10;32687:2;32680:22;32470:238;;;:::o;32714:233::-;32753:3;32776:24;32794:5;32776:24;:::i;:::-;32767:33;;32822:66;32815:5;32812:77;32809:2;;;32892:18;;:::i;:::-;32809:2;32939:1;32932:5;32928:13;32921:20;;32757:190;;;:::o;32953:176::-;32985:1;33002:20;33020:1;33002:20;:::i;:::-;32997:25;;33036:20;33054:1;33036:20;:::i;:::-;33031:25;;33075:1;33065:2;;33080:18;;:::i;:::-;33065:2;33121:1;33118;33114:9;33109:14;;32987:142;;;;:::o;33135:180::-;33183:77;33180:1;33173:88;33280:4;33277:1;33270:15;33304:4;33301:1;33294:15;33321:180;33369:77;33366:1;33359:88;33466:4;33463:1;33456:15;33490:4;33487:1;33480:15;33507:180;33555:77;33552:1;33545:88;33652:4;33649:1;33642:15;33676:4;33673:1;33666:15;33693:180;33741:77;33738:1;33731:88;33838:4;33835:1;33828:15;33862:4;33859:1;33852:15;33879:102;33920:6;33971:2;33967:7;33962:2;33955:5;33951:14;33947:28;33937:38;;33927:54;;;:::o;33987:230::-;34127:34;34123:1;34115:6;34111:14;34104:58;34196:13;34191:2;34183:6;34179:15;34172:38;34093:124;:::o;34223:237::-;34363:34;34359:1;34351:6;34347:14;34340:58;34432:20;34427:2;34419:6;34415:15;34408:45;34329:131;:::o;34466:225::-;34606:34;34602:1;34594:6;34590:14;34583:58;34675:8;34670:2;34662:6;34658:15;34651:33;34572:119;:::o;34697:178::-;34837:30;34833:1;34825:6;34821:14;34814:54;34803:72;:::o;34881:223::-;35021:34;35017:1;35009:6;35005:14;34998:58;35090:6;35085:2;35077:6;35073:15;35066:31;34987:117;:::o;35110:175::-;35250:27;35246:1;35238:6;35234:14;35227:51;35216:69;:::o;35291:231::-;35431:34;35427:1;35419:6;35415:14;35408:58;35500:14;35495:2;35487:6;35483:15;35476:39;35397:125;:::o;35528:243::-;35668:34;35664:1;35656:6;35652:14;35645:58;35737:26;35732:2;35724:6;35720:15;35713:51;35634:137;:::o;35777:229::-;35917:34;35913:1;35905:6;35901:14;35894:58;35986:12;35981:2;35973:6;35969:15;35962:37;35883:123;:::o;36012:228::-;36152:34;36148:1;36140:6;36136:14;36129:58;36221:11;36216:2;36208:6;36204:15;36197:36;36118:122;:::o;36246:182::-;36386:34;36382:1;36374:6;36370:14;36363:58;36352:76;:::o;36434:231::-;36574:34;36570:1;36562:6;36558:14;36551:58;36643:14;36638:2;36630:6;36626:15;36619:39;36540:125;:::o;36671:182::-;36811:34;36807:1;36799:6;36795:14;36788:58;36777:76;:::o;36859:228::-;36999:34;36995:1;36987:6;36983:14;36976:58;37068:11;37063:2;37055:6;37051:15;37044:36;36965:122;:::o;37093:234::-;37233:34;37229:1;37221:6;37217:14;37210:58;37302:17;37297:2;37289:6;37285:15;37278:42;37199:128;:::o;37333:220::-;37473:34;37469:1;37461:6;37457:14;37450:58;37542:3;37537:2;37529:6;37525:15;37518:28;37439:114;:::o;37559:236::-;37699:34;37695:1;37687:6;37683:14;37676:58;37768:19;37763:2;37755:6;37751:15;37744:44;37665:130;:::o;37801:231::-;37941:34;37937:1;37929:6;37925:14;37918:58;38010:14;38005:2;37997:6;37993:15;37986:39;37907:125;:::o;38038:122::-;38111:24;38129:5;38111:24;:::i;:::-;38104:5;38101:35;38091:2;;38150:1;38147;38140:12;38091:2;38081:79;:::o;38166:116::-;38236:21;38251:5;38236:21;:::i;:::-;38229:5;38226:32;38216:2;;38272:1;38269;38262:12;38216:2;38206:76;:::o;38288:120::-;38360:23;38377:5;38360:23;:::i;:::-;38353:5;38350:34;38340:2;;38398:1;38395;38388:12;38340:2;38330:78;:::o;38414:122::-;38487:24;38505:5;38487:24;:::i;:::-;38480:5;38477:35;38467:2;;38526:1;38523;38516:12;38467:2;38457:79;:::o
Swarm Source
ipfs://dfded1faf864b3ed376b99754f67dd7ef1aa579317f4bc6106eb1bde16655bc1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.