ERC-721
Overview
Max Total Supply
99 CRYPT
Holders
97
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CRYPTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
the_crypt
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-18 */ 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; } } 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. *dsadasdasdassa * 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); } 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); } /** * @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; } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // 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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // 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(), ".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public 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]; } 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(); } } pragma solidity ^0.8.0; contract the_crypt is ERC721Enumerable, Ownable { using Strings for uint256; uint256 public PRICE = 0 ether; uint256 public MAX_CRYPTS = 99; uint256 public numCryptsMinted; string public baseTokenURI = "https://racecar.mypinata.cloud/ipfs/QmNuZEjhcmHkGUeru4771tDaeYUScz7vH3JJKD2pWgWXEp/"; address public constant payoutAddr = 0x32Ec199B09fc2ff407770ed0AE5F793136832833; //Address of Payout bool public teamMintStarted = true; bool public pause = false; mapping(address => uint256) private _totalClaimed; event CryptsMint(address minter, uint256 amountOfcrypts); constructor() ERC721("The Crypt", "CRYPT") {} function toggleTeamMintStarted() external onlyOwner { teamMintStarted = !teamMintStarted; } function togglePause() external onlyOwner { pause = !pause; } function setbaseTokenURI(string memory baseURI) public onlyOwner returns (string memory) { baseTokenURI = baseURI; return baseTokenURI; } function setPrice(uint256 inPrice) public onlyOwner returns (uint256) { PRICE = inPrice; return PRICE; } function amountClaimedBy(address owner) external view returns (uint256) { require(owner != address(0), "Cannot add null address"); return _totalClaimed[owner]; } function teamMint(address _address, uint256 amountOfcrypts) external payable onlyOwner{ require(_address != address(0), "Cannot mint to null address"); require(teamMintStarted, "Team minting not started."); require(totalSupply() < MAX_CRYPTS, "All team tokens minted."); require(totalSupply() + amountOfcrypts <= MAX_CRYPTS, "Minting would exceed supply!"); for (uint256 i = 0; i < amountOfcrypts; i++) { uint256 tokenId = numCryptsMinted + 1; numCryptsMinted += 1; _totalClaimed[_address] += 1; _safeMint(_address, tokenId); } emit CryptsMint(_address, amountOfcrypts); } function ownerMint(uint256 amountOfcrypts) external payable onlyOwner{ require(teamMintStarted, "Team minting not started."); require(totalSupply() < MAX_CRYPTS, "All team tokens minted."); require(totalSupply() + amountOfcrypts <= MAX_CRYPTS, "Minting would exceed supply!"); for (uint256 i = 0; i < amountOfcrypts; i++) { uint256 tokenId = numCryptsMinted + 1; numCryptsMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit CryptsMint(msg.sender, amountOfcrypts); } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Insufficent balance"); _widthdraw(payoutAddr, balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{ value: _amount }(""); require(success, "Failed to widthdraw Ether"); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString(), ".json")) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfcrypts","type":"uint256"}],"name":"CryptsMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_CRYPTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numCryptsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfcrypts","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"inPrice","type":"uint256"}],"name":"setPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setbaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"amountOfcrypts","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"teamMintStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTeamMintStarted","outputs":[],"stateMutability":"nonpayable","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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b556063600c5560405180608001604052806053815260200162004afa60539139600e90805190602001906200003f92919062000218565b506001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200008357600080fd5b506040518060400160405280600981526020017f54686520437279707400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f435259505400000000000000000000000000000000000000000000000000000081525081600090805190602001906200010892919062000218565b5080600190805190602001906200012192919062000218565b50505062000144620001386200014a60201b60201c565b6200015260201b60201c565b6200032d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022690620002c8565b90600052602060002090601f0160209004810192826200024a576000855562000296565b82601f106200026557805160ff191683800117855562000296565b8280016001018555821562000296579182015b828111156200029557825182559160200191906001019062000278565b5b509050620002a59190620002a9565b5090565b5b80821115620002c4576000816000905550600101620002aa565b5090565b60006002820490506001821680620002e157607f821691505b60208210811415620002f857620002f7620002fe565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147bd806200033d6000396000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063add5a4fa116100a0578063d547cfb71161006f578063d547cfb714610728578063e985e9c514610753578063f112cabb14610790578063f19e75d4146107bb578063f2fde38b146107d7576101f9565b8063add5a4fa1461068f578063b88d4fde146106ab578063c4ae3168146106d4578063c87b56dd146106eb576101f9565b80638da5cb5b116100dc5780638da5cb5b146105d357806391b7f5ed146105fe57806395d89b411461063b578063a22cb46514610666576101f9565b8063715018a61461054f5780638456cb5914610566578063853828b6146105915780638d859f3e146105a8576101f9565b80632b4403bb1161019057806342842e0e1161015f57806342842e0e146104585780634f6ccce7146104815780635a7dab1d146104be5780636352211e146104d557806370a0823114610512576101f9565b80632b4403bb146103885780632f745c59146103b357806336c4ff7a146103f057806337c0df0c1461041b576101f9565b8063095ea7b3116101cc578063095ea7b3146102ce57806318160ddd146102f75780631978f4691461032257806323b872dd1461035f576101f9565b806301ffc9a7146101fe57806306fdde031461023b57806307a22bad14610266578063081812fc14610291575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613257565b610800565b60405161023291906138fb565b60405180910390f35b34801561024757600080fd5b5061025061087a565b60405161025d9190613916565b60405180910390f35b34801561027257600080fd5b5061027b61090c565b6040516102889190613c58565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b391906132fa565b610912565b6040516102c5919061386b565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613217565b610997565b005b34801561030357600080fd5b5061030c610aaf565b6040516103199190613c58565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613094565b610abc565b6040516103569190613c58565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613101565b610b74565b005b34801561039457600080fd5b5061039d610bd4565b6040516103aa91906138fb565b60405180910390f35b3480156103bf57600080fd5b506103da60048036038101906103d59190613217565b610be7565b6040516103e79190613c58565b60405180910390f35b3480156103fc57600080fd5b50610405610c8c565b604051610412919061386b565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906132b1565b610ca4565b60405161044f9190613916565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613101565b610dcb565b005b34801561048d57600080fd5b506104a860048036038101906104a391906132fa565b610deb565b6040516104b59190613c58565b60405180910390f35b3480156104ca57600080fd5b506104d3610e5c565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906132fa565b610f04565b604051610509919061386b565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613094565b610fb6565b6040516105469190613c58565b60405180910390f35b34801561055b57600080fd5b5061056461106e565b005b34801561057257600080fd5b5061057b6110f6565b60405161058891906138fb565b60405180910390f35b34801561059d57600080fd5b506105a6611109565b005b3480156105b457600080fd5b506105bd6111ee565b6040516105ca9190613c58565b60405180910390f35b3480156105df57600080fd5b506105e86111f4565b6040516105f5919061386b565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906132fa565b61121e565b6040516106329190613c58565b60405180910390f35b34801561064757600080fd5b506106506112ad565b60405161065d9190613916565b60405180910390f35b34801561067257600080fd5b5061068d600480360381019061068891906131d7565b61133f565b005b6106a960048036038101906106a49190613217565b6114c0565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613154565b611788565b005b3480156106e057600080fd5b506106e96117ea565b005b3480156106f757600080fd5b50610712600480360381019061070d91906132fa565b611892565b60405161071f9190613916565b60405180910390f35b34801561073457600080fd5b5061073d61193a565b60405161074a9190613916565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906130c1565b6119c8565b60405161078791906138fb565b60405180910390f35b34801561079c57600080fd5b506107a5611a5c565b6040516107b29190613c58565b60405180910390f35b6107d560048036038101906107d091906132fa565b611a62565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613094565b611cb9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610873575061087282611db1565b5b9050919050565b60606000805461088990613ece565b80601f01602080910402602001604051908101604052809291908181526020018280546108b590613ece565b80156109025780601f106108d757610100808354040283529160200191610902565b820191906000526020600020905b8154815290600101906020018083116108e557829003601f168201915b5050505050905090565b600d5481565b600061091d82611e93565b61095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390613ab8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a282610f04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613b78565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a32611eff565b73ffffffffffffffffffffffffffffffffffffffff161480610a615750610a6081610a5b611eff565b6119c8565b5b610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613a18565b60405180910390fd5b610aaa8383611f07565b505050565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613b98565b60405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b85610b7f611eff565b82611fc0565b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613bb8565b60405180910390fd5b610bcf83838361209e565b505050565b600f60009054906101000a900460ff1681565b6000610bf283610fb6565b8210610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613938565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7332ec199b09fc2ff407770ed0ae5f79313683283381565b6060610cae611eff565b73ffffffffffffffffffffffffffffffffffffffff16610ccc6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613af8565b60405180910390fd5b81600e9080519060200190610d38929190612ea8565b50600e8054610d4690613ece565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290613ece565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b50505050509050919050565b610de683838360405180602001604052806000815250611788565b505050565b6000610df5610aaf565b8210610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613bd8565b60405180910390fd5b60088281548110610e4a57610e49614067565b5b90600052602060002001549050919050565b610e64611eff565b73ffffffffffffffffffffffffffffffffffffffff16610e826111f4565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf90613af8565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613a58565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613a38565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611076611eff565b73ffffffffffffffffffffffffffffffffffffffff166110946111f4565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613af8565b60405180910390fd5b6110f460006122fa565b565b600f60019054906101000a900460ff1681565b611111611eff565b73ffffffffffffffffffffffffffffffffffffffff1661112f6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90613af8565b60405180910390fd5b6000479050600081116111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613ad8565b60405180910390fd5b6111eb7332ec199b09fc2ff407770ed0ae5f793136832833826123c0565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611228611eff565b73ffffffffffffffffffffffffffffffffffffffff166112466111f4565b73ffffffffffffffffffffffffffffffffffffffff161461129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613af8565b60405180910390fd5b81600b81905550600b549050919050565b6060600180546112bc90613ece565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890613ece565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b5050505050905090565b611347611eff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac906139d8565b60405180910390fd5b80600560006113c2611eff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661146f611eff565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114b491906138fb565b60405180910390a35050565b6114c8611eff565b73ffffffffffffffffffffffffffffffffffffffff166114e66111f4565b73ffffffffffffffffffffffffffffffffffffffff161461153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390613bf8565b60405180910390fd5b600f60009054906101000a900460ff166115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613c18565b60405180910390fd5b600c54611606610aaf565b10611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613c38565b60405180910390fd5b600c5481611652610aaf565b61165c9190613d5d565b111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613a98565b60405180910390fd5b60005b8181101561174a5760006001600d546116b99190613d5d565b90506001600d60008282546116ce9190613d5d565b925050819055506001601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117259190613d5d565b925050819055506117368482612471565b50808061174290613f31565b9150506116a0565b507f81417d8a7de13191fbd87199a3493afec1716ca333bbfbf0ef70fa7232a719a5828260405161177c9291906138d2565b60405180910390a15050565b611799611793611eff565b83611fc0565b6117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613bb8565b60405180910390fd5b6117e48484848461248f565b50505050565b6117f2611eff565b73ffffffffffffffffffffffffffffffffffffffff166118106111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613af8565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b606061189d82611e93565b6118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613b38565b60405180910390fd5b6000600e80546118eb90613ece565b9050116119075760405180602001604052806000815250611933565b600e611912836124eb565b604051602001611923929190613827565b6040516020818303038152906040525b9050919050565b600e805461194790613ece565b80601f016020809104026020016040519081016040528092919081815260200182805461197390613ece565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611a6a611eff565b73ffffffffffffffffffffffffffffffffffffffff16611a886111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590613af8565b60405180910390fd5b600f60009054906101000a900460ff16611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2490613c18565b60405180910390fd5b600c54611b38610aaf565b10611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613c38565b60405180910390fd5b600c5481611b84610aaf565b611b8e9190613d5d565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613a98565b60405180910390fd5b60005b81811015611c7c5760006001600d54611beb9190613d5d565b90506001600d6000828254611c009190613d5d565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c579190613d5d565b92505081905550611c683382612471565b508080611c7490613f31565b915050611bd2565b507f81417d8a7de13191fbd87199a3493afec1716ca333bbfbf0ef70fa7232a719a53382604051611cae9291906138d2565b60405180910390a150565b611cc1611eff565b73ffffffffffffffffffffffffffffffffffffffff16611cdf6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613978565b60405180910390fd5b611dae816122fa565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e8c5750611e8b8261264c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7a83610f04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fcb82611e93565b61200a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612001906139f8565b60405180910390fd5b600061201583610f04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061208457508373ffffffffffffffffffffffffffffffffffffffff1661206c84610912565b73ffffffffffffffffffffffffffffffffffffffff16145b80612095575061209481856119c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120be82610f04565b73ffffffffffffffffffffffffffffffffffffffff1614612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90613b18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906139b8565b60405180910390fd5b61218f8383836126b6565b61219a600082611f07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ea9190613de4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122419190613d5d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123e690613856565b60006040518083038185875af1925050503d8060008114612423576040519150601f19603f3d011682016040523d82523d6000602084013e612428565b606091505b505090508061246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246390613b58565b60405180910390fd5b505050565b61248b8282604051806020016040528060008152506127ca565b5050565b61249a84848461209e565b6124a684848484612825565b6124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613958565b60405180910390fd5b50505050565b60606000821415612533576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612647565b600082905060005b6000821461256557808061254e90613f31565b915050600a8261255e9190613db3565b915061253b565b60008167ffffffffffffffff81111561258157612580614096565b5b6040519080825280601f01601f1916602001820160405280156125b35781602001600182028036833780820191505090505b5090505b60008514612640576001826125cc9190613de4565b9150600a856125db9190613f7a565b60306125e79190613d5d565b60f81b8183815181106125fd576125fc614067565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126399190613db3565b94506125b7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126c18383836129bc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576126ff816129c1565b612743565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612742576127418382612a0a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127865761278181612b77565b6127c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127c4576127c38282612c48565b5b5b505050565b6127d48383612cc7565b6127e16000848484612825565b612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790613958565b60405180910390fd5b505050565b60006128468473ffffffffffffffffffffffffffffffffffffffff16612e95565b156129af578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261286f611eff565b8786866040518563ffffffff1660e01b81526004016128919493929190613886565b602060405180830381600087803b1580156128ab57600080fd5b505af19250505080156128dc57506040513d601f19601f820116820180604052508101906128d99190613284565b60015b61295f573d806000811461290c576040519150601f19603f3d011682016040523d82523d6000602084013e612911565b606091505b50600081511415612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90613958565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129b4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1784610fb6565b612a219190613de4565b9050600060076000848152602001908152602001600020549050818114612b06576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b8b9190613de4565b9050600060096000848152602001908152602001600020549050600060088381548110612bbb57612bba614067565b5b906000526020600020015490508060088381548110612bdd57612bdc614067565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c2c57612c2b614038565b5b6001900381819060005260206000200160009055905550505050565b6000612c5383610fb6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90613a78565b60405180910390fd5b612d4081611e93565b15612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790613998565b60405180910390fd5b612d8c600083836126b6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ddc9190613d5d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612eb490613ece565b90600052602060002090601f016020900481019282612ed65760008555612f1d565b82601f10612eef57805160ff1916838001178555612f1d565b82800160010185558215612f1d579182015b82811115612f1c578251825591602001919060010190612f01565b5b509050612f2a9190612f2e565b5090565b5b80821115612f47576000816000905550600101612f2f565b5090565b6000612f5e612f5984613c98565b613c73565b905082815260208101848484011115612f7a57612f796140ca565b5b612f85848285613e8c565b509392505050565b6000612fa0612f9b84613cc9565b613c73565b905082815260208101848484011115612fbc57612fbb6140ca565b5b612fc7848285613e8c565b509392505050565b600081359050612fde8161472b565b92915050565b600081359050612ff381614742565b92915050565b60008135905061300881614759565b92915050565b60008151905061301d81614759565b92915050565b600082601f830112613038576130376140c5565b5b8135613048848260208601612f4b565b91505092915050565b600082601f830112613066576130656140c5565b5b8135613076848260208601612f8d565b91505092915050565b60008135905061308e81614770565b92915050565b6000602082840312156130aa576130a96140d4565b5b60006130b884828501612fcf565b91505092915050565b600080604083850312156130d8576130d76140d4565b5b60006130e685828601612fcf565b92505060206130f785828601612fcf565b9150509250929050565b60008060006060848603121561311a576131196140d4565b5b600061312886828701612fcf565b935050602061313986828701612fcf565b925050604061314a8682870161307f565b9150509250925092565b6000806000806080858703121561316e5761316d6140d4565b5b600061317c87828801612fcf565b945050602061318d87828801612fcf565b935050604061319e8782880161307f565b925050606085013567ffffffffffffffff8111156131bf576131be6140cf565b5b6131cb87828801613023565b91505092959194509250565b600080604083850312156131ee576131ed6140d4565b5b60006131fc85828601612fcf565b925050602061320d85828601612fe4565b9150509250929050565b6000806040838503121561322e5761322d6140d4565b5b600061323c85828601612fcf565b925050602061324d8582860161307f565b9150509250929050565b60006020828403121561326d5761326c6140d4565b5b600061327b84828501612ff9565b91505092915050565b60006020828403121561329a576132996140d4565b5b60006132a88482850161300e565b91505092915050565b6000602082840312156132c7576132c66140d4565b5b600082013567ffffffffffffffff8111156132e5576132e46140cf565b5b6132f184828501613051565b91505092915050565b6000602082840312156133105761330f6140d4565b5b600061331e8482850161307f565b91505092915050565b61333081613e18565b82525050565b61333f81613e2a565b82525050565b600061335082613d0f565b61335a8185613d25565b935061336a818560208601613e9b565b613373816140d9565b840191505092915050565b600061338982613d1a565b6133938185613d41565b93506133a3818560208601613e9b565b6133ac816140d9565b840191505092915050565b60006133c282613d1a565b6133cc8185613d52565b93506133dc818560208601613e9b565b80840191505092915050565b600081546133f581613ece565b6133ff8186613d52565b9450600182166000811461341a576001811461342b5761345e565b60ff1983168652818601935061345e565b61343485613cfa565b60005b8381101561345657815481890152600182019150602081019050613437565b838801955050505b50505092915050565b6000613474602b83613d41565b915061347f826140ea565b604082019050919050565b6000613497603283613d41565b91506134a282614139565b604082019050919050565b60006134ba602683613d41565b91506134c582614188565b604082019050919050565b60006134dd601c83613d41565b91506134e8826141d7565b602082019050919050565b6000613500602483613d41565b915061350b82614200565b604082019050919050565b6000613523601983613d41565b915061352e8261424f565b602082019050919050565b6000613546602c83613d41565b915061355182614278565b604082019050919050565b6000613569603883613d41565b9150613574826142c7565b604082019050919050565b600061358c602a83613d41565b915061359782614316565b604082019050919050565b60006135af602983613d41565b91506135ba82614365565b604082019050919050565b60006135d2602083613d41565b91506135dd826143b4565b602082019050919050565b60006135f5601c83613d41565b9150613600826143dd565b602082019050919050565b6000613618602c83613d41565b915061362382614406565b604082019050919050565b600061363b600583613d52565b915061364682614455565b600582019050919050565b600061365e601383613d41565b91506136698261447e565b602082019050919050565b6000613681602083613d41565b915061368c826144a7565b602082019050919050565b60006136a4602983613d41565b91506136af826144d0565b604082019050919050565b60006136c7602f83613d41565b91506136d28261451f565b604082019050919050565b60006136ea601983613d41565b91506136f58261456e565b602082019050919050565b600061370d602183613d41565b915061371882614597565b604082019050919050565b6000613730600083613d36565b915061373b826145e6565b600082019050919050565b6000613753601783613d41565b915061375e826145e9565b602082019050919050565b6000613776603183613d41565b915061378182614612565b604082019050919050565b6000613799602c83613d41565b91506137a482614661565b604082019050919050565b60006137bc601b83613d41565b91506137c7826146b0565b602082019050919050565b60006137df601983613d41565b91506137ea826146d9565b602082019050919050565b6000613802601783613d41565b915061380d82614702565b602082019050919050565b61382181613e82565b82525050565b600061383382856133e8565b915061383f82846133b7565b915061384a8261362e565b91508190509392505050565b600061386182613723565b9150819050919050565b60006020820190506138806000830184613327565b92915050565b600060808201905061389b6000830187613327565b6138a86020830186613327565b6138b56040830185613818565b81810360608301526138c78184613345565b905095945050505050565b60006040820190506138e76000830185613327565b6138f46020830184613818565b9392505050565b60006020820190506139106000830184613336565b92915050565b60006020820190508181036000830152613930818461337e565b905092915050565b6000602082019050818103600083015261395181613467565b9050919050565b600060208201905081810360008301526139718161348a565b9050919050565b60006020820190508181036000830152613991816134ad565b9050919050565b600060208201905081810360008301526139b1816134d0565b9050919050565b600060208201905081810360008301526139d1816134f3565b9050919050565b600060208201905081810360008301526139f181613516565b9050919050565b60006020820190508181036000830152613a1181613539565b9050919050565b60006020820190508181036000830152613a318161355c565b9050919050565b60006020820190508181036000830152613a518161357f565b9050919050565b60006020820190508181036000830152613a71816135a2565b9050919050565b60006020820190508181036000830152613a91816135c5565b9050919050565b60006020820190508181036000830152613ab1816135e8565b9050919050565b60006020820190508181036000830152613ad18161360b565b9050919050565b60006020820190508181036000830152613af181613651565b9050919050565b60006020820190508181036000830152613b1181613674565b9050919050565b60006020820190508181036000830152613b3181613697565b9050919050565b60006020820190508181036000830152613b51816136ba565b9050919050565b60006020820190508181036000830152613b71816136dd565b9050919050565b60006020820190508181036000830152613b9181613700565b9050919050565b60006020820190508181036000830152613bb181613746565b9050919050565b60006020820190508181036000830152613bd181613769565b9050919050565b60006020820190508181036000830152613bf18161378c565b9050919050565b60006020820190508181036000830152613c11816137af565b9050919050565b60006020820190508181036000830152613c31816137d2565b9050919050565b60006020820190508181036000830152613c51816137f5565b9050919050565b6000602082019050613c6d6000830184613818565b92915050565b6000613c7d613c8e565b9050613c898282613f00565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb357613cb2614096565b5b613cbc826140d9565b9050602081019050919050565b600067ffffffffffffffff821115613ce457613ce3614096565b5b613ced826140d9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d6882613e82565b9150613d7383613e82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613da857613da7613fab565b5b828201905092915050565b6000613dbe82613e82565b9150613dc983613e82565b925082613dd957613dd8613fda565b5b828204905092915050565b6000613def82613e82565b9150613dfa83613e82565b925082821015613e0d57613e0c613fab565b5b828203905092915050565b6000613e2382613e62565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613eb9578082015181840152602081019050613e9e565b83811115613ec8576000848401525b50505050565b60006002820490506001821680613ee657607f821691505b60208210811415613efa57613ef9614009565b5b50919050565b613f09826140d9565b810181811067ffffffffffffffff82111715613f2857613f27614096565b5b80604052505050565b6000613f3c82613e82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6f57613f6e613fab565b5b600182019050919050565b6000613f8582613e82565b9150613f9083613e82565b925082613fa057613f9f613fda565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d696e74696e6720776f756c642065786365656420737570706c792100000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e7420746f206e756c6c20616464726573730000000000600082015250565b7f5465616d206d696e74696e67206e6f7420737461727465642e00000000000000600082015250565b7f416c6c207465616d20746f6b656e73206d696e7465642e000000000000000000600082015250565b61473481613e18565b811461473f57600080fd5b50565b61474b81613e2a565b811461475657600080fd5b50565b61476281613e36565b811461476d57600080fd5b50565b61477981613e82565b811461478457600080fd5b5056fea2646970667358221220d767768053beaed503f7572c7410f78b2bbfbbf0cbb16f778c0b5b613533bfed64736f6c6343000807003368747470733a2f2f726163656361722e6d7970696e6174612e636c6f75642f697066732f516d4e755a456a68636d486b47556572753437373174446165595553637a377648334a4a4b4432705767575845702f
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063715018a61161010d578063add5a4fa116100a0578063d547cfb71161006f578063d547cfb714610728578063e985e9c514610753578063f112cabb14610790578063f19e75d4146107bb578063f2fde38b146107d7576101f9565b8063add5a4fa1461068f578063b88d4fde146106ab578063c4ae3168146106d4578063c87b56dd146106eb576101f9565b80638da5cb5b116100dc5780638da5cb5b146105d357806391b7f5ed146105fe57806395d89b411461063b578063a22cb46514610666576101f9565b8063715018a61461054f5780638456cb5914610566578063853828b6146105915780638d859f3e146105a8576101f9565b80632b4403bb1161019057806342842e0e1161015f57806342842e0e146104585780634f6ccce7146104815780635a7dab1d146104be5780636352211e146104d557806370a0823114610512576101f9565b80632b4403bb146103885780632f745c59146103b357806336c4ff7a146103f057806337c0df0c1461041b576101f9565b8063095ea7b3116101cc578063095ea7b3146102ce57806318160ddd146102f75780631978f4691461032257806323b872dd1461035f576101f9565b806301ffc9a7146101fe57806306fdde031461023b57806307a22bad14610266578063081812fc14610291575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190613257565b610800565b60405161023291906138fb565b60405180910390f35b34801561024757600080fd5b5061025061087a565b60405161025d9190613916565b60405180910390f35b34801561027257600080fd5b5061027b61090c565b6040516102889190613c58565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b391906132fa565b610912565b6040516102c5919061386b565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613217565b610997565b005b34801561030357600080fd5b5061030c610aaf565b6040516103199190613c58565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613094565b610abc565b6040516103569190613c58565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613101565b610b74565b005b34801561039457600080fd5b5061039d610bd4565b6040516103aa91906138fb565b60405180910390f35b3480156103bf57600080fd5b506103da60048036038101906103d59190613217565b610be7565b6040516103e79190613c58565b60405180910390f35b3480156103fc57600080fd5b50610405610c8c565b604051610412919061386b565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d91906132b1565b610ca4565b60405161044f9190613916565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613101565b610dcb565b005b34801561048d57600080fd5b506104a860048036038101906104a391906132fa565b610deb565b6040516104b59190613c58565b60405180910390f35b3480156104ca57600080fd5b506104d3610e5c565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906132fa565b610f04565b604051610509919061386b565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613094565b610fb6565b6040516105469190613c58565b60405180910390f35b34801561055b57600080fd5b5061056461106e565b005b34801561057257600080fd5b5061057b6110f6565b60405161058891906138fb565b60405180910390f35b34801561059d57600080fd5b506105a6611109565b005b3480156105b457600080fd5b506105bd6111ee565b6040516105ca9190613c58565b60405180910390f35b3480156105df57600080fd5b506105e86111f4565b6040516105f5919061386b565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906132fa565b61121e565b6040516106329190613c58565b60405180910390f35b34801561064757600080fd5b506106506112ad565b60405161065d9190613916565b60405180910390f35b34801561067257600080fd5b5061068d600480360381019061068891906131d7565b61133f565b005b6106a960048036038101906106a49190613217565b6114c0565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613154565b611788565b005b3480156106e057600080fd5b506106e96117ea565b005b3480156106f757600080fd5b50610712600480360381019061070d91906132fa565b611892565b60405161071f9190613916565b60405180910390f35b34801561073457600080fd5b5061073d61193a565b60405161074a9190613916565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906130c1565b6119c8565b60405161078791906138fb565b60405180910390f35b34801561079c57600080fd5b506107a5611a5c565b6040516107b29190613c58565b60405180910390f35b6107d560048036038101906107d091906132fa565b611a62565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613094565b611cb9565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610873575061087282611db1565b5b9050919050565b60606000805461088990613ece565b80601f01602080910402602001604051908101604052809291908181526020018280546108b590613ece565b80156109025780601f106108d757610100808354040283529160200191610902565b820191906000526020600020905b8154815290600101906020018083116108e557829003601f168201915b5050505050905090565b600d5481565b600061091d82611e93565b61095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095390613ab8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a282610f04565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a90613b78565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a32611eff565b73ffffffffffffffffffffffffffffffffffffffff161480610a615750610a6081610a5b611eff565b6119c8565b5b610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613a18565b60405180910390fd5b610aaa8383611f07565b505050565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613b98565b60405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b85610b7f611eff565b82611fc0565b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613bb8565b60405180910390fd5b610bcf83838361209e565b505050565b600f60009054906101000a900460ff1681565b6000610bf283610fb6565b8210610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90613938565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b7332ec199b09fc2ff407770ed0ae5f79313683283381565b6060610cae611eff565b73ffffffffffffffffffffffffffffffffffffffff16610ccc6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613af8565b60405180910390fd5b81600e9080519060200190610d38929190612ea8565b50600e8054610d4690613ece565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290613ece565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b50505050509050919050565b610de683838360405180602001604052806000815250611788565b505050565b6000610df5610aaf565b8210610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613bd8565b60405180910390fd5b60088281548110610e4a57610e49614067565b5b90600052602060002001549050919050565b610e64611eff565b73ffffffffffffffffffffffffffffffffffffffff16610e826111f4565b73ffffffffffffffffffffffffffffffffffffffff1614610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf90613af8565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613a58565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613a38565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611076611eff565b73ffffffffffffffffffffffffffffffffffffffff166110946111f4565b73ffffffffffffffffffffffffffffffffffffffff16146110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190613af8565b60405180910390fd5b6110f460006122fa565b565b600f60019054906101000a900460ff1681565b611111611eff565b73ffffffffffffffffffffffffffffffffffffffff1661112f6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90613af8565b60405180910390fd5b6000479050600081116111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613ad8565b60405180910390fd5b6111eb7332ec199b09fc2ff407770ed0ae5f793136832833826123c0565b50565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611228611eff565b73ffffffffffffffffffffffffffffffffffffffff166112466111f4565b73ffffffffffffffffffffffffffffffffffffffff161461129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390613af8565b60405180910390fd5b81600b81905550600b549050919050565b6060600180546112bc90613ece565b80601f01602080910402602001604051908101604052809291908181526020018280546112e890613ece565b80156113355780601f1061130a57610100808354040283529160200191611335565b820191906000526020600020905b81548152906001019060200180831161131857829003601f168201915b5050505050905090565b611347611eff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac906139d8565b60405180910390fd5b80600560006113c2611eff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661146f611eff565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114b491906138fb565b60405180910390a35050565b6114c8611eff565b73ffffffffffffffffffffffffffffffffffffffff166114e66111f4565b73ffffffffffffffffffffffffffffffffffffffff161461153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a390613bf8565b60405180910390fd5b600f60009054906101000a900460ff166115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613c18565b60405180910390fd5b600c54611606610aaf565b10611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90613c38565b60405180910390fd5b600c5481611652610aaf565b61165c9190613d5d565b111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490613a98565b60405180910390fd5b60005b8181101561174a5760006001600d546116b99190613d5d565b90506001600d60008282546116ce9190613d5d565b925050819055506001601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117259190613d5d565b925050819055506117368482612471565b50808061174290613f31565b9150506116a0565b507f81417d8a7de13191fbd87199a3493afec1716ca333bbfbf0ef70fa7232a719a5828260405161177c9291906138d2565b60405180910390a15050565b611799611793611eff565b83611fc0565b6117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613bb8565b60405180910390fd5b6117e48484848461248f565b50505050565b6117f2611eff565b73ffffffffffffffffffffffffffffffffffffffff166118106111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613af8565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b606061189d82611e93565b6118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390613b38565b60405180910390fd5b6000600e80546118eb90613ece565b9050116119075760405180602001604052806000815250611933565b600e611912836124eb565b604051602001611923929190613827565b6040516020818303038152906040525b9050919050565b600e805461194790613ece565b80601f016020809104026020016040519081016040528092919081815260200182805461197390613ece565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b611a6a611eff565b73ffffffffffffffffffffffffffffffffffffffff16611a886111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad590613af8565b60405180910390fd5b600f60009054906101000a900460ff16611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2490613c18565b60405180910390fd5b600c54611b38610aaf565b10611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613c38565b60405180910390fd5b600c5481611b84610aaf565b611b8e9190613d5d565b1115611bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc690613a98565b60405180910390fd5b60005b81811015611c7c5760006001600d54611beb9190613d5d565b90506001600d6000828254611c009190613d5d565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c579190613d5d565b92505081905550611c683382612471565b508080611c7490613f31565b915050611bd2565b507f81417d8a7de13191fbd87199a3493afec1716ca333bbfbf0ef70fa7232a719a53382604051611cae9291906138d2565b60405180910390a150565b611cc1611eff565b73ffffffffffffffffffffffffffffffffffffffff16611cdf6111f4565b73ffffffffffffffffffffffffffffffffffffffff1614611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613978565b60405180910390fd5b611dae816122fa565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e8c5750611e8b8261264c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7a83610f04565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fcb82611e93565b61200a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612001906139f8565b60405180910390fd5b600061201583610f04565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061208457508373ffffffffffffffffffffffffffffffffffffffff1661206c84610912565b73ffffffffffffffffffffffffffffffffffffffff16145b80612095575061209481856119c8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120be82610f04565b73ffffffffffffffffffffffffffffffffffffffff1614612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90613b18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906139b8565b60405180910390fd5b61218f8383836126b6565b61219a600082611f07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ea9190613de4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122419190613d5d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123e690613856565b60006040518083038185875af1925050503d8060008114612423576040519150601f19603f3d011682016040523d82523d6000602084013e612428565b606091505b505090508061246c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246390613b58565b60405180910390fd5b505050565b61248b8282604051806020016040528060008152506127ca565b5050565b61249a84848461209e565b6124a684848484612825565b6124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90613958565b60405180910390fd5b50505050565b60606000821415612533576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612647565b600082905060005b6000821461256557808061254e90613f31565b915050600a8261255e9190613db3565b915061253b565b60008167ffffffffffffffff81111561258157612580614096565b5b6040519080825280601f01601f1916602001820160405280156125b35781602001600182028036833780820191505090505b5090505b60008514612640576001826125cc9190613de4565b9150600a856125db9190613f7a565b60306125e79190613d5d565b60f81b8183815181106125fd576125fc614067565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126399190613db3565b94506125b7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126c18383836129bc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612704576126ff816129c1565b612743565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612742576127418382612a0a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127865761278181612b77565b6127c5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127c4576127c38282612c48565b5b5b505050565b6127d48383612cc7565b6127e16000848484612825565b612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790613958565b60405180910390fd5b505050565b60006128468473ffffffffffffffffffffffffffffffffffffffff16612e95565b156129af578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261286f611eff565b8786866040518563ffffffff1660e01b81526004016128919493929190613886565b602060405180830381600087803b1580156128ab57600080fd5b505af19250505080156128dc57506040513d601f19601f820116820180604052508101906128d99190613284565b60015b61295f573d806000811461290c576040519150601f19603f3d011682016040523d82523d6000602084013e612911565b606091505b50600081511415612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90613958565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129b4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1784610fb6565b612a219190613de4565b9050600060076000848152602001908152602001600020549050818114612b06576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b8b9190613de4565b9050600060096000848152602001908152602001600020549050600060088381548110612bbb57612bba614067565b5b906000526020600020015490508060088381548110612bdd57612bdc614067565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c2c57612c2b614038565b5b6001900381819060005260206000200160009055905550505050565b6000612c5383610fb6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90613a78565b60405180910390fd5b612d4081611e93565b15612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7790613998565b60405180910390fd5b612d8c600083836126b6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ddc9190613d5d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612eb490613ece565b90600052602060002090601f016020900481019282612ed65760008555612f1d565b82601f10612eef57805160ff1916838001178555612f1d565b82800160010185558215612f1d579182015b82811115612f1c578251825591602001919060010190612f01565b5b509050612f2a9190612f2e565b5090565b5b80821115612f47576000816000905550600101612f2f565b5090565b6000612f5e612f5984613c98565b613c73565b905082815260208101848484011115612f7a57612f796140ca565b5b612f85848285613e8c565b509392505050565b6000612fa0612f9b84613cc9565b613c73565b905082815260208101848484011115612fbc57612fbb6140ca565b5b612fc7848285613e8c565b509392505050565b600081359050612fde8161472b565b92915050565b600081359050612ff381614742565b92915050565b60008135905061300881614759565b92915050565b60008151905061301d81614759565b92915050565b600082601f830112613038576130376140c5565b5b8135613048848260208601612f4b565b91505092915050565b600082601f830112613066576130656140c5565b5b8135613076848260208601612f8d565b91505092915050565b60008135905061308e81614770565b92915050565b6000602082840312156130aa576130a96140d4565b5b60006130b884828501612fcf565b91505092915050565b600080604083850312156130d8576130d76140d4565b5b60006130e685828601612fcf565b92505060206130f785828601612fcf565b9150509250929050565b60008060006060848603121561311a576131196140d4565b5b600061312886828701612fcf565b935050602061313986828701612fcf565b925050604061314a8682870161307f565b9150509250925092565b6000806000806080858703121561316e5761316d6140d4565b5b600061317c87828801612fcf565b945050602061318d87828801612fcf565b935050604061319e8782880161307f565b925050606085013567ffffffffffffffff8111156131bf576131be6140cf565b5b6131cb87828801613023565b91505092959194509250565b600080604083850312156131ee576131ed6140d4565b5b60006131fc85828601612fcf565b925050602061320d85828601612fe4565b9150509250929050565b6000806040838503121561322e5761322d6140d4565b5b600061323c85828601612fcf565b925050602061324d8582860161307f565b9150509250929050565b60006020828403121561326d5761326c6140d4565b5b600061327b84828501612ff9565b91505092915050565b60006020828403121561329a576132996140d4565b5b60006132a88482850161300e565b91505092915050565b6000602082840312156132c7576132c66140d4565b5b600082013567ffffffffffffffff8111156132e5576132e46140cf565b5b6132f184828501613051565b91505092915050565b6000602082840312156133105761330f6140d4565b5b600061331e8482850161307f565b91505092915050565b61333081613e18565b82525050565b61333f81613e2a565b82525050565b600061335082613d0f565b61335a8185613d25565b935061336a818560208601613e9b565b613373816140d9565b840191505092915050565b600061338982613d1a565b6133938185613d41565b93506133a3818560208601613e9b565b6133ac816140d9565b840191505092915050565b60006133c282613d1a565b6133cc8185613d52565b93506133dc818560208601613e9b565b80840191505092915050565b600081546133f581613ece565b6133ff8186613d52565b9450600182166000811461341a576001811461342b5761345e565b60ff1983168652818601935061345e565b61343485613cfa565b60005b8381101561345657815481890152600182019150602081019050613437565b838801955050505b50505092915050565b6000613474602b83613d41565b915061347f826140ea565b604082019050919050565b6000613497603283613d41565b91506134a282614139565b604082019050919050565b60006134ba602683613d41565b91506134c582614188565b604082019050919050565b60006134dd601c83613d41565b91506134e8826141d7565b602082019050919050565b6000613500602483613d41565b915061350b82614200565b604082019050919050565b6000613523601983613d41565b915061352e8261424f565b602082019050919050565b6000613546602c83613d41565b915061355182614278565b604082019050919050565b6000613569603883613d41565b9150613574826142c7565b604082019050919050565b600061358c602a83613d41565b915061359782614316565b604082019050919050565b60006135af602983613d41565b91506135ba82614365565b604082019050919050565b60006135d2602083613d41565b91506135dd826143b4565b602082019050919050565b60006135f5601c83613d41565b9150613600826143dd565b602082019050919050565b6000613618602c83613d41565b915061362382614406565b604082019050919050565b600061363b600583613d52565b915061364682614455565b600582019050919050565b600061365e601383613d41565b91506136698261447e565b602082019050919050565b6000613681602083613d41565b915061368c826144a7565b602082019050919050565b60006136a4602983613d41565b91506136af826144d0565b604082019050919050565b60006136c7602f83613d41565b91506136d28261451f565b604082019050919050565b60006136ea601983613d41565b91506136f58261456e565b602082019050919050565b600061370d602183613d41565b915061371882614597565b604082019050919050565b6000613730600083613d36565b915061373b826145e6565b600082019050919050565b6000613753601783613d41565b915061375e826145e9565b602082019050919050565b6000613776603183613d41565b915061378182614612565b604082019050919050565b6000613799602c83613d41565b91506137a482614661565b604082019050919050565b60006137bc601b83613d41565b91506137c7826146b0565b602082019050919050565b60006137df601983613d41565b91506137ea826146d9565b602082019050919050565b6000613802601783613d41565b915061380d82614702565b602082019050919050565b61382181613e82565b82525050565b600061383382856133e8565b915061383f82846133b7565b915061384a8261362e565b91508190509392505050565b600061386182613723565b9150819050919050565b60006020820190506138806000830184613327565b92915050565b600060808201905061389b6000830187613327565b6138a86020830186613327565b6138b56040830185613818565b81810360608301526138c78184613345565b905095945050505050565b60006040820190506138e76000830185613327565b6138f46020830184613818565b9392505050565b60006020820190506139106000830184613336565b92915050565b60006020820190508181036000830152613930818461337e565b905092915050565b6000602082019050818103600083015261395181613467565b9050919050565b600060208201905081810360008301526139718161348a565b9050919050565b60006020820190508181036000830152613991816134ad565b9050919050565b600060208201905081810360008301526139b1816134d0565b9050919050565b600060208201905081810360008301526139d1816134f3565b9050919050565b600060208201905081810360008301526139f181613516565b9050919050565b60006020820190508181036000830152613a1181613539565b9050919050565b60006020820190508181036000830152613a318161355c565b9050919050565b60006020820190508181036000830152613a518161357f565b9050919050565b60006020820190508181036000830152613a71816135a2565b9050919050565b60006020820190508181036000830152613a91816135c5565b9050919050565b60006020820190508181036000830152613ab1816135e8565b9050919050565b60006020820190508181036000830152613ad18161360b565b9050919050565b60006020820190508181036000830152613af181613651565b9050919050565b60006020820190508181036000830152613b1181613674565b9050919050565b60006020820190508181036000830152613b3181613697565b9050919050565b60006020820190508181036000830152613b51816136ba565b9050919050565b60006020820190508181036000830152613b71816136dd565b9050919050565b60006020820190508181036000830152613b9181613700565b9050919050565b60006020820190508181036000830152613bb181613746565b9050919050565b60006020820190508181036000830152613bd181613769565b9050919050565b60006020820190508181036000830152613bf18161378c565b9050919050565b60006020820190508181036000830152613c11816137af565b9050919050565b60006020820190508181036000830152613c31816137d2565b9050919050565b60006020820190508181036000830152613c51816137f5565b9050919050565b6000602082019050613c6d6000830184613818565b92915050565b6000613c7d613c8e565b9050613c898282613f00565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb357613cb2614096565b5b613cbc826140d9565b9050602081019050919050565b600067ffffffffffffffff821115613ce457613ce3614096565b5b613ced826140d9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d6882613e82565b9150613d7383613e82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613da857613da7613fab565b5b828201905092915050565b6000613dbe82613e82565b9150613dc983613e82565b925082613dd957613dd8613fda565b5b828204905092915050565b6000613def82613e82565b9150613dfa83613e82565b925082821015613e0d57613e0c613fab565b5b828203905092915050565b6000613e2382613e62565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613eb9578082015181840152602081019050613e9e565b83811115613ec8576000848401525b50505050565b60006002820490506001821680613ee657607f821691505b60208210811415613efa57613ef9614009565b5b50919050565b613f09826140d9565b810181811067ffffffffffffffff82111715613f2857613f27614096565b5b80604052505050565b6000613f3c82613e82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6f57613f6e613fab565b5b600182019050919050565b6000613f8582613e82565b9150613f9083613e82565b925082613fa057613f9f613fda565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d696e74696e6720776f756c642065786365656420737570706c792100000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077696474686472617720457468657200000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e7420746f206e756c6c20616464726573730000000000600082015250565b7f5465616d206d696e74696e67206e6f7420737461727465642e00000000000000600082015250565b7f416c6c207465616d20746f6b656e73206d696e7465642e000000000000000000600082015250565b61473481613e18565b811461473f57600080fd5b50565b61474b81613e2a565b811461475657600080fd5b50565b61476281613e36565b811461476d57600080fd5b50565b61477981613e82565b811461478457600080fd5b5056fea2646970667358221220d767768053beaed503f7572c7410f78b2bbfbbf0cbb16f778c0b5b613533bfed64736f6c63430008070033
Deployed Bytecode Sourcemap
45043:3493:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39153:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27036:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45204:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28127:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39793:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46263:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45468:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39461:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45362:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45952:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29904:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39983:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45737:104;;;;;;;;;;;;;:::i;:::-;;26730:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26460:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11017:94;;;;;;;;;;;;;:::i;:::-;;45509:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47817:194;;;;;;;;;;;;;:::i;:::-;;45130:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10366:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46124:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27205:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28897:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46461:706;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30160:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45865:75;;;;;;;;;;;;;:::i;:::-;;48227:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45241:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45167:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47175:622;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11266:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39153:224;39255:4;39294:35;39279:50;;;:11;:50;;;;:90;;;;39333:36;39357:11;39333:23;:36::i;:::-;39279:90;39272:97;;39153:224;;;:::o;27036:100::-;27090:13;27123:5;27116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27036:100;:::o;45204:30::-;;;;:::o;28604:221::-;28680:7;28708:16;28716:7;28708;:16::i;:::-;28700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:15;:24;28809:7;28793:24;;;;;;;;;;;;;;;;;;;;;28786:31;;28604:221;;;:::o;28127:411::-;28208:13;28224:23;28239:7;28224:14;:23::i;:::-;28208:39;;28272:5;28266:11;;:2;:11;;;;28258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28366:5;28350:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28375:37;28392:5;28399:12;:10;:12::i;:::-;28375:16;:37::i;:::-;28350:62;28328:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28509:21;28518:2;28522:7;28509:8;:21::i;:::-;28197:341;28127:411;;:::o;39793:113::-;39854:7;39881:10;:17;;;;39874:24;;39793:113;:::o;46263:186::-;46326:7;46371:1;46354:19;;:5;:19;;;;46346:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46421:13;:20;46435:5;46421:20;;;;;;;;;;;;;;;;46414:27;;46263:186;;;:::o;29494:339::-;29689:41;29708:12;:10;:12::i;:::-;29722:7;29689:18;:41::i;:::-;29681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29797:28;29807:4;29813:2;29817:7;29797:9;:28::i;:::-;29494:339;;;:::o;45468:34::-;;;;;;;;;;;;;:::o;39461:256::-;39558:7;39594:23;39611:5;39594:16;:23::i;:::-;39586:5;:31;39578:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39683:12;:19;39696:5;39683:19;;;;;;;;;;;;;;;:26;39703:5;39683:26;;;;;;;;;;;;39676:33;;39461:256;;;;:::o;45362:79::-;45399:42;45362:79;:::o;45952:160::-;46026:13;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46067:7:::1;46052:12;:22;;;;;;;;;;;;:::i;:::-;;46092:12;46085:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45952:160:::0;;;:::o;29904:185::-;30042:39;30059:4;30065:2;30069:7;30042:39;;;;;;;;;;;;:16;:39::i;:::-;29904:185;;;:::o;39983:233::-;40058:7;40094:30;:28;:30::i;:::-;40086:5;:38;40078:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40191:10;40202:5;40191:17;;;;;;;;:::i;:::-;;;;;;;;;;40184:24;;39983:233;;;:::o;45737:104::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45818:15:::1;;;;;;;;;;;45817:16;45799:15;;:34;;;;;;;;;;;;;;;;;;45737:104::o:0;26730:239::-;26802:7;26822:13;26838:7;:16;26846:7;26838:16;;;;;;;;;;;;;;;;;;;;;26822:32;;26890:1;26873:19;;:5;:19;;;;26865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26956:5;26949:12;;;26730:239;;;:::o;26460:208::-;26532:7;26577:1;26560:19;;:5;:19;;;;26552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26644:9;:16;26654:5;26644:16;;;;;;;;;;;;;;;;26637:23;;26460:208;;;:::o;11017:94::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11082:21:::1;11100:1;11082:9;:21::i;:::-;11017:94::o:0;45509:25::-;;;;;;;;;;;;;:::o;47817:194::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47868:15:::1;47886:21;47868:39;;47936:1;47926:7;:11;47918:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47972:31;45399:42;47995:7;47972:10;:31::i;:::-;47857:154;47817:194::o:0;45130:30::-;;;;:::o;10366:87::-;10412:7;10439:6;;;;;;;;;;;10432:13;;10366:87;:::o;46124:127::-;46185:7;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46213:7:::1;46205:5;:15;;;;46238:5;;46231:12;;46124:127:::0;;;:::o;27205:104::-;27261:13;27294:7;27287:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27205:104;:::o;28897:295::-;29012:12;:10;:12::i;:::-;29000:24;;:8;:24;;;;28992:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29112:8;29067:18;:32;29086:12;:10;:12::i;:::-;29067:32;;;;;;;;;;;;;;;:42;29100:8;29067:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29165:8;29136:48;;29151:12;:10;:12::i;:::-;29136:48;;;29175:8;29136:48;;;;;;:::i;:::-;;;;;;;;28897:295;;:::o;46461:706::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46586:1:::1;46566:22;;:8;:22;;;;46558:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46639:15;;;;;;;;;;;46631:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46719:10;;46703:13;:11;:13::i;:::-;:26;46695:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46810:10;;46792:14;46776:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;46768:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46879:9;46874:232;46898:14;46894:1;:18;46874:232;;;46934:15;46970:1;46952:15;;:19;;;;:::i;:::-;46934:37;;47007:1;46988:15;;:20;;;;;;;:::i;:::-;;;;;;;;47050:1;47023:13;:23;47037:8;47023:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;47066;47076:8;47086:7;47066:9;:28::i;:::-;46919:187;46914:3;;;;;:::i;:::-;;;;46874:232;;;;47123:36;47134:8;47144:14;47123:36;;;;;;;:::i;:::-;;;;;;;;46461:706:::0;;:::o;30160:328::-;30335:41;30354:12;:10;:12::i;:::-;30368:7;30335:18;:41::i;:::-;30327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:39;30455:4;30461:2;30465:7;30474:5;30441:13;:39::i;:::-;30160:328;;;;:::o;45865:75::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45927:5:::1;;;;;;;;;;;45926:6;45918:5;;:14;;;;;;;;;;;;;;;;;;45865:75::o:0;48227:306::-;48300:13;48334:16;48342:7;48334;:16::i;:::-;48326:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;48449:1;48426:12;48420:26;;;;;:::i;:::-;;;:30;:105;;;;;;;;;;;;;;;;;48477:12;48491:18;:7;:16;:18::i;:::-;48460:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48420:105;48413:112;;48227:306;;;:::o;45241:114::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29263:164::-;29360:4;29384:18;:25;29403:5;29384:25;;;;;;;;;;;;;;;:35;29410:8;29384:35;;;;;;;;;;;;;;;;;;;;;;;;;29377:42;;29263:164;;;;:::o;45167:30::-;;;;:::o;47175:622::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47263:15:::1;;;;;;;;;;;47255:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47343:10;;47327:13;:11;:13::i;:::-;:26;47319:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47434:10;;47416:14;47400:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:44;;47392:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47503:9;47498:236;47522:14;47518:1;:18;47498:236;;;47558:15;47594:1;47576:15;;:19;;;;:::i;:::-;47558:37;;47631:1;47612:15;;:20;;;;;;;:::i;:::-;;;;;;;;47676:1;47647:13;:25;47661:10;47647:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;47692;47702:10;47714:7;47692:9;:30::i;:::-;47543:191;47538:3;;;;;:::i;:::-;;;;47498:236;;;;47751:38;47762:10;47774:14;47751:38;;;;;;;:::i;:::-;;;;;;;;47175:622:::0;:::o;11266:192::-;10597:12;:10;:12::i;:::-;10586:23;;:7;:5;:7::i;:::-;:23;;;10578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11375:1:::1;11355:22;;:8;:22;;;;11347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11431:19;11441:8;11431:9;:19::i;:::-;11266:192:::0;:::o;26091:305::-;26193:4;26245:25;26230:40;;;:11;:40;;;;:105;;;;26302:33;26287:48;;;:11;:48;;;;26230:105;:158;;;;26352:36;26376:11;26352:23;:36::i;:::-;26230:158;26210:178;;26091:305;;;:::o;31998:127::-;32063:4;32115:1;32087:30;;:7;:16;32095:7;32087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32080:37;;31998:127;;;:::o;567:98::-;620:7;647:10;640:17;;567:98;:::o;35980:174::-;36082:2;36055:15;:24;36071:7;36055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36138:7;36134:2;36100:46;;36109:23;36124:7;36109:14;:23::i;:::-;36100:46;;;;;;;;;;;;35980:174;;:::o;32292:348::-;32385:4;32410:16;32418:7;32410;:16::i;:::-;32402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32486:13;32502:23;32517:7;32502:14;:23::i;:::-;32486:39;;32555:5;32544:16;;:7;:16;;;:51;;;;32588:7;32564:31;;:20;32576:7;32564:11;:20::i;:::-;:31;;;32544:51;:87;;;;32599:32;32616:5;32623:7;32599:16;:32::i;:::-;32544:87;32536:96;;;32292:348;;;;:::o;35284:578::-;35443:4;35416:31;;:23;35431:7;35416:14;:23::i;:::-;:31;;;35408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35526:1;35512:16;;:2;:16;;;;35504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:39;35603:4;35609:2;35613:7;35582:20;:39::i;:::-;35686:29;35703:1;35707:7;35686:8;:29::i;:::-;35747:1;35728:9;:15;35738:4;35728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35776:1;35759:9;:13;35769:2;35759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35807:2;35788:7;:16;35796:7;35788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35846:7;35842:2;35827:27;;35836:4;35827:27;;;;;;;;;;;;35284:578;;;:::o;11466:173::-;11522:16;11541:6;;;;;;;;;;;11522:25;;11567:8;11558:6;;:17;;;;;;;;;;;;;;;;;;11622:8;11591:40;;11612:8;11591:40;;;;;;;;;;;;11511:128;11466:173;:::o;48023:192::-;48098:12;48116:8;:13;;48138:7;48116:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48097:54;;;48170:7;48162:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;48086:129;48023:192;;:::o;32982:110::-;33058:26;33068:2;33072:7;33058:26;;;;;;;;;;;;:9;:26::i;:::-;32982:110;;:::o;31370:315::-;31527:28;31537:4;31543:2;31547:7;31527:9;:28::i;:::-;31574:48;31597:4;31603:2;31607:7;31616:5;31574:22;:48::i;:::-;31566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:315;;;;:::o;13910:723::-;13966:13;14196:1;14187:5;:10;14183:53;;;14214:10;;;;;;;;;;;;;;;;;;;;;14183:53;14246:12;14261:5;14246:20;;14277:14;14302:78;14317:1;14309:4;:9;14302:78;;14335:8;;;;;:::i;:::-;;;;14366:2;14358:10;;;;;:::i;:::-;;;14302:78;;;14390:19;14422:6;14412:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14390:39;;14440:154;14456:1;14447:5;:10;14440:154;;14484:1;14474:11;;;;;:::i;:::-;;;14551:2;14543:5;:10;;;;:::i;:::-;14530:2;:24;;;;:::i;:::-;14517:39;;14500:6;14507;14500:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14580:2;14571:11;;;;;:::i;:::-;;;14440:154;;;14618:6;14604:21;;;;;13910:723;;;;:::o;13435:157::-;13520:4;13559:25;13544:40;;;:11;:40;;;;13537:47;;13435:157;;;:::o;40829:589::-;40973:45;41000:4;41006:2;41010:7;40973:26;:45::i;:::-;41051:1;41035:18;;:4;:18;;;41031:187;;;41070:40;41102:7;41070:31;:40::i;:::-;41031:187;;;41140:2;41132:10;;:4;:10;;;41128:90;;41159:47;41192:4;41198:7;41159:32;:47::i;:::-;41128:90;41031:187;41246:1;41232:16;;:2;:16;;;41228:183;;;41265:45;41302:7;41265:36;:45::i;:::-;41228:183;;;41338:4;41332:10;;:2;:10;;;41328:83;;41359:40;41387:2;41391:7;41359:27;:40::i;:::-;41328:83;41228:183;40829:589;;;:::o;33319:321::-;33449:18;33455:2;33459:7;33449:5;:18::i;:::-;33500:54;33531:1;33535:2;33539:7;33548:5;33500:22;:54::i;:::-;33478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33319:321;;;:::o;36719:799::-;36874:4;36895:15;:2;:13;;;:15::i;:::-;36891:620;;;36947:2;36931:36;;;36968:12;:10;:12::i;:::-;36982:4;36988:7;36997:5;36931:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36927:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37190:1;37173:6;:13;:18;37169:272;;;37216:60;;;;;;;;;;:::i;:::-;;;;;;;;37169:272;37391:6;37385:13;37376:6;37372:2;37368:15;37361:38;36927:529;37064:41;;;37054:51;;;:6;:51;;;;37047:58;;;;;36891:620;37495:4;37488:11;;36719:799;;;;;;;:::o;38090:126::-;;;;:::o;42141:164::-;42245:10;:17;;;;42218:15;:24;42234:7;42218:24;;;;;;;;;;;:44;;;;42273:10;42289:7;42273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42141:164;:::o;42932:988::-;43198:22;43248:1;43223:22;43240:4;43223:16;:22::i;:::-;:26;;;;:::i;:::-;43198:51;;43260:18;43281:17;:26;43299:7;43281:26;;;;;;;;;;;;43260:47;;43428:14;43414:10;:28;43410:328;;43459:19;43481:12;:18;43494:4;43481:18;;;;;;;;;;;;;;;:34;43500:14;43481:34;;;;;;;;;;;;43459:56;;43565:11;43532:12;:18;43545:4;43532:18;;;;;;;;;;;;;;;:30;43551:10;43532:30;;;;;;;;;;;:44;;;;43682:10;43649:17;:30;43667:11;43649:30;;;;;;;;;;;:43;;;;43444:294;43410:328;43834:17;:26;43852:7;43834:26;;;;;;;;;;;43827:33;;;43878:12;:18;43891:4;43878:18;;;;;;;;;;;;;;;:34;43897:14;43878:34;;;;;;;;;;;43871:41;;;43013:907;;42932:988;;:::o;43928:1079::-;44181:22;44226:1;44206:10;:17;;;;:21;;;;:::i;:::-;44181:46;;44238:18;44259:15;:24;44275:7;44259:24;;;;;;;;;;;;44238:45;;44610:19;44632:10;44643:14;44632:26;;;;;;;;:::i;:::-;;;;;;;;;;44610:48;;44696:11;44671:10;44682;44671:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44807:10;44776:15;:28;44792:11;44776:28;;;;;;;;;;;:41;;;;44948:15;:24;44964:7;44948:24;;;;;;;;;;;44941:31;;;44983:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43999:1008;;;43928:1079;:::o;41719:221::-;41804:14;41821:20;41838:2;41821:16;:20::i;:::-;41804:37;;41879:7;41852:12;:16;41865:2;41852:16;;;;;;;;;;;;;;;:24;41869:6;41852:24;;;;;;;;;;;:34;;;;41926:6;41897:17;:26;41915:7;41897:26;;;;;;;;;;;:35;;;;41793:147;41719:221;;:::o;33976:382::-;34070:1;34056:16;;:2;:16;;;;34048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:16;34137:7;34129;:16::i;:::-;34128:17;34120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34191:45;34220:1;34224:2;34228:7;34191:20;:45::i;:::-;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34342:7;34338:2;34317:33;;34334:1;34317:33;;;;;;;;;;;;33976:382;;:::o;16491:387::-;16551:4;16759:12;16826:7;16814:20;16806:28;;16869:1;16862:4;:8;16855:15;;;16491: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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8540:845::-;8643:3;8680:5;8674:12;8709:36;8735:9;8709:36;:::i;:::-;8761:89;8843:6;8838:3;8761:89;:::i;:::-;8754:96;;8881:1;8870:9;8866:17;8897:1;8892:137;;;;9043:1;9038:341;;;;8859:520;;8892:137;8976:4;8972:9;8961;8957:25;8952:3;8945:38;9012:6;9007:3;9003:16;8996:23;;8892:137;;9038:341;9105:38;9137:5;9105:38;:::i;:::-;9165:1;9179:154;9193:6;9190:1;9187:13;9179:154;;;9267:7;9261:14;9257:1;9252:3;9248:11;9241:35;9317:1;9308:7;9304:15;9293:26;;9215:4;9212:1;9208:12;9203:17;;9179:154;;;9362:6;9357:3;9353:16;9346:23;;9045:334;;8859:520;;8647:738;;8540:845;;;;:::o;9391:366::-;9533:3;9554:67;9618:2;9613:3;9554:67;:::i;:::-;9547:74;;9630:93;9719:3;9630:93;:::i;:::-;9748:2;9743:3;9739:12;9732:19;;9391:366;;;:::o;9763:::-;9905:3;9926:67;9990:2;9985:3;9926:67;:::i;:::-;9919:74;;10002:93;10091:3;10002:93;:::i;:::-;10120:2;10115:3;10111:12;10104:19;;9763:366;;;:::o;10135:::-;10277:3;10298:67;10362:2;10357:3;10298:67;:::i;:::-;10291:74;;10374:93;10463:3;10374:93;:::i;:::-;10492:2;10487:3;10483:12;10476:19;;10135:366;;;:::o;10507:::-;10649:3;10670:67;10734:2;10729:3;10670:67;:::i;:::-;10663:74;;10746:93;10835:3;10746:93;:::i;:::-;10864:2;10859:3;10855:12;10848:19;;10507:366;;;:::o;10879:::-;11021:3;11042:67;11106:2;11101:3;11042:67;:::i;:::-;11035:74;;11118:93;11207:3;11118:93;:::i;:::-;11236:2;11231:3;11227:12;11220:19;;10879:366;;;:::o;11251:::-;11393:3;11414:67;11478:2;11473:3;11414:67;:::i;:::-;11407:74;;11490:93;11579:3;11490:93;:::i;:::-;11608:2;11603:3;11599:12;11592:19;;11251:366;;;:::o;11623:::-;11765:3;11786:67;11850:2;11845:3;11786:67;:::i;:::-;11779:74;;11862:93;11951:3;11862:93;:::i;:::-;11980:2;11975:3;11971:12;11964:19;;11623:366;;;:::o;11995:::-;12137:3;12158:67;12222:2;12217:3;12158:67;:::i;:::-;12151:74;;12234:93;12323:3;12234:93;:::i;:::-;12352:2;12347:3;12343:12;12336:19;;11995:366;;;:::o;12367:::-;12509:3;12530:67;12594:2;12589:3;12530:67;:::i;:::-;12523:74;;12606:93;12695:3;12606:93;:::i;:::-;12724:2;12719:3;12715:12;12708:19;;12367:366;;;:::o;12739:::-;12881:3;12902:67;12966:2;12961:3;12902:67;:::i;:::-;12895:74;;12978:93;13067:3;12978:93;:::i;:::-;13096:2;13091:3;13087:12;13080:19;;12739:366;;;:::o;13111:::-;13253:3;13274:67;13338:2;13333:3;13274:67;:::i;:::-;13267:74;;13350:93;13439:3;13350:93;:::i;:::-;13468:2;13463:3;13459:12;13452:19;;13111:366;;;:::o;13483:::-;13625:3;13646:67;13710:2;13705:3;13646:67;:::i;:::-;13639:74;;13722:93;13811:3;13722:93;:::i;:::-;13840:2;13835:3;13831:12;13824:19;;13483:366;;;:::o;13855:::-;13997:3;14018:67;14082:2;14077:3;14018:67;:::i;:::-;14011:74;;14094:93;14183:3;14094:93;:::i;:::-;14212:2;14207:3;14203:12;14196:19;;13855:366;;;:::o;14227:400::-;14387:3;14408:84;14490:1;14485:3;14408:84;:::i;:::-;14401:91;;14501:93;14590:3;14501:93;:::i;:::-;14619:1;14614:3;14610:11;14603:18;;14227:400;;;:::o;14633:366::-;14775:3;14796:67;14860:2;14855:3;14796:67;:::i;:::-;14789:74;;14872:93;14961:3;14872:93;:::i;:::-;14990:2;14985:3;14981:12;14974:19;;14633:366;;;:::o;15005:::-;15147:3;15168:67;15232:2;15227:3;15168:67;:::i;:::-;15161:74;;15244:93;15333:3;15244:93;:::i;:::-;15362:2;15357:3;15353:12;15346:19;;15005:366;;;:::o;15377:::-;15519:3;15540:67;15604:2;15599:3;15540:67;:::i;:::-;15533:74;;15616:93;15705:3;15616:93;:::i;:::-;15734:2;15729:3;15725:12;15718:19;;15377:366;;;:::o;15749:::-;15891:3;15912:67;15976:2;15971:3;15912:67;:::i;:::-;15905:74;;15988:93;16077:3;15988:93;:::i;:::-;16106:2;16101:3;16097:12;16090:19;;15749:366;;;:::o;16121:::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:::-;16635:3;16656:67;16720:2;16715:3;16656:67;:::i;:::-;16649:74;;16732:93;16821:3;16732:93;:::i;:::-;16850:2;16845:3;16841:12;16834:19;;16493:366;;;:::o;16865:398::-;17024:3;17045:83;17126:1;17121:3;17045:83;:::i;:::-;17038:90;;17137:93;17226:3;17137:93;:::i;:::-;17255:1;17250:3;17246:11;17239:18;;16865:398;;;:::o;17269:366::-;17411:3;17432:67;17496:2;17491:3;17432:67;:::i;:::-;17425:74;;17508:93;17597:3;17508:93;:::i;:::-;17626:2;17621:3;17617:12;17610:19;;17269:366;;;:::o;17641:::-;17783:3;17804:67;17868:2;17863:3;17804:67;:::i;:::-;17797:74;;17880:93;17969:3;17880:93;:::i;:::-;17998:2;17993:3;17989:12;17982:19;;17641:366;;;:::o;18013:::-;18155:3;18176:67;18240:2;18235:3;18176:67;:::i;:::-;18169:74;;18252:93;18341:3;18252:93;:::i;:::-;18370:2;18365:3;18361:12;18354:19;;18013:366;;;:::o;18385:::-;18527:3;18548:67;18612:2;18607:3;18548:67;:::i;:::-;18541:74;;18624:93;18713:3;18624:93;:::i;:::-;18742:2;18737:3;18733:12;18726:19;;18385:366;;;:::o;18757:::-;18899:3;18920:67;18984:2;18979:3;18920:67;:::i;:::-;18913:74;;18996:93;19085:3;18996:93;:::i;:::-;19114:2;19109:3;19105:12;19098:19;;18757:366;;;:::o;19129:::-;19271:3;19292:67;19356:2;19351:3;19292:67;:::i;:::-;19285:74;;19368:93;19457:3;19368:93;:::i;:::-;19486:2;19481:3;19477:12;19470:19;;19129:366;;;:::o;19501:118::-;19588:24;19606:5;19588:24;:::i;:::-;19583:3;19576:37;19501:118;;:::o;19625:695::-;19903:3;19925:92;20013:3;20004:6;19925:92;:::i;:::-;19918:99;;20034:95;20125:3;20116:6;20034:95;:::i;:::-;20027:102;;20146:148;20290:3;20146:148;:::i;:::-;20139:155;;20311:3;20304:10;;19625:695;;;;;:::o;20326:379::-;20510:3;20532:147;20675:3;20532:147;:::i;:::-;20525:154;;20696:3;20689:10;;20326:379;;;:::o;20711:222::-;20804:4;20842:2;20831:9;20827:18;20819:26;;20855:71;20923:1;20912:9;20908:17;20899:6;20855:71;:::i;:::-;20711:222;;;;:::o;20939:640::-;21134:4;21172:3;21161:9;21157:19;21149:27;;21186:71;21254:1;21243:9;21239:17;21230:6;21186:71;:::i;:::-;21267:72;21335:2;21324:9;21320:18;21311:6;21267:72;:::i;:::-;21349;21417:2;21406:9;21402:18;21393:6;21349:72;:::i;:::-;21468:9;21462:4;21458:20;21453:2;21442:9;21438:18;21431:48;21496:76;21567:4;21558:6;21496:76;:::i;:::-;21488:84;;20939:640;;;;;;;:::o;21585:332::-;21706:4;21744:2;21733:9;21729:18;21721:26;;21757:71;21825:1;21814:9;21810:17;21801:6;21757:71;:::i;:::-;21838:72;21906:2;21895:9;21891:18;21882:6;21838:72;:::i;:::-;21585:332;;;;;:::o;21923:210::-;22010:4;22048:2;22037:9;22033:18;22025:26;;22061:65;22123:1;22112:9;22108:17;22099:6;22061:65;:::i;:::-;21923:210;;;;:::o;22139:313::-;22252:4;22290:2;22279:9;22275:18;22267:26;;22339:9;22333:4;22329:20;22325:1;22314:9;22310:17;22303:47;22367:78;22440:4;22431:6;22367:78;:::i;:::-;22359:86;;22139:313;;;;:::o;22458:419::-;22624:4;22662:2;22651:9;22647:18;22639:26;;22711:9;22705:4;22701:20;22697:1;22686:9;22682:17;22675:47;22739:131;22865:4;22739:131;:::i;:::-;22731:139;;22458:419;;;:::o;22883:::-;23049:4;23087:2;23076:9;23072:18;23064:26;;23136:9;23130:4;23126:20;23122:1;23111:9;23107:17;23100:47;23164:131;23290:4;23164:131;:::i;:::-;23156:139;;22883:419;;;:::o;23308:::-;23474:4;23512:2;23501:9;23497:18;23489:26;;23561:9;23555:4;23551:20;23547:1;23536:9;23532:17;23525:47;23589:131;23715:4;23589:131;:::i;:::-;23581:139;;23308:419;;;:::o;23733:::-;23899:4;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:131;24140:4;24014:131;:::i;:::-;24006:139;;23733:419;;;:::o;24158:::-;24324:4;24362:2;24351:9;24347:18;24339:26;;24411:9;24405:4;24401:20;24397:1;24386:9;24382:17;24375:47;24439:131;24565:4;24439:131;:::i;:::-;24431:139;;24158:419;;;:::o;24583:::-;24749:4;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:131;24990:4;24864:131;:::i;:::-;24856:139;;24583:419;;;:::o;25008:::-;25174:4;25212:2;25201:9;25197:18;25189:26;;25261:9;25255:4;25251:20;25247:1;25236:9;25232:17;25225:47;25289:131;25415:4;25289:131;:::i;:::-;25281:139;;25008:419;;;:::o;25433:::-;25599:4;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25433:419;;;:::o;25858:::-;26024:4;26062:2;26051:9;26047:18;26039:26;;26111:9;26105:4;26101:20;26097:1;26086:9;26082:17;26075:47;26139:131;26265:4;26139:131;:::i;:::-;26131:139;;25858:419;;;:::o;26283:::-;26449:4;26487:2;26476:9;26472:18;26464:26;;26536:9;26530:4;26526:20;26522:1;26511:9;26507:17;26500:47;26564:131;26690:4;26564:131;:::i;:::-;26556:139;;26283:419;;;:::o;26708:::-;26874:4;26912:2;26901:9;26897:18;26889:26;;26961:9;26955:4;26951:20;26947:1;26936:9;26932:17;26925:47;26989:131;27115:4;26989:131;:::i;:::-;26981:139;;26708:419;;;:::o;27133:::-;27299:4;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27133:419;;;:::o;27558:::-;27724:4;27762:2;27751:9;27747:18;27739:26;;27811:9;27805:4;27801:20;27797:1;27786:9;27782:17;27775:47;27839:131;27965:4;27839:131;:::i;:::-;27831:139;;27558:419;;;:::o;27983:::-;28149:4;28187:2;28176:9;28172:18;28164:26;;28236:9;28230:4;28226:20;28222:1;28211:9;28207:17;28200:47;28264:131;28390:4;28264:131;:::i;:::-;28256:139;;27983:419;;;:::o;28408:::-;28574:4;28612:2;28601:9;28597:18;28589:26;;28661:9;28655:4;28651:20;28647:1;28636:9;28632:17;28625:47;28689:131;28815:4;28689:131;:::i;:::-;28681:139;;28408:419;;;:::o;28833:::-;28999:4;29037:2;29026:9;29022:18;29014:26;;29086:9;29080:4;29076:20;29072:1;29061:9;29057:17;29050:47;29114:131;29240:4;29114:131;:::i;:::-;29106:139;;28833:419;;;:::o;29258:::-;29424:4;29462:2;29451:9;29447:18;29439:26;;29511:9;29505:4;29501:20;29497:1;29486:9;29482:17;29475:47;29539:131;29665:4;29539:131;:::i;:::-;29531:139;;29258:419;;;:::o;29683:::-;29849:4;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29683:419;;;:::o;30108:::-;30274:4;30312:2;30301:9;30297:18;30289:26;;30361:9;30355:4;30351:20;30347:1;30336:9;30332:17;30325:47;30389:131;30515:4;30389:131;:::i;:::-;30381:139;;30108:419;;;:::o;30533:::-;30699:4;30737:2;30726:9;30722:18;30714:26;;30786:9;30780:4;30776:20;30772:1;30761:9;30757:17;30750:47;30814:131;30940:4;30814:131;:::i;:::-;30806:139;;30533:419;;;:::o;30958:::-;31124:4;31162:2;31151:9;31147:18;31139:26;;31211:9;31205:4;31201:20;31197:1;31186:9;31182:17;31175:47;31239:131;31365:4;31239:131;:::i;:::-;31231:139;;30958:419;;;:::o;31383:::-;31549:4;31587:2;31576:9;31572:18;31564:26;;31636:9;31630:4;31626:20;31622:1;31611:9;31607:17;31600:47;31664:131;31790:4;31664:131;:::i;:::-;31656:139;;31383:419;;;:::o;31808:::-;31974:4;32012:2;32001:9;31997:18;31989:26;;32061:9;32055:4;32051:20;32047:1;32036:9;32032:17;32025:47;32089:131;32215:4;32089:131;:::i;:::-;32081:139;;31808:419;;;:::o;32233:::-;32399:4;32437:2;32426:9;32422:18;32414:26;;32486:9;32480:4;32476:20;32472:1;32461:9;32457:17;32450:47;32514:131;32640:4;32514:131;:::i;:::-;32506:139;;32233:419;;;:::o;32658:::-;32824:4;32862:2;32851:9;32847:18;32839:26;;32911:9;32905:4;32901:20;32897:1;32886:9;32882:17;32875:47;32939:131;33065:4;32939:131;:::i;:::-;32931:139;;32658:419;;;:::o;33083:222::-;33176:4;33214:2;33203:9;33199:18;33191:26;;33227:71;33295:1;33284:9;33280:17;33271:6;33227:71;:::i;:::-;33083:222;;;;:::o;33311:129::-;33345:6;33372:20;;:::i;:::-;33362:30;;33401:33;33429:4;33421:6;33401:33;:::i;:::-;33311:129;;;:::o;33446:75::-;33479:6;33512:2;33506:9;33496:19;;33446:75;:::o;33527:307::-;33588:4;33678:18;33670:6;33667:30;33664:56;;;33700:18;;:::i;:::-;33664:56;33738:29;33760:6;33738:29;:::i;:::-;33730:37;;33822:4;33816;33812:15;33804:23;;33527:307;;;:::o;33840:308::-;33902:4;33992:18;33984:6;33981:30;33978:56;;;34014:18;;:::i;:::-;33978:56;34052:29;34074:6;34052:29;:::i;:::-;34044:37;;34136:4;34130;34126:15;34118:23;;33840:308;;;:::o;34154:141::-;34203:4;34226:3;34218:11;;34249:3;34246:1;34239:14;34283:4;34280:1;34270:18;34262:26;;34154:141;;;:::o;34301:98::-;34352:6;34386:5;34380:12;34370:22;;34301:98;;;:::o;34405:99::-;34457:6;34491:5;34485:12;34475:22;;34405:99;;;:::o;34510:168::-;34593:11;34627:6;34622:3;34615:19;34667:4;34662:3;34658:14;34643:29;;34510:168;;;;:::o;34684:147::-;34785:11;34822:3;34807:18;;34684:147;;;;:::o;34837:169::-;34921:11;34955:6;34950:3;34943:19;34995:4;34990:3;34986:14;34971:29;;34837:169;;;;:::o;35012:148::-;35114:11;35151:3;35136:18;;35012:148;;;;:::o;35166:305::-;35206:3;35225:20;35243:1;35225:20;:::i;:::-;35220:25;;35259:20;35277:1;35259:20;:::i;:::-;35254:25;;35413:1;35345:66;35341:74;35338:1;35335:81;35332:107;;;35419:18;;:::i;:::-;35332:107;35463:1;35460;35456:9;35449:16;;35166:305;;;;:::o;35477:185::-;35517:1;35534:20;35552:1;35534:20;:::i;:::-;35529:25;;35568:20;35586:1;35568:20;:::i;:::-;35563:25;;35607:1;35597:35;;35612:18;;:::i;:::-;35597:35;35654:1;35651;35647:9;35642:14;;35477:185;;;;:::o;35668:191::-;35708:4;35728:20;35746:1;35728:20;:::i;:::-;35723:25;;35762:20;35780:1;35762:20;:::i;:::-;35757:25;;35801:1;35798;35795:8;35792:34;;;35806:18;;:::i;:::-;35792:34;35851:1;35848;35844:9;35836:17;;35668:191;;;;:::o;35865:96::-;35902:7;35931:24;35949:5;35931:24;:::i;:::-;35920:35;;35865:96;;;:::o;35967:90::-;36001:7;36044:5;36037:13;36030:21;36019:32;;35967:90;;;:::o;36063:149::-;36099:7;36139:66;36132:5;36128:78;36117:89;;36063:149;;;:::o;36218:126::-;36255:7;36295:42;36288:5;36284:54;36273:65;;36218:126;;;:::o;36350:77::-;36387:7;36416:5;36405:16;;36350:77;;;:::o;36433:154::-;36517:6;36512:3;36507;36494:30;36579:1;36570:6;36565:3;36561:16;36554:27;36433:154;;;:::o;36593:307::-;36661:1;36671:113;36685:6;36682:1;36679:13;36671:113;;;36770:1;36765:3;36761:11;36755:18;36751:1;36746:3;36742:11;36735:39;36707:2;36704:1;36700:10;36695:15;;36671:113;;;36802:6;36799:1;36796:13;36793:101;;;36882:1;36873:6;36868:3;36864:16;36857:27;36793:101;36642:258;36593:307;;;:::o;36906:320::-;36950:6;36987:1;36981:4;36977:12;36967:22;;37034:1;37028:4;37024:12;37055:18;37045:81;;37111:4;37103:6;37099:17;37089:27;;37045:81;37173:2;37165:6;37162:14;37142:18;37139:38;37136:84;;;37192:18;;:::i;:::-;37136:84;36957:269;36906:320;;;:::o;37232:281::-;37315:27;37337:4;37315:27;:::i;:::-;37307:6;37303:40;37445:6;37433:10;37430:22;37409:18;37397:10;37394:34;37391:62;37388:88;;;37456:18;;:::i;:::-;37388:88;37496:10;37492:2;37485:22;37275:238;37232:281;;:::o;37519:233::-;37558:3;37581:24;37599:5;37581:24;:::i;:::-;37572:33;;37627:66;37620:5;37617:77;37614:103;;;37697:18;;:::i;:::-;37614:103;37744:1;37737:5;37733:13;37726:20;;37519:233;;;:::o;37758:176::-;37790:1;37807:20;37825:1;37807:20;:::i;:::-;37802:25;;37841:20;37859:1;37841:20;:::i;:::-;37836:25;;37880:1;37870:35;;37885:18;;:::i;:::-;37870:35;37926:1;37923;37919:9;37914:14;;37758:176;;;;:::o;37940:180::-;37988:77;37985:1;37978:88;38085:4;38082:1;38075:15;38109:4;38106:1;38099:15;38126:180;38174:77;38171:1;38164:88;38271:4;38268:1;38261:15;38295:4;38292:1;38285:15;38312:180;38360:77;38357:1;38350:88;38457:4;38454:1;38447:15;38481:4;38478:1;38471:15;38498:180;38546:77;38543:1;38536:88;38643:4;38640:1;38633:15;38667:4;38664:1;38657:15;38684:180;38732:77;38729:1;38722:88;38829:4;38826:1;38819:15;38853:4;38850:1;38843:15;38870:180;38918:77;38915:1;38908:88;39015:4;39012:1;39005:15;39039:4;39036:1;39029:15;39056:117;39165:1;39162;39155:12;39179:117;39288:1;39285;39278:12;39302:117;39411:1;39408;39401:12;39425:117;39534:1;39531;39524:12;39548:102;39589:6;39640:2;39636:7;39631:2;39624:5;39620:14;39616:28;39606:38;;39548:102;;;:::o;39656:230::-;39796:34;39792:1;39784:6;39780:14;39773:58;39865:13;39860:2;39852:6;39848:15;39841:38;39656:230;:::o;39892:237::-;40032:34;40028:1;40020:6;40016:14;40009:58;40101:20;40096:2;40088:6;40084:15;40077:45;39892:237;:::o;40135:225::-;40275:34;40271:1;40263:6;40259:14;40252:58;40344:8;40339:2;40331:6;40327:15;40320:33;40135:225;:::o;40366:178::-;40506:30;40502:1;40494:6;40490:14;40483:54;40366:178;:::o;40550:223::-;40690:34;40686:1;40678:6;40674:14;40667:58;40759:6;40754:2;40746:6;40742:15;40735:31;40550:223;:::o;40779:175::-;40919:27;40915:1;40907:6;40903:14;40896:51;40779:175;:::o;40960:231::-;41100:34;41096:1;41088:6;41084:14;41077:58;41169:14;41164:2;41156:6;41152:15;41145:39;40960:231;:::o;41197:243::-;41337:34;41333:1;41325:6;41321:14;41314:58;41406:26;41401:2;41393:6;41389:15;41382:51;41197:243;:::o;41446:229::-;41586:34;41582:1;41574:6;41570:14;41563:58;41655:12;41650:2;41642:6;41638:15;41631:37;41446:229;:::o;41681:228::-;41821:34;41817:1;41809:6;41805:14;41798:58;41890:11;41885:2;41877:6;41873:15;41866:36;41681:228;:::o;41915:182::-;42055:34;42051:1;42043:6;42039:14;42032:58;41915:182;:::o;42103:178::-;42243:30;42239:1;42231:6;42227:14;42220:54;42103:178;:::o;42287:231::-;42427:34;42423:1;42415:6;42411:14;42404:58;42496:14;42491:2;42483:6;42479:15;42472:39;42287:231;:::o;42524:155::-;42664:7;42660:1;42652:6;42648:14;42641:31;42524:155;:::o;42685:169::-;42825:21;42821:1;42813:6;42809:14;42802:45;42685:169;:::o;42860:182::-;43000:34;42996:1;42988:6;42984:14;42977:58;42860:182;:::o;43048:228::-;43188:34;43184:1;43176:6;43172:14;43165:58;43257:11;43252:2;43244:6;43240:15;43233:36;43048:228;:::o;43282:234::-;43422:34;43418:1;43410:6;43406:14;43399:58;43491:17;43486:2;43478:6;43474:15;43467:42;43282:234;:::o;43522:175::-;43662:27;43658:1;43650:6;43646:14;43639:51;43522:175;:::o;43703:220::-;43843:34;43839:1;43831:6;43827:14;43820:58;43912:3;43907:2;43899:6;43895:15;43888:28;43703:220;:::o;43929:114::-;;:::o;44049:173::-;44189:25;44185:1;44177:6;44173:14;44166:49;44049:173;:::o;44228:236::-;44368:34;44364:1;44356:6;44352:14;44345:58;44437:19;44432:2;44424:6;44420:15;44413:44;44228:236;:::o;44470:231::-;44610:34;44606:1;44598:6;44594:14;44587:58;44679:14;44674:2;44666:6;44662:15;44655:39;44470:231;:::o;44707:177::-;44847:29;44843:1;44835:6;44831:14;44824:53;44707:177;:::o;44890:175::-;45030:27;45026:1;45018:6;45014:14;45007:51;44890:175;:::o;45071:173::-;45211:25;45207:1;45199:6;45195:14;45188:49;45071:173;:::o;45250:122::-;45323:24;45341:5;45323:24;:::i;:::-;45316:5;45313:35;45303:63;;45362:1;45359;45352:12;45303:63;45250:122;:::o;45378:116::-;45448:21;45463:5;45448:21;:::i;:::-;45441:5;45438:32;45428:60;;45484:1;45481;45474:12;45428:60;45378:116;:::o;45500:120::-;45572:23;45589:5;45572:23;:::i;:::-;45565:5;45562:34;45552:62;;45610:1;45607;45600:12;45552:62;45500:120;:::o;45626:122::-;45699:24;45717:5;45699:24;:::i;:::-;45692:5;45689:35;45679:63;;45738:1;45735;45728:12;45679:63;45626:122;:::o
Swarm Source
ipfs://d767768053beaed503f7572c7410f78b2bbfbbf0cbb16f778c0b5b613533bfed
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.