Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 121 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19622040 | 139 days ago | IN | 0 ETH | 0.00073903 | ||||
Set Approval For... | 19615627 | 140 days ago | IN | 0 ETH | 0.00081854 | ||||
Set Approval For... | 19038761 | 220 days ago | IN | 0 ETH | 0.00055255 | ||||
Set Approval For... | 18184494 | 340 days ago | IN | 0 ETH | 0.00031145 | ||||
Safe Transfer Fr... | 16841186 | 529 days ago | IN | 0 ETH | 0.00297646 | ||||
Safe Transfer Fr... | 16836284 | 530 days ago | IN | 0 ETH | 0.00250138 | ||||
Safe Transfer Fr... | 16835893 | 530 days ago | IN | 0 ETH | 0.00283157 | ||||
Safe Transfer Fr... | 16835135 | 530 days ago | IN | 0 ETH | 0.00315204 | ||||
Safe Transfer Fr... | 16835101 | 530 days ago | IN | 0 ETH | 0.00338815 | ||||
Set Approval For... | 16491412 | 578 days ago | IN | 0 ETH | 0.00041882 | ||||
Set Approval For... | 15159961 | 771 days ago | IN | 0 ETH | 0.00072831 | ||||
Safe Transfer Fr... | 15129365 | 776 days ago | IN | 0 ETH | 0.00231272 | ||||
Safe Transfer Fr... | 15129358 | 776 days ago | IN | 0 ETH | 0.00264102 | ||||
Safe Transfer Fr... | 15086934 | 782 days ago | IN | 0 ETH | 0.00148143 | ||||
Safe Transfer Fr... | 15086928 | 782 days ago | IN | 0 ETH | 0.00118936 | ||||
Safe Transfer Fr... | 15086851 | 783 days ago | IN | 0 ETH | 0.00253443 | ||||
Withdraw | 14757035 | 838 days ago | IN | 0 ETH | 0.00574375 | ||||
Set Approval For... | 14756184 | 838 days ago | IN | 0 ETH | 0.00948944 | ||||
Set Base URI | 14744792 | 840 days ago | IN | 0 ETH | 0.0035038 | ||||
Transfer From | 14612159 | 861 days ago | IN | 0 ETH | 0.00202325 | ||||
Transfer From | 14612157 | 861 days ago | IN | 0 ETH | 0.0023621 | ||||
Transfer From | 14610742 | 861 days ago | IN | 0 ETH | 0.00614588 | ||||
Transfer From | 14609832 | 861 days ago | IN | 0 ETH | 0.00319511 | ||||
Transfer From | 14594084 | 864 days ago | IN | 0 ETH | 0.00316839 | ||||
Transfer From | 14521269 | 875 days ago | IN | 0 ETH | 0.00672529 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14757035 | 838 days ago | 7.528 ETH |
Loading...
Loading
Contract Name:
MferMadness
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-17 */ // Sources flattened with hardhat v2.9.1 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: 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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File contracts/MferMadness.sol pragma solidity ^0.8.0; contract MferMadness is ERC721, ERC721Enumerable, Ownable { bool public saleIsActive = false; uint public maxSupply = 64; uint public maxTokenOwnership = 2; uint256 public minPrice = 0.25 ether; string private _baseURIextended; bytes32 private _hashOfRandomDraw = 0x0; constructor() ERC721("hoodie mfer madness", "MFERMADNESS") {} function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function mint(uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint tokens"); require(numberOfTokens <= maxTokenOwnership, "Exceeded max token purchase"); require(totalSupply() + numberOfTokens <= maxSupply, "Purchase would exceed max supply of tokens"); require(balanceOf(msg.sender) + numberOfTokens <= maxTokenOwnership, "Purchase would exceed max token ownership"); require(minPrice * numberOfTokens <= msg.value, "Ether value sent is not correct"); for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); if (totalSupply() < maxSupply) { _safeMint(owner(), mintIndex); _transfer(owner(), msg.sender, mintIndex); } } } function getSHA256HashOfRandomDraw() external view returns (bytes32) { return _hashOfRandomDraw; } /* Owner Functions */ function setBaseURI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } function setSaleState(bool newState) external onlyOwner { saleIsActive = newState; } function setSHA256HashOfRandomDraw(bytes32 newHash) external onlyOwner { _hashOfRandomDraw = newHash; } function reserve(uint numberOfTokens) external onlyOwner { uint supply = totalSupply(); uint i; for (i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, supply + i); } } function setMaxTokenOwnership(uint newMaxTokenOwnership) external onlyOwner { maxTokenOwnership = newMaxTokenOwnership; } function setMaxSupply(uint newMaxSupply) external onlyOwner { maxSupply = newMaxSupply; } function setMinPrice(uint256 newMinPrice) external onlyOwner { minPrice = newMinPrice; } function withdraw(address payable to) external onlyOwner { uint256 balance = address(this).balance; Address.sendValue(to, balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSHA256HashOfRandomDraw","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenOwnership","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"reserve","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTokenOwnership","type":"uint256"}],"name":"setMaxTokenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPrice","type":"uint256"}],"name":"setMinPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newHash","type":"bytes32"}],"name":"setSHA256HashOfRandomDraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506040600b556002600c556703782dace9d90000600d556000801b600f553480156200004957600080fd5b506040518060400160405280601381526020017f686f6f646965206d666572206d61646e657373000000000000000000000000008152506040518060400160405280600b81526020017f4d4645524d41444e4553530000000000000000000000000000000000000000008152508160009080519060200190620000ce929190620001de565b508060019080519060200190620000e7929190620001de565b5050506200010a620000fe6200011060201b60201c565b6200011860201b60201c565b620002f3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ec906200028e565b90600052602060002090601f0160209004810192826200021057600085556200025c565b82601f106200022b57805160ff19168380011785556200025c565b828001600101855582156200025c579182015b828111156200025b5782518255916020019190600101906200023e565b5b5090506200026b91906200026f565b5090565b5b808211156200028a57600081600090555060010162000270565b5090565b60006002820490506001821680620002a757607f821691505b60208210811415620002be57620002bd620002c4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6145f580620003036000396000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063a4451261116100a0578063d5abeb011161006f578063d5abeb01146106e8578063e45be8eb14610713578063e985e9c51461073e578063eb8d24441461077b578063f2fde38b146107a6576101ee565b8063a44512611461062e578063b88d4fde14610659578063c4e3709514610682578063c87b56dd146106ab576101ee565b80638da5cb5b116100dc5780638da5cb5b1461059357806395d89b41146105be578063a0712d68146105e9578063a22cb46514610605576101ee565b806370a08231146104eb57806371201f1e14610528578063715018a614610553578063819b25ba1461056a576101ee565b806342842e0e1161018557806355f804b31161015457806355f804b3146104335780635ea8cd121461045c5780636352211e146104855780636f8b44b0146104c2576101ee565b806342842e0e1461037b5780634f6ccce7146103a457806351cff8d9146103e157806353095fe21461040a576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632b9af4f0146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906130c3565b6107cf565b604051610227919061368c565b60405180910390f35b34801561023c57600080fd5b506102456107e1565b60405161025291906136c2565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613156565b610873565b60405161028f9190613625565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613035565b6108f8565b005b3480156102cd57600080fd5b506102d6610a10565b6040516102e39190613a04565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612f2f565b610a1d565b005b34801561032157600080fd5b5061033c6004803603810190610337919061309a565b610a7d565b005b34801561034a57600080fd5b5061036560048036038101906103609190613035565b610b03565b6040516103729190613a04565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612f2f565b610ba8565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190613156565b610bc8565b6040516103d89190613a04565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612eca565b610c5f565b005b34801561041657600080fd5b50610431600480360381019061042c9190613156565b610cee565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613115565b610d74565b005b34801561046857600080fd5b50610483600480360381019061047e9190613156565b610e0a565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613156565b610e90565b6040516104b99190613625565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613156565b610f42565b005b3480156104f757600080fd5b50610512600480360381019061050d9190612ea1565b610fc8565b60405161051f9190613a04565b60405180910390f35b34801561053457600080fd5b5061053d611080565b60405161054a9190613a04565b60405180910390f35b34801561055f57600080fd5b50610568611086565b005b34801561057657600080fd5b50610591600480360381019061058c9190613156565b61110e565b005b34801561059f57600080fd5b506105a86111ce565b6040516105b59190613625565b60405180910390f35b3480156105ca57600080fd5b506105d36111f8565b6040516105e091906136c2565b60405180910390f35b61060360048036038101906105fe9190613156565b61128a565b005b34801561061157600080fd5b5061062c60048036038101906106279190612ff9565b611481565b005b34801561063a57600080fd5b50610643611497565b60405161065091906136a7565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190612f7e565b6114a1565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613071565b611503565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613156565b61159c565b6040516106df91906136c2565b60405180910390f35b3480156106f457600080fd5b506106fd611643565b60405161070a9190613a04565b60405180910390f35b34801561071f57600080fd5b50610728611649565b6040516107359190613a04565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190612ef3565b61164f565b604051610772919061368c565b60405180910390f35b34801561078757600080fd5b506107906116e3565b60405161079d919061368c565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190612ea1565b6116f6565b005b60006107da826117ee565b9050919050565b6060600080546107f090613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461081c90613cdb565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e82611868565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490613904565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610e90565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613984565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109936118d4565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc6118d4565b61164f565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613864565b60405180910390fd5b610a0b83836118dc565b505050565b6000600880549050905090565b610a2e610a286118d4565b82611995565b610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906139c4565b60405180910390fd5b610a78838383611a73565b505050565b610a856118d4565b73ffffffffffffffffffffffffffffffffffffffff16610aa36111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090613924565b60405180910390fd5b80600f8190555050565b6000610b0e83610fc8565b8210610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b46906136e4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bc3838383604051806020016040528060008152506114a1565b505050565b6000610bd2610a10565b8210610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906139e4565b60405180910390fd5b60088281548110610c4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c676118d4565b73ffffffffffffffffffffffffffffffffffffffff16610c856111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613924565b60405180910390fd5b6000479050610cea8282611cda565b5050565b610cf66118d4565b73ffffffffffffffffffffffffffffffffffffffff16610d146111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190613924565b60405180910390fd5b80600c8190555050565b610d7c6118d4565b73ffffffffffffffffffffffffffffffffffffffff16610d9a6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790613924565b60405180910390fd5b80600e9080519060200190610e06929190612c9b565b5050565b610e126118d4565b73ffffffffffffffffffffffffffffffffffffffff16610e306111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613924565b60405180910390fd5b80600d8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906138a4565b60405180910390fd5b80915050919050565b610f4a6118d4565b73ffffffffffffffffffffffffffffffffffffffff16610f686111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613924565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090613884565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b61108e6118d4565b73ffffffffffffffffffffffffffffffffffffffff166110ac6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990613924565b60405180910390fd5b61110c6000611dce565b565b6111166118d4565b73ffffffffffffffffffffffffffffffffffffffff166111346111ce565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613924565b60405180910390fd5b6000611194610a10565b905060005b828110156111c9576111b63382846111b19190613af4565b611e94565b80806111c190613d3e565b915050611199565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461120790613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461123390613cdb565b80156112805780601f1061125557610100808354040283529160200191611280565b820191906000526020600020905b81548152906001019060200180831161126357829003601f168201915b5050505050905090565b600a60149054906101000a900460ff166112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613964565b60405180910390fd5b600c5481111561131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906139a4565b60405180910390fd5b600b548161132a610a10565b6113349190613af4565b1115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c906138c4565b60405180910390fd5b600c548161138233610fc8565b61138c9190613af4565b11156113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613744565b60405180910390fd5b3481600d546113dc9190613b7b565b111561141d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611414906137e4565b60405180910390fd5b60005b8181101561147d576000611432610a10565b9050600b5461143f610a10565b1015611469576114566114506111ce565b82611e94565b6114686114616111ce565b3383611a73565b5b50808061147590613d3e565b915050611420565b5050565b61149361148c6118d4565b8383611eb2565b5050565b6000600f54905090565b6114b26114ac6118d4565b83611995565b6114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e8906139c4565b60405180910390fd5b6114fd8484848461201f565b50505050565b61150b6118d4565b73ffffffffffffffffffffffffffffffffffffffff166115296111ce565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613924565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60606115a782611868565b6115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613944565b60405180910390fd5b60006115f061207b565b90506000815111611610576040518060200160405280600081525061163b565b8061161a8461210d565b60405160200161162b9291906135ec565b6040516020818303038152906040525b915050919050565b600b5481565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b6116fe6118d4565b73ffffffffffffffffffffffffffffffffffffffff1661171c6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613924565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613724565b60405180910390fd5b6117eb81611dce565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118615750611860826122ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661194f83610e90565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119a082611868565b6119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613844565b60405180910390fd5b60006119ea83610e90565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a5957508373ffffffffffffffffffffffffffffffffffffffff16611a4184610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a6a5750611a69818561164f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a9382610e90565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613764565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906137a4565b60405180910390fd5b611b6483838361239c565b611b6f6000826118dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190613bd5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c169190613af4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cd58383836123ac565b505050565b80471015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613824565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d4390613610565b60006040518083038185875af1925050503d8060008114611d80576040519150601f19603f3d011682016040523d82523d6000602084013e611d85565b606091505b5050905080611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090613804565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611eae8282604051806020016040528060008152506123b1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f18906137c4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612012919061368c565b60405180910390a3505050565b61202a848484611a73565b6120368484848461240c565b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90613704565b60405180910390fd5b50505050565b6060600e805461208a90613cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546120b690613cdb565b80156121035780601f106120d857610100808354040283529160200191612103565b820191906000526020600020905b8154815290600101906020018083116120e657829003601f168201915b5050505050905090565b60606000821415612155576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b5565b600082905060005b6000821461218757808061217090613d3e565b915050600a826121809190613b4a565b915061215d565b60008167ffffffffffffffff8111156121c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122ae576001826122149190613bd5565b9150600a856122239190613d87565b603061222f9190613af4565b60f81b81838151811061226b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a79190613b4a565b94506121ff565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061238557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123955750612394826125a3565b5b9050919050565b6123a783838361260d565b505050565b505050565b6123bb8383612721565b6123c8600084848461240c565b612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90613704565b60405180910390fd5b505050565b600061242d8473ffffffffffffffffffffffffffffffffffffffff166128fb565b15612596578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124566118d4565b8786866040518563ffffffff1660e01b81526004016124789493929190613640565b602060405180830381600087803b15801561249257600080fd5b505af19250505080156124c357506040513d601f19601f820116820180604052508101906124c091906130ec565b60015b612546573d80600081146124f3576040519150601f19603f3d011682016040523d82523d6000602084013e6124f8565b606091505b5060008151141561253e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253590613704565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261883838361291e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265b5761265681612923565b61269a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461269957612698838261296c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126dd576126d881612ad9565b61271c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461271b5761271a8282612c1c565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612788906138e4565b60405180910390fd5b61279a81611868565b156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190613784565b60405180910390fd5b6127e66000838361239c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128369190613af4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f7600083836123ac565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297984610fc8565b6129839190613bd5565b9050600060076000848152602001908152602001600020549050818114612a68576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aed9190613bd5565b9050600060096000848152602001908152602001600020549050600060088381548110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c00577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c2783610fc8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ca790613cdb565b90600052602060002090601f016020900481019282612cc95760008555612d10565b82601f10612ce257805160ff1916838001178555612d10565b82800160010185558215612d10579182015b82811115612d0f578251825591602001919060010190612cf4565b5b509050612d1d9190612d21565b5090565b5b80821115612d3a576000816000905550600101612d22565b5090565b6000612d51612d4c84613a44565b613a1f565b905082815260208101848484011115612d6957600080fd5b612d74848285613c99565b509392505050565b6000612d8f612d8a84613a75565b613a1f565b905082815260208101848484011115612da757600080fd5b612db2848285613c99565b509392505050565b600081359050612dc981614535565b92915050565b600081359050612dde8161454c565b92915050565b600081359050612df381614563565b92915050565b600081359050612e088161457a565b92915050565b600081359050612e1d81614591565b92915050565b600081519050612e3281614591565b92915050565b600082601f830112612e4957600080fd5b8135612e59848260208601612d3e565b91505092915050565b600082601f830112612e7357600080fd5b8135612e83848260208601612d7c565b91505092915050565b600081359050612e9b816145a8565b92915050565b600060208284031215612eb357600080fd5b6000612ec184828501612dba565b91505092915050565b600060208284031215612edc57600080fd5b6000612eea84828501612dcf565b91505092915050565b60008060408385031215612f0657600080fd5b6000612f1485828601612dba565b9250506020612f2585828601612dba565b9150509250929050565b600080600060608486031215612f4457600080fd5b6000612f5286828701612dba565b9350506020612f6386828701612dba565b9250506040612f7486828701612e8c565b9150509250925092565b60008060008060808587031215612f9457600080fd5b6000612fa287828801612dba565b9450506020612fb387828801612dba565b9350506040612fc487828801612e8c565b925050606085013567ffffffffffffffff811115612fe157600080fd5b612fed87828801612e38565b91505092959194509250565b6000806040838503121561300c57600080fd5b600061301a85828601612dba565b925050602061302b85828601612de4565b9150509250929050565b6000806040838503121561304857600080fd5b600061305685828601612dba565b925050602061306785828601612e8c565b9150509250929050565b60006020828403121561308357600080fd5b600061309184828501612de4565b91505092915050565b6000602082840312156130ac57600080fd5b60006130ba84828501612df9565b91505092915050565b6000602082840312156130d557600080fd5b60006130e384828501612e0e565b91505092915050565b6000602082840312156130fe57600080fd5b600061310c84828501612e23565b91505092915050565b60006020828403121561312757600080fd5b600082013567ffffffffffffffff81111561314157600080fd5b61314d84828501612e62565b91505092915050565b60006020828403121561316857600080fd5b600061317684828501612e8c565b91505092915050565b61318881613c09565b82525050565b61319781613c2d565b82525050565b6131a681613c39565b82525050565b60006131b782613aa6565b6131c18185613abc565b93506131d1818560208601613ca8565b6131da81613e74565b840191505092915050565b60006131f082613ab1565b6131fa8185613ad8565b935061320a818560208601613ca8565b61321381613e74565b840191505092915050565b600061322982613ab1565b6132338185613ae9565b9350613243818560208601613ca8565b80840191505092915050565b600061325c602b83613ad8565b915061326782613e85565b604082019050919050565b600061327f603283613ad8565b915061328a82613ed4565b604082019050919050565b60006132a2602683613ad8565b91506132ad82613f23565b604082019050919050565b60006132c5602983613ad8565b91506132d082613f72565b604082019050919050565b60006132e8602583613ad8565b91506132f382613fc1565b604082019050919050565b600061330b601c83613ad8565b915061331682614010565b602082019050919050565b600061332e602483613ad8565b915061333982614039565b604082019050919050565b6000613351601983613ad8565b915061335c82614088565b602082019050919050565b6000613374601f83613ad8565b915061337f826140b1565b602082019050919050565b6000613397603a83613ad8565b91506133a2826140da565b604082019050919050565b60006133ba601d83613ad8565b91506133c582614129565b602082019050919050565b60006133dd602c83613ad8565b91506133e882614152565b604082019050919050565b6000613400603883613ad8565b915061340b826141a1565b604082019050919050565b6000613423602a83613ad8565b915061342e826141f0565b604082019050919050565b6000613446602983613ad8565b91506134518261423f565b604082019050919050565b6000613469602a83613ad8565b91506134748261428e565b604082019050919050565b600061348c602083613ad8565b9150613497826142dd565b602082019050919050565b60006134af602c83613ad8565b91506134ba82614306565b604082019050919050565b60006134d2602083613ad8565b91506134dd82614355565b602082019050919050565b60006134f5602f83613ad8565b91506135008261437e565b604082019050919050565b6000613518602283613ad8565b9150613523826143cd565b604082019050919050565b600061353b602183613ad8565b91506135468261441c565b604082019050919050565b600061355e601b83613ad8565b91506135698261446b565b602082019050919050565b6000613581600083613acd565b915061358c82614494565b600082019050919050565b60006135a4603183613ad8565b91506135af82614497565b604082019050919050565b60006135c7602c83613ad8565b91506135d2826144e6565b604082019050919050565b6135e681613c8f565b82525050565b60006135f8828561321e565b9150613604828461321e565b91508190509392505050565b600061361b82613574565b9150819050919050565b600060208201905061363a600083018461317f565b92915050565b6000608082019050613655600083018761317f565b613662602083018661317f565b61366f60408301856135dd565b818103606083015261368181846131ac565b905095945050505050565b60006020820190506136a1600083018461318e565b92915050565b60006020820190506136bc600083018461319d565b92915050565b600060208201905081810360008301526136dc81846131e5565b905092915050565b600060208201905081810360008301526136fd8161324f565b9050919050565b6000602082019050818103600083015261371d81613272565b9050919050565b6000602082019050818103600083015261373d81613295565b9050919050565b6000602082019050818103600083015261375d816132b8565b9050919050565b6000602082019050818103600083015261377d816132db565b9050919050565b6000602082019050818103600083015261379d816132fe565b9050919050565b600060208201905081810360008301526137bd81613321565b9050919050565b600060208201905081810360008301526137dd81613344565b9050919050565b600060208201905081810360008301526137fd81613367565b9050919050565b6000602082019050818103600083015261381d8161338a565b9050919050565b6000602082019050818103600083015261383d816133ad565b9050919050565b6000602082019050818103600083015261385d816133d0565b9050919050565b6000602082019050818103600083015261387d816133f3565b9050919050565b6000602082019050818103600083015261389d81613416565b9050919050565b600060208201905081810360008301526138bd81613439565b9050919050565b600060208201905081810360008301526138dd8161345c565b9050919050565b600060208201905081810360008301526138fd8161347f565b9050919050565b6000602082019050818103600083015261391d816134a2565b9050919050565b6000602082019050818103600083015261393d816134c5565b9050919050565b6000602082019050818103600083015261395d816134e8565b9050919050565b6000602082019050818103600083015261397d8161350b565b9050919050565b6000602082019050818103600083015261399d8161352e565b9050919050565b600060208201905081810360008301526139bd81613551565b9050919050565b600060208201905081810360008301526139dd81613597565b9050919050565b600060208201905081810360008301526139fd816135ba565b9050919050565b6000602082019050613a1960008301846135dd565b92915050565b6000613a29613a3a565b9050613a358282613d0d565b919050565b6000604051905090565b600067ffffffffffffffff821115613a5f57613a5e613e45565b5b613a6882613e74565b9050602081019050919050565b600067ffffffffffffffff821115613a9057613a8f613e45565b5b613a9982613e74565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aff82613c8f565b9150613b0a83613c8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3f57613b3e613db8565b5b828201905092915050565b6000613b5582613c8f565b9150613b6083613c8f565b925082613b7057613b6f613de7565b5b828204905092915050565b6000613b8682613c8f565b9150613b9183613c8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bca57613bc9613db8565b5b828202905092915050565b6000613be082613c8f565b9150613beb83613c8f565b925082821015613bfe57613bfd613db8565b5b828203905092915050565b6000613c1482613c6f565b9050919050565b6000613c2682613c6f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cc6578082015181840152602081019050613cab565b83811115613cd5576000848401525b50505050565b60006002820490506001821680613cf357607f821691505b60208210811415613d0757613d06613e16565b5b50919050565b613d1682613e74565b810181811067ffffffffffffffff82111715613d3557613d34613e45565b5b80604052505050565b6000613d4982613c8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d7c57613d7b613db8565b5b600182019050919050565b6000613d9282613c8f565b9150613d9d83613c8f565b925082613dad57613dac613de7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e2060008201527f6f776e6572736869700000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820746f6b656e2070757263686173650000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61453e81613c09565b811461454957600080fd5b50565b61455581613c1b565b811461456057600080fd5b50565b61456c81613c2d565b811461457757600080fd5b50565b61458381613c39565b811461458e57600080fd5b50565b61459a81613c43565b81146145a557600080fd5b50565b6145b181613c8f565b81146145bc57600080fd5b5056fea26469706673582212205e39b6411a8fb57cdb1058f783b166eeb52739d7321bef3be94603b08a3b19eb64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806370a082311161010d578063a4451261116100a0578063d5abeb011161006f578063d5abeb01146106e8578063e45be8eb14610713578063e985e9c51461073e578063eb8d24441461077b578063f2fde38b146107a6576101ee565b8063a44512611461062e578063b88d4fde14610659578063c4e3709514610682578063c87b56dd146106ab576101ee565b80638da5cb5b116100dc5780638da5cb5b1461059357806395d89b41146105be578063a0712d68146105e9578063a22cb46514610605576101ee565b806370a08231146104eb57806371201f1e14610528578063715018a614610553578063819b25ba1461056a576101ee565b806342842e0e1161018557806355f804b31161015457806355f804b3146104335780635ea8cd121461045c5780636352211e146104855780636f8b44b0146104c2576101ee565b806342842e0e1461037b5780634f6ccce7146103a457806351cff8d9146103e157806353095fe21461040a576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632b9af4f0146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906130c3565b6107cf565b604051610227919061368c565b60405180910390f35b34801561023c57600080fd5b506102456107e1565b60405161025291906136c2565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613156565b610873565b60405161028f9190613625565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613035565b6108f8565b005b3480156102cd57600080fd5b506102d6610a10565b6040516102e39190613a04565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612f2f565b610a1d565b005b34801561032157600080fd5b5061033c6004803603810190610337919061309a565b610a7d565b005b34801561034a57600080fd5b5061036560048036038101906103609190613035565b610b03565b6040516103729190613a04565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612f2f565b610ba8565b005b3480156103b057600080fd5b506103cb60048036038101906103c69190613156565b610bc8565b6040516103d89190613a04565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190612eca565b610c5f565b005b34801561041657600080fd5b50610431600480360381019061042c9190613156565b610cee565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613115565b610d74565b005b34801561046857600080fd5b50610483600480360381019061047e9190613156565b610e0a565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613156565b610e90565b6040516104b99190613625565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613156565b610f42565b005b3480156104f757600080fd5b50610512600480360381019061050d9190612ea1565b610fc8565b60405161051f9190613a04565b60405180910390f35b34801561053457600080fd5b5061053d611080565b60405161054a9190613a04565b60405180910390f35b34801561055f57600080fd5b50610568611086565b005b34801561057657600080fd5b50610591600480360381019061058c9190613156565b61110e565b005b34801561059f57600080fd5b506105a86111ce565b6040516105b59190613625565b60405180910390f35b3480156105ca57600080fd5b506105d36111f8565b6040516105e091906136c2565b60405180910390f35b61060360048036038101906105fe9190613156565b61128a565b005b34801561061157600080fd5b5061062c60048036038101906106279190612ff9565b611481565b005b34801561063a57600080fd5b50610643611497565b60405161065091906136a7565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b9190612f7e565b6114a1565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613071565b611503565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613156565b61159c565b6040516106df91906136c2565b60405180910390f35b3480156106f457600080fd5b506106fd611643565b60405161070a9190613a04565b60405180910390f35b34801561071f57600080fd5b50610728611649565b6040516107359190613a04565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190612ef3565b61164f565b604051610772919061368c565b60405180910390f35b34801561078757600080fd5b506107906116e3565b60405161079d919061368c565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190612ea1565b6116f6565b005b60006107da826117ee565b9050919050565b6060600080546107f090613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461081c90613cdb565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e82611868565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490613904565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090382610e90565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b90613984565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109936118d4565b73ffffffffffffffffffffffffffffffffffffffff1614806109c257506109c1816109bc6118d4565b61164f565b5b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613864565b60405180910390fd5b610a0b83836118dc565b505050565b6000600880549050905090565b610a2e610a286118d4565b82611995565b610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906139c4565b60405180910390fd5b610a78838383611a73565b505050565b610a856118d4565b73ffffffffffffffffffffffffffffffffffffffff16610aa36111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af090613924565b60405180910390fd5b80600f8190555050565b6000610b0e83610fc8565b8210610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b46906136e4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bc3838383604051806020016040528060008152506114a1565b505050565b6000610bd2610a10565b8210610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906139e4565b60405180910390fd5b60088281548110610c4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c676118d4565b73ffffffffffffffffffffffffffffffffffffffff16610c856111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613924565b60405180910390fd5b6000479050610cea8282611cda565b5050565b610cf66118d4565b73ffffffffffffffffffffffffffffffffffffffff16610d146111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190613924565b60405180910390fd5b80600c8190555050565b610d7c6118d4565b73ffffffffffffffffffffffffffffffffffffffff16610d9a6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790613924565b60405180910390fd5b80600e9080519060200190610e06929190612c9b565b5050565b610e126118d4565b73ffffffffffffffffffffffffffffffffffffffff16610e306111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613924565b60405180910390fd5b80600d8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f30906138a4565b60405180910390fd5b80915050919050565b610f4a6118d4565b73ffffffffffffffffffffffffffffffffffffffff16610f686111ce565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613924565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090613884565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b61108e6118d4565b73ffffffffffffffffffffffffffffffffffffffff166110ac6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990613924565b60405180910390fd5b61110c6000611dce565b565b6111166118d4565b73ffffffffffffffffffffffffffffffffffffffff166111346111ce565b73ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613924565b60405180910390fd5b6000611194610a10565b905060005b828110156111c9576111b63382846111b19190613af4565b611e94565b80806111c190613d3e565b915050611199565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461120790613cdb565b80601f016020809104026020016040519081016040528092919081815260200182805461123390613cdb565b80156112805780601f1061125557610100808354040283529160200191611280565b820191906000526020600020905b81548152906001019060200180831161126357829003601f168201915b5050505050905090565b600a60149054906101000a900460ff166112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d090613964565b60405180910390fd5b600c5481111561131e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611315906139a4565b60405180910390fd5b600b548161132a610a10565b6113349190613af4565b1115611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c906138c4565b60405180910390fd5b600c548161138233610fc8565b61138c9190613af4565b11156113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613744565b60405180910390fd5b3481600d546113dc9190613b7b565b111561141d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611414906137e4565b60405180910390fd5b60005b8181101561147d576000611432610a10565b9050600b5461143f610a10565b1015611469576114566114506111ce565b82611e94565b6114686114616111ce565b3383611a73565b5b50808061147590613d3e565b915050611420565b5050565b61149361148c6118d4565b8383611eb2565b5050565b6000600f54905090565b6114b26114ac6118d4565b83611995565b6114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e8906139c4565b60405180910390fd5b6114fd8484848461201f565b50505050565b61150b6118d4565b73ffffffffffffffffffffffffffffffffffffffff166115296111ce565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613924565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60606115a782611868565b6115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613944565b60405180910390fd5b60006115f061207b565b90506000815111611610576040518060200160405280600081525061163b565b8061161a8461210d565b60405160200161162b9291906135ec565b6040516020818303038152906040525b915050919050565b600b5481565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a60149054906101000a900460ff1681565b6116fe6118d4565b73ffffffffffffffffffffffffffffffffffffffff1661171c6111ce565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613924565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613724565b60405180910390fd5b6117eb81611dce565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118615750611860826122ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661194f83610e90565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119a082611868565b6119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613844565b60405180910390fd5b60006119ea83610e90565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a5957508373ffffffffffffffffffffffffffffffffffffffff16611a4184610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a6a5750611a69818561164f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a9382610e90565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613764565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906137a4565b60405180910390fd5b611b6483838361239c565b611b6f6000826118dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190613bd5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c169190613af4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611cd58383836123ac565b505050565b80471015611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613824565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d4390613610565b60006040518083038185875af1925050503d8060008114611d80576040519150601f19603f3d011682016040523d82523d6000602084013e611d85565b606091505b5050905080611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc090613804565b60405180910390fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611eae8282604051806020016040528060008152506123b1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f18906137c4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612012919061368c565b60405180910390a3505050565b61202a848484611a73565b6120368484848461240c565b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90613704565b60405180910390fd5b50505050565b6060600e805461208a90613cdb565b80601f01602080910402602001604051908101604052809291908181526020018280546120b690613cdb565b80156121035780601f106120d857610100808354040283529160200191612103565b820191906000526020600020905b8154815290600101906020018083116120e657829003601f168201915b5050505050905090565b60606000821415612155576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b5565b600082905060005b6000821461218757808061217090613d3e565b915050600a826121809190613b4a565b915061215d565b60008167ffffffffffffffff8111156121c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122ae576001826122149190613bd5565b9150600a856122239190613d87565b603061222f9190613af4565b60f81b81838151811061226b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a79190613b4a565b94506121ff565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061238557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123955750612394826125a3565b5b9050919050565b6123a783838361260d565b505050565b505050565b6123bb8383612721565b6123c8600084848461240c565b612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90613704565b60405180910390fd5b505050565b600061242d8473ffffffffffffffffffffffffffffffffffffffff166128fb565b15612596578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124566118d4565b8786866040518563ffffffff1660e01b81526004016124789493929190613640565b602060405180830381600087803b15801561249257600080fd5b505af19250505080156124c357506040513d601f19601f820116820180604052508101906124c091906130ec565b60015b612546573d80600081146124f3576040519150601f19603f3d011682016040523d82523d6000602084013e6124f8565b606091505b5060008151141561253e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253590613704565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061259b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261883838361291e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561265b5761265681612923565b61269a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461269957612698838261296c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126dd576126d881612ad9565b61271c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461271b5761271a8282612c1c565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612788906138e4565b60405180910390fd5b61279a81611868565b156127da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d190613784565b60405180910390fd5b6127e66000838361239c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128369190613af4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128f7600083836123ac565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297984610fc8565b6129839190613bd5565b9050600060076000848152602001908152602001600020549050818114612a68576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aed9190613bd5565b9050600060096000848152602001908152602001600020549050600060088381548110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c00577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c2783610fc8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ca790613cdb565b90600052602060002090601f016020900481019282612cc95760008555612d10565b82601f10612ce257805160ff1916838001178555612d10565b82800160010185558215612d10579182015b82811115612d0f578251825591602001919060010190612cf4565b5b509050612d1d9190612d21565b5090565b5b80821115612d3a576000816000905550600101612d22565b5090565b6000612d51612d4c84613a44565b613a1f565b905082815260208101848484011115612d6957600080fd5b612d74848285613c99565b509392505050565b6000612d8f612d8a84613a75565b613a1f565b905082815260208101848484011115612da757600080fd5b612db2848285613c99565b509392505050565b600081359050612dc981614535565b92915050565b600081359050612dde8161454c565b92915050565b600081359050612df381614563565b92915050565b600081359050612e088161457a565b92915050565b600081359050612e1d81614591565b92915050565b600081519050612e3281614591565b92915050565b600082601f830112612e4957600080fd5b8135612e59848260208601612d3e565b91505092915050565b600082601f830112612e7357600080fd5b8135612e83848260208601612d7c565b91505092915050565b600081359050612e9b816145a8565b92915050565b600060208284031215612eb357600080fd5b6000612ec184828501612dba565b91505092915050565b600060208284031215612edc57600080fd5b6000612eea84828501612dcf565b91505092915050565b60008060408385031215612f0657600080fd5b6000612f1485828601612dba565b9250506020612f2585828601612dba565b9150509250929050565b600080600060608486031215612f4457600080fd5b6000612f5286828701612dba565b9350506020612f6386828701612dba565b9250506040612f7486828701612e8c565b9150509250925092565b60008060008060808587031215612f9457600080fd5b6000612fa287828801612dba565b9450506020612fb387828801612dba565b9350506040612fc487828801612e8c565b925050606085013567ffffffffffffffff811115612fe157600080fd5b612fed87828801612e38565b91505092959194509250565b6000806040838503121561300c57600080fd5b600061301a85828601612dba565b925050602061302b85828601612de4565b9150509250929050565b6000806040838503121561304857600080fd5b600061305685828601612dba565b925050602061306785828601612e8c565b9150509250929050565b60006020828403121561308357600080fd5b600061309184828501612de4565b91505092915050565b6000602082840312156130ac57600080fd5b60006130ba84828501612df9565b91505092915050565b6000602082840312156130d557600080fd5b60006130e384828501612e0e565b91505092915050565b6000602082840312156130fe57600080fd5b600061310c84828501612e23565b91505092915050565b60006020828403121561312757600080fd5b600082013567ffffffffffffffff81111561314157600080fd5b61314d84828501612e62565b91505092915050565b60006020828403121561316857600080fd5b600061317684828501612e8c565b91505092915050565b61318881613c09565b82525050565b61319781613c2d565b82525050565b6131a681613c39565b82525050565b60006131b782613aa6565b6131c18185613abc565b93506131d1818560208601613ca8565b6131da81613e74565b840191505092915050565b60006131f082613ab1565b6131fa8185613ad8565b935061320a818560208601613ca8565b61321381613e74565b840191505092915050565b600061322982613ab1565b6132338185613ae9565b9350613243818560208601613ca8565b80840191505092915050565b600061325c602b83613ad8565b915061326782613e85565b604082019050919050565b600061327f603283613ad8565b915061328a82613ed4565b604082019050919050565b60006132a2602683613ad8565b91506132ad82613f23565b604082019050919050565b60006132c5602983613ad8565b91506132d082613f72565b604082019050919050565b60006132e8602583613ad8565b91506132f382613fc1565b604082019050919050565b600061330b601c83613ad8565b915061331682614010565b602082019050919050565b600061332e602483613ad8565b915061333982614039565b604082019050919050565b6000613351601983613ad8565b915061335c82614088565b602082019050919050565b6000613374601f83613ad8565b915061337f826140b1565b602082019050919050565b6000613397603a83613ad8565b91506133a2826140da565b604082019050919050565b60006133ba601d83613ad8565b91506133c582614129565b602082019050919050565b60006133dd602c83613ad8565b91506133e882614152565b604082019050919050565b6000613400603883613ad8565b915061340b826141a1565b604082019050919050565b6000613423602a83613ad8565b915061342e826141f0565b604082019050919050565b6000613446602983613ad8565b91506134518261423f565b604082019050919050565b6000613469602a83613ad8565b91506134748261428e565b604082019050919050565b600061348c602083613ad8565b9150613497826142dd565b602082019050919050565b60006134af602c83613ad8565b91506134ba82614306565b604082019050919050565b60006134d2602083613ad8565b91506134dd82614355565b602082019050919050565b60006134f5602f83613ad8565b91506135008261437e565b604082019050919050565b6000613518602283613ad8565b9150613523826143cd565b604082019050919050565b600061353b602183613ad8565b91506135468261441c565b604082019050919050565b600061355e601b83613ad8565b91506135698261446b565b602082019050919050565b6000613581600083613acd565b915061358c82614494565b600082019050919050565b60006135a4603183613ad8565b91506135af82614497565b604082019050919050565b60006135c7602c83613ad8565b91506135d2826144e6565b604082019050919050565b6135e681613c8f565b82525050565b60006135f8828561321e565b9150613604828461321e565b91508190509392505050565b600061361b82613574565b9150819050919050565b600060208201905061363a600083018461317f565b92915050565b6000608082019050613655600083018761317f565b613662602083018661317f565b61366f60408301856135dd565b818103606083015261368181846131ac565b905095945050505050565b60006020820190506136a1600083018461318e565b92915050565b60006020820190506136bc600083018461319d565b92915050565b600060208201905081810360008301526136dc81846131e5565b905092915050565b600060208201905081810360008301526136fd8161324f565b9050919050565b6000602082019050818103600083015261371d81613272565b9050919050565b6000602082019050818103600083015261373d81613295565b9050919050565b6000602082019050818103600083015261375d816132b8565b9050919050565b6000602082019050818103600083015261377d816132db565b9050919050565b6000602082019050818103600083015261379d816132fe565b9050919050565b600060208201905081810360008301526137bd81613321565b9050919050565b600060208201905081810360008301526137dd81613344565b9050919050565b600060208201905081810360008301526137fd81613367565b9050919050565b6000602082019050818103600083015261381d8161338a565b9050919050565b6000602082019050818103600083015261383d816133ad565b9050919050565b6000602082019050818103600083015261385d816133d0565b9050919050565b6000602082019050818103600083015261387d816133f3565b9050919050565b6000602082019050818103600083015261389d81613416565b9050919050565b600060208201905081810360008301526138bd81613439565b9050919050565b600060208201905081810360008301526138dd8161345c565b9050919050565b600060208201905081810360008301526138fd8161347f565b9050919050565b6000602082019050818103600083015261391d816134a2565b9050919050565b6000602082019050818103600083015261393d816134c5565b9050919050565b6000602082019050818103600083015261395d816134e8565b9050919050565b6000602082019050818103600083015261397d8161350b565b9050919050565b6000602082019050818103600083015261399d8161352e565b9050919050565b600060208201905081810360008301526139bd81613551565b9050919050565b600060208201905081810360008301526139dd81613597565b9050919050565b600060208201905081810360008301526139fd816135ba565b9050919050565b6000602082019050613a1960008301846135dd565b92915050565b6000613a29613a3a565b9050613a358282613d0d565b919050565b6000604051905090565b600067ffffffffffffffff821115613a5f57613a5e613e45565b5b613a6882613e74565b9050602081019050919050565b600067ffffffffffffffff821115613a9057613a8f613e45565b5b613a9982613e74565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aff82613c8f565b9150613b0a83613c8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3f57613b3e613db8565b5b828201905092915050565b6000613b5582613c8f565b9150613b6083613c8f565b925082613b7057613b6f613de7565b5b828204905092915050565b6000613b8682613c8f565b9150613b9183613c8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bca57613bc9613db8565b5b828202905092915050565b6000613be082613c8f565b9150613beb83613c8f565b925082821015613bfe57613bfd613db8565b5b828203905092915050565b6000613c1482613c6f565b9050919050565b6000613c2682613c6f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cc6578082015181840152602081019050613cab565b83811115613cd5576000848401525b50505050565b60006002820490506001821680613cf357607f821691505b60208210811415613d0757613d06613e16565b5b50919050565b613d1682613e74565b810181811067ffffffffffffffff82111715613d3557613d34613e45565b5b80604052505050565b6000613d4982613c8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d7c57613d7b613db8565b5b600182019050919050565b6000613d9282613c8f565b9150613d9d83613c8f565b925082613dad57613dac613de7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e2060008201527f6f776e6572736869700000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820746f6b656e2070757263686173650000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61453e81613c09565b811461454957600080fd5b50565b61455581613c1b565b811461456057600080fd5b50565b61456c81613c2d565b811461457757600080fd5b50565b61458381613c39565b811461458e57600080fd5b50565b61459a81613c43565b81146145a557600080fd5b50565b6145b181613c8f565b81146145bc57600080fd5b5056fea26469706673582212205e39b6411a8fb57cdb1058f783b166eeb52739d7321bef3be94603b08a3b19eb64736f6c63430008040033
Deployed Bytecode Sourcemap
45699:2966:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46267:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22669:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24228:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23751:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40117:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24978:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47780:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39785:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25388:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40307:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48504:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48140:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47555:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48394:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22363:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48283:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22093:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45836:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36557:103;;;;;;;;;;;;;:::i;:::-;;47905:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35906:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22838:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46579:819;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24521:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47406:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25644:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47674:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23013:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45803:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45878:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24747:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45764:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36815:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46267:179;46378:4;46402:36;46426:11;46402:23;:36::i;:::-;46395:43;;46267:179;;;:::o;22669:100::-;22723:13;22756:5;22749:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22669:100;:::o;24228:221::-;24304:7;24332:16;24340:7;24332;:16::i;:::-;24324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24417:15;:24;24433:7;24417:24;;;;;;;;;;;;;;;;;;;;;24410:31;;24228:221;;;:::o;23751:411::-;23832:13;23848:23;23863:7;23848:14;:23::i;:::-;23832:39;;23896:5;23890:11;;:2;:11;;;;23882:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23990:5;23974:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23999:37;24016:5;24023:12;:10;:12::i;:::-;23999:16;:37::i;:::-;23974:62;23952:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24133:21;24142:2;24146:7;24133:8;:21::i;:::-;23751:411;;;:::o;40117:113::-;40178:7;40205:10;:17;;;;40198:24;;40117:113;:::o;24978:339::-;25173:41;25192:12;:10;:12::i;:::-;25206:7;25173:18;:41::i;:::-;25165:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25281:28;25291:4;25297:2;25301:7;25281:9;:28::i;:::-;24978:339;;;:::o;47780:117::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47882:7:::1;47862:17;:27;;;;47780:117:::0;:::o;39785:256::-;39882:7;39918:23;39935:5;39918:16;:23::i;:::-;39910:5;:31;39902:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40007:12;:19;40020:5;40007:19;;;;;;;;;;;;;;;:26;40027:5;40007:26;;;;;;;;;;;;40000:33;;39785:256;;;;:::o;25388:185::-;25526:39;25543:4;25549:2;25553:7;25526:39;;;;;;;;;;;;:16;:39::i;:::-;25388:185;;;:::o;40307:233::-;40382:7;40418:30;:28;:30::i;:::-;40410:5;:38;40402:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40515:10;40526:5;40515:17;;;;;;;;;;;;;;;;;;;;;;;;40508:24;;40307:233;;;:::o;48504:156::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48572:15:::1;48590:21;48572:39;;48622:30;48640:2;48644:7;48622:17;:30::i;:::-;36197:1;48504:156:::0;:::o;48140:135::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48247:20:::1;48227:17;:40;;;;48140:135:::0;:::o;47555:111::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47650:8:::1;47631:16;:27;;;;;;;;;;;;:::i;:::-;;47555:111:::0;:::o;48394:102::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48477:11:::1;48466:8;:22;;;;48394:102:::0;:::o;22363:239::-;22435:7;22455:13;22471:7;:16;22479:7;22471:16;;;;;;;;;;;;;;;;;;;;;22455:32;;22523:1;22506:19;;:5;:19;;;;22498:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22589:5;22582:12;;;22363:239;;;:::o;48283:103::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48366:12:::1;48354:9;:24;;;;48283:103:::0;:::o;22093:208::-;22165:7;22210:1;22193:19;;:5;:19;;;;22185:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22277:9;:16;22287:5;22277:16;;;;;;;;;;;;;;;;22270:23;;22093:208;;;:::o;45836:33::-;;;;:::o;36557:103::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36622:30:::1;36649:1;36622:18;:30::i;:::-;36557:103::o:0;47905:227::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47973:11:::1;47987:13;:11;:13::i;:::-;47973:27;;48011:6;48028:97;48044:14;48040:1;:18;48028:97;;;48080:33;48090:10;48111:1;48102:6;:10;;;;:::i;:::-;48080:9;:33::i;:::-;48060:3;;;;;:::i;:::-;;;;48028:97;;;36197:1;;47905:227:::0;:::o;35906:87::-;35952:7;35979:6;;;;;;;;;;;35972:13;;35906:87;:::o;22838:104::-;22894:13;22927:7;22920:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22838:104;:::o;46579:819::-;46648:12;;;;;;;;;;;46640:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46736:17;;46718:14;:35;;46710:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46838:9;;46820:14;46804:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:43;;46796:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;46955:17;;46937:14;46913:21;46923:10;46913:9;:21::i;:::-;:38;;;;:::i;:::-;:59;;46905:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47066:9;47048:14;47037:8;;:25;;;;:::i;:::-;:38;;47029:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;47128:6;47124:267;47144:14;47140:1;:18;47124:267;;;47180:14;47197:13;:11;:13::i;:::-;47180:30;;47245:9;;47229:13;:11;:13::i;:::-;:25;47225:155;;;47275:29;47285:7;:5;:7::i;:::-;47294:9;47275;:29::i;:::-;47323:41;47333:7;:5;:7::i;:::-;47342:10;47354:9;47323;:41::i;:::-;47225:155;47124:267;47160:3;;;;;:::i;:::-;;;;47124:267;;;;46579:819;:::o;24521:155::-;24616:52;24635:12;:10;:12::i;:::-;24649:8;24659;24616:18;:52::i;:::-;24521:155;;:::o;47406:112::-;47466:7;47493:17;;47486:24;;47406:112;:::o;25644:328::-;25819:41;25838:12;:10;:12::i;:::-;25852:7;25819:18;:41::i;:::-;25811:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25925:39;25939:4;25945:2;25949:7;25958:5;25925:13;:39::i;:::-;25644:328;;;;:::o;47674:98::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47756:8:::1;47741:12;;:23;;;;;;;;;;;;;;;;;;47674:98:::0;:::o;23013:334::-;23086:13;23120:16;23128:7;23120;:16::i;:::-;23112:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23201:21;23225:10;:8;:10::i;:::-;23201:34;;23277:1;23259:7;23253:21;:25;:86;;;;;;;;;;;;;;;;;23305:7;23314:18;:7;:16;:18::i;:::-;23288:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23253:86;23246:93;;;23013:334;;;:::o;45803:26::-;;;;:::o;45878:36::-;;;;:::o;24747:164::-;24844:4;24868:18;:25;24887:5;24868:25;;;;;;;;;;;;;;;:35;24894:8;24868:35;;;;;;;;;;;;;;;;;;;;;;;;;24861:42;;24747:164;;;;:::o;45764:32::-;;;;;;;;;;;;;:::o;36815:201::-;36137:12;:10;:12::i;:::-;36126:23;;:7;:5;:7::i;:::-;:23;;;36118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36924:1:::1;36904:22;;:8;:22;;;;36896:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36980:28;36999:8;36980:18;:28::i;:::-;36815:201:::0;:::o;39477:224::-;39579:4;39618:35;39603:50;;;:11;:50;;;;:90;;;;39657:36;39681:11;39657:23;:36::i;:::-;39603:90;39596:97;;39477:224;;;:::o;27482:127::-;27547:4;27599:1;27571:30;;:7;:16;27579:7;27571:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27564:37;;27482:127;;;:::o;16932:98::-;16985:7;17012:10;17005:17;;16932:98;:::o;31628:174::-;31730:2;31703:15;:24;31719:7;31703:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31786:7;31782:2;31748:46;;31757:23;31772:7;31757:14;:23::i;:::-;31748:46;;;;;;;;;;;;31628:174;;:::o;27776:348::-;27869:4;27894:16;27902:7;27894;:16::i;:::-;27886:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27970:13;27986:23;28001:7;27986:14;:23::i;:::-;27970:39;;28039:5;28028:16;;:7;:16;;;:51;;;;28072:7;28048:31;;:20;28060:7;28048:11;:20::i;:::-;:31;;;28028:51;:87;;;;28083:32;28100:5;28107:7;28083:16;:32::i;:::-;28028:87;28020:96;;;27776:348;;;;:::o;30885:625::-;31044:4;31017:31;;:23;31032:7;31017:14;:23::i;:::-;:31;;;31009:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31123:1;31109:16;;:2;:16;;;;31101:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31179:39;31200:4;31206:2;31210:7;31179:20;:39::i;:::-;31283:29;31300:1;31304:7;31283:8;:29::i;:::-;31344:1;31325:9;:15;31335:4;31325:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31373:1;31356:9;:13;31366:2;31356:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31404:2;31385:7;:16;31393:7;31385:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31443:7;31439:2;31424:27;;31433:4;31424:27;;;;;;;;;;;;31464:38;31484:4;31490:2;31494:7;31464:19;:38::i;:::-;30885:625;;;:::o;10238:317::-;10353:6;10328:21;:31;;10320:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10407:12;10425:9;:14;;10447:6;10425:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10406:52;;;10477:7;10469:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10238:317;;;:::o;37176:191::-;37250:16;37269:6;;;;;;;;;;;37250:25;;37295:8;37286:6;;:17;;;;;;;;;;;;;;;;;;37350:8;37319:40;;37340:8;37319:40;;;;;;;;;;;;37176:191;;:::o;28466:110::-;28542:26;28552:2;28556:7;28542:26;;;;;;;;;;;;:9;:26::i;:::-;28466:110;;:::o;31944:315::-;32099:8;32090:17;;:5;:17;;;;32082:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:8;32148:18;:25;32167:5;32148:25;;;;;;;;;;;;;;;:35;32174:8;32148:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32232:8;32210:41;;32225:5;32210:41;;;32242:8;32210:41;;;;;;:::i;:::-;;;;;;;;31944:315;;;:::o;26854:::-;27011:28;27021:4;27027:2;27031:7;27011:9;:28::i;:::-;27058:48;27081:4;27087:2;27091:7;27100:5;27058:22;:48::i;:::-;27050:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26854:315;;;;:::o;46454:117::-;46514:13;46547:16;46540:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46454:117;:::o;17517:723::-;17573:13;17803:1;17794:5;:10;17790:53;;;17821:10;;;;;;;;;;;;;;;;;;;;;17790:53;17853:12;17868:5;17853:20;;17884:14;17909:78;17924:1;17916:4;:9;17909:78;;17942:8;;;;;:::i;:::-;;;;17973:2;17965:10;;;;;:::i;:::-;;;17909:78;;;17997:19;18029:6;18019:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17997:39;;18047:154;18063:1;18054:5;:10;18047:154;;18091:1;18081:11;;;;;:::i;:::-;;;18158:2;18150:5;:10;;;;:::i;:::-;18137:2;:24;;;;:::i;:::-;18124:39;;18107:6;18114;18107:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18187:2;18178:11;;;;;:::i;:::-;;;18047:154;;;18225:6;18211:21;;;;;17517:723;;;;:::o;21724:305::-;21826:4;21878:25;21863:40;;;:11;:40;;;;:105;;;;21935:33;21920:48;;;:11;:48;;;;21863:105;:158;;;;21985:36;22009:11;21985:23;:36::i;:::-;21863:158;21843:178;;21724:305;;;:::o;46078:181::-;46206:45;46233:4;46239:2;46243:7;46206:26;:45::i;:::-;46078:181;;;:::o;34706:125::-;;;;:::o;28803:321::-;28933:18;28939:2;28943:7;28933:5;:18::i;:::-;28984:54;29015:1;29019:2;29023:7;29032:5;28984:22;:54::i;:::-;28962:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28803:321;;;:::o;32824:799::-;32979:4;33000:15;:2;:13;;;:15::i;:::-;32996:620;;;33052:2;33036:36;;;33073:12;:10;:12::i;:::-;33087:4;33093:7;33102:5;33036:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33032:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33295:1;33278:6;:13;:18;33274:272;;;33321:60;;;;;;;;;;:::i;:::-;;;;;;;;33274:272;33496:6;33490:13;33481:6;33477:2;33473:15;33466:38;33032:529;33169:41;;;33159:51;;;:6;:51;;;;33152:58;;;;;32996:620;33600:4;33593:11;;32824:799;;;;;;;:::o;20147:157::-;20232:4;20271:25;20256:40;;;:11;:40;;;;20249:47;;20147:157;;;:::o;41153:589::-;41297:45;41324:4;41330:2;41334:7;41297:26;:45::i;:::-;41375:1;41359:18;;:4;:18;;;41355:187;;;41394:40;41426:7;41394:31;:40::i;:::-;41355:187;;;41464:2;41456:10;;:4;:10;;;41452:90;;41483:47;41516:4;41522:7;41483:32;:47::i;:::-;41452:90;41355:187;41570:1;41556:16;;:2;:16;;;41552:183;;;41589:45;41626:7;41589:36;:45::i;:::-;41552:183;;;41662:4;41656:10;;:2;:10;;;41652:83;;41683:40;41711:2;41715:7;41683:27;:40::i;:::-;41652:83;41552:183;41153:589;;;:::o;29460:439::-;29554:1;29540:16;;:2;:16;;;;29532:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29621:7;29613;:16::i;:::-;29612:17;29604:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29675:45;29704:1;29708:2;29712:7;29675:20;:45::i;:::-;29750:1;29733:9;:13;29743:2;29733:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29781:2;29762:7;:16;29770:7;29762:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29826:7;29822:2;29801:33;;29818:1;29801:33;;;;;;;;;;;;29847:44;29875:1;29879:2;29883:7;29847:19;:44::i;:::-;29460:439;;:::o;8977:326::-;9037:4;9294:1;9272:7;:19;;;:23;9265:30;;8977:326;;;:::o;34195:126::-;;;;:::o;42465:164::-;42569:10;:17;;;;42542:15;:24;42558:7;42542:24;;;;;;;;;;;:44;;;;42597:10;42613:7;42597:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42465:164;:::o;43256:988::-;43522:22;43572:1;43547:22;43564:4;43547:16;:22::i;:::-;:26;;;;:::i;:::-;43522:51;;43584:18;43605:17;:26;43623:7;43605:26;;;;;;;;;;;;43584:47;;43752:14;43738:10;:28;43734:328;;43783:19;43805:12;:18;43818:4;43805:18;;;;;;;;;;;;;;;:34;43824:14;43805:34;;;;;;;;;;;;43783:56;;43889:11;43856:12;:18;43869:4;43856:18;;;;;;;;;;;;;;;:30;43875:10;43856:30;;;;;;;;;;;:44;;;;44006:10;43973:17;:30;43991:11;43973:30;;;;;;;;;;;:43;;;;43734:328;;44158:17;:26;44176:7;44158:26;;;;;;;;;;;44151:33;;;44202:12;:18;44215:4;44202:18;;;;;;;;;;;;;;;:34;44221:14;44202:34;;;;;;;;;;;44195:41;;;43256:988;;;;:::o;44539:1079::-;44792:22;44837:1;44817:10;:17;;;;:21;;;;:::i;:::-;44792:46;;44849:18;44870:15;:24;44886:7;44870:24;;;;;;;;;;;;44849:45;;45221:19;45243:10;45254:14;45243:26;;;;;;;;;;;;;;;;;;;;;;;;45221:48;;45307:11;45282:10;45293;45282:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;45418:10;45387:15;:28;45403:11;45387:28;;;;;;;;;;;:41;;;;45559:15;:24;45575:7;45559:24;;;;;;;;;;;45552:31;;;45594:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44539:1079;;;;:::o;42043:221::-;42128:14;42145:20;42162:2;42145:16;:20::i;:::-;42128:37;;42203:7;42176:12;:16;42189:2;42176:16;;;;;;;;;;;;;;;:24;42193:6;42176:24;;;;;;;;;;;:34;;;;42250:6;42221:17;:26;42239:7;42221:26;;;;;;;;;;;:35;;;;42043:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:155::-;906:5;944:6;931:20;922:29;;960:41;995:5;960:41;:::i;:::-;912:95;;;;:::o;1013:133::-;1056:5;1094:6;1081:20;1072:29;;1110:30;1134:5;1110:30;:::i;:::-;1062:84;;;;:::o;1152:139::-;1198:5;1236:6;1223:20;1214:29;;1252:33;1279:5;1252:33;:::i;:::-;1204:87;;;;:::o;1297:137::-;1342:5;1380:6;1367:20;1358:29;;1396:32;1422:5;1396:32;:::i;:::-;1348:86;;;;:::o;1440:141::-;1496:5;1527:6;1521:13;1512:22;;1543:32;1569:5;1543:32;:::i;:::-;1502:79;;;;:::o;1600:271::-;1655:5;1704:3;1697:4;1689:6;1685:17;1681:27;1671:2;;1722:1;1719;1712:12;1671:2;1762:6;1749:20;1787:78;1861:3;1853:6;1846:4;1838:6;1834:17;1787:78;:::i;:::-;1778:87;;1661:210;;;;;:::o;1891:273::-;1947:5;1996:3;1989:4;1981:6;1977:17;1973:27;1963:2;;2014:1;2011;2004:12;1963:2;2054:6;2041:20;2079:79;2154:3;2146:6;2139:4;2131:6;2127:17;2079:79;:::i;:::-;2070:88;;1953:211;;;;;:::o;2170:139::-;2216:5;2254:6;2241:20;2232:29;;2270:33;2297:5;2270:33;:::i;:::-;2222:87;;;;:::o;2315:262::-;2374:6;2423:2;2411:9;2402:7;2398:23;2394:32;2391:2;;;2439:1;2436;2429:12;2391:2;2482:1;2507:53;2552:7;2543:6;2532:9;2528:22;2507:53;:::i;:::-;2497:63;;2453:117;2381:196;;;;:::o;2583:278::-;2650:6;2699:2;2687:9;2678:7;2674:23;2670:32;2667:2;;;2715:1;2712;2705:12;2667:2;2758:1;2783:61;2836:7;2827:6;2816:9;2812:22;2783:61;:::i;:::-;2773:71;;2729:125;2657:204;;;;:::o;2867:407::-;2935:6;2943;2992:2;2980:9;2971:7;2967:23;2963:32;2960:2;;;3008:1;3005;2998:12;2960:2;3051:1;3076:53;3121:7;3112:6;3101:9;3097:22;3076:53;:::i;:::-;3066:63;;3022:117;3178:2;3204:53;3249:7;3240:6;3229:9;3225:22;3204:53;:::i;:::-;3194:63;;3149:118;2950:324;;;;;:::o;3280:552::-;3357:6;3365;3373;3422:2;3410:9;3401:7;3397:23;3393:32;3390:2;;;3438:1;3435;3428:12;3390:2;3481:1;3506:53;3551:7;3542:6;3531:9;3527:22;3506:53;:::i;:::-;3496:63;;3452:117;3608:2;3634:53;3679:7;3670:6;3659:9;3655:22;3634:53;:::i;:::-;3624:63;;3579:118;3736:2;3762:53;3807:7;3798:6;3787:9;3783:22;3762:53;:::i;:::-;3752:63;;3707:118;3380:452;;;;;:::o;3838:809::-;3933:6;3941;3949;3957;4006:3;3994:9;3985:7;3981:23;3977:33;3974:2;;;4023:1;4020;4013:12;3974:2;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;4477:2;4466:9;4462:18;4449:32;4508:18;4500:6;4497:30;4494:2;;;4540:1;4537;4530:12;4494:2;4568:62;4622:7;4613:6;4602:9;4598:22;4568:62;:::i;:::-;4558:72;;4420:220;3964:683;;;;;;;:::o;4653:401::-;4718:6;4726;4775:2;4763:9;4754:7;4750:23;4746:32;4743:2;;;4791:1;4788;4781:12;4743:2;4834:1;4859:53;4904:7;4895:6;4884:9;4880:22;4859:53;:::i;:::-;4849:63;;4805:117;4961:2;4987:50;5029:7;5020:6;5009:9;5005:22;4987:50;:::i;:::-;4977:60;;4932:115;4733:321;;;;;:::o;5060:407::-;5128:6;5136;5185:2;5173:9;5164:7;5160:23;5156:32;5153:2;;;5201:1;5198;5191:12;5153:2;5244:1;5269:53;5314:7;5305:6;5294:9;5290:22;5269:53;:::i;:::-;5259:63;;5215:117;5371:2;5397:53;5442:7;5433:6;5422:9;5418:22;5397:53;:::i;:::-;5387:63;;5342:118;5143:324;;;;;:::o;5473:256::-;5529:6;5578:2;5566:9;5557:7;5553:23;5549:32;5546:2;;;5594:1;5591;5584:12;5546:2;5637:1;5662:50;5704:7;5695:6;5684:9;5680:22;5662:50;:::i;:::-;5652:60;;5608:114;5536:193;;;;:::o;5735:262::-;5794:6;5843:2;5831:9;5822:7;5818:23;5814:32;5811:2;;;5859:1;5856;5849:12;5811:2;5902:1;5927:53;5972:7;5963:6;5952:9;5948:22;5927:53;:::i;:::-;5917:63;;5873:117;5801:196;;;;:::o;6003:260::-;6061:6;6110:2;6098:9;6089:7;6085:23;6081:32;6078:2;;;6126:1;6123;6116:12;6078:2;6169:1;6194:52;6238:7;6229:6;6218:9;6214:22;6194:52;:::i;:::-;6184:62;;6140:116;6068:195;;;;:::o;6269:282::-;6338:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:2;;;6403:1;6400;6393:12;6355:2;6446:1;6471:63;6526:7;6517:6;6506:9;6502:22;6471:63;:::i;:::-;6461:73;;6417:127;6345:206;;;;:::o;6557:375::-;6626:6;6675:2;6663:9;6654:7;6650:23;6646:32;6643:2;;;6691:1;6688;6681:12;6643:2;6762:1;6751:9;6747:17;6734:31;6792:18;6784:6;6781:30;6778:2;;;6824:1;6821;6814:12;6778:2;6852:63;6907:7;6898:6;6887:9;6883:22;6852:63;:::i;:::-;6842:73;;6705:220;6633:299;;;;:::o;6938:262::-;6997:6;7046:2;7034:9;7025:7;7021:23;7017:32;7014:2;;;7062:1;7059;7052:12;7014:2;7105:1;7130:53;7175:7;7166:6;7155:9;7151:22;7130:53;:::i;:::-;7120:63;;7076:117;7004:196;;;;:::o;7206:118::-;7293:24;7311:5;7293:24;:::i;:::-;7288:3;7281:37;7271:53;;:::o;7330:109::-;7411:21;7426:5;7411:21;:::i;:::-;7406:3;7399:34;7389:50;;:::o;7445:118::-;7532:24;7550:5;7532:24;:::i;:::-;7527:3;7520:37;7510:53;;:::o;7569:360::-;7655:3;7683:38;7715:5;7683:38;:::i;:::-;7737:70;7800:6;7795:3;7737:70;:::i;:::-;7730:77;;7816:52;7861:6;7856:3;7849:4;7842:5;7838:16;7816:52;:::i;:::-;7893:29;7915:6;7893:29;:::i;:::-;7888:3;7884:39;7877:46;;7659:270;;;;;:::o;7935:364::-;8023:3;8051:39;8084:5;8051:39;:::i;:::-;8106:71;8170:6;8165:3;8106:71;:::i;:::-;8099:78;;8186:52;8231:6;8226:3;8219:4;8212:5;8208:16;8186:52;:::i;:::-;8263:29;8285:6;8263:29;:::i;:::-;8258:3;8254:39;8247:46;;8027:272;;;;;:::o;8305:377::-;8411:3;8439:39;8472:5;8439:39;:::i;:::-;8494:89;8576:6;8571:3;8494:89;:::i;:::-;8487:96;;8592:52;8637:6;8632:3;8625:4;8618:5;8614:16;8592:52;:::i;:::-;8669:6;8664:3;8660:16;8653:23;;8415:267;;;;;:::o;8688:366::-;8830:3;8851:67;8915:2;8910:3;8851:67;:::i;:::-;8844:74;;8927:93;9016:3;8927:93;:::i;:::-;9045:2;9040:3;9036:12;9029:19;;8834:220;;;:::o;9060:366::-;9202:3;9223:67;9287:2;9282:3;9223:67;:::i;:::-;9216:74;;9299:93;9388:3;9299:93;:::i;:::-;9417:2;9412:3;9408:12;9401:19;;9206:220;;;:::o;9432:366::-;9574:3;9595:67;9659:2;9654:3;9595:67;:::i;:::-;9588:74;;9671:93;9760:3;9671:93;:::i;:::-;9789:2;9784:3;9780:12;9773:19;;9578:220;;;:::o;9804:366::-;9946:3;9967:67;10031:2;10026:3;9967:67;:::i;:::-;9960:74;;10043:93;10132:3;10043:93;:::i;:::-;10161:2;10156:3;10152:12;10145:19;;9950:220;;;:::o;10176:366::-;10318:3;10339:67;10403:2;10398:3;10339:67;:::i;:::-;10332:74;;10415:93;10504:3;10415:93;:::i;:::-;10533:2;10528:3;10524:12;10517:19;;10322:220;;;:::o;10548:366::-;10690:3;10711:67;10775:2;10770:3;10711:67;:::i;:::-;10704:74;;10787:93;10876:3;10787:93;:::i;:::-;10905:2;10900:3;10896:12;10889:19;;10694:220;;;:::o;10920:366::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;11066:220;;;:::o;11292:366::-;11434:3;11455:67;11519:2;11514:3;11455:67;:::i;:::-;11448:74;;11531:93;11620:3;11531:93;:::i;:::-;11649:2;11644:3;11640:12;11633:19;;11438:220;;;:::o;11664:366::-;11806:3;11827:67;11891:2;11886:3;11827:67;:::i;:::-;11820:74;;11903:93;11992:3;11903:93;:::i;:::-;12021:2;12016:3;12012:12;12005:19;;11810:220;;;:::o;12036:366::-;12178:3;12199:67;12263:2;12258:3;12199:67;:::i;:::-;12192:74;;12275:93;12364:3;12275:93;:::i;:::-;12393:2;12388:3;12384:12;12377:19;;12182:220;;;:::o;12408:366::-;12550:3;12571:67;12635:2;12630:3;12571:67;:::i;:::-;12564:74;;12647:93;12736:3;12647:93;:::i;:::-;12765:2;12760:3;12756:12;12749:19;;12554:220;;;:::o;12780:366::-;12922:3;12943:67;13007:2;13002:3;12943:67;:::i;:::-;12936:74;;13019:93;13108:3;13019:93;:::i;:::-;13137:2;13132:3;13128:12;13121:19;;12926:220;;;:::o;13152:366::-;13294:3;13315:67;13379:2;13374:3;13315:67;:::i;:::-;13308:74;;13391:93;13480:3;13391:93;:::i;:::-;13509:2;13504:3;13500:12;13493:19;;13298:220;;;:::o;13524:366::-;13666:3;13687:67;13751:2;13746:3;13687:67;:::i;:::-;13680:74;;13763:93;13852:3;13763:93;:::i;:::-;13881:2;13876:3;13872:12;13865:19;;13670:220;;;:::o;13896:366::-;14038:3;14059:67;14123:2;14118:3;14059:67;:::i;:::-;14052:74;;14135:93;14224:3;14135:93;:::i;:::-;14253:2;14248:3;14244:12;14237:19;;14042:220;;;:::o;14268:366::-;14410:3;14431:67;14495:2;14490:3;14431:67;:::i;:::-;14424:74;;14507:93;14596:3;14507:93;:::i;:::-;14625:2;14620:3;14616:12;14609:19;;14414:220;;;:::o;14640:366::-;14782:3;14803:67;14867:2;14862:3;14803:67;:::i;:::-;14796:74;;14879:93;14968:3;14879:93;:::i;:::-;14997:2;14992:3;14988:12;14981:19;;14786:220;;;:::o;15012:366::-;15154:3;15175:67;15239:2;15234:3;15175:67;:::i;:::-;15168:74;;15251:93;15340:3;15251:93;:::i;:::-;15369:2;15364:3;15360:12;15353:19;;15158:220;;;:::o;15384:366::-;15526:3;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15623:93;15712:3;15623:93;:::i;:::-;15741:2;15736:3;15732:12;15725:19;;15530:220;;;:::o;15756:366::-;15898:3;15919:67;15983:2;15978:3;15919:67;:::i;:::-;15912:74;;15995:93;16084:3;15995:93;:::i;:::-;16113:2;16108:3;16104:12;16097:19;;15902:220;;;:::o;16128:366::-;16270:3;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16367:93;16456:3;16367:93;:::i;:::-;16485:2;16480:3;16476:12;16469:19;;16274:220;;;:::o;16500:366::-;16642:3;16663:67;16727:2;16722:3;16663:67;:::i;:::-;16656:74;;16739:93;16828:3;16739:93;:::i;:::-;16857:2;16852:3;16848:12;16841:19;;16646:220;;;:::o;16872:366::-;17014:3;17035:67;17099:2;17094:3;17035:67;:::i;:::-;17028:74;;17111:93;17200:3;17111:93;:::i;:::-;17229:2;17224:3;17220:12;17213:19;;17018:220;;;:::o;17244:398::-;17403:3;17424:83;17505:1;17500:3;17424:83;:::i;:::-;17417:90;;17516:93;17605:3;17516:93;:::i;:::-;17634:1;17629:3;17625:11;17618:18;;17407:235;;;:::o;17648:366::-;17790:3;17811:67;17875:2;17870:3;17811:67;:::i;:::-;17804:74;;17887:93;17976:3;17887:93;:::i;:::-;18005:2;18000:3;17996:12;17989:19;;17794:220;;;:::o;18020:366::-;18162:3;18183:67;18247:2;18242:3;18183:67;:::i;:::-;18176:74;;18259:93;18348:3;18259:93;:::i;:::-;18377:2;18372:3;18368:12;18361:19;;18166:220;;;:::o;18392:118::-;18479:24;18497:5;18479:24;:::i;:::-;18474:3;18467:37;18457:53;;:::o;18516:435::-;18696:3;18718:95;18809:3;18800:6;18718:95;:::i;:::-;18711:102;;18830:95;18921:3;18912:6;18830:95;:::i;:::-;18823:102;;18942:3;18935:10;;18700:251;;;;;:::o;18957:379::-;19141:3;19163:147;19306:3;19163:147;:::i;:::-;19156:154;;19327:3;19320:10;;19145:191;;;:::o;19342:222::-;19435:4;19473:2;19462:9;19458:18;19450:26;;19486:71;19554:1;19543:9;19539:17;19530:6;19486:71;:::i;:::-;19440:124;;;;:::o;19570:640::-;19765:4;19803:3;19792:9;19788:19;19780:27;;19817:71;19885:1;19874:9;19870:17;19861:6;19817:71;:::i;:::-;19898:72;19966:2;19955:9;19951:18;19942:6;19898:72;:::i;:::-;19980;20048:2;20037:9;20033:18;20024:6;19980:72;:::i;:::-;20099:9;20093:4;20089:20;20084:2;20073:9;20069:18;20062:48;20127:76;20198:4;20189:6;20127:76;:::i;:::-;20119:84;;19770:440;;;;;;;:::o;20216:210::-;20303:4;20341:2;20330:9;20326:18;20318:26;;20354:65;20416:1;20405:9;20401:17;20392:6;20354:65;:::i;:::-;20308:118;;;;:::o;20432:222::-;20525:4;20563:2;20552:9;20548:18;20540:26;;20576:71;20644:1;20633:9;20629:17;20620:6;20576:71;:::i;:::-;20530:124;;;;:::o;20660:313::-;20773:4;20811:2;20800:9;20796:18;20788:26;;20860:9;20854:4;20850:20;20846:1;20835:9;20831:17;20824:47;20888:78;20961:4;20952:6;20888:78;:::i;:::-;20880:86;;20778:195;;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;21150:248;;;:::o;21404:419::-;21570:4;21608:2;21597:9;21593:18;21585:26;;21657:9;21651:4;21647:20;21643:1;21632:9;21628:17;21621:47;21685:131;21811:4;21685:131;:::i;:::-;21677:139;;21575:248;;;:::o;21829:419::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22082:9;22076:4;22072:20;22068:1;22057:9;22053:17;22046:47;22110:131;22236:4;22110:131;:::i;:::-;22102:139;;22000:248;;;:::o;22254:419::-;22420:4;22458:2;22447:9;22443:18;22435:26;;22507:9;22501:4;22497:20;22493:1;22482:9;22478:17;22471:47;22535:131;22661:4;22535:131;:::i;:::-;22527:139;;22425:248;;;:::o;22679:419::-;22845:4;22883:2;22872:9;22868:18;22860:26;;22932:9;22926:4;22922:20;22918:1;22907:9;22903:17;22896:47;22960:131;23086:4;22960:131;:::i;:::-;22952:139;;22850:248;;;:::o;23104:419::-;23270:4;23308:2;23297:9;23293:18;23285:26;;23357:9;23351:4;23347:20;23343:1;23332:9;23328:17;23321:47;23385:131;23511:4;23385:131;:::i;:::-;23377:139;;23275:248;;;:::o;23529:419::-;23695:4;23733:2;23722:9;23718:18;23710:26;;23782:9;23776:4;23772:20;23768:1;23757:9;23753:17;23746:47;23810:131;23936:4;23810:131;:::i;:::-;23802:139;;23700:248;;;:::o;23954:419::-;24120:4;24158:2;24147:9;24143:18;24135:26;;24207:9;24201:4;24197:20;24193:1;24182:9;24178:17;24171:47;24235:131;24361:4;24235:131;:::i;:::-;24227:139;;24125:248;;;:::o;24379:419::-;24545:4;24583:2;24572:9;24568:18;24560:26;;24632:9;24626:4;24622:20;24618:1;24607:9;24603:17;24596:47;24660:131;24786:4;24660:131;:::i;:::-;24652:139;;24550:248;;;:::o;24804:419::-;24970:4;25008:2;24997:9;24993:18;24985:26;;25057:9;25051:4;25047:20;25043:1;25032:9;25028:17;25021:47;25085:131;25211:4;25085:131;:::i;:::-;25077:139;;24975:248;;;:::o;25229:419::-;25395:4;25433:2;25422:9;25418:18;25410:26;;25482:9;25476:4;25472:20;25468:1;25457:9;25453:17;25446:47;25510:131;25636:4;25510:131;:::i;:::-;25502:139;;25400:248;;;:::o;25654:419::-;25820:4;25858:2;25847:9;25843:18;25835:26;;25907:9;25901:4;25897:20;25893:1;25882:9;25878:17;25871:47;25935:131;26061:4;25935:131;:::i;:::-;25927:139;;25825:248;;;:::o;26079:419::-;26245:4;26283:2;26272:9;26268:18;26260:26;;26332:9;26326:4;26322:20;26318:1;26307:9;26303:17;26296:47;26360:131;26486:4;26360:131;:::i;:::-;26352:139;;26250:248;;;:::o;26504:419::-;26670:4;26708:2;26697:9;26693:18;26685:26;;26757:9;26751:4;26747:20;26743:1;26732:9;26728:17;26721:47;26785:131;26911:4;26785:131;:::i;:::-;26777:139;;26675:248;;;:::o;26929:419::-;27095:4;27133:2;27122:9;27118:18;27110:26;;27182:9;27176:4;27172:20;27168:1;27157:9;27153:17;27146:47;27210:131;27336:4;27210:131;:::i;:::-;27202:139;;27100:248;;;:::o;27354:419::-;27520:4;27558:2;27547:9;27543:18;27535:26;;27607:9;27601:4;27597:20;27593:1;27582:9;27578:17;27571:47;27635:131;27761:4;27635:131;:::i;:::-;27627:139;;27525:248;;;:::o;27779:419::-;27945:4;27983:2;27972:9;27968:18;27960:26;;28032:9;28026:4;28022:20;28018:1;28007:9;28003:17;27996:47;28060:131;28186:4;28060:131;:::i;:::-;28052:139;;27950:248;;;:::o;28204:419::-;28370:4;28408:2;28397:9;28393:18;28385:26;;28457:9;28451:4;28447:20;28443:1;28432:9;28428:17;28421:47;28485:131;28611:4;28485:131;:::i;:::-;28477:139;;28375:248;;;:::o;28629:419::-;28795:4;28833:2;28822:9;28818:18;28810:26;;28882:9;28876:4;28872:20;28868:1;28857:9;28853:17;28846:47;28910:131;29036:4;28910:131;:::i;:::-;28902:139;;28800:248;;;:::o;29054:419::-;29220:4;29258:2;29247:9;29243:18;29235:26;;29307:9;29301:4;29297:20;29293:1;29282:9;29278:17;29271:47;29335:131;29461:4;29335:131;:::i;:::-;29327:139;;29225:248;;;:::o;29479:419::-;29645:4;29683:2;29672:9;29668:18;29660:26;;29732:9;29726:4;29722:20;29718:1;29707:9;29703:17;29696:47;29760:131;29886:4;29760:131;:::i;:::-;29752:139;;29650:248;;;:::o;29904:419::-;30070:4;30108:2;30097:9;30093:18;30085:26;;30157:9;30151:4;30147:20;30143:1;30132:9;30128:17;30121:47;30185:131;30311:4;30185:131;:::i;:::-;30177:139;;30075:248;;;:::o;30329:419::-;30495:4;30533:2;30522:9;30518:18;30510:26;;30582:9;30576:4;30572:20;30568:1;30557:9;30553:17;30546:47;30610:131;30736:4;30610:131;:::i;:::-;30602:139;;30500:248;;;:::o;30754:419::-;30920:4;30958:2;30947:9;30943:18;30935:26;;31007:9;31001:4;30997:20;30993:1;30982:9;30978:17;30971:47;31035:131;31161:4;31035:131;:::i;:::-;31027:139;;30925:248;;;:::o;31179:419::-;31345:4;31383:2;31372:9;31368:18;31360:26;;31432:9;31426:4;31422:20;31418:1;31407:9;31403:17;31396:47;31460:131;31586:4;31460:131;:::i;:::-;31452:139;;31350:248;;;:::o;31604:222::-;31697:4;31735:2;31724:9;31720:18;31712:26;;31748:71;31816:1;31805:9;31801:17;31792:6;31748:71;:::i;:::-;31702:124;;;;:::o;31832:129::-;31866:6;31893:20;;:::i;:::-;31883:30;;31922:33;31950:4;31942:6;31922:33;:::i;:::-;31873:88;;;:::o;31967:75::-;32000:6;32033:2;32027:9;32017:19;;32007:35;:::o;32048:307::-;32109:4;32199:18;32191:6;32188:30;32185:2;;;32221:18;;:::i;:::-;32185:2;32259:29;32281:6;32259:29;:::i;:::-;32251:37;;32343:4;32337;32333:15;32325:23;;32114:241;;;:::o;32361:308::-;32423:4;32513:18;32505:6;32502:30;32499:2;;;32535:18;;:::i;:::-;32499:2;32573:29;32595:6;32573:29;:::i;:::-;32565:37;;32657:4;32651;32647:15;32639:23;;32428:241;;;:::o;32675:98::-;32726:6;32760:5;32754:12;32744:22;;32733:40;;;:::o;32779:99::-;32831:6;32865:5;32859:12;32849:22;;32838:40;;;:::o;32884:168::-;32967:11;33001:6;32996:3;32989:19;33041:4;33036:3;33032:14;33017:29;;32979:73;;;;:::o;33058:147::-;33159:11;33196:3;33181:18;;33171:34;;;;:::o;33211:169::-;33295:11;33329:6;33324:3;33317:19;33369:4;33364:3;33360:14;33345:29;;33307:73;;;;:::o;33386:148::-;33488:11;33525:3;33510:18;;33500:34;;;;:::o;33540:305::-;33580:3;33599:20;33617:1;33599:20;:::i;:::-;33594:25;;33633:20;33651:1;33633:20;:::i;:::-;33628:25;;33787:1;33719:66;33715:74;33712:1;33709:81;33706:2;;;33793:18;;:::i;:::-;33706:2;33837:1;33834;33830:9;33823:16;;33584:261;;;;:::o;33851:185::-;33891:1;33908:20;33926:1;33908:20;:::i;:::-;33903:25;;33942:20;33960:1;33942:20;:::i;:::-;33937:25;;33981:1;33971:2;;33986:18;;:::i;:::-;33971:2;34028:1;34025;34021:9;34016:14;;33893:143;;;;:::o;34042:348::-;34082:7;34105:20;34123:1;34105:20;:::i;:::-;34100:25;;34139:20;34157:1;34139:20;:::i;:::-;34134:25;;34327:1;34259:66;34255:74;34252:1;34249:81;34244:1;34237:9;34230:17;34226:105;34223:2;;;34334:18;;:::i;:::-;34223:2;34382:1;34379;34375:9;34364:20;;34090:300;;;;:::o;34396:191::-;34436:4;34456:20;34474:1;34456:20;:::i;:::-;34451:25;;34490:20;34508:1;34490:20;:::i;:::-;34485:25;;34529:1;34526;34523:8;34520:2;;;34534:18;;:::i;:::-;34520:2;34579:1;34576;34572:9;34564:17;;34441:146;;;;:::o;34593:96::-;34630:7;34659:24;34677:5;34659:24;:::i;:::-;34648:35;;34638:51;;;:::o;34695:104::-;34740:7;34769:24;34787:5;34769:24;:::i;:::-;34758:35;;34748:51;;;:::o;34805:90::-;34839:7;34882:5;34875:13;34868:21;34857:32;;34847:48;;;:::o;34901:77::-;34938:7;34967:5;34956:16;;34946:32;;;:::o;34984:149::-;35020:7;35060:66;35053:5;35049:78;35038:89;;35028:105;;;:::o;35139:126::-;35176:7;35216:42;35209:5;35205:54;35194:65;;35184:81;;;:::o;35271:77::-;35308:7;35337:5;35326:16;;35316:32;;;:::o;35354:154::-;35438:6;35433:3;35428;35415:30;35500:1;35491:6;35486:3;35482:16;35475:27;35405:103;;;:::o;35514:307::-;35582:1;35592:113;35606:6;35603:1;35600:13;35592:113;;;35691:1;35686:3;35682:11;35676:18;35672:1;35667:3;35663:11;35656:39;35628:2;35625:1;35621:10;35616:15;;35592:113;;;35723:6;35720:1;35717:13;35714:2;;;35803:1;35794:6;35789:3;35785:16;35778:27;35714:2;35563:258;;;;:::o;35827:320::-;35871:6;35908:1;35902:4;35898:12;35888:22;;35955:1;35949:4;35945:12;35976:18;35966:2;;36032:4;36024:6;36020:17;36010:27;;35966:2;36094;36086:6;36083:14;36063:18;36060:38;36057:2;;;36113:18;;:::i;:::-;36057:2;35878:269;;;;:::o;36153:281::-;36236:27;36258:4;36236:27;:::i;:::-;36228:6;36224:40;36366:6;36354:10;36351:22;36330:18;36318:10;36315:34;36312:62;36309:2;;;36377:18;;:::i;:::-;36309:2;36417:10;36413:2;36406:22;36196:238;;;:::o;36440:233::-;36479:3;36502:24;36520:5;36502:24;:::i;:::-;36493:33;;36548:66;36541:5;36538:77;36535:2;;;36618:18;;:::i;:::-;36535:2;36665:1;36658:5;36654:13;36647:20;;36483:190;;;:::o;36679:176::-;36711:1;36728:20;36746:1;36728:20;:::i;:::-;36723:25;;36762:20;36780:1;36762:20;:::i;:::-;36757:25;;36801:1;36791:2;;36806:18;;:::i;:::-;36791:2;36847:1;36844;36840:9;36835:14;;36713:142;;;;:::o;36861:180::-;36909:77;36906:1;36899:88;37006:4;37003:1;36996:15;37030:4;37027:1;37020:15;37047:180;37095:77;37092:1;37085:88;37192:4;37189:1;37182:15;37216:4;37213:1;37206:15;37233:180;37281:77;37278:1;37271:88;37378:4;37375:1;37368:15;37402:4;37399:1;37392:15;37419:180;37467:77;37464:1;37457:88;37564:4;37561:1;37554:15;37588:4;37585:1;37578:15;37605:102;37646:6;37697:2;37693:7;37688:2;37681:5;37677:14;37673:28;37663:38;;37653:54;;;:::o;37713:230::-;37853:34;37849:1;37841:6;37837:14;37830:58;37922:13;37917:2;37909:6;37905:15;37898:38;37819:124;:::o;37949:237::-;38089:34;38085:1;38077:6;38073:14;38066:58;38158:20;38153:2;38145:6;38141:15;38134:45;38055:131;:::o;38192:225::-;38332:34;38328:1;38320:6;38316:14;38309:58;38401:8;38396:2;38388:6;38384:15;38377:33;38298:119;:::o;38423:228::-;38563:34;38559:1;38551:6;38547:14;38540:58;38632:11;38627:2;38619:6;38615:15;38608:36;38529:122;:::o;38657:224::-;38797:34;38793:1;38785:6;38781:14;38774:58;38866:7;38861:2;38853:6;38849:15;38842:32;38763:118;:::o;38887:178::-;39027:30;39023:1;39015:6;39011:14;39004:54;38993:72;:::o;39071:223::-;39211:34;39207:1;39199:6;39195:14;39188:58;39280:6;39275:2;39267:6;39263:15;39256:31;39177:117;:::o;39300:175::-;39440:27;39436:1;39428:6;39424:14;39417:51;39406:69;:::o;39481:181::-;39621:33;39617:1;39609:6;39605:14;39598:57;39587:75;:::o;39668:245::-;39808:34;39804:1;39796:6;39792:14;39785:58;39877:28;39872:2;39864:6;39860:15;39853:53;39774:139;:::o;39919:179::-;40059:31;40055:1;40047:6;40043:14;40036:55;40025:73;:::o;40104:231::-;40244:34;40240:1;40232:6;40228:14;40221:58;40313:14;40308:2;40300:6;40296:15;40289:39;40210:125;:::o;40341:243::-;40481:34;40477:1;40469:6;40465:14;40458:58;40550:26;40545:2;40537:6;40533:15;40526:51;40447:137;:::o;40590:229::-;40730:34;40726:1;40718:6;40714:14;40707:58;40799:12;40794:2;40786:6;40782:15;40775:37;40696:123;:::o;40825:228::-;40965:34;40961:1;40953:6;40949:14;40942:58;41034:11;41029:2;41021:6;41017:15;41010:36;40931:122;:::o;41059:229::-;41199:34;41195:1;41187:6;41183:14;41176:58;41268:12;41263:2;41255:6;41251:15;41244:37;41165:123;:::o;41294:182::-;41434:34;41430:1;41422:6;41418:14;41411:58;41400:76;:::o;41482:231::-;41622:34;41618:1;41610:6;41606:14;41599:58;41691:14;41686:2;41678:6;41674:15;41667:39;41588:125;:::o;41719:182::-;41859:34;41855:1;41847:6;41843:14;41836:58;41825:76;:::o;41907:234::-;42047:34;42043:1;42035:6;42031:14;42024:58;42116:17;42111:2;42103:6;42099:15;42092:42;42013:128;:::o;42147:221::-;42287:34;42283:1;42275:6;42271:14;42264:58;42356:4;42351:2;42343:6;42339:15;42332:29;42253:115;:::o;42374:220::-;42514:34;42510:1;42502:6;42498:14;42491:58;42583:3;42578:2;42570:6;42566:15;42559:28;42480:114;:::o;42600:177::-;42740:29;42736:1;42728:6;42724:14;42717:53;42706:71;:::o;42783:114::-;42889:8;:::o;42903:236::-;43043:34;43039:1;43031:6;43027:14;43020:58;43112:19;43107:2;43099:6;43095:15;43088:44;43009:130;:::o;43145:231::-;43285:34;43281:1;43273:6;43269:14;43262:58;43354:14;43349:2;43341:6;43337:15;43330:39;43251:125;:::o;43382:122::-;43455:24;43473:5;43455:24;:::i;:::-;43448:5;43445:35;43435:2;;43494:1;43491;43484:12;43435:2;43425:79;:::o;43510:138::-;43591:32;43617:5;43591:32;:::i;:::-;43584:5;43581:43;43571:2;;43638:1;43635;43628:12;43571:2;43561:87;:::o;43654:116::-;43724:21;43739:5;43724:21;:::i;:::-;43717:5;43714:32;43704:2;;43760:1;43757;43750:12;43704:2;43694:76;:::o;43776:122::-;43849:24;43867:5;43849:24;:::i;:::-;43842:5;43839:35;43829:2;;43888:1;43885;43878:12;43829:2;43819:79;:::o;43904:120::-;43976:23;43993:5;43976:23;:::i;:::-;43969:5;43966:34;43956:2;;44014:1;44011;44004:12;43956:2;43946:78;:::o;44030:122::-;44103:24;44121:5;44103:24;:::i;:::-;44096:5;44093:35;44083:2;;44142:1;44139;44132:12;44083:2;44073:79;:::o
Swarm Source
ipfs://5e39b6411a8fb57cdb1058f783b166eeb52739d7321bef3be94603b08a3b19eb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.