ERC-721
Overview
Max Total Supply
456 GLG
Holders
293
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 GLGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoodLuckGatorsNFTs
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-19 */ // SPDX-License-Identifier: GPL-3.0 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/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol 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/GoodLuckGatorsNFTs.sol pragma solidity >=0.7.0 <0.9.0; contract GoodLuckGatorsNFTs is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public genesisGatorPrice = 0.1 ether; uint256 public regularGatorPrice = 0.069 ether; uint256 public maxSupply = 6900; uint256 public maxGensisSupply = 1000; uint256 public maxPerGensisGator = 1; uint256 public maxPerRegularGator = 4; uint256 _ownerMint = 0; uint256 _maxOwnerMint = 40; bool public paused = true; bool public whiteListMintingAvaliable = false; address _ownerA = payable(0x47f19F2EA211f9Baa87339D7B919b157601FcEe0); address _ownerB = payable(0x0D0ce77d38ed66Db3a229d45f9A9158c0bAECA0B); mapping(address => bool) whiteListWallets; constructor( string memory _initBaseURI ) ERC721("Good Luck Gators","GLG"){ setBaseURI(_initBaseURI); } function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(_mintAmount > 0, "Good Luck Gators: Mint amount should be greater than 0."); require(supply + _mintAmount <= maxSupply, "Good Luck Gators: No more NFTs to mint, check out OpenSea!"); if (msg.sender == owner() && (_ownerMint+_mintAmount < _maxOwnerMint)){ for(uint256 i = 1; i <= _mintAmount; i++){ _safeMint(_to,supply + i); } }else if (inWhiteList(msg.sender) && whiteListMintingAvaliable){ require(msg.value >= genesisGatorPrice,"Good Luck Gators: This is a genesis gator minimum minting price for each is 0.1 ether!"); _safeMint(_to, supply+1); removeFromWhiteList(msg.sender); }else{ require(!paused, "Good Luck Gators: Contract paused."); if (supply <= maxGensisSupply){ require(msg.value >= calculatePrice(_mintAmount, genesisGatorPrice), "Good Luck Gators: This is a genesis gator minimum minting price for each is 0.1 ether!"); require(_mintAmount == maxPerGensisGator, "Good Luck Gators: You can only mint one gensis gator per transaction. Tryna get lucky much?"); for(uint256 i = 1; i <= _mintAmount; i++){ _safeMint(_to,supply + i); } }else{ require(msg.value >= calculatePrice(_mintAmount, regularGatorPrice), "Good Luck Gators: This is a regulat gator minimum minting price for each is 0.069 ether!"); require(_mintAmount <= maxPerRegularGator, "Good Luck Gators: You can only mint the maximum amount of regular gators per transaction. Tryna get lucky much?"); 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),"Good Luck Gators: This NFT does not exist."); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function WalletTokenURIs(address _owner) public view returns(string[] memory _tokenURIs){ uint256[] memory _ids = WalletOfOwner(_owner); require(_ids.length > 0, "Good Luck Gators: This address isn't lucky as they do not own any gators!"); string[] memory _uris = new string[](_ids.length); for (uint256 i=0; i< _ids.length; i++){ _uris[i] = tokenURI(_ids[i]); } return (_uris); } function inWhiteList(address _wallet) public view returns(bool){ return (whiteListWallets[_wallet]); } function setPriceRegularGator(uint256 _newPrice) public onlyOwner(){ regularGatorPrice = _newPrice; } function setPriceGensisGator(uint256 _newPrice) public onlyOwner(){ genesisGatorPrice = _newPrice; } function setBaseURI(string memory _newBaseURI) public onlyOwner(){ baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner(){ baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner(){ paused = _state; } function withdraw() public payable onlyOwner(){ uint256 _distPrize = calculatePayout(); require(payable(_ownerA).send(_distPrize)); require(payable(_ownerB).send(_distPrize)); require(payable(msg.sender).send(address(this).balance)); } function addToWalletsBulk(address[] calldata _wallets) public onlyOwner(){ uint256 lengthOfWallets = _wallets.length; for(uint256 i=0;i<lengthOfWallets; i++){ whiteListWallets[_wallets[i]] = true; } } function addToWhiteList(address _wallet) public onlyOwner(){ whiteListWallets[_wallet] = true; } function setWhiteListMinting(bool _state) public onlyOwner(){ whiteListMintingAvaliable = _state; } function setMaxGensisGatorMint(uint256 amount) public onlyOwner(){ maxPerRegularGator = amount; } function setMaxRegularGatorMint(uint256 amount) public onlyOwner(){ maxPerRegularGator = amount; } function removeFromWhiteList(address _wallet) internal { whiteListWallets[_wallet] = false; } function calculatePayout() internal view returns(uint256 _payTwo){ uint256 _curBalance = address(this).balance; return(_curBalance/2); } function _baseURI() internal view virtual override returns (string memory){ return baseURI; } function calculatePrice(uint256 _n1, uint256 _n2) internal pure returns(uint256){ return(_n1*_n2); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"WalletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"WalletTokenURIs","outputs":[{"internalType":"string[]","name":"_tokenURIs","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addToWalletsBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisGatorPrice","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":"_wallet","type":"address"}],"name":"inWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGensisSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerGensisGator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerRegularGator","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":"regularGatorPrice","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":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxGensisGatorMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxRegularGatorMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPriceGensisGator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPriceRegularGator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhiteListMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListMintingAvaliable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000417565b5067016345785d8a0000600d5566f5232269808000600e55611af4600f556103e860105560016011556004601255600060135560286014556001601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055507347f19f2ea211f9baa87339d7b919b157601fcee0601560026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d0ce77d38ed66db3a229d45f9a9158c0baeca0b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200017657600080fd5b5060405162005ba238038062005ba283398181016040528101906200019c919062000545565b6040518060400160405280601081526020017f476f6f64204c75636b204761746f7273000000000000000000000000000000008152506040518060400160405280600381526020017f474c47000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200022092919062000417565b5080600190805190602001906200023992919062000417565b5050506200025c620002506200027460201b60201c565b6200027c60201b60201c565b6200026d816200034260201b60201c565b506200079d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003526200027460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000378620003ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c890620005bd565b60405180910390fd5b80600b9080519060200190620003e992919062000417565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004259062000685565b90600052602060002090601f01602090048101928262000449576000855562000495565b82601f106200046457805160ff191683800117855562000495565b8280016001018555821562000495579182015b828111156200049457825182559160200191906001019062000477565b5b509050620004a49190620004a8565b5090565b5b80821115620004c3576000816000905550600101620004a9565b5090565b6000620004de620004d88462000608565b620005df565b905082815260208101848484011115620004fd57620004fc62000754565b5b6200050a8482856200064f565b509392505050565b600082601f8301126200052a57620005296200074f565b5b81516200053c848260208601620004c7565b91505092915050565b6000602082840312156200055e576200055d6200075e565b5b600082015167ffffffffffffffff8111156200057f576200057e62000759565b5b6200058d8482850162000512565b91505092915050565b6000620005a56020836200063e565b9150620005b28262000774565b602082019050919050565b60006020820190508181036000830152620005d88162000596565b9050919050565b6000620005eb620005fe565b9050620005f98282620006bb565b919050565b6000604051905090565b600067ffffffffffffffff82111562000626576200062562000720565b5b620006318262000763565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200066f57808201518184015260208101905062000652565b838111156200067f576000848401525b50505050565b600060028204905060018216806200069e57607f821691505b60208210811415620006b557620006b4620006f1565b5b50919050565b620006c68262000763565b810181811067ffffffffffffffff82111715620006e857620006e762000720565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6153f580620007ad6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063ba24a17e116100b6578063da3ef23f1161007a578063da3ef23f14610912578063e6f1367b1461093b578063e985e9c514610964578063edd45b26146109a1578063efa21e81146109de578063f2fde38b14610a0957610267565b8063ba24a17e1461082d578063c5559ba214610856578063c66828621461087f578063c87b56dd146108aa578063d5abeb01146108e757610267565b806395d89b411161010857806395d89b4114610731578063a22cb4651461075c578063b792907f14610785578063b7cb0019146107ae578063b7f21c51146107d9578063b88d4fde1461080457610267565b806370a082311461065c578063715018a614610699578063801594ba146106b0578063847ca91a146106db5780638da5cb5b1461070657610267565b806340c10f19116101dd57806358c2bfe1116101a157806358c2bfe1146105265780635c975abb1461056357806360da78971461058e5780636352211e146105b757806369e0e346146105f45780636c0360eb1461063157610267565b806340c10f191461045257806342842e0e1461046e57806347ee0394146104975780634f6ccce7146104c057806355f804b3146104fd57610267565b8063107c66cf1161022f578063107c66cf1461036357806318160ddd1461038c57806323b872dd146103b757806325f9ee2c146103e05780632f745c591461040b5780633ccfd60b1461044857610267565b806301ffc9a71461026c57806302329a29146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a56565b610a32565b6040516102a09190614226565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613a29565b610aac565b005b3480156102de57600080fd5b506102e7610b45565b6040516102f49190614241565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613af9565b610bd7565b604051610331919061417b565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061399c565b610c5c565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613af9565b610d74565b005b34801561039857600080fd5b506103a1610dfa565b6040516103ae91906145a3565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613886565b610e07565b005b3480156103ec57600080fd5b506103f5610e67565b6040516104029190614226565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d919061399c565b610e7a565b60405161043f91906145a3565b60405180910390f35b610450610f1f565b005b61046c6004803603810190610467919061399c565b6110a8565b005b34801561047a57600080fd5b5061049560048036038101906104909190613886565b611460565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613819565b611480565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613af9565b611557565b6040516104f491906145a3565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ab0565b6115c8565b005b34801561053257600080fd5b5061054d60048036038101906105489190613819565b61165e565b60405161055a9190614204565b60405180910390f35b34801561056f57600080fd5b5061057861170c565b6040516105859190614226565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b091906139dc565b61171f565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613af9565b611846565b6040516105eb919061417b565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613819565b6118f8565b6040516106289190614226565b60405180910390f35b34801561063d57600080fd5b5061064661194e565b6040516106539190614241565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190613819565b6119dc565b60405161069091906145a3565b60405180910390f35b3480156106a557600080fd5b506106ae611a94565b005b3480156106bc57600080fd5b506106c5611b1c565b6040516106d291906145a3565b60405180910390f35b3480156106e757600080fd5b506106f0611b22565b6040516106fd91906145a3565b60405180910390f35b34801561071257600080fd5b5061071b611b28565b604051610728919061417b565b60405180910390f35b34801561073d57600080fd5b50610746611b52565b6040516107539190614241565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e919061395c565b611be4565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613af9565b611d65565b005b3480156107ba57600080fd5b506107c3611deb565b6040516107d091906145a3565b60405180910390f35b3480156107e557600080fd5b506107ee611df1565b6040516107fb91906145a3565b60405180910390f35b34801561081057600080fd5b5061082b600480360381019061082691906138d9565b611df7565b005b34801561083957600080fd5b50610854600480360381019061084f9190613af9565b611e59565b005b34801561086257600080fd5b5061087d60048036038101906108789190613af9565b611edf565b005b34801561088b57600080fd5b50610894611f65565b6040516108a19190614241565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613af9565b611ff3565b6040516108de9190614241565b60405180910390f35b3480156108f357600080fd5b506108fc61209d565b60405161090991906145a3565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613ab0565b6120a3565b005b34801561094757600080fd5b50610962600480360381019061095d9190613a29565b612139565b005b34801561097057600080fd5b5061098b60048036038101906109869190613846565b6121d2565b6040516109989190614226565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190613819565b612266565b6040516109d591906141e2565b60405180910390f35b3480156109ea57600080fd5b506109f3612377565b604051610a0091906145a3565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613819565b61237d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa55750610aa482612475565b5b9050919050565b610ab4612557565b73ffffffffffffffffffffffffffffffffffffffff16610ad2611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906144e3565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610b54906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b80906148eb565b8015610bcd5780601f10610ba257610100808354040283529160200191610bcd565b820191906000526020600020905b815481529060010190602001808311610bb057829003601f168201915b5050505050905090565b6000610be28261255f565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906144a3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6782611846565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90614523565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf7612557565b73ffffffffffffffffffffffffffffffffffffffff161480610d265750610d2581610d20612557565b6121d2565b5b610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90614403565b60405180910390fd5b610d6f83836125cb565b505050565b610d7c612557565b73ffffffffffffffffffffffffffffffffffffffff16610d9a611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906144e3565b60405180910390fd5b8060128190555050565b6000600880549050905090565b610e18610e12612557565b82612684565b610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90614543565b60405180910390fd5b610e62838383612762565b505050565b601560019054906101000a900460ff1681565b6000610e85836119dc565b8210610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd906142c3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f27612557565b73ffffffffffffffffffffffffffffffffffffffff16610f45611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906144e3565b60405180910390fd5b6000610fa56129be565b9050601560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061100757600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061106757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110a557600080fd5b50565b60006110b2610dfa565b9050600082116110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90614263565b60405180910390fd5b600f5482826111069190614720565b1115611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614583565b60405180910390fd5b61114f611b28565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156111975750601454826013546111959190614720565b105b156111d8576000600190505b8281116111d2576111bf8482846111ba9190614720565b6129d7565b80806111ca9061494e565b9150506111a3565b5061145b565b6111e1336118f8565b80156111f95750601560019054906101000a900460ff165b1561126757600d54341015611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a906142a3565b60405180910390fd5b611259836001836112549190614720565b6129d7565b611262336129f5565b61145a565b601560009054906101000a900460ff16156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906144c3565b60405180910390fd5b601054811161138e576112cc82600d54612a50565b34101561130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906142a3565b60405180910390fd5b6011548214611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990614483565b60405180910390fd5b6000600190505b828111611388576113758482846113709190614720565b6129d7565b80806113809061494e565b915050611359565b50611459565b61139a82600e54612a50565b3410156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390614343565b60405180910390fd5b601254821115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890614283565b60405180910390fd5b6000600190505b8281116114575761144484828461143f9190614720565b6129d7565b808061144f9061494e565b915050611428565b505b5b5b505050565b61147b83838360405180602001604052806000815250611df7565b505050565b611488612557565b73ffffffffffffffffffffffffffffffffffffffff166114a6611b28565b73ffffffffffffffffffffffffffffffffffffffff16146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f3906144e3565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611561610dfa565b82106115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614563565b60405180910390fd5b600882815481106115b6576115b5614a84565b5b90600052602060002001549050919050565b6115d0612557565b73ffffffffffffffffffffffffffffffffffffffff166115ee611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906144e3565b60405180910390fd5b80600b908051906020019061165a9291906135d7565b5050565b6060600061166b836119dc565b905060008167ffffffffffffffff81111561168957611688614ab3565b5b6040519080825280602002602001820160405280156116b75781602001602082028036833780820191505090505b50905060005b82811015611701576116cf8582610e7a565b8282815181106116e2576116e1614a84565b5b60200260200101818152505080806116f99061494e565b9150506116bd565b508092505050919050565b601560009054906101000a900460ff1681565b611727612557565b73ffffffffffffffffffffffffffffffffffffffff16611745611b28565b73ffffffffffffffffffffffffffffffffffffffff161461179b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611792906144e3565b60405180910390fd5b600082829050905060005b81811015611840576001601760008686858181106117c7576117c6614a84565b5b90506020020160208101906117dc9190613819565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118389061494e565b9150506117a6565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690614443565b60405180910390fd5b80915050919050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b805461195b906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611987906148eb565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490614423565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a9c612557565b73ffffffffffffffffffffffffffffffffffffffff16611aba611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b07906144e3565b60405180910390fd5b611b1a6000612a66565b565b600d5481565b60125481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b61906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8d906148eb565b8015611bda5780601f10611baf57610100808354040283529160200191611bda565b820191906000526020600020905b815481529060010190602001808311611bbd57829003601f168201915b5050505050905090565b611bec612557565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614383565b60405180910390fd5b8060056000611c67612557565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d14612557565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d599190614226565b60405180910390a35050565b611d6d612557565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906144e3565b60405180910390fd5b8060128190555050565b60115481565b600e5481565b611e08611e02612557565b83612684565b611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614543565b60405180910390fd5b611e5384848484612b2c565b50505050565b611e61612557565b73ffffffffffffffffffffffffffffffffffffffff16611e7f611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc906144e3565b60405180910390fd5b80600d8190555050565b611ee7612557565b73ffffffffffffffffffffffffffffffffffffffff16611f05611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f52906144e3565b60405180910390fd5b80600e8190555050565b600c8054611f72906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9e906148eb565b8015611feb5780601f10611fc057610100808354040283529160200191611feb565b820191906000526020600020905b815481529060010190602001808311611fce57829003601f168201915b505050505081565b6060611ffe8261255f565b61203d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612034906143a3565b60405180910390fd5b6000612047612b88565b905060008151116120675760405180602001604052806000815250612095565b8061207184612c1a565b600c6040516020016120859392919061414a565b6040516020818303038152906040525b915050919050565b600f5481565b6120ab612557565b73ffffffffffffffffffffffffffffffffffffffff166120c9611b28565b73ffffffffffffffffffffffffffffffffffffffff161461211f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612116906144e3565b60405180910390fd5b80600c90805190602001906121359291906135d7565b5050565b612141612557565b73ffffffffffffffffffffffffffffffffffffffff1661215f611b28565b73ffffffffffffffffffffffffffffffffffffffff16146121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac906144e3565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060006122738361165e565b905060008151116122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906143e3565b60405180910390fd5b6000815167ffffffffffffffff8111156122d6576122d5614ab3565b5b60405190808252806020026020018201604052801561230957816020015b60608152602001906001900390816122f45790505b50905060005b825181101561236c5761233b83828151811061232e5761232d614a84565b5b6020026020010151611ff3565b82828151811061234e5761234d614a84565b5b602002602001018190525080806123649061494e565b91505061230f565b508092505050919050565b60105481565b612385612557565b73ffffffffffffffffffffffffffffffffffffffff166123a3611b28565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f0906144e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090614303565b60405180910390fd5b61247281612a66565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061254057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612550575061254f82612d7b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661263e83611846565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061268f8261255f565b6126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c5906143c3565b60405180910390fd5b60006126d983611846565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274857508373ffffffffffffffffffffffffffffffffffffffff1661273084610bd7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612759575061275881856121d2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278282611846565b73ffffffffffffffffffffffffffffffffffffffff16146127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf90614503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f90614363565b60405180910390fd5b612853838383612de5565b61285e6000826125cb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ae9190614801565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129059190614720565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000804790506002816129d19190614776565b91505090565b6129f1828260405180602001604052806000815250612ef9565b5050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008183612a5e91906147a7565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b37848484612762565b612b4384848484612f54565b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906142e3565b60405180910390fd5b50505050565b6060600b8054612b97906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612bc3906148eb565b8015612c105780601f10612be557610100808354040283529160200191612c10565b820191906000526020600020905b815481529060010190602001808311612bf357829003601f168201915b5050505050905090565b60606000821415612c62576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d76565b600082905060005b60008214612c94578080612c7d9061494e565b915050600a82612c8d9190614776565b9150612c6a565b60008167ffffffffffffffff811115612cb057612caf614ab3565b5b6040519080825280601f01601f191660200182016040528015612ce25781602001600182028036833780820191505090505b5090505b60008514612d6f57600182612cfb9190614801565b9150600a85612d0a9190614997565b6030612d169190614720565b60f81b818381518110612d2c57612d2b614a84565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d689190614776565b9450612ce6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612df08383836130eb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3357612e2e816130f0565b612e72565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e7157612e708382613139565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb557612eb0816132a6565b612ef4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ef357612ef28282613377565b5b5b505050565b612f0383836133f6565b612f106000848484612f54565b612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f46906142e3565b60405180910390fd5b505050565b6000612f758473ffffffffffffffffffffffffffffffffffffffff166135c4565b156130de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9e612557565b8786866040518563ffffffff1660e01b8152600401612fc09493929190614196565b602060405180830381600087803b158015612fda57600080fd5b505af192505050801561300b57506040513d601f19601f820116820180604052508101906130089190613a83565b60015b61308e573d806000811461303b576040519150601f19603f3d011682016040523d82523d6000602084013e613040565b606091505b50600081511415613086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307d906142e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130e3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613146846119dc565b6131509190614801565b9050600060076000848152602001908152602001600020549050818114613235576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132ba9190614801565b90506000600960008481526020019081526020016000205490506000600883815481106132ea576132e9614a84565b5b90600052602060002001549050806008838154811061330c5761330b614a84565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061335b5761335a614a55565b5b6001900381819060005260206000200160009055905550505050565b6000613382836119dc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d90614463565b60405180910390fd5b61346f8161255f565b156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690614323565b60405180910390fd5b6134bb60008383612de5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350b9190614720565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135e3906148eb565b90600052602060002090601f016020900481019282613605576000855561364c565b82601f1061361e57805160ff191683800117855561364c565b8280016001018555821561364c579182015b8281111561364b578251825591602001919060010190613630565b5b509050613659919061365d565b5090565b5b8082111561367657600081600090555060010161365e565b5090565b600061368d613688846145e3565b6145be565b9050828152602081018484840111156136a9576136a8614af1565b5b6136b48482856148a9565b509392505050565b60006136cf6136ca84614614565b6145be565b9050828152602081018484840111156136eb576136ea614af1565b5b6136f68482856148a9565b509392505050565b60008135905061370d81615363565b92915050565b60008083601f84011261372957613728614ae7565b5b8235905067ffffffffffffffff81111561374657613745614ae2565b5b60208301915083602082028301111561376257613761614aec565b5b9250929050565b6000813590506137788161537a565b92915050565b60008135905061378d81615391565b92915050565b6000815190506137a281615391565b92915050565b600082601f8301126137bd576137bc614ae7565b5b81356137cd84826020860161367a565b91505092915050565b600082601f8301126137eb576137ea614ae7565b5b81356137fb8482602086016136bc565b91505092915050565b600081359050613813816153a8565b92915050565b60006020828403121561382f5761382e614afb565b5b600061383d848285016136fe565b91505092915050565b6000806040838503121561385d5761385c614afb565b5b600061386b858286016136fe565b925050602061387c858286016136fe565b9150509250929050565b60008060006060848603121561389f5761389e614afb565b5b60006138ad868287016136fe565b93505060206138be868287016136fe565b92505060406138cf86828701613804565b9150509250925092565b600080600080608085870312156138f3576138f2614afb565b5b6000613901878288016136fe565b9450506020613912878288016136fe565b935050604061392387828801613804565b925050606085013567ffffffffffffffff81111561394457613943614af6565b5b613950878288016137a8565b91505092959194509250565b6000806040838503121561397357613972614afb565b5b6000613981858286016136fe565b925050602061399285828601613769565b9150509250929050565b600080604083850312156139b3576139b2614afb565b5b60006139c1858286016136fe565b92505060206139d285828601613804565b9150509250929050565b600080602083850312156139f3576139f2614afb565b5b600083013567ffffffffffffffff811115613a1157613a10614af6565b5b613a1d85828601613713565b92509250509250929050565b600060208284031215613a3f57613a3e614afb565b5b6000613a4d84828501613769565b91505092915050565b600060208284031215613a6c57613a6b614afb565b5b6000613a7a8482850161377e565b91505092915050565b600060208284031215613a9957613a98614afb565b5b6000613aa784828501613793565b91505092915050565b600060208284031215613ac657613ac5614afb565b5b600082013567ffffffffffffffff811115613ae457613ae3614af6565b5b613af0848285016137d6565b91505092915050565b600060208284031215613b0f57613b0e614afb565b5b6000613b1d84828501613804565b91505092915050565b6000613b328383613c7c565b905092915050565b6000613b46838361412c565b60208301905092915050565b613b5b81614835565b82525050565b6000613b6c8261467a565b613b7681856146c0565b935083602082028501613b8885614645565b8060005b85811015613bc45784840389528151613ba58582613b26565b9450613bb0836146a6565b925060208a01995050600181019050613b8c565b50829750879550505050505092915050565b6000613be182614685565b613beb81856146d1565b9350613bf683614655565b8060005b83811015613c27578151613c0e8882613b3a565b9750613c19836146b3565b925050600181019050613bfa565b5085935050505092915050565b613c3d81614847565b82525050565b6000613c4e82614690565b613c5881856146e2565b9350613c688185602086016148b8565b613c7181614b00565b840191505092915050565b6000613c878261469b565b613c9181856146f3565b9350613ca18185602086016148b8565b613caa81614b00565b840191505092915050565b6000613cc08261469b565b613cca8185614704565b9350613cda8185602086016148b8565b613ce381614b00565b840191505092915050565b6000613cf98261469b565b613d038185614715565b9350613d138185602086016148b8565b80840191505092915050565b60008154613d2c816148eb565b613d368186614715565b94506001821660008114613d515760018114613d6257613d95565b60ff19831686528186019350613d95565b613d6b85614665565b60005b83811015613d8d57815481890152600182019150602081019050613d6e565b838801955050505b50505092915050565b6000613dab603783614704565b9150613db682614b11565b604082019050919050565b6000613dce606f83614704565b9150613dd982614b60565b608082019050919050565b6000613df1605683614704565b9150613dfc82614bfb565b606082019050919050565b6000613e14602b83614704565b9150613e1f82614c70565b604082019050919050565b6000613e37603283614704565b9150613e4282614cbf565b604082019050919050565b6000613e5a602683614704565b9150613e6582614d0e565b604082019050919050565b6000613e7d601c83614704565b9150613e8882614d5d565b602082019050919050565b6000613ea0605883614704565b9150613eab82614d86565b606082019050919050565b6000613ec3602483614704565b9150613ece82614dfb565b604082019050919050565b6000613ee6601983614704565b9150613ef182614e4a565b602082019050919050565b6000613f09602a83614704565b9150613f1482614e73565b604082019050919050565b6000613f2c602c83614704565b9150613f3782614ec2565b604082019050919050565b6000613f4f604983614704565b9150613f5a82614f11565b606082019050919050565b6000613f72603883614704565b9150613f7d82614f86565b604082019050919050565b6000613f95602a83614704565b9150613fa082614fd5565b604082019050919050565b6000613fb8602983614704565b9150613fc382615024565b604082019050919050565b6000613fdb602083614704565b9150613fe682615073565b602082019050919050565b6000613ffe605b83614704565b91506140098261509c565b606082019050919050565b6000614021602c83614704565b915061402c82615111565b604082019050919050565b6000614044602283614704565b915061404f82615160565b604082019050919050565b6000614067602083614704565b9150614072826151af565b602082019050919050565b600061408a602983614704565b9150614095826151d8565b604082019050919050565b60006140ad602183614704565b91506140b882615227565b604082019050919050565b60006140d0603183614704565b91506140db82615276565b604082019050919050565b60006140f3602c83614704565b91506140fe826152c5565b604082019050919050565b6000614116603a83614704565b915061412182615314565b604082019050919050565b6141358161489f565b82525050565b6141448161489f565b82525050565b60006141568286613cee565b91506141628285613cee565b915061416e8284613d1f565b9150819050949350505050565b60006020820190506141906000830184613b52565b92915050565b60006080820190506141ab6000830187613b52565b6141b86020830186613b52565b6141c5604083018561413b565b81810360608301526141d78184613c43565b905095945050505050565b600060208201905081810360008301526141fc8184613b61565b905092915050565b6000602082019050818103600083015261421e8184613bd6565b905092915050565b600060208201905061423b6000830184613c34565b92915050565b6000602082019050818103600083015261425b8184613cb5565b905092915050565b6000602082019050818103600083015261427c81613d9e565b9050919050565b6000602082019050818103600083015261429c81613dc1565b9050919050565b600060208201905081810360008301526142bc81613de4565b9050919050565b600060208201905081810360008301526142dc81613e07565b9050919050565b600060208201905081810360008301526142fc81613e2a565b9050919050565b6000602082019050818103600083015261431c81613e4d565b9050919050565b6000602082019050818103600083015261433c81613e70565b9050919050565b6000602082019050818103600083015261435c81613e93565b9050919050565b6000602082019050818103600083015261437c81613eb6565b9050919050565b6000602082019050818103600083015261439c81613ed9565b9050919050565b600060208201905081810360008301526143bc81613efc565b9050919050565b600060208201905081810360008301526143dc81613f1f565b9050919050565b600060208201905081810360008301526143fc81613f42565b9050919050565b6000602082019050818103600083015261441c81613f65565b9050919050565b6000602082019050818103600083015261443c81613f88565b9050919050565b6000602082019050818103600083015261445c81613fab565b9050919050565b6000602082019050818103600083015261447c81613fce565b9050919050565b6000602082019050818103600083015261449c81613ff1565b9050919050565b600060208201905081810360008301526144bc81614014565b9050919050565b600060208201905081810360008301526144dc81614037565b9050919050565b600060208201905081810360008301526144fc8161405a565b9050919050565b6000602082019050818103600083015261451c8161407d565b9050919050565b6000602082019050818103600083015261453c816140a0565b9050919050565b6000602082019050818103600083015261455c816140c3565b9050919050565b6000602082019050818103600083015261457c816140e6565b9050919050565b6000602082019050818103600083015261459c81614109565b9050919050565b60006020820190506145b8600083018461413b565b92915050565b60006145c86145d9565b90506145d4828261491d565b919050565b6000604051905090565b600067ffffffffffffffff8211156145fe576145fd614ab3565b5b61460782614b00565b9050602081019050919050565b600067ffffffffffffffff82111561462f5761462e614ab3565b5b61463882614b00565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061472b8261489f565b91506147368361489f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561476b5761476a6149c8565b5b828201905092915050565b60006147818261489f565b915061478c8361489f565b92508261479c5761479b6149f7565b5b828204905092915050565b60006147b28261489f565b91506147bd8361489f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f6576147f56149c8565b5b828202905092915050565b600061480c8261489f565b91506148178361489f565b92508282101561482a576148296149c8565b5b828203905092915050565b60006148408261487f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d65780820151818401526020810190506148bb565b838111156148e5576000848401525b50505050565b6000600282049050600182168061490357607f821691505b6020821081141561491757614916614a26565b5b50919050565b61492682614b00565b810181811067ffffffffffffffff8211171561494557614944614ab3565b5b80604052505050565b60006149598261489f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561498c5761498b6149c8565b5b600182019050919050565b60006149a28261489f565b91506149ad8361489f565b9250826149bd576149bc6149f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f476f6f64204c75636b204761746f72733a204d696e7420616d6f756e7420736860008201527f6f756c642062652067726561746572207468616e20302e000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20596f752063616e206f6e6c79206d60008201527f696e7420746865206d6178696d756d20616d6f756e74206f6620726567756c6160208201527f72206761746f727320706572207472616e73616374696f6e2e205472796e612060408201527f676574206c75636b79206d7563683f0000000000000000000000000000000000606082015250565b7f476f6f64204c75636b204761746f72733a205468697320697320612067656e6560008201527f736973206761746f72206d696e696d756d206d696e74696e672070726963652060208201527f666f72206561636820697320302e312065746865722100000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f476f6f64204c75636b204761746f72733a20546869732069732061207265677560008201527f6c6174206761746f72206d696e696d756d206d696e74696e672070726963652060208201527f666f72206561636820697320302e303639206574686572210000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f476f6f64204c75636b204761746f72733a2054686973204e465420646f65732060008201527f6e6f742065786973742e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20546869732061646472657373206960008201527f736e2774206c75636b79206173207468657920646f206e6f74206f776e20616e60208201527f79206761746f7273210000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f476f6f64204c75636b204761746f72733a20596f752063616e206f6e6c79206d60008201527f696e74206f6e652067656e736973206761746f7220706572207472616e73616360208201527f74696f6e2e205472796e6120676574206c75636b79206d7563683f0000000000604082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20436f6e747261637420706175736560008201527f642e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a204e6f206d6f7265204e465473207460008201527f6f206d696e742c20636865636b206f7574204f70656e53656121000000000000602082015250565b61536c81614835565b811461537757600080fd5b50565b61538381614847565b811461538e57600080fd5b50565b61539a81614853565b81146153a557600080fd5b50565b6153b18161489f565b81146153bc57600080fd5b5056fea26469706673582212208bd0b3915c079cfb00664860036264d5752a21e37f37f614962f355b44266db964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64316345536b6565363179706b53537231475a586344417935786571636f4137776f315a6a6d6650445a467800000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c806370a0823111610144578063ba24a17e116100b6578063da3ef23f1161007a578063da3ef23f14610912578063e6f1367b1461093b578063e985e9c514610964578063edd45b26146109a1578063efa21e81146109de578063f2fde38b14610a0957610267565b8063ba24a17e1461082d578063c5559ba214610856578063c66828621461087f578063c87b56dd146108aa578063d5abeb01146108e757610267565b806395d89b411161010857806395d89b4114610731578063a22cb4651461075c578063b792907f14610785578063b7cb0019146107ae578063b7f21c51146107d9578063b88d4fde1461080457610267565b806370a082311461065c578063715018a614610699578063801594ba146106b0578063847ca91a146106db5780638da5cb5b1461070657610267565b806340c10f19116101dd57806358c2bfe1116101a157806358c2bfe1146105265780635c975abb1461056357806360da78971461058e5780636352211e146105b757806369e0e346146105f45780636c0360eb1461063157610267565b806340c10f191461045257806342842e0e1461046e57806347ee0394146104975780634f6ccce7146104c057806355f804b3146104fd57610267565b8063107c66cf1161022f578063107c66cf1461036357806318160ddd1461038c57806323b872dd146103b757806325f9ee2c146103e05780632f745c591461040b5780633ccfd60b1461044857610267565b806301ffc9a71461026c57806302329a29146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613a56565b610a32565b6040516102a09190614226565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613a29565b610aac565b005b3480156102de57600080fd5b506102e7610b45565b6040516102f49190614241565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613af9565b610bd7565b604051610331919061417b565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061399c565b610c5c565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613af9565b610d74565b005b34801561039857600080fd5b506103a1610dfa565b6040516103ae91906145a3565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613886565b610e07565b005b3480156103ec57600080fd5b506103f5610e67565b6040516104029190614226565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d919061399c565b610e7a565b60405161043f91906145a3565b60405180910390f35b610450610f1f565b005b61046c6004803603810190610467919061399c565b6110a8565b005b34801561047a57600080fd5b5061049560048036038101906104909190613886565b611460565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613819565b611480565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613af9565b611557565b6040516104f491906145a3565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ab0565b6115c8565b005b34801561053257600080fd5b5061054d60048036038101906105489190613819565b61165e565b60405161055a9190614204565b60405180910390f35b34801561056f57600080fd5b5061057861170c565b6040516105859190614226565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b091906139dc565b61171f565b005b3480156105c357600080fd5b506105de60048036038101906105d99190613af9565b611846565b6040516105eb919061417b565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613819565b6118f8565b6040516106289190614226565b60405180910390f35b34801561063d57600080fd5b5061064661194e565b6040516106539190614241565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190613819565b6119dc565b60405161069091906145a3565b60405180910390f35b3480156106a557600080fd5b506106ae611a94565b005b3480156106bc57600080fd5b506106c5611b1c565b6040516106d291906145a3565b60405180910390f35b3480156106e757600080fd5b506106f0611b22565b6040516106fd91906145a3565b60405180910390f35b34801561071257600080fd5b5061071b611b28565b604051610728919061417b565b60405180910390f35b34801561073d57600080fd5b50610746611b52565b6040516107539190614241565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e919061395c565b611be4565b005b34801561079157600080fd5b506107ac60048036038101906107a79190613af9565b611d65565b005b3480156107ba57600080fd5b506107c3611deb565b6040516107d091906145a3565b60405180910390f35b3480156107e557600080fd5b506107ee611df1565b6040516107fb91906145a3565b60405180910390f35b34801561081057600080fd5b5061082b600480360381019061082691906138d9565b611df7565b005b34801561083957600080fd5b50610854600480360381019061084f9190613af9565b611e59565b005b34801561086257600080fd5b5061087d60048036038101906108789190613af9565b611edf565b005b34801561088b57600080fd5b50610894611f65565b6040516108a19190614241565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613af9565b611ff3565b6040516108de9190614241565b60405180910390f35b3480156108f357600080fd5b506108fc61209d565b60405161090991906145a3565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613ab0565b6120a3565b005b34801561094757600080fd5b50610962600480360381019061095d9190613a29565b612139565b005b34801561097057600080fd5b5061098b60048036038101906109869190613846565b6121d2565b6040516109989190614226565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190613819565b612266565b6040516109d591906141e2565b60405180910390f35b3480156109ea57600080fd5b506109f3612377565b604051610a0091906145a3565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613819565b61237d565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa55750610aa482612475565b5b9050919050565b610ab4612557565b73ffffffffffffffffffffffffffffffffffffffff16610ad2611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906144e3565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610b54906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b80906148eb565b8015610bcd5780601f10610ba257610100808354040283529160200191610bcd565b820191906000526020600020905b815481529060010190602001808311610bb057829003601f168201915b5050505050905090565b6000610be28261255f565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906144a3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6782611846565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90614523565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cf7612557565b73ffffffffffffffffffffffffffffffffffffffff161480610d265750610d2581610d20612557565b6121d2565b5b610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90614403565b60405180910390fd5b610d6f83836125cb565b505050565b610d7c612557565b73ffffffffffffffffffffffffffffffffffffffff16610d9a611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906144e3565b60405180910390fd5b8060128190555050565b6000600880549050905090565b610e18610e12612557565b82612684565b610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90614543565b60405180910390fd5b610e62838383612762565b505050565b601560019054906101000a900460ff1681565b6000610e85836119dc565b8210610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd906142c3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f27612557565b73ffffffffffffffffffffffffffffffffffffffff16610f45611b28565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906144e3565b60405180910390fd5b6000610fa56129be565b9050601560029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061100757600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061106757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506110a557600080fd5b50565b60006110b2610dfa565b9050600082116110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90614263565b60405180910390fd5b600f5482826111069190614720565b1115611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614583565b60405180910390fd5b61114f611b28565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156111975750601454826013546111959190614720565b105b156111d8576000600190505b8281116111d2576111bf8482846111ba9190614720565b6129d7565b80806111ca9061494e565b9150506111a3565b5061145b565b6111e1336118f8565b80156111f95750601560019054906101000a900460ff165b1561126757600d54341015611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a906142a3565b60405180910390fd5b611259836001836112549190614720565b6129d7565b611262336129f5565b61145a565b601560009054906101000a900460ff16156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae906144c3565b60405180910390fd5b601054811161138e576112cc82600d54612a50565b34101561130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611305906142a3565b60405180910390fd5b6011548214611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134990614483565b60405180910390fd5b6000600190505b828111611388576113758482846113709190614720565b6129d7565b80806113809061494e565b915050611359565b50611459565b61139a82600e54612a50565b3410156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390614343565b60405180910390fd5b601254821115611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890614283565b60405180910390fd5b6000600190505b8281116114575761144484828461143f9190614720565b6129d7565b808061144f9061494e565b915050611428565b505b5b5b505050565b61147b83838360405180602001604052806000815250611df7565b505050565b611488612557565b73ffffffffffffffffffffffffffffffffffffffff166114a6611b28565b73ffffffffffffffffffffffffffffffffffffffff16146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f3906144e3565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611561610dfa565b82106115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614563565b60405180910390fd5b600882815481106115b6576115b5614a84565b5b90600052602060002001549050919050565b6115d0612557565b73ffffffffffffffffffffffffffffffffffffffff166115ee611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906144e3565b60405180910390fd5b80600b908051906020019061165a9291906135d7565b5050565b6060600061166b836119dc565b905060008167ffffffffffffffff81111561168957611688614ab3565b5b6040519080825280602002602001820160405280156116b75781602001602082028036833780820191505090505b50905060005b82811015611701576116cf8582610e7a565b8282815181106116e2576116e1614a84565b5b60200260200101818152505080806116f99061494e565b9150506116bd565b508092505050919050565b601560009054906101000a900460ff1681565b611727612557565b73ffffffffffffffffffffffffffffffffffffffff16611745611b28565b73ffffffffffffffffffffffffffffffffffffffff161461179b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611792906144e3565b60405180910390fd5b600082829050905060005b81811015611840576001601760008686858181106117c7576117c6614a84565b5b90506020020160208101906117dc9190613819565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118389061494e565b9150506117a6565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690614443565b60405180910390fd5b80915050919050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b805461195b906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611987906148eb565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490614423565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a9c612557565b73ffffffffffffffffffffffffffffffffffffffff16611aba611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b07906144e3565b60405180910390fd5b611b1a6000612a66565b565b600d5481565b60125481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b61906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8d906148eb565b8015611bda5780601f10611baf57610100808354040283529160200191611bda565b820191906000526020600020905b815481529060010190602001808311611bbd57829003601f168201915b5050505050905090565b611bec612557565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190614383565b60405180910390fd5b8060056000611c67612557565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d14612557565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d599190614226565b60405180910390a35050565b611d6d612557565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906144e3565b60405180910390fd5b8060128190555050565b60115481565b600e5481565b611e08611e02612557565b83612684565b611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614543565b60405180910390fd5b611e5384848484612b2c565b50505050565b611e61612557565b73ffffffffffffffffffffffffffffffffffffffff16611e7f611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc906144e3565b60405180910390fd5b80600d8190555050565b611ee7612557565b73ffffffffffffffffffffffffffffffffffffffff16611f05611b28565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f52906144e3565b60405180910390fd5b80600e8190555050565b600c8054611f72906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9e906148eb565b8015611feb5780601f10611fc057610100808354040283529160200191611feb565b820191906000526020600020905b815481529060010190602001808311611fce57829003601f168201915b505050505081565b6060611ffe8261255f565b61203d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612034906143a3565b60405180910390fd5b6000612047612b88565b905060008151116120675760405180602001604052806000815250612095565b8061207184612c1a565b600c6040516020016120859392919061414a565b6040516020818303038152906040525b915050919050565b600f5481565b6120ab612557565b73ffffffffffffffffffffffffffffffffffffffff166120c9611b28565b73ffffffffffffffffffffffffffffffffffffffff161461211f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612116906144e3565b60405180910390fd5b80600c90805190602001906121359291906135d7565b5050565b612141612557565b73ffffffffffffffffffffffffffffffffffffffff1661215f611b28565b73ffffffffffffffffffffffffffffffffffffffff16146121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac906144e3565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060006122738361165e565b905060008151116122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906143e3565b60405180910390fd5b6000815167ffffffffffffffff8111156122d6576122d5614ab3565b5b60405190808252806020026020018201604052801561230957816020015b60608152602001906001900390816122f45790505b50905060005b825181101561236c5761233b83828151811061232e5761232d614a84565b5b6020026020010151611ff3565b82828151811061234e5761234d614a84565b5b602002602001018190525080806123649061494e565b91505061230f565b508092505050919050565b60105481565b612385612557565b73ffffffffffffffffffffffffffffffffffffffff166123a3611b28565b73ffffffffffffffffffffffffffffffffffffffff16146123f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f0906144e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090614303565b60405180910390fd5b61247281612a66565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061254057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612550575061254f82612d7b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661263e83611846565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061268f8261255f565b6126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c5906143c3565b60405180910390fd5b60006126d983611846565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061274857508373ffffffffffffffffffffffffffffffffffffffff1661273084610bd7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612759575061275881856121d2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278282611846565b73ffffffffffffffffffffffffffffffffffffffff16146127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf90614503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f90614363565b60405180910390fd5b612853838383612de5565b61285e6000826125cb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128ae9190614801565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129059190614720565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000804790506002816129d19190614776565b91505090565b6129f1828260405180602001604052806000815250612ef9565b5050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008183612a5e91906147a7565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b37848484612762565b612b4384848484612f54565b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906142e3565b60405180910390fd5b50505050565b6060600b8054612b97906148eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612bc3906148eb565b8015612c105780601f10612be557610100808354040283529160200191612c10565b820191906000526020600020905b815481529060010190602001808311612bf357829003601f168201915b5050505050905090565b60606000821415612c62576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d76565b600082905060005b60008214612c94578080612c7d9061494e565b915050600a82612c8d9190614776565b9150612c6a565b60008167ffffffffffffffff811115612cb057612caf614ab3565b5b6040519080825280601f01601f191660200182016040528015612ce25781602001600182028036833780820191505090505b5090505b60008514612d6f57600182612cfb9190614801565b9150600a85612d0a9190614997565b6030612d169190614720565b60f81b818381518110612d2c57612d2b614a84565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d689190614776565b9450612ce6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612df08383836130eb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3357612e2e816130f0565b612e72565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e7157612e708382613139565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb557612eb0816132a6565b612ef4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ef357612ef28282613377565b5b5b505050565b612f0383836133f6565b612f106000848484612f54565b612f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f46906142e3565b60405180910390fd5b505050565b6000612f758473ffffffffffffffffffffffffffffffffffffffff166135c4565b156130de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f9e612557565b8786866040518563ffffffff1660e01b8152600401612fc09493929190614196565b602060405180830381600087803b158015612fda57600080fd5b505af192505050801561300b57506040513d601f19601f820116820180604052508101906130089190613a83565b60015b61308e573d806000811461303b576040519150601f19603f3d011682016040523d82523d6000602084013e613040565b606091505b50600081511415613086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307d906142e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130e3565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613146846119dc565b6131509190614801565b9050600060076000848152602001908152602001600020549050818114613235576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132ba9190614801565b90506000600960008481526020019081526020016000205490506000600883815481106132ea576132e9614a84565b5b90600052602060002001549050806008838154811061330c5761330b614a84565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061335b5761335a614a55565b5b6001900381819060005260206000200160009055905550505050565b6000613382836119dc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d90614463565b60405180910390fd5b61346f8161255f565b156134af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a690614323565b60405180910390fd5b6134bb60008383612de5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350b9190614720565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135e3906148eb565b90600052602060002090601f016020900481019282613605576000855561364c565b82601f1061361e57805160ff191683800117855561364c565b8280016001018555821561364c579182015b8281111561364b578251825591602001919060010190613630565b5b509050613659919061365d565b5090565b5b8082111561367657600081600090555060010161365e565b5090565b600061368d613688846145e3565b6145be565b9050828152602081018484840111156136a9576136a8614af1565b5b6136b48482856148a9565b509392505050565b60006136cf6136ca84614614565b6145be565b9050828152602081018484840111156136eb576136ea614af1565b5b6136f68482856148a9565b509392505050565b60008135905061370d81615363565b92915050565b60008083601f84011261372957613728614ae7565b5b8235905067ffffffffffffffff81111561374657613745614ae2565b5b60208301915083602082028301111561376257613761614aec565b5b9250929050565b6000813590506137788161537a565b92915050565b60008135905061378d81615391565b92915050565b6000815190506137a281615391565b92915050565b600082601f8301126137bd576137bc614ae7565b5b81356137cd84826020860161367a565b91505092915050565b600082601f8301126137eb576137ea614ae7565b5b81356137fb8482602086016136bc565b91505092915050565b600081359050613813816153a8565b92915050565b60006020828403121561382f5761382e614afb565b5b600061383d848285016136fe565b91505092915050565b6000806040838503121561385d5761385c614afb565b5b600061386b858286016136fe565b925050602061387c858286016136fe565b9150509250929050565b60008060006060848603121561389f5761389e614afb565b5b60006138ad868287016136fe565b93505060206138be868287016136fe565b92505060406138cf86828701613804565b9150509250925092565b600080600080608085870312156138f3576138f2614afb565b5b6000613901878288016136fe565b9450506020613912878288016136fe565b935050604061392387828801613804565b925050606085013567ffffffffffffffff81111561394457613943614af6565b5b613950878288016137a8565b91505092959194509250565b6000806040838503121561397357613972614afb565b5b6000613981858286016136fe565b925050602061399285828601613769565b9150509250929050565b600080604083850312156139b3576139b2614afb565b5b60006139c1858286016136fe565b92505060206139d285828601613804565b9150509250929050565b600080602083850312156139f3576139f2614afb565b5b600083013567ffffffffffffffff811115613a1157613a10614af6565b5b613a1d85828601613713565b92509250509250929050565b600060208284031215613a3f57613a3e614afb565b5b6000613a4d84828501613769565b91505092915050565b600060208284031215613a6c57613a6b614afb565b5b6000613a7a8482850161377e565b91505092915050565b600060208284031215613a9957613a98614afb565b5b6000613aa784828501613793565b91505092915050565b600060208284031215613ac657613ac5614afb565b5b600082013567ffffffffffffffff811115613ae457613ae3614af6565b5b613af0848285016137d6565b91505092915050565b600060208284031215613b0f57613b0e614afb565b5b6000613b1d84828501613804565b91505092915050565b6000613b328383613c7c565b905092915050565b6000613b46838361412c565b60208301905092915050565b613b5b81614835565b82525050565b6000613b6c8261467a565b613b7681856146c0565b935083602082028501613b8885614645565b8060005b85811015613bc45784840389528151613ba58582613b26565b9450613bb0836146a6565b925060208a01995050600181019050613b8c565b50829750879550505050505092915050565b6000613be182614685565b613beb81856146d1565b9350613bf683614655565b8060005b83811015613c27578151613c0e8882613b3a565b9750613c19836146b3565b925050600181019050613bfa565b5085935050505092915050565b613c3d81614847565b82525050565b6000613c4e82614690565b613c5881856146e2565b9350613c688185602086016148b8565b613c7181614b00565b840191505092915050565b6000613c878261469b565b613c9181856146f3565b9350613ca18185602086016148b8565b613caa81614b00565b840191505092915050565b6000613cc08261469b565b613cca8185614704565b9350613cda8185602086016148b8565b613ce381614b00565b840191505092915050565b6000613cf98261469b565b613d038185614715565b9350613d138185602086016148b8565b80840191505092915050565b60008154613d2c816148eb565b613d368186614715565b94506001821660008114613d515760018114613d6257613d95565b60ff19831686528186019350613d95565b613d6b85614665565b60005b83811015613d8d57815481890152600182019150602081019050613d6e565b838801955050505b50505092915050565b6000613dab603783614704565b9150613db682614b11565b604082019050919050565b6000613dce606f83614704565b9150613dd982614b60565b608082019050919050565b6000613df1605683614704565b9150613dfc82614bfb565b606082019050919050565b6000613e14602b83614704565b9150613e1f82614c70565b604082019050919050565b6000613e37603283614704565b9150613e4282614cbf565b604082019050919050565b6000613e5a602683614704565b9150613e6582614d0e565b604082019050919050565b6000613e7d601c83614704565b9150613e8882614d5d565b602082019050919050565b6000613ea0605883614704565b9150613eab82614d86565b606082019050919050565b6000613ec3602483614704565b9150613ece82614dfb565b604082019050919050565b6000613ee6601983614704565b9150613ef182614e4a565b602082019050919050565b6000613f09602a83614704565b9150613f1482614e73565b604082019050919050565b6000613f2c602c83614704565b9150613f3782614ec2565b604082019050919050565b6000613f4f604983614704565b9150613f5a82614f11565b606082019050919050565b6000613f72603883614704565b9150613f7d82614f86565b604082019050919050565b6000613f95602a83614704565b9150613fa082614fd5565b604082019050919050565b6000613fb8602983614704565b9150613fc382615024565b604082019050919050565b6000613fdb602083614704565b9150613fe682615073565b602082019050919050565b6000613ffe605b83614704565b91506140098261509c565b606082019050919050565b6000614021602c83614704565b915061402c82615111565b604082019050919050565b6000614044602283614704565b915061404f82615160565b604082019050919050565b6000614067602083614704565b9150614072826151af565b602082019050919050565b600061408a602983614704565b9150614095826151d8565b604082019050919050565b60006140ad602183614704565b91506140b882615227565b604082019050919050565b60006140d0603183614704565b91506140db82615276565b604082019050919050565b60006140f3602c83614704565b91506140fe826152c5565b604082019050919050565b6000614116603a83614704565b915061412182615314565b604082019050919050565b6141358161489f565b82525050565b6141448161489f565b82525050565b60006141568286613cee565b91506141628285613cee565b915061416e8284613d1f565b9150819050949350505050565b60006020820190506141906000830184613b52565b92915050565b60006080820190506141ab6000830187613b52565b6141b86020830186613b52565b6141c5604083018561413b565b81810360608301526141d78184613c43565b905095945050505050565b600060208201905081810360008301526141fc8184613b61565b905092915050565b6000602082019050818103600083015261421e8184613bd6565b905092915050565b600060208201905061423b6000830184613c34565b92915050565b6000602082019050818103600083015261425b8184613cb5565b905092915050565b6000602082019050818103600083015261427c81613d9e565b9050919050565b6000602082019050818103600083015261429c81613dc1565b9050919050565b600060208201905081810360008301526142bc81613de4565b9050919050565b600060208201905081810360008301526142dc81613e07565b9050919050565b600060208201905081810360008301526142fc81613e2a565b9050919050565b6000602082019050818103600083015261431c81613e4d565b9050919050565b6000602082019050818103600083015261433c81613e70565b9050919050565b6000602082019050818103600083015261435c81613e93565b9050919050565b6000602082019050818103600083015261437c81613eb6565b9050919050565b6000602082019050818103600083015261439c81613ed9565b9050919050565b600060208201905081810360008301526143bc81613efc565b9050919050565b600060208201905081810360008301526143dc81613f1f565b9050919050565b600060208201905081810360008301526143fc81613f42565b9050919050565b6000602082019050818103600083015261441c81613f65565b9050919050565b6000602082019050818103600083015261443c81613f88565b9050919050565b6000602082019050818103600083015261445c81613fab565b9050919050565b6000602082019050818103600083015261447c81613fce565b9050919050565b6000602082019050818103600083015261449c81613ff1565b9050919050565b600060208201905081810360008301526144bc81614014565b9050919050565b600060208201905081810360008301526144dc81614037565b9050919050565b600060208201905081810360008301526144fc8161405a565b9050919050565b6000602082019050818103600083015261451c8161407d565b9050919050565b6000602082019050818103600083015261453c816140a0565b9050919050565b6000602082019050818103600083015261455c816140c3565b9050919050565b6000602082019050818103600083015261457c816140e6565b9050919050565b6000602082019050818103600083015261459c81614109565b9050919050565b60006020820190506145b8600083018461413b565b92915050565b60006145c86145d9565b90506145d4828261491d565b919050565b6000604051905090565b600067ffffffffffffffff8211156145fe576145fd614ab3565b5b61460782614b00565b9050602081019050919050565b600067ffffffffffffffff82111561462f5761462e614ab3565b5b61463882614b00565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061472b8261489f565b91506147368361489f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561476b5761476a6149c8565b5b828201905092915050565b60006147818261489f565b915061478c8361489f565b92508261479c5761479b6149f7565b5b828204905092915050565b60006147b28261489f565b91506147bd8361489f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f6576147f56149c8565b5b828202905092915050565b600061480c8261489f565b91506148178361489f565b92508282101561482a576148296149c8565b5b828203905092915050565b60006148408261487f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d65780820151818401526020810190506148bb565b838111156148e5576000848401525b50505050565b6000600282049050600182168061490357607f821691505b6020821081141561491757614916614a26565b5b50919050565b61492682614b00565b810181811067ffffffffffffffff8211171561494557614944614ab3565b5b80604052505050565b60006149598261489f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561498c5761498b6149c8565b5b600182019050919050565b60006149a28261489f565b91506149ad8361489f565b9250826149bd576149bc6149f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f476f6f64204c75636b204761746f72733a204d696e7420616d6f756e7420736860008201527f6f756c642062652067726561746572207468616e20302e000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20596f752063616e206f6e6c79206d60008201527f696e7420746865206d6178696d756d20616d6f756e74206f6620726567756c6160208201527f72206761746f727320706572207472616e73616374696f6e2e205472796e612060408201527f676574206c75636b79206d7563683f0000000000000000000000000000000000606082015250565b7f476f6f64204c75636b204761746f72733a205468697320697320612067656e6560008201527f736973206761746f72206d696e696d756d206d696e74696e672070726963652060208201527f666f72206561636820697320302e312065746865722100000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f476f6f64204c75636b204761746f72733a20546869732069732061207265677560008201527f6c6174206761746f72206d696e696d756d206d696e74696e672070726963652060208201527f666f72206561636820697320302e303639206574686572210000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f476f6f64204c75636b204761746f72733a2054686973204e465420646f65732060008201527f6e6f742065786973742e00000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20546869732061646472657373206960008201527f736e2774206c75636b79206173207468657920646f206e6f74206f776e20616e60208201527f79206761746f7273210000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f476f6f64204c75636b204761746f72733a20596f752063616e206f6e6c79206d60008201527f696e74206f6e652067656e736973206761746f7220706572207472616e73616360208201527f74696f6e2e205472796e6120676574206c75636b79206d7563683f0000000000604082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a20436f6e747261637420706175736560008201527f642e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f476f6f64204c75636b204761746f72733a204e6f206d6f7265204e465473207460008201527f6f206d696e742c20636865636b206f7574204f70656e53656121000000000000602082015250565b61536c81614835565b811461537757600080fd5b50565b61538381614847565b811461538e57600080fd5b50565b61539a81614853565b81146153a557600080fd5b50565b6153b18161489f565b81146153bc57600080fd5b5056fea26469706673582212208bd0b3915c079cfb00664860036264d5752a21e37f37f614962f355b44266db964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64316345536b6565363179706b53537231475a586344417935786571636f4137776f315a6a6d6650445a467800000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/Qmd1cESkee61ypkSSr1GZXcDAy5xeqcoA7wo1ZjmfPDZFx
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d64316345536b6565363179706b53537231475a586344417935786571
Arg [4] : 636f4137776f315a6a6d6650445a467800000000000000000000000000000000
Deployed Bytecode Sourcemap
43186:6409:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34674:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47972:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22566:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24125:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23648:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48955:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35314:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25015:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43727:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34982:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48060:276;;;:::i;:::-;;44132:1970;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25425:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48597:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35504:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47722:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46108:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43695:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48344:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22260:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47349:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43288:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21990:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42471:94;;;;;;;;;;;;;:::i;:::-;;43360:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43589:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41820:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22735:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24418:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48836:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43546:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43411:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25681:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47600:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47477:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43316:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46468:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43464:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47835:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48715:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24784:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46891:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43502:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42720:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34674:224;34776:4;34815:35;34800:50;;;:11;:50;;;;:90;;;;34854:36;34878:11;34854:23;:36::i;:::-;34800:90;34793:97;;34674:224;;;:::o;47972:82::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48040:6:::1;48031;;:15;;;;;;;;;;;;;;;;;;47972:82:::0;:::o;22566:100::-;22620:13;22653:5;22646:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22566:100;:::o;24125:221::-;24201:7;24229:16;24237:7;24229;:16::i;:::-;24221:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24314:15;:24;24330:7;24314:24;;;;;;;;;;;;;;;;;;;;;24307:31;;24125:221;;;:::o;23648:411::-;23729:13;23745:23;23760:7;23745:14;:23::i;:::-;23729:39;;23793:5;23787:11;;:2;:11;;;;23779:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23887:5;23871:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23896:37;23913:5;23920:12;:10;:12::i;:::-;23896:16;:37::i;:::-;23871:62;23849:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24030:21;24039:2;24043:7;24030:8;:21::i;:::-;23718:341;23648:411;;:::o;48955:114::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49055:6:::1;49034:18;:27;;;;48955:114:::0;:::o;35314:113::-;35375:7;35402:10;:17;;;;35395:24;;35314:113;:::o;25015:339::-;25210:41;25229:12;:10;:12::i;:::-;25243:7;25210:18;:41::i;:::-;25202:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25318:28;25328:4;25334:2;25338:7;25318:9;:28::i;:::-;25015:339;;;:::o;43727:45::-;;;;;;;;;;;;;:::o;34982:256::-;35079:7;35115:23;35132:5;35115:16;:23::i;:::-;35107:5;:31;35099:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35204:12;:19;35217:5;35204:19;;;;;;;;;;;;;;;:26;35224:5;35204:26;;;;;;;;;;;;35197:33;;34982:256;;;;:::o;48060:276::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48117:18:::1;48138:17;:15;:17::i;:::-;48117:38;;48182:7;;;;;;;;;;;48174:21;;:33;48196:10;48174:33;;;;;;;;;;;;;;;;;;;;;;;48166:42;;;::::0;::::1;;48235:7;;;;;;;;;;;48227:21;;:33;48249:10;48227:33;;;;;;;;;;;;;;;;;;;;;;;48219:42;;;::::0;::::1;;48288:10;48280:24;;:47;48305:21;48280:47;;;;;;;;;;;;;;;;;;;;;;;48272:56;;;::::0;::::1;;48106:230;48060:276::o:0;44132:1970::-;44206:14;44223:13;:11;:13::i;:::-;44206:30;;44269:1;44255:11;:15;44247:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44373:9;;44358:11;44349:6;:20;;;;:::i;:::-;:33;;44341:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;44474:7;:5;:7::i;:::-;44460:21;;:10;:21;;;:65;;;;;44511:13;;44497:11;44486:10;;:22;;;;:::i;:::-;:38;44460:65;44456:1636;;;44545:9;44557:1;44545:13;;44541:105;44565:11;44560:1;:16;44541:105;;44605:25;44615:3;44628:1;44619:6;:10;;;;:::i;:::-;44605:9;:25::i;:::-;44578:3;;;;;:::i;:::-;;;;44541:105;;;;44456:1636;;;44666:23;44678:10;44666:11;:23::i;:::-;:52;;;;;44693:25;;;;;;;;;;;44666:52;44662:1430;;;44755:17;;44742:9;:30;;44734:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;44877:24;44887:3;44899:1;44892:6;:8;;;;:::i;:::-;44877:9;:24::i;:::-;44916:31;44936:10;44916:19;:31::i;:::-;44662:1430;;;45002:6;;;;;;;;;;;45001:7;44993:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45076:15;;45066:6;:25;45062:1015;;45132:46;45147:11;45160:17;;45132:14;:46::i;:::-;45119:9;:59;;45111:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;45311:17;;45296:11;:32;45288:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;45447:9;45459:1;45447:13;;45443:113;45467:11;45462:1;:16;45443:113;;45511:25;45521:3;45534:1;45525:6;:10;;;;:::i;:::-;45511:9;:25::i;:::-;45480:3;;;;;:::i;:::-;;;;45443:113;;;;45062:1015;;;45615:46;45630:11;45643:17;;45615:14;:46::i;:::-;45602:9;:59;;45594:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;45796:18;;45781:11;:33;;45773:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;45953:9;45965:1;45953:13;;45949:113;45973:11;45968:1;:16;45949:113;;46017:25;46027:3;46040:1;46031:6;:10;;;;:::i;:::-;46017:9;:25::i;:::-;45986:3;;;;;:::i;:::-;;;;45949:113;;;;45062:1015;44662:1430;44456:1636;44195:1907;44132:1970;;:::o;25425:185::-;25563:39;25580:4;25586:2;25590:7;25563:39;;;;;;;;;;;;:16;:39::i;:::-;25425:185;;;:::o;48597:112::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48697:4:::1;48669:16;:25;48686:7;48669:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;48597:112:::0;:::o;35504:233::-;35579:7;35615:30;:28;:30::i;:::-;35607:5;:38;35599:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35712:10;35723:5;35712:17;;;;;;;;:::i;:::-;;;;;;;;;;35705:24;;35504:233;;;:::o;47722:107::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47810:11:::1;47800:7;:21;;;;;;;;;;;;:::i;:::-;;47722:107:::0;:::o;46108:354::-;46167:16;46195:23;46221:17;46231:6;46221:9;:17::i;:::-;46195:43;;46249:25;46291:15;46277:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46249:58;;46322:9;46318:111;46337:15;46333:1;:19;46318:111;;;46387:30;46407:6;46415:1;46387:19;:30::i;:::-;46373:8;46382:1;46373:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46354:3;;;;;:::i;:::-;;;;46318:111;;;;46446:8;46439:15;;;;46108:354;;;:::o;43695:25::-;;;;;;;;;;;;;:::o;48344:245::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48428:23:::1;48454:8;;:15;;48428:41;;48484:9;48480:102;48498:15;48496:1;:17;48480:102;;;48566:4;48534:16;:29;48551:8;;48560:1;48551:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48534:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48515:3;;;;;:::i;:::-;;;;48480:102;;;;48417:172;48344:245:::0;;:::o;22260:239::-;22332:7;22352:13;22368:7;:16;22376:7;22368:16;;;;;;;;;;;;;;;;;;;;;22352:32;;22420:1;22403:19;;:5;:19;;;;22395:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22486:5;22479:12;;;22260:239;;;:::o;47349:118::-;47407:4;47433:16;:25;47450:7;47433:25;;;;;;;;;;;;;;;;;;;;;;;;;47425:34;;47349:118;;;:::o;43288:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21990:208::-;22062:7;22107:1;22090:19;;:5;:19;;;;22082:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22174:9;:16;22184:5;22174:16;;;;;;;;;;;;;;;;22167:23;;21990:208;;;:::o;42471:94::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42536:21:::1;42554:1;42536:9;:21::i;:::-;42471:94::o:0;43360:44::-;;;;:::o;43589:37::-;;;;:::o;41820:87::-;41866:7;41893:6;;;;;;;;;;;41886:13;;41820:87;:::o;22735:104::-;22791:13;22824:7;22817:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22735:104;:::o;24418:295::-;24533:12;:10;:12::i;:::-;24521:24;;:8;:24;;;;24513:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24633:8;24588:18;:32;24607:12;:10;:12::i;:::-;24588:32;;;;;;;;;;;;;;;:42;24621:8;24588:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24686:8;24657:48;;24672:12;:10;:12::i;:::-;24657:48;;;24696:8;24657:48;;;;;;:::i;:::-;;;;;;;;24418:295;;:::o;48836:113::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48935:6:::1;48914:18;:27;;;;48836:113:::0;:::o;43546:36::-;;;;:::o;43411:46::-;;;;:::o;25681:328::-;25856:41;25875:12;:10;:12::i;:::-;25889:7;25856:18;:41::i;:::-;25848:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25962:39;25976:4;25982:2;25986:7;25995:5;25962:13;:39::i;:::-;25681:328;;;;:::o;47600:116::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47699:9:::1;47679:17;:29;;;;47600:116:::0;:::o;47477:117::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47577:9:::1;47557:17;:29;;;;47477:117:::0;:::o;43316:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46468:417::-;46540:13;46573:16;46581:7;46573;:16::i;:::-;46565:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46656:28;46687:10;:8;:10::i;:::-;46656:41;;46759:1;46734:14;46728:28;:32;:149;;;;;;;;;;;;;;;;;46804:14;46820:18;:7;:16;:18::i;:::-;46840:13;46787:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46728:149;46708:169;;;46468:417;;;:::o;43464:31::-;;;;:::o;47835:131::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47941:17:::1;47925:13;:33;;;;;;;;;;;;:::i;:::-;;47835:131:::0;:::o;48715:115::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48816:6:::1;48788:25;;:34;;;;;;;;;;;;;;;;;;48715:115:::0;:::o;24784:164::-;24881:4;24905:18;:25;24924:5;24905:25;;;;;;;;;;;;;;;:35;24931:8;24905:35;;;;;;;;;;;;;;;;;;;;;;;;;24898:42;;24784:164;;;;:::o;46891:452::-;46952:26;46990:21;47014;47028:6;47014:13;:21::i;:::-;46990:45;;47068:1;47054:4;:11;:15;47046:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;47158:21;47195:4;:11;47182:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47158:49;;47223:9;47218:93;47239:4;:11;47236:1;:14;47218:93;;;47282:17;47291:4;47296:1;47291:7;;;;;;;;:::i;:::-;;;;;;;;47282:8;:17::i;:::-;47271:5;47277:1;47271:8;;;;;;;;:::i;:::-;;;;;;;:28;;;;47252:3;;;;;:::i;:::-;;;;47218:93;;;;47329:5;47321:14;;;;46891:452;;;:::o;43502:37::-;;;;:::o;42720:192::-;42051:12;:10;:12::i;:::-;42040:23;;:7;:5;:7::i;:::-;:23;;;42032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42829:1:::1;42809:22;;:8;:22;;;;42801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42885:19;42895:8;42885:9;:19::i;:::-;42720:192:::0;:::o;21621:305::-;21723:4;21775:25;21760:40;;;:11;:40;;;;:105;;;;21832:33;21817:48;;;:11;:48;;;;21760:105;:158;;;;21882:36;21906:11;21882:23;:36::i;:::-;21760:158;21740:178;;21621:305;;;:::o;20075:98::-;20128:7;20155:10;20148:17;;20075:98;:::o;27519:127::-;27584:4;27636:1;27608:30;;:7;:16;27616:7;27608:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27601:37;;27519:127;;;:::o;31501:174::-;31603:2;31576:15;:24;31592:7;31576:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31659:7;31655:2;31621:46;;31630:23;31645:7;31630:14;:23::i;:::-;31621:46;;;;;;;;;;;;31501:174;;:::o;27813:348::-;27906:4;27931:16;27939:7;27931;:16::i;:::-;27923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28007:13;28023:23;28038:7;28023:14;:23::i;:::-;28007:39;;28076:5;28065:16;;:7;:16;;;:51;;;;28109:7;28085:31;;:20;28097:7;28085:11;:20::i;:::-;:31;;;28065:51;:87;;;;28120:32;28137:5;28144:7;28120:16;:32::i;:::-;28065:87;28057:96;;;27813:348;;;;:::o;30805:578::-;30964:4;30937:31;;:23;30952:7;30937:14;:23::i;:::-;:31;;;30929:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31047:1;31033:16;;:2;:16;;;;31025:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31103:39;31124:4;31130:2;31134:7;31103:20;:39::i;:::-;31207:29;31224:1;31228:7;31207:8;:29::i;:::-;31268:1;31249:9;:15;31259:4;31249:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31297:1;31280:9;:13;31290:2;31280:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31328:2;31309:7;:16;31317:7;31309:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31367:7;31363:2;31348:27;;31357:4;31348:27;;;;;;;;;;;;30805:578;;;:::o;49192:159::-;49241:15;49268:19;49290:21;49268:43;;49341:1;49329:11;:13;;;;:::i;:::-;49322:21;;;49192:159;:::o;28503:110::-;28579:26;28589:2;28593:7;28579:26;;;;;;;;;;;;:9;:26::i;:::-;28503:110;;:::o;49077:109::-;49173:5;49145:16;:25;49162:7;49145:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;49077:109;:::o;49472:116::-;49544:7;49576:3;49572;:7;;;;:::i;:::-;49565:15;;49472:116;;;;:::o;42920:173::-;42976:16;42995:6;;;;;;;;;;;42976:25;;43021:8;43012:6;;:17;;;;;;;;;;;;;;;;;;43076:8;43045:40;;43066:8;43045:40;;;;;;;;;;;;42965:128;42920:173;:::o;26891:315::-;27048:28;27058:4;27064:2;27068:7;27048:9;:28::i;:::-;27095:48;27118:4;27124:2;27128:7;27137:5;27095:22;:48::i;:::-;27087:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26891:315;;;;:::o;49357:109::-;49417:13;49451:7;49444:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49357:109;:::o;296:723::-;352:13;582:1;573:5;:10;569:53;;;600:10;;;;;;;;;;;;;;;;;;;;;569:53;632:12;647:5;632:20;;663:14;688:78;703:1;695:4;:9;688:78;;721:8;;;;;:::i;:::-;;;;752:2;744:10;;;;;:::i;:::-;;;688:78;;;776:19;808:6;798:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:39;;826:154;842:1;833:5;:10;826:154;;870:1;860:11;;;;;:::i;:::-;;;937:2;929:5;:10;;;;:::i;:::-;916:2;:24;;;;:::i;:::-;903:39;;886:6;893;886:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;966:2;957:11;;;;;:::i;:::-;;;826:154;;;1004:6;990:21;;;;;296:723;;;;:::o;12761:157::-;12846:4;12885:25;12870:40;;;:11;:40;;;;12863:47;;12761:157;;;:::o;36350:589::-;36494:45;36521:4;36527:2;36531:7;36494:26;:45::i;:::-;36572:1;36556:18;;:4;:18;;;36552:187;;;36591:40;36623:7;36591:31;:40::i;:::-;36552:187;;;36661:2;36653:10;;:4;:10;;;36649:90;;36680:47;36713:4;36719:7;36680:32;:47::i;:::-;36649:90;36552:187;36767:1;36753:16;;:2;:16;;;36749:183;;;36786:45;36823:7;36786:36;:45::i;:::-;36749:183;;;36859:4;36853:10;;:2;:10;;;36849:83;;36880:40;36908:2;36912:7;36880:27;:40::i;:::-;36849:83;36749:183;36350:589;;;:::o;28840:321::-;28970:18;28976:2;28980:7;28970:5;:18::i;:::-;29021:54;29052:1;29056:2;29060:7;29069:5;29021:22;:54::i;:::-;28999:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28840:321;;;:::o;32240:799::-;32395:4;32416:15;:2;:13;;;:15::i;:::-;32412:620;;;32468:2;32452:36;;;32489:12;:10;:12::i;:::-;32503:4;32509:7;32518:5;32452:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32448:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32711:1;32694:6;:13;:18;32690:272;;;32737:60;;;;;;;;;;:::i;:::-;;;;;;;;32690:272;32912:6;32906:13;32897:6;32893:2;32889:15;32882:38;32448:529;32585:41;;;32575:51;;;:6;:51;;;;32568:58;;;;;32412:620;33016:4;33009:11;;32240:799;;;;;;;:::o;33611:126::-;;;;:::o;37662:164::-;37766:10;:17;;;;37739:15;:24;37755:7;37739:24;;;;;;;;;;;:44;;;;37794:10;37810:7;37794:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37662:164;:::o;38453:988::-;38719:22;38769:1;38744:22;38761:4;38744:16;:22::i;:::-;:26;;;;:::i;:::-;38719:51;;38781:18;38802:17;:26;38820:7;38802:26;;;;;;;;;;;;38781:47;;38949:14;38935:10;:28;38931:328;;38980:19;39002:12;:18;39015:4;39002:18;;;;;;;;;;;;;;;:34;39021:14;39002:34;;;;;;;;;;;;38980:56;;39086:11;39053:12;:18;39066:4;39053:18;;;;;;;;;;;;;;;:30;39072:10;39053:30;;;;;;;;;;;:44;;;;39203:10;39170:17;:30;39188:11;39170:30;;;;;;;;;;;:43;;;;38965:294;38931:328;39355:17;:26;39373:7;39355:26;;;;;;;;;;;39348:33;;;39399:12;:18;39412:4;39399:18;;;;;;;;;;;;;;;:34;39418:14;39399:34;;;;;;;;;;;39392:41;;;38534:907;;38453:988;;:::o;39736:1079::-;39989:22;40034:1;40014:10;:17;;;;:21;;;;:::i;:::-;39989:46;;40046:18;40067:15;:24;40083:7;40067:24;;;;;;;;;;;;40046:45;;40418:19;40440:10;40451:14;40440:26;;;;;;;;:::i;:::-;;;;;;;;;;40418:48;;40504:11;40479:10;40490;40479:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40615:10;40584:15;:28;40600:11;40584:28;;;;;;;;;;;:41;;;;40756:15;:24;40772:7;40756:24;;;;;;;;;;;40749:31;;;40791:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39807:1008;;;39736:1079;:::o;37240:221::-;37325:14;37342:20;37359:2;37342:16;:20::i;:::-;37325:37;;37400:7;37373:12;:16;37386:2;37373:16;;;;;;;;;;;;;;;:24;37390:6;37373:24;;;;;;;;;;;:34;;;;37447:6;37418:17;:26;37436:7;37418:26;;;;;;;;;;;:35;;;;37314:147;37240:221;;:::o;29497:382::-;29591:1;29577:16;;:2;:16;;;;29569:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29650:16;29658:7;29650;:16::i;:::-;29649:17;29641:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29712:45;29741:1;29745:2;29749:7;29712:20;:45::i;:::-;29787:1;29770:9;:13;29780:2;29770:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29818:2;29799:7;:16;29807:7;29799:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29863:7;29859:2;29838:33;;29855:1;29838:33;;;;;;;;;;;;29497:382;;:::o;2821:387::-;2881:4;3089:12;3156:7;3144:20;3136:28;;3199:1;3192:4;:8;3185:15;;;2821:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:196::-;8732:10;8767:66;8829:3;8821:6;8767:66;:::i;:::-;8753:80;;8643:196;;;;:::o;8845:179::-;8914:10;8935:46;8977:3;8969:6;8935:46;:::i;:::-;9013:4;9008:3;9004:14;8990:28;;8845:179;;;;:::o;9030:118::-;9117:24;9135:5;9117:24;:::i;:::-;9112:3;9105:37;9030:118;;:::o;9182:991::-;9321:3;9350:64;9408:5;9350:64;:::i;:::-;9430:96;9519:6;9514:3;9430:96;:::i;:::-;9423:103;;9552:3;9597:4;9589:6;9585:17;9580:3;9576:27;9627:66;9687:5;9627:66;:::i;:::-;9716:7;9747:1;9732:396;9757:6;9754:1;9751:13;9732:396;;;9828:9;9822:4;9818:20;9813:3;9806:33;9879:6;9873:13;9907:84;9986:4;9971:13;9907:84;:::i;:::-;9899:92;;10014:70;10077:6;10014:70;:::i;:::-;10004:80;;10113:4;10108:3;10104:14;10097:21;;9792:336;9779:1;9776;9772:9;9767:14;;9732:396;;;9736:14;10144:4;10137:11;;10164:3;10157:10;;9326:847;;;;;9182:991;;;;:::o;10209:732::-;10328:3;10357:54;10405:5;10357:54;:::i;:::-;10427:86;10506:6;10501:3;10427:86;:::i;:::-;10420:93;;10537:56;10587:5;10537:56;:::i;:::-;10616:7;10647:1;10632:284;10657:6;10654:1;10651:13;10632:284;;;10733:6;10727:13;10760:63;10819:3;10804:13;10760:63;:::i;:::-;10753:70;;10846:60;10899:6;10846:60;:::i;:::-;10836:70;;10692:224;10679:1;10676;10672:9;10667:14;;10632:284;;;10636:14;10932:3;10925:10;;10333:608;;;10209:732;;;;:::o;10947:109::-;11028:21;11043:5;11028:21;:::i;:::-;11023:3;11016:34;10947:109;;:::o;11062:360::-;11148:3;11176:38;11208:5;11176:38;:::i;:::-;11230:70;11293:6;11288:3;11230:70;:::i;:::-;11223:77;;11309:52;11354:6;11349:3;11342:4;11335:5;11331:16;11309:52;:::i;:::-;11386:29;11408:6;11386:29;:::i;:::-;11381:3;11377:39;11370:46;;11152:270;11062:360;;;;:::o;11428:344::-;11506:3;11534:39;11567:5;11534:39;:::i;:::-;11589:61;11643:6;11638:3;11589:61;:::i;:::-;11582:68;;11659:52;11704:6;11699:3;11692:4;11685:5;11681:16;11659:52;:::i;:::-;11736:29;11758:6;11736:29;:::i;:::-;11731:3;11727:39;11720:46;;11510:262;11428:344;;;;:::o;11778:364::-;11866:3;11894:39;11927:5;11894:39;:::i;:::-;11949:71;12013:6;12008:3;11949:71;:::i;:::-;11942:78;;12029:52;12074:6;12069:3;12062:4;12055:5;12051:16;12029:52;:::i;:::-;12106:29;12128:6;12106:29;:::i;:::-;12101:3;12097:39;12090:46;;11870:272;11778:364;;;;:::o;12148:377::-;12254:3;12282:39;12315:5;12282:39;:::i;:::-;12337:89;12419:6;12414:3;12337:89;:::i;:::-;12330:96;;12435:52;12480:6;12475:3;12468:4;12461:5;12457:16;12435:52;:::i;:::-;12512:6;12507:3;12503:16;12496:23;;12258:267;12148:377;;;;:::o;12555:845::-;12658:3;12695:5;12689:12;12724:36;12750:9;12724:36;:::i;:::-;12776:89;12858:6;12853:3;12776:89;:::i;:::-;12769:96;;12896:1;12885:9;12881:17;12912:1;12907:137;;;;13058:1;13053:341;;;;12874:520;;12907:137;12991:4;12987:9;12976;12972:25;12967:3;12960:38;13027:6;13022:3;13018:16;13011:23;;12907:137;;13053:341;13120:38;13152:5;13120:38;:::i;:::-;13180:1;13194:154;13208:6;13205:1;13202:13;13194:154;;;13282:7;13276:14;13272:1;13267:3;13263:11;13256:35;13332:1;13323:7;13319:15;13308:26;;13230:4;13227:1;13223:12;13218:17;;13194:154;;;13377:6;13372:3;13368:16;13361:23;;13060:334;;12874:520;;12662:738;;12555:845;;;;:::o;13406:366::-;13548:3;13569:67;13633:2;13628:3;13569:67;:::i;:::-;13562:74;;13645:93;13734:3;13645:93;:::i;:::-;13763:2;13758:3;13754:12;13747:19;;13406:366;;;:::o;13778:368::-;13920:3;13941:68;14005:3;14000;13941:68;:::i;:::-;13934:75;;14018:93;14107:3;14018:93;:::i;:::-;14136:3;14131;14127:13;14120:20;;13778:368;;;:::o;14152:366::-;14294:3;14315:67;14379:2;14374:3;14315:67;:::i;:::-;14308:74;;14391:93;14480:3;14391:93;:::i;:::-;14509:2;14504:3;14500:12;14493:19;;14152:366;;;:::o;14524:::-;14666:3;14687:67;14751:2;14746:3;14687:67;:::i;:::-;14680:74;;14763:93;14852:3;14763:93;:::i;:::-;14881:2;14876:3;14872:12;14865:19;;14524:366;;;:::o;14896:::-;15038:3;15059:67;15123:2;15118:3;15059:67;:::i;:::-;15052:74;;15135:93;15224:3;15135:93;:::i;:::-;15253:2;15248:3;15244:12;15237:19;;14896:366;;;:::o;15268:::-;15410:3;15431:67;15495:2;15490:3;15431:67;:::i;:::-;15424:74;;15507:93;15596:3;15507:93;:::i;:::-;15625:2;15620:3;15616:12;15609:19;;15268:366;;;:::o;15640:::-;15782:3;15803:67;15867:2;15862:3;15803:67;:::i;:::-;15796:74;;15879:93;15968:3;15879:93;:::i;:::-;15997:2;15992:3;15988:12;15981:19;;15640:366;;;:::o;16012:::-;16154:3;16175:67;16239:2;16234:3;16175:67;:::i;:::-;16168:74;;16251:93;16340:3;16251:93;:::i;:::-;16369:2;16364:3;16360:12;16353:19;;16012:366;;;:::o;16384:::-;16526:3;16547:67;16611:2;16606:3;16547:67;:::i;:::-;16540:74;;16623:93;16712:3;16623:93;:::i;:::-;16741:2;16736:3;16732:12;16725:19;;16384:366;;;:::o;16756:::-;16898:3;16919:67;16983:2;16978:3;16919:67;:::i;:::-;16912:74;;16995:93;17084:3;16995:93;:::i;:::-;17113:2;17108:3;17104:12;17097:19;;16756:366;;;:::o;17128:::-;17270:3;17291:67;17355:2;17350:3;17291:67;:::i;:::-;17284:74;;17367:93;17456:3;17367:93;:::i;:::-;17485:2;17480:3;17476:12;17469:19;;17128:366;;;:::o;17500:::-;17642:3;17663:67;17727:2;17722:3;17663:67;:::i;:::-;17656:74;;17739:93;17828:3;17739:93;:::i;:::-;17857:2;17852:3;17848:12;17841:19;;17500:366;;;:::o;17872:::-;18014:3;18035:67;18099:2;18094:3;18035:67;:::i;:::-;18028:74;;18111:93;18200:3;18111:93;:::i;:::-;18229:2;18224:3;18220:12;18213:19;;17872:366;;;:::o;18244:::-;18386:3;18407:67;18471:2;18466:3;18407:67;:::i;:::-;18400:74;;18483:93;18572:3;18483:93;:::i;:::-;18601:2;18596:3;18592:12;18585:19;;18244:366;;;:::o;18616:::-;18758:3;18779:67;18843:2;18838:3;18779:67;:::i;:::-;18772:74;;18855:93;18944:3;18855:93;:::i;:::-;18973:2;18968:3;18964:12;18957:19;;18616:366;;;:::o;18988:::-;19130:3;19151:67;19215:2;19210:3;19151:67;:::i;:::-;19144:74;;19227:93;19316:3;19227:93;:::i;:::-;19345:2;19340:3;19336:12;19329:19;;18988:366;;;:::o;19360:::-;19502:3;19523:67;19587:2;19582:3;19523:67;:::i;:::-;19516:74;;19599:93;19688:3;19599:93;:::i;:::-;19717:2;19712:3;19708:12;19701:19;;19360:366;;;:::o;19732:::-;19874:3;19895:67;19959:2;19954:3;19895:67;:::i;:::-;19888:74;;19971:93;20060:3;19971:93;:::i;:::-;20089:2;20084:3;20080:12;20073:19;;19732:366;;;:::o;20104:::-;20246:3;20267:67;20331:2;20326:3;20267:67;:::i;:::-;20260:74;;20343:93;20432:3;20343:93;:::i;:::-;20461:2;20456:3;20452:12;20445:19;;20104:366;;;:::o;20476:::-;20618:3;20639:67;20703:2;20698:3;20639:67;:::i;:::-;20632:74;;20715:93;20804:3;20715:93;:::i;:::-;20833:2;20828:3;20824:12;20817:19;;20476:366;;;:::o;20848:::-;20990:3;21011:67;21075:2;21070:3;21011:67;:::i;:::-;21004:74;;21087:93;21176:3;21087:93;:::i;:::-;21205:2;21200:3;21196:12;21189:19;;20848:366;;;:::o;21220:::-;21362:3;21383:67;21447:2;21442:3;21383:67;:::i;:::-;21376:74;;21459:93;21548:3;21459:93;:::i;:::-;21577:2;21572:3;21568:12;21561:19;;21220:366;;;:::o;21592:::-;21734:3;21755:67;21819:2;21814:3;21755:67;:::i;:::-;21748:74;;21831:93;21920:3;21831:93;:::i;:::-;21949:2;21944:3;21940:12;21933:19;;21592:366;;;:::o;21964:::-;22106:3;22127:67;22191:2;22186:3;22127:67;:::i;:::-;22120:74;;22203:93;22292:3;22203:93;:::i;:::-;22321:2;22316:3;22312:12;22305:19;;21964:366;;;:::o;22336:::-;22478:3;22499:67;22563:2;22558:3;22499:67;:::i;:::-;22492:74;;22575:93;22664:3;22575:93;:::i;:::-;22693:2;22688:3;22684:12;22677:19;;22336:366;;;:::o;22708:::-;22850:3;22871:67;22935:2;22930:3;22871:67;:::i;:::-;22864:74;;22947:93;23036:3;22947:93;:::i;:::-;23065:2;23060:3;23056:12;23049:19;;22708:366;;;:::o;23080:108::-;23157:24;23175:5;23157:24;:::i;:::-;23152:3;23145:37;23080:108;;:::o;23194:118::-;23281:24;23299:5;23281:24;:::i;:::-;23276:3;23269:37;23194:118;;:::o;23318:589::-;23543:3;23565:95;23656:3;23647:6;23565:95;:::i;:::-;23558:102;;23677:95;23768:3;23759:6;23677:95;:::i;:::-;23670:102;;23789:92;23877:3;23868:6;23789:92;:::i;:::-;23782:99;;23898:3;23891:10;;23318:589;;;;;;:::o;23913:222::-;24006:4;24044:2;24033:9;24029:18;24021:26;;24057:71;24125:1;24114:9;24110:17;24101:6;24057:71;:::i;:::-;23913:222;;;;:::o;24141:640::-;24336:4;24374:3;24363:9;24359:19;24351:27;;24388:71;24456:1;24445:9;24441:17;24432:6;24388:71;:::i;:::-;24469:72;24537:2;24526:9;24522:18;24513:6;24469:72;:::i;:::-;24551;24619:2;24608:9;24604:18;24595:6;24551:72;:::i;:::-;24670:9;24664:4;24660:20;24655:2;24644:9;24640:18;24633:48;24698:76;24769:4;24760:6;24698:76;:::i;:::-;24690:84;;24141:640;;;;;;;:::o;24787:413::-;24950:4;24988:2;24977:9;24973:18;24965:26;;25037:9;25031:4;25027:20;25023:1;25012:9;25008:17;25001:47;25065:128;25188:4;25179:6;25065:128;:::i;:::-;25057:136;;24787:413;;;;:::o;25206:373::-;25349:4;25387:2;25376:9;25372:18;25364:26;;25436:9;25430:4;25426:20;25422:1;25411:9;25407:17;25400:47;25464:108;25567:4;25558:6;25464:108;:::i;:::-;25456:116;;25206:373;;;;:::o;25585:210::-;25672:4;25710:2;25699:9;25695:18;25687:26;;25723:65;25785:1;25774:9;25770:17;25761:6;25723:65;:::i;:::-;25585:210;;;;:::o;25801:313::-;25914:4;25952:2;25941:9;25937:18;25929:26;;26001:9;25995:4;25991:20;25987:1;25976:9;25972:17;25965:47;26029:78;26102:4;26093:6;26029:78;:::i;:::-;26021:86;;25801:313;;;;:::o;26120:419::-;26286:4;26324:2;26313:9;26309:18;26301:26;;26373:9;26367:4;26363:20;26359:1;26348:9;26344:17;26337:47;26401:131;26527:4;26401:131;:::i;:::-;26393:139;;26120:419;;;:::o;26545:::-;26711:4;26749:2;26738:9;26734:18;26726:26;;26798:9;26792:4;26788:20;26784:1;26773:9;26769:17;26762:47;26826:131;26952:4;26826:131;:::i;:::-;26818:139;;26545:419;;;:::o;26970:::-;27136:4;27174:2;27163:9;27159:18;27151:26;;27223:9;27217:4;27213:20;27209:1;27198:9;27194:17;27187:47;27251:131;27377:4;27251:131;:::i;:::-;27243:139;;26970:419;;;:::o;27395:::-;27561:4;27599:2;27588:9;27584:18;27576:26;;27648:9;27642:4;27638:20;27634:1;27623:9;27619:17;27612:47;27676:131;27802:4;27676:131;:::i;:::-;27668:139;;27395:419;;;:::o;27820:::-;27986:4;28024:2;28013:9;28009:18;28001:26;;28073:9;28067:4;28063:20;28059:1;28048:9;28044:17;28037:47;28101:131;28227:4;28101:131;:::i;:::-;28093:139;;27820:419;;;:::o;28245:::-;28411:4;28449:2;28438:9;28434:18;28426:26;;28498:9;28492:4;28488:20;28484:1;28473:9;28469:17;28462:47;28526:131;28652:4;28526:131;:::i;:::-;28518:139;;28245:419;;;:::o;28670:::-;28836:4;28874:2;28863:9;28859:18;28851:26;;28923:9;28917:4;28913:20;28909:1;28898:9;28894:17;28887:47;28951:131;29077:4;28951:131;:::i;:::-;28943:139;;28670:419;;;:::o;29095:::-;29261:4;29299:2;29288:9;29284:18;29276:26;;29348:9;29342:4;29338:20;29334:1;29323:9;29319:17;29312:47;29376:131;29502:4;29376:131;:::i;:::-;29368:139;;29095:419;;;:::o;29520:::-;29686:4;29724:2;29713:9;29709:18;29701:26;;29773:9;29767:4;29763:20;29759:1;29748:9;29744:17;29737:47;29801:131;29927:4;29801:131;:::i;:::-;29793:139;;29520:419;;;:::o;29945:::-;30111:4;30149:2;30138:9;30134:18;30126:26;;30198:9;30192:4;30188:20;30184:1;30173:9;30169:17;30162:47;30226:131;30352:4;30226:131;:::i;:::-;30218:139;;29945:419;;;:::o;30370:::-;30536:4;30574:2;30563:9;30559:18;30551:26;;30623:9;30617:4;30613:20;30609:1;30598:9;30594:17;30587:47;30651:131;30777:4;30651:131;:::i;:::-;30643:139;;30370:419;;;:::o;30795:::-;30961:4;30999:2;30988:9;30984:18;30976:26;;31048:9;31042:4;31038:20;31034:1;31023:9;31019:17;31012:47;31076:131;31202:4;31076:131;:::i;:::-;31068:139;;30795:419;;;:::o;31220:::-;31386:4;31424:2;31413:9;31409:18;31401:26;;31473:9;31467:4;31463:20;31459:1;31448:9;31444:17;31437:47;31501:131;31627:4;31501:131;:::i;:::-;31493:139;;31220:419;;;:::o;31645:::-;31811:4;31849:2;31838:9;31834:18;31826:26;;31898:9;31892:4;31888:20;31884:1;31873:9;31869:17;31862:47;31926:131;32052:4;31926:131;:::i;:::-;31918:139;;31645:419;;;:::o;32070:::-;32236:4;32274:2;32263:9;32259:18;32251:26;;32323:9;32317:4;32313:20;32309:1;32298:9;32294:17;32287:47;32351:131;32477:4;32351:131;:::i;:::-;32343:139;;32070:419;;;:::o;32495:::-;32661:4;32699:2;32688:9;32684:18;32676:26;;32748:9;32742:4;32738:20;32734:1;32723:9;32719:17;32712:47;32776:131;32902:4;32776:131;:::i;:::-;32768:139;;32495:419;;;:::o;32920:::-;33086:4;33124:2;33113:9;33109:18;33101:26;;33173:9;33167:4;33163:20;33159:1;33148:9;33144:17;33137:47;33201:131;33327:4;33201:131;:::i;:::-;33193:139;;32920:419;;;:::o;33345:::-;33511:4;33549:2;33538:9;33534:18;33526:26;;33598:9;33592:4;33588:20;33584:1;33573:9;33569:17;33562:47;33626:131;33752:4;33626:131;:::i;:::-;33618:139;;33345:419;;;:::o;33770:::-;33936:4;33974:2;33963:9;33959:18;33951:26;;34023:9;34017:4;34013:20;34009:1;33998:9;33994:17;33987:47;34051:131;34177:4;34051:131;:::i;:::-;34043:139;;33770:419;;;:::o;34195:::-;34361:4;34399:2;34388:9;34384:18;34376:26;;34448:9;34442:4;34438:20;34434:1;34423:9;34419:17;34412:47;34476:131;34602:4;34476:131;:::i;:::-;34468:139;;34195:419;;;:::o;34620:::-;34786:4;34824:2;34813:9;34809:18;34801:26;;34873:9;34867:4;34863:20;34859:1;34848:9;34844:17;34837:47;34901:131;35027:4;34901:131;:::i;:::-;34893:139;;34620:419;;;:::o;35045:::-;35211:4;35249:2;35238:9;35234:18;35226:26;;35298:9;35292:4;35288:20;35284:1;35273:9;35269:17;35262:47;35326:131;35452:4;35326:131;:::i;:::-;35318:139;;35045:419;;;:::o;35470:::-;35636:4;35674:2;35663:9;35659:18;35651:26;;35723:9;35717:4;35713:20;35709:1;35698:9;35694:17;35687:47;35751:131;35877:4;35751:131;:::i;:::-;35743:139;;35470:419;;;:::o;35895:::-;36061:4;36099:2;36088:9;36084:18;36076:26;;36148:9;36142:4;36138:20;36134:1;36123:9;36119:17;36112:47;36176:131;36302:4;36176:131;:::i;:::-;36168:139;;35895:419;;;:::o;36320:::-;36486:4;36524:2;36513:9;36509:18;36501:26;;36573:9;36567:4;36563:20;36559:1;36548:9;36544:17;36537:47;36601:131;36727:4;36601:131;:::i;:::-;36593:139;;36320:419;;;:::o;36745:::-;36911:4;36949:2;36938:9;36934:18;36926:26;;36998:9;36992:4;36988:20;36984:1;36973:9;36969:17;36962:47;37026:131;37152:4;37026:131;:::i;:::-;37018:139;;36745:419;;;:::o;37170:222::-;37263:4;37301:2;37290:9;37286:18;37278:26;;37314:71;37382:1;37371:9;37367:17;37358:6;37314:71;:::i;:::-;37170:222;;;;:::o;37398:129::-;37432:6;37459:20;;:::i;:::-;37449:30;;37488:33;37516:4;37508:6;37488:33;:::i;:::-;37398:129;;;:::o;37533:75::-;37566:6;37599:2;37593:9;37583:19;;37533:75;:::o;37614:307::-;37675:4;37765:18;37757:6;37754:30;37751:56;;;37787:18;;:::i;:::-;37751:56;37825:29;37847:6;37825:29;:::i;:::-;37817:37;;37909:4;37903;37899:15;37891:23;;37614:307;;;:::o;37927:308::-;37989:4;38079:18;38071:6;38068:30;38065:56;;;38101:18;;:::i;:::-;38065:56;38139:29;38161:6;38139:29;:::i;:::-;38131:37;;38223:4;38217;38213:15;38205:23;;37927:308;;;:::o;38241:142::-;38318:4;38341:3;38333:11;;38371:4;38366:3;38362:14;38354:22;;38241:142;;;:::o;38389:132::-;38456:4;38479:3;38471:11;;38509:4;38504:3;38500:14;38492:22;;38389:132;;;:::o;38527:141::-;38576:4;38599:3;38591:11;;38622:3;38619:1;38612:14;38656:4;38653:1;38643:18;38635:26;;38527:141;;;:::o;38674:124::-;38751:6;38785:5;38779:12;38769:22;;38674:124;;;:::o;38804:114::-;38871:6;38905:5;38899:12;38889:22;;38804:114;;;:::o;38924:98::-;38975:6;39009:5;39003:12;38993:22;;38924:98;;;:::o;39028:99::-;39080:6;39114:5;39108:12;39098:22;;39028:99;;;:::o;39133:123::-;39213:4;39245;39240:3;39236:14;39228:22;;39133:123;;;:::o;39262:113::-;39332:4;39364;39359:3;39355:14;39347:22;;39262:113;;;:::o;39381:194::-;39490:11;39524:6;39519:3;39512:19;39564:4;39559:3;39555:14;39540:29;;39381:194;;;;:::o;39581:184::-;39680:11;39714:6;39709:3;39702:19;39754:4;39749:3;39745:14;39730:29;;39581:184;;;;:::o;39771:168::-;39854:11;39888:6;39883:3;39876:19;39928:4;39923:3;39919:14;39904:29;;39771:168;;;;:::o;39945:159::-;40019:11;40053:6;40048:3;40041:19;40093:4;40088:3;40084:14;40069:29;;39945:159;;;;:::o;40110:169::-;40194:11;40228:6;40223:3;40216:19;40268:4;40263:3;40259:14;40244:29;;40110:169;;;;:::o;40285:148::-;40387:11;40424:3;40409:18;;40285:148;;;;:::o;40439:305::-;40479:3;40498:20;40516:1;40498:20;:::i;:::-;40493:25;;40532:20;40550:1;40532:20;:::i;:::-;40527:25;;40686:1;40618:66;40614:74;40611:1;40608:81;40605:107;;;40692:18;;:::i;:::-;40605:107;40736:1;40733;40729:9;40722:16;;40439:305;;;;:::o;40750:185::-;40790:1;40807:20;40825:1;40807:20;:::i;:::-;40802:25;;40841:20;40859:1;40841:20;:::i;:::-;40836:25;;40880:1;40870:35;;40885:18;;:::i;:::-;40870:35;40927:1;40924;40920:9;40915:14;;40750:185;;;;:::o;40941:348::-;40981:7;41004:20;41022:1;41004:20;:::i;:::-;40999:25;;41038:20;41056:1;41038:20;:::i;:::-;41033:25;;41226:1;41158:66;41154:74;41151:1;41148:81;41143:1;41136:9;41129:17;41125:105;41122:131;;;41233:18;;:::i;:::-;41122:131;41281:1;41278;41274:9;41263:20;;40941:348;;;;:::o;41295:191::-;41335:4;41355:20;41373:1;41355:20;:::i;:::-;41350:25;;41389:20;41407:1;41389:20;:::i;:::-;41384:25;;41428:1;41425;41422:8;41419:34;;;41433:18;;:::i;:::-;41419:34;41478:1;41475;41471:9;41463:17;;41295:191;;;;:::o;41492:96::-;41529:7;41558:24;41576:5;41558:24;:::i;:::-;41547:35;;41492:96;;;:::o;41594:90::-;41628:7;41671:5;41664:13;41657:21;41646:32;;41594:90;;;:::o;41690:149::-;41726:7;41766:66;41759:5;41755:78;41744:89;;41690:149;;;:::o;41845:126::-;41882:7;41922:42;41915:5;41911:54;41900:65;;41845:126;;;:::o;41977:77::-;42014:7;42043:5;42032:16;;41977:77;;;:::o;42060:154::-;42144:6;42139:3;42134;42121:30;42206:1;42197:6;42192:3;42188:16;42181:27;42060:154;;;:::o;42220:307::-;42288:1;42298:113;42312:6;42309:1;42306:13;42298:113;;;42397:1;42392:3;42388:11;42382:18;42378:1;42373:3;42369:11;42362:39;42334:2;42331:1;42327:10;42322:15;;42298:113;;;42429:6;42426:1;42423:13;42420:101;;;42509:1;42500:6;42495:3;42491:16;42484:27;42420:101;42269:258;42220:307;;;:::o;42533:320::-;42577:6;42614:1;42608:4;42604:12;42594:22;;42661:1;42655:4;42651:12;42682:18;42672:81;;42738:4;42730:6;42726:17;42716:27;;42672:81;42800:2;42792:6;42789:14;42769:18;42766:38;42763:84;;;42819:18;;:::i;:::-;42763:84;42584:269;42533:320;;;:::o;42859:281::-;42942:27;42964:4;42942:27;:::i;:::-;42934:6;42930:40;43072:6;43060:10;43057:22;43036:18;43024:10;43021:34;43018:62;43015:88;;;43083:18;;:::i;:::-;43015:88;43123:10;43119:2;43112:22;42902:238;42859:281;;:::o;43146:233::-;43185:3;43208:24;43226:5;43208:24;:::i;:::-;43199:33;;43254:66;43247:5;43244:77;43241:103;;;43324:18;;:::i;:::-;43241:103;43371:1;43364:5;43360:13;43353:20;;43146:233;;;:::o;43385:176::-;43417:1;43434:20;43452:1;43434:20;:::i;:::-;43429:25;;43468:20;43486:1;43468:20;:::i;:::-;43463:25;;43507:1;43497:35;;43512:18;;:::i;:::-;43497:35;43553:1;43550;43546:9;43541:14;;43385:176;;;;:::o;43567:180::-;43615:77;43612:1;43605:88;43712:4;43709:1;43702:15;43736:4;43733:1;43726:15;43753:180;43801:77;43798:1;43791:88;43898:4;43895:1;43888:15;43922:4;43919:1;43912:15;43939:180;43987:77;43984:1;43977:88;44084:4;44081:1;44074:15;44108:4;44105:1;44098:15;44125:180;44173:77;44170:1;44163:88;44270:4;44267:1;44260:15;44294:4;44291:1;44284:15;44311:180;44359:77;44356:1;44349:88;44456:4;44453:1;44446:15;44480:4;44477:1;44470:15;44497:180;44545:77;44542:1;44535:88;44642:4;44639:1;44632:15;44666:4;44663:1;44656:15;44683:117;44792:1;44789;44782:12;44806:117;44915:1;44912;44905:12;44929:117;45038:1;45035;45028:12;45052:117;45161:1;45158;45151:12;45175:117;45284:1;45281;45274:12;45298:117;45407:1;45404;45397:12;45421:102;45462:6;45513:2;45509:7;45504:2;45497:5;45493:14;45489:28;45479:38;;45421:102;;;:::o;45529:242::-;45669:34;45665:1;45657:6;45653:14;45646:58;45738:25;45733:2;45725:6;45721:15;45714:50;45529:242;:::o;45777:372::-;45917:34;45913:1;45905:6;45901:14;45894:58;45986:34;45981:2;45973:6;45969:15;45962:59;46055:34;46050:2;46042:6;46038:15;46031:59;46124:17;46119:2;46111:6;46107:15;46100:42;45777:372;:::o;46155:310::-;46295:34;46291:1;46283:6;46279:14;46272:58;46364:34;46359:2;46351:6;46347:15;46340:59;46433:24;46428:2;46420:6;46416:15;46409:49;46155:310;:::o;46471:230::-;46611:34;46607:1;46599:6;46595:14;46588:58;46680:13;46675:2;46667:6;46663:15;46656:38;46471:230;:::o;46707:237::-;46847:34;46843:1;46835:6;46831:14;46824:58;46916:20;46911:2;46903:6;46899:15;46892:45;46707:237;:::o;46950:225::-;47090:34;47086:1;47078:6;47074:14;47067:58;47159:8;47154:2;47146:6;47142:15;47135:33;46950:225;:::o;47181:178::-;47321:30;47317:1;47309:6;47305:14;47298:54;47181:178;:::o;47365:312::-;47505:34;47501:1;47493:6;47489:14;47482:58;47574:34;47569:2;47561:6;47557:15;47550:59;47643:26;47638:2;47630:6;47626:15;47619:51;47365:312;:::o;47683:223::-;47823:34;47819:1;47811:6;47807:14;47800:58;47892:6;47887:2;47879:6;47875:15;47868:31;47683:223;:::o;47912:175::-;48052:27;48048:1;48040:6;48036:14;48029:51;47912:175;:::o;48093:229::-;48233:34;48229:1;48221:6;48217:14;48210:58;48302:12;48297:2;48289:6;48285:15;48278:37;48093:229;:::o;48328:231::-;48468:34;48464:1;48456:6;48452:14;48445:58;48537:14;48532:2;48524:6;48520:15;48513:39;48328:231;:::o;48565:297::-;48705:34;48701:1;48693:6;48689:14;48682:58;48774:34;48769:2;48761:6;48757:15;48750:59;48843:11;48838:2;48830:6;48826:15;48819:36;48565:297;:::o;48868:243::-;49008:34;49004:1;48996:6;48992:14;48985:58;49077:26;49072:2;49064:6;49060:15;49053:51;48868:243;:::o;49117:229::-;49257:34;49253:1;49245:6;49241:14;49234:58;49326:12;49321:2;49313:6;49309:15;49302:37;49117:229;:::o;49352:228::-;49492:34;49488:1;49480:6;49476:14;49469:58;49561:11;49556:2;49548:6;49544:15;49537:36;49352:228;:::o;49586:182::-;49726:34;49722:1;49714:6;49710:14;49703:58;49586:182;:::o;49774:315::-;49914:34;49910:1;49902:6;49898:14;49891:58;49983:34;49978:2;49970:6;49966:15;49959:59;50052:29;50047:2;50039:6;50035:15;50028:54;49774:315;:::o;50095:231::-;50235:34;50231:1;50223:6;50219:14;50212:58;50304:14;50299:2;50291:6;50287:15;50280:39;50095:231;:::o;50332:221::-;50472:34;50468:1;50460:6;50456:14;50449:58;50541:4;50536:2;50528:6;50524:15;50517:29;50332:221;:::o;50559:182::-;50699:34;50695:1;50687:6;50683:14;50676:58;50559:182;:::o;50747:228::-;50887:34;50883:1;50875:6;50871:14;50864:58;50956:11;50951:2;50943:6;50939:15;50932:36;50747:228;:::o;50981:220::-;51121:34;51117:1;51109:6;51105:14;51098:58;51190:3;51185:2;51177:6;51173:15;51166:28;50981:220;:::o;51207:236::-;51347:34;51343:1;51335:6;51331:14;51324:58;51416:19;51411:2;51403:6;51399:15;51392:44;51207:236;:::o;51449:231::-;51589:34;51585:1;51577:6;51573:14;51566:58;51658:14;51653:2;51645:6;51641:15;51634:39;51449:231;:::o;51686:245::-;51826:34;51822:1;51814:6;51810:14;51803:58;51895:28;51890:2;51882:6;51878:15;51871:53;51686:245;:::o;51937:122::-;52010:24;52028:5;52010:24;:::i;:::-;52003:5;52000:35;51990:63;;52049:1;52046;52039:12;51990:63;51937:122;:::o;52065:116::-;52135:21;52150:5;52135:21;:::i;:::-;52128:5;52125:32;52115:60;;52171:1;52168;52161:12;52115:60;52065:116;:::o;52187:120::-;52259:23;52276:5;52259:23;:::i;:::-;52252:5;52249:34;52239:62;;52297:1;52294;52287:12;52239:62;52187:120;:::o;52313:122::-;52386:24;52404:5;52386:24;:::i;:::-;52379:5;52376:35;52366:63;;52425:1;52422;52415:12;52366:63;52313:122;:::o
Swarm Source
ipfs://8bd0b3915c079cfb00664860036264d5752a21e37f37f614962f355b44266db9
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.