ERC-721
Overview
Max Total Supply
2,420 MICE
Holders
574
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 MICELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MedicatedMice
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-15 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (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/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 1 (e.g. 1, 2, 3, 4..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal _nextTokenId; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _nextTokenId = 1; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _nextTokenId - 1; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index + 1; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i = 1; i <= numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr > 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < _nextTokenId && tokenId > 0; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _nextTokenId; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if _nextTokenId + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } _nextTokenId = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: MedicatedMice.sol /** * @title Medicated Mice Contract * @author Trippy (Discord: Trippy#1937) * @collection Medicated Mice (https://discord.gg/medicatedmice) * @notice This contract handles minting and whitelisting for Medicated Mice with the implementation of ERC721a. */ pragma solidity >=0.7.0 <0.9.0; contract MedicatedMice is ERC721A, Ownable { using Strings for uint256; using MerkleProof for bytes32[]; // STRINGS string public uriPrefix = "ipfs://QmYb7Jdtvpmywb9uEhpPowbsFPVYsdYUk7CqA2oSUpfuip/"; string public uriSuffix = ".json"; string public hiddenMetadataUri; // INTEGERS uint256 public cost = 0.04 ether; uint256 public miceListSupply = 210; uint256 public preSaleSupply = 2395; uint256 public maxSupply = 5000; uint256 public maxMintAmountPerTx = 5000; uint256 public maxNFTPerAddress = 4; // BOOLEAN bool public paused = true; bool public revealed = false; bool public miceListStage = true; bool public preSaleStage = false; // BYTES bytes32 public merkleRoot = 0xebdc3d2cd4d6853940756cca3a095a94c53fd7285fc0c01b17ec1ee39a302754; // MAPS mapping(address => uint256) public addressMintedBalance; constructor() ERC721A("Medicated Mice", "MICE") { setHiddenMetadataUri("ipfs://QmXoxUByEESqZicptzhp48fT9CwHi4jvBSD2wuKnf1ntU3/hidden.json"); } modifier mintCompliance(uint256 _mintAmount) { uint256 holderMintedCount = addressMintedBalance[msg.sender]; require(!paused, "Medicated Mice: The contract is paused!"); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Medicated Mice: Invalid mint amount!"); require(holderMintedCount + _mintAmount <= maxNFTPerAddress, "Medicated Mice: You have reached the MAX NFT per address limit!"); require(_mintAmount <= maxMintAmountPerTx, "Medicated Mice: Max You have reached the max amount per transaction!"); require(totalSupply() + _mintAmount <= maxSupply, "Medicated Mice: The Collection has sold out!"); _; } function mint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) { require(msg.value >= cost * _mintAmount, "Medicated Mice: You do not have sufficient funds to purchase!"); if (msg.sender != owner()) { if (miceListStage == true && isWhitelisted(_merkleProof)) { require(totalSupply() + _mintAmount <= miceListSupply, "Medicated Mice: The MiceList max supply has been reached!"); } else if (preSaleStage == true && isWhitelisted(_merkleProof)) { require(totalSupply() + _mintAmount <= preSaleSupply, "Medicated Mice: The PreSale max supply has been reached!"); } } _safeMint(msg.sender, _mintAmount); addressMintedBalance[msg.sender]++; } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setMiceListStage(bool _state) public onlyOwner { miceListStage = _state; } function setPreSaleStage(bool _state) public onlyOwner { preSaleStage = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxNFTPerLimit(uint256 _limit) public onlyOwner { maxNFTPerAddress = _limit; } function setMiceListStageSupply(uint256 _newSupply) public onlyOwner { miceListSupply = _newSupply; } function setPreSaleStageSupply(uint256 _newSupply) public onlyOwner { preSaleSupply = _newSupply; } function setMaxSupply(uint256 _newSupply) public onlyOwner { maxSupply = _newSupply; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _root) external onlyOwner { merkleRoot = _root; } function isValid(address _to, uint256 _tokenID, bytes32[] memory _proof) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(_to, _tokenID)); return _proof.verify(merkleRoot, leaf); } function isWhitelisted(bytes32[] calldata _merkleProof) public view returns (bool) { require( MerkleProof.verify( _merkleProof, merkleRoot, keccak256(abi.encodePacked(msg.sender)) ), 'Medicated Mice: Your Address is not whitelisted!' ); return true; } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNFTPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miceListStage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miceListSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStage","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxNFTPerLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setMiceListStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setMiceListStageSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPreSaleStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setPreSaleStageSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052604051806060016040528060368152602001620064ec603691396008908051906020019062000035929190620003e7565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000083929190620003e7565b50668e1bc9bf040000600b5560d2600c5561095b600d55611388600e55611388600f5560046010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506000601160036101000a81548160ff0219169083151502179055507febdc3d2cd4d6853940756cca3a095a94c53fd7285fc0c01b17ec1ee39a30275460001b6012553480156200014b57600080fd5b506040518060400160405280600e81526020017f4d6564696361746564204d6963650000000000000000000000000000000000008152506040518060400160405280600481526020017f4d494345000000000000000000000000000000000000000000000000000000008152508160019080519060200190620001d0929190620003e7565b508060029080519060200190620001e9929190620003e7565b506001600081905550505062000214620002086200024460201b60201c565b6200024c60201b60201c565b6200023e604051806080016040528060418152602001620064ab604191396200031260201b60201c565b6200057f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003226200024460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000348620003bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039890620004be565b60405180910390fd5b80600a9080519060200190620003b9929190620003e7565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003f590620004f1565b90600052602060002090601f01602090048101928262000419576000855562000465565b82601f106200043457805160ff191683800117855562000465565b8280016001018555821562000465579182015b828111156200046457825182559160200191906001019062000447565b5b50905062000474919062000478565b5090565b5b808211156200049357600081600090555060010162000479565b5090565b6000620004a6602083620004e0565b9150620004b38262000556565b602082019050919050565b60006020820190508181036000830152620004d98162000497565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200050a57607f821691505b6020821081141562000521576200052062000527565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615f1c806200058f6000396000f3fe6080604052600436106103355760003560e01c80636352211e116101ab578063a22cb465116100f7578063d5abeb0111610095578063e985e9c51161006f578063e985e9c514610c0b578063efbd73f414610c48578063f104b78314610c71578063f2fde38b14610c9a57610335565b8063d5abeb0114610b8e578063da080c7a14610bb9578063e0a8085314610be257610335565b8063b88d4fde116100d1578063b88d4fde14610ae1578063ba41b0c614610b0a578063c87b56dd14610b26578063cb48ff7214610b6357610335565b8063a22cb46514610a64578063a45ba8e714610a8d578063b071401b14610ab857610335565b80637ec4a659116101645780638da5cb5b1161013e5780638da5cb5b146109ba57806394354fd0146109e557806394da744f14610a1057806395d89b4114610a3957610335565b80637ec4a6591461093b578063837aea6c146109645780638a3a71b61461098f57610335565b80636352211e1461082f5780636f8b44b01461086c57806370a0823114610895578063715018a6146108d2578063776d4d51146108e95780637cb647591461091257610335565b80632f745c59116102855780634fdd43cb1161022357806358fcb8ca116101fd57806358fcb8ca146107735780635a6f3de7146107b05780635c975abb146107d957806362b99ad41461080457610335565b80634fdd43cb146106f4578063518302271461071d5780635503a0e81461074857610335565b806342842e0e1161025f57806342842e0e14610628578063438b63001461065157806344a0d68a1461068e5780634f6ccce7146106b757610335565b80632f745c59146105a957806330057554146105e65780633ccfd60b1461061157610335565b806316ba10e0116102f257806318cae269116102cc57806318cae269146104ed57806323b872dd1461052a5780632e055bcc146105535780632eb4a7ab1461057e57610335565b806316ba10e01461047057806316c38b3c1461049957806318160ddd146104c257610335565b806301ffc9a71461033a578063069824fb1461037757806306fdde03146103b4578063081812fc146103df578063095ea7b31461041c57806313faede614610445575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061441b565b610cc3565b60405161036e9190614ca9565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190614374565b610e0d565b6040516103ab9190614ca9565b60405180910390f35b3480156103c057600080fd5b506103c9610ecc565b6040516103d69190614cdf565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906144be565b610f5e565b6040516104139190614c20565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e91906142c5565b610fe3565b005b34801561045157600080fd5b5061045a6110fc565b6040516104679190615081565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190614475565b611102565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906143c1565b611198565b005b3480156104ce57600080fd5b506104d7611231565b6040516104e49190615081565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614142565b611247565b6040516105219190615081565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c91906141af565b61125f565b005b34801561055f57600080fd5b5061056861126f565b6040516105759190615081565b60405180910390f35b34801561058a57600080fd5b50610593611275565b6040516105a09190614cc4565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb91906142c5565b61127b565b6040516105dd9190615081565b60405180910390f35b3480156105f257600080fd5b506105fb611470565b6040516106089190614ca9565b60405180910390f35b34801561061d57600080fd5b50610626611483565b005b34801561063457600080fd5b5061064f600480360381019061064a91906141af565b61157f565b005b34801561065d57600080fd5b5061067860048036038101906106739190614142565b61159f565b6040516106859190614c87565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b091906144be565b6116aa565b005b3480156106c357600080fd5b506106de60048036038101906106d991906144be565b611730565b6040516106eb9190615081565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190614475565b61178f565b005b34801561072957600080fd5b50610732611825565b60405161073f9190614ca9565b60405180910390f35b34801561075457600080fd5b5061075d611838565b60405161076a9190614cdf565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614305565b6118c6565b6040516107a79190614ca9565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906144be565b611915565b005b3480156107e557600080fd5b506107ee61199b565b6040516107fb9190614ca9565b60405180910390f35b34801561081057600080fd5b506108196119ae565b6040516108269190614cdf565b60405180910390f35b34801561083b57600080fd5b50610856600480360381019061085191906144be565b611a3c565b6040516108639190614c20565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906144be565b611a52565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614142565b611ad8565b6040516108c99190615081565b60405180910390f35b3480156108de57600080fd5b506108e7611bc1565b005b3480156108f557600080fd5b50610910600480360381019061090b91906144be565b611c49565b005b34801561091e57600080fd5b50610939600480360381019061093491906143ee565b611ccf565b005b34801561094757600080fd5b50610962600480360381019061095d9190614475565b611d55565b005b34801561097057600080fd5b50610979611deb565b6040516109869190615081565b60405180910390f35b34801561099b57600080fd5b506109a4611df1565b6040516109b19190614ca9565b60405180910390f35b3480156109c657600080fd5b506109cf611e04565b6040516109dc9190614c20565b60405180910390f35b3480156109f157600080fd5b506109fa611e2e565b604051610a079190615081565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906144be565b611e34565b005b348015610a4557600080fd5b50610a4e611eba565b604051610a5b9190614cdf565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a869190614285565b611f4c565b005b348015610a9957600080fd5b50610aa26120cd565b604051610aaf9190614cdf565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada91906144be565b61215b565b005b348015610aed57600080fd5b50610b086004803603810190610b039190614202565b6121e1565b005b610b246004803603810190610b1f919061452b565b61223d565b005b348015610b3257600080fd5b50610b4d6004803603810190610b4891906144be565b612611565b604051610b5a9190614cdf565b60405180910390f35b348015610b6f57600080fd5b50610b7861276a565b604051610b859190615081565b60405180910390f35b348015610b9a57600080fd5b50610ba3612770565b604051610bb09190615081565b60405180910390f35b348015610bc557600080fd5b50610be06004803603810190610bdb91906143c1565b612776565b005b348015610bee57600080fd5b50610c096004803603810190610c0491906143c1565b61280f565b005b348015610c1757600080fd5b50610c326004803603810190610c2d919061416f565b6128a8565b604051610c3f9190614ca9565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a91906144eb565b61293c565b005b348015610c7d57600080fd5b50610c986004803603810190610c9391906143c1565b612b9a565b005b348015610ca657600080fd5b50610cc16004803603810190610cbc9190614142565b612c33565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610df657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e065750610e0582612d2b565b5b9050919050565b6000610e83838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060125433604051602001610e689190614b93565b60405160208183030381529060405280519060200120612d95565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614f21565b60405180910390fd5b6001905092915050565b606060018054610edb906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f07906153c0565b8015610f545780601f10610f2957610100808354040283529160200191610f54565b820191906000526020600020905b815481529060010190602001808311610f3757829003601f168201915b5050505050905090565b6000610f6982612dac565b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90615041565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fee82611a3c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614f41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661107e612dc5565b73ffffffffffffffffffffffffffffffffffffffff1614806110ad57506110ac816110a7612dc5565b6128a8565b5b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614e01565b60405180910390fd5b6110f7838383612dcd565b505050565b600b5481565b61110a612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611128611e04565b73ffffffffffffffffffffffffffffffffffffffff161461117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614e61565b60405180910390fd5b8060099080519060200190611194929190613e13565b5050565b6111a0612dc5565b73ffffffffffffffffffffffffffffffffffffffff166111be611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614e61565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600160005461124291906152cc565b905090565b60136020528060005260406000206000915090505481565b61126a838383612e7f565b505050565b600d5481565b60125481565b600061128683611ad8565b82106112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614d01565b60405180910390fd5b60006112d1611231565b90506000806000600190505b83811161142e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113ce57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611420578684141561141757819550505050505061146a565b83806001019450505b5080806001019150506112dd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614fc1565b60405180910390fd5b92915050565b601160029054906101000a900460ff1681565b61148b612dc5565b73ffffffffffffffffffffffffffffffffffffffff166114a9611e04565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690614e61565b60405180910390fd5b6000611509611e04565b73ffffffffffffffffffffffffffffffffffffffff164760405161152c90614c0b565b60006040518083038185875af1925050503d8060008114611569576040519150601f19603f3d011682016040523d82523d6000602084013e61156e565b606091505b505090508061157c57600080fd5b50565b61159a838383604051806020016040528060008152506121e1565b505050565b606060006115ac83611ad8565b905060008167ffffffffffffffff8111156115ca576115c9615587565b5b6040519080825280602002602001820160405280156115f85781602001602082028036833780820191505090505b50905060006001905060005b83811080156116155750600e548211155b1561169e57600061162583611a3c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168a578284838151811061166f5761166e615558565b5b602002602001018181525050818061168690615423565b9250505b828061169590615423565b93505050611604565b82945050505050919050565b6116b2612dc5565b73ffffffffffffffffffffffffffffffffffffffff166116d0611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614e61565b60405180910390fd5b80600b8190555050565b600061173a611231565b821061177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290614da1565b60405180910390fd5b60018261178891906151eb565b9050919050565b611797612dc5565b73ffffffffffffffffffffffffffffffffffffffff166117b5611e04565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614e61565b60405180910390fd5b80600a9080519060200190611821929190613e13565b5050565b601160019054906101000a900460ff1681565b60098054611845906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611871906153c0565b80156118be5780601f10611893576101008083540402835291602001916118be565b820191906000526020600020905b8154815290600101906020018083116118a157829003601f168201915b505050505081565b60008084846040516020016118dc929190614bae565b60405160208183030381529060405280519060200120905061190b6012548285612d959092919063ffffffff16565b9150509392505050565b61191d612dc5565b73ffffffffffffffffffffffffffffffffffffffff1661193b611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890614e61565b60405180910390fd5b80600c8190555050565b601160009054906101000a900460ff1681565b600880546119bb906153c0565b80601f01602080910402602001604051908101604052809291908181526020018280546119e7906153c0565b8015611a345780601f10611a0957610100808354040283529160200191611a34565b820191906000526020600020905b815481529060010190602001808311611a1757829003601f168201915b505050505081565b6000611a47826133bf565b600001519050919050565b611a5a612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611a78611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614e61565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4090614e21565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611bc9612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611be7611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614e61565b60405180910390fd5b611c47600061355a565b565b611c51612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611c6f611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90614e61565b60405180910390fd5b80600d8190555050565b611cd7612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611cf5611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4290614e61565b60405180910390fd5b8060128190555050565b611d5d612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611d7b611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890614e61565b60405180910390fd5b8060089080519060200190611de7929190613e13565b5050565b60105481565b601160039054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b611e3c612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611e5a611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea790614e61565b60405180910390fd5b8060108190555050565b606060028054611ec9906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef5906153c0565b8015611f425780601f10611f1757610100808354040283529160200191611f42565b820191906000526020600020905b815481529060010190602001808311611f2557829003601f168201915b5050505050905090565b611f54612dc5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990614ea1565b60405180910390fd5b8060066000611fcf612dc5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661207c612dc5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c19190614ca9565b60405180910390a35050565b600a80546120da906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054612106906153c0565b80156121535780601f1061212857610100808354040283529160200191612153565b820191906000526020600020905b81548152906001019060200180831161213657829003601f168201915b505050505081565b612163612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612181611e04565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce90614e61565b60405180910390fd5b80600f8190555050565b6121ec848484612e7f565b6121f884848484613620565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614f61565b60405180910390fd5b50505050565b826000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601160009054906101000a900460ff16156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614fe1565b60405180910390fd5b6000821180156122e45750600f548211155b612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614ee1565b60405180910390fd5b601054828261233291906151eb565b1115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614d21565b60405180910390fd5b600f548211156123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90614d41565b60405180910390fd5b600e54826123c4611231565b6123ce91906151eb565b111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690615001565b60405180910390fd5b84600b5461241d9190615272565b34101561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614f01565b60405180910390fd5b612467611e04565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ab5760011515601160029054906101000a900460ff1615151480156124c257506124c18484610e0d565b5b1561252357600c54856124d3611231565b6124dd91906151eb565b111561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614de1565b60405180910390fd5b6125aa565b60011515601160039054906101000a900460ff16151514801561254c575061254b8484610e0d565b5b156125a957600d548561255d611231565b61256791906151eb565b11156125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f90615061565b60405180910390fd5b5b5b5b6125b533866137b7565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061260590615423565b91905055505050505050565b606061261c82612dac565b61265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614e81565b60405180910390fd5b60001515601160019054906101000a900460ff161515141561270957600a8054612684906153c0565b80601f01602080910402602001604051908101604052809291908181526020018280546126b0906153c0565b80156126fd5780601f106126d2576101008083540402835291602001916126fd565b820191906000526020600020905b8154815290600101906020018083116126e057829003601f168201915b50505050509050612765565b60006127136137d5565b905060008151116127335760405180602001604052806000815250612761565b8061273d84613867565b600960405160200161275193929190614bda565b6040516020818303038152906040525b9150505b919050565b600c5481565b600e5481565b61277e612dc5565b73ffffffffffffffffffffffffffffffffffffffff1661279c611e04565b73ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614e61565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b612817612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612835611e04565b73ffffffffffffffffffffffffffffffffffffffff161461288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614e61565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601160009054906101000a900460ff16156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c890614fe1565b60405180910390fd5b6000821180156129e35750600f548211155b612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1990614ee1565b60405180910390fd5b6010548282612a3191906151eb565b1115612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614d21565b60405180910390fd5b600f54821115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614d41565b60405180910390fd5b600e5482612ac3611231565b612acd91906151eb565b1115612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590615001565b60405180910390fd5b612b16612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612b34611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614e61565b60405180910390fd5b612b9483856137b7565b50505050565b612ba2612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612bc0611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d90614e61565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b612c3b612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612c59611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614e61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614d61565b60405180910390fd5b612d288161355a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082612da285846139c8565b1490509392505050565b6000805482108015612dbe5750600082115b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612e8a826133bf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612eb1612dc5565b73ffffffffffffffffffffffffffffffffffffffff161480612f0d5750612ed6612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612ef584610f5e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f295750612f288260000151612f23612dc5565b6128a8565b5b905080612f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6290614ec1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614e41565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561304d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304490614dc1565b60405180910390fd5b61305a8585856001613a3d565b61306a6000848460000151612dcd565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561334f576132ae81612dac565b1561334e5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133b88585856001613a43565b5050505050565b6133c7613e99565b6133d082612dac565b61340f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340690614d81565b60405180910390fd5b60008290505b6000811115613519576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461350a578092505050613555565b50808060019003915050613415565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90615021565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006136418473ffffffffffffffffffffffffffffffffffffffff16613a49565b156137aa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261366a612dc5565b8786866040518563ffffffff1660e01b815260040161368c9493929190614c3b565b602060405180830381600087803b1580156136a657600080fd5b505af19250505080156136d757506040513d601f19601f820116820180604052508101906136d49190614448565b60015b61375a573d8060008114613707576040519150601f19603f3d011682016040523d82523d6000602084013e61370c565b606091505b50600081511415613752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374990614f61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137af565b600190505b949350505050565b6137d1828260405180602001604052806000815250613a6c565b5050565b6060600880546137e4906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054613810906153c0565b801561385d5780601f106138325761010080835404028352916020019161385d565b820191906000526020600020905b81548152906001019060200180831161384057829003601f168201915b5050505050905090565b606060008214156138af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139c3565b600082905060005b600082146138e15780806138ca90615423565b915050600a826138da9190615241565b91506138b7565b60008167ffffffffffffffff8111156138fd576138fc615587565b5b6040519080825280601f01601f19166020018201604052801561392f5781602001600182028036833780820191505090505b5090505b600085146139bc5760018261394891906152cc565b9150600a85613957919061549a565b603061396391906151eb565b60f81b81838151811061397957613978615558565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139b59190615241565b9450613933565b8093505050505b919050565b60008082905060005b8451811015613a325760008582815181106139ef576139ee615558565b5b60200260200101519050808311613a1157613a0a8382613a7e565b9250613a1e565b613a1b8184613a7e565b92505b508080613a2a90615423565b9150506139d1565b508091505092915050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613a798383836001613a95565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0290614f81565b60405180910390fd5b6000841415613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690614fa1565b60405180910390fd5b613b5c6000868387613a3d565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613df657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613de157613da16000888488613620565b613de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd790614f61565b60405180910390fd5b5b81806001019250508080600101915050613d2a565b508060008190555050613e0c6000868387613a43565b5050505050565b828054613e1f906153c0565b90600052602060002090601f016020900481019282613e415760008555613e88565b82601f10613e5a57805160ff1916838001178555613e88565b82800160010185558215613e88579182015b82811115613e87578251825591602001919060010190613e6c565b5b509050613e959190613ed3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613eec576000816000905550600101613ed4565b5090565b6000613f03613efe846150c1565b61509c565b90508083825260208201905082856020860282011115613f2657613f256155c0565b5b60005b85811015613f565781613f3c8882614092565b845260208401935060208301925050600181019050613f29565b5050509392505050565b6000613f73613f6e846150ed565b61509c565b905082815260208101848484011115613f8f57613f8e6155c5565b5b613f9a84828561537e565b509392505050565b6000613fb5613fb08461511e565b61509c565b905082815260208101848484011115613fd157613fd06155c5565b5b613fdc84828561537e565b509392505050565b600081359050613ff381615e73565b92915050565b60008083601f84011261400f5761400e6155bb565b5b8235905067ffffffffffffffff81111561402c5761402b6155b6565b5b602083019150836020820283011115614048576140476155c0565b5b9250929050565b600082601f830112614064576140636155bb565b5b8135614074848260208601613ef0565b91505092915050565b60008135905061408c81615e8a565b92915050565b6000813590506140a181615ea1565b92915050565b6000813590506140b681615eb8565b92915050565b6000815190506140cb81615eb8565b92915050565b600082601f8301126140e6576140e56155bb565b5b81356140f6848260208601613f60565b91505092915050565b600082601f830112614114576141136155bb565b5b8135614124848260208601613fa2565b91505092915050565b60008135905061413c81615ecf565b92915050565b600060208284031215614158576141576155cf565b5b600061416684828501613fe4565b91505092915050565b60008060408385031215614186576141856155cf565b5b600061419485828601613fe4565b92505060206141a585828601613fe4565b9150509250929050565b6000806000606084860312156141c8576141c76155cf565b5b60006141d686828701613fe4565b93505060206141e786828701613fe4565b92505060406141f88682870161412d565b9150509250925092565b6000806000806080858703121561421c5761421b6155cf565b5b600061422a87828801613fe4565b945050602061423b87828801613fe4565b935050604061424c8782880161412d565b925050606085013567ffffffffffffffff81111561426d5761426c6155ca565b5b614279878288016140d1565b91505092959194509250565b6000806040838503121561429c5761429b6155cf565b5b60006142aa85828601613fe4565b92505060206142bb8582860161407d565b9150509250929050565b600080604083850312156142dc576142db6155cf565b5b60006142ea85828601613fe4565b92505060206142fb8582860161412d565b9150509250929050565b60008060006060848603121561431e5761431d6155cf565b5b600061432c86828701613fe4565b935050602061433d8682870161412d565b925050604084013567ffffffffffffffff81111561435e5761435d6155ca565b5b61436a8682870161404f565b9150509250925092565b6000806020838503121561438b5761438a6155cf565b5b600083013567ffffffffffffffff8111156143a9576143a86155ca565b5b6143b585828601613ff9565b92509250509250929050565b6000602082840312156143d7576143d66155cf565b5b60006143e58482850161407d565b91505092915050565b600060208284031215614404576144036155cf565b5b600061441284828501614092565b91505092915050565b600060208284031215614431576144306155cf565b5b600061443f848285016140a7565b91505092915050565b60006020828403121561445e5761445d6155cf565b5b600061446c848285016140bc565b91505092915050565b60006020828403121561448b5761448a6155cf565b5b600082013567ffffffffffffffff8111156144a9576144a86155ca565b5b6144b5848285016140ff565b91505092915050565b6000602082840312156144d4576144d36155cf565b5b60006144e28482850161412d565b91505092915050565b60008060408385031215614502576145016155cf565b5b60006145108582860161412d565b925050602061452185828601613fe4565b9150509250929050565b600080600060408486031215614544576145436155cf565b5b60006145528682870161412d565b935050602084013567ffffffffffffffff811115614573576145726155ca565b5b61457f86828701613ff9565b92509250509250925092565b60006145978383614b5e565b60208301905092915050565b6145ac81615300565b82525050565b6145c36145be82615300565b61546c565b82525050565b60006145d482615174565b6145de81856151a2565b93506145e98361514f565b8060005b8381101561461a578151614601888261458b565b975061460c83615195565b9250506001810190506145ed565b5085935050505092915050565b61463081615312565b82525050565b61463f8161531e565b82525050565b60006146508261517f565b61465a81856151b3565b935061466a81856020860161538d565b614673816155d4565b840191505092915050565b60006146898261518a565b61469381856151cf565b93506146a381856020860161538d565b6146ac816155d4565b840191505092915050565b60006146c28261518a565b6146cc81856151e0565b93506146dc81856020860161538d565b80840191505092915050565b600081546146f5816153c0565b6146ff81866151e0565b9450600182166000811461471a576001811461472b5761475e565b60ff1983168652818601935061475e565b6147348561515f565b60005b8381101561475657815481890152600182019150602081019050614737565b838801955050505b50505092915050565b60006147746022836151cf565b915061477f826155f2565b604082019050919050565b6000614797603f836151cf565b91506147a282615641565b604082019050919050565b60006147ba6044836151cf565b91506147c582615690565b606082019050919050565b60006147dd6026836151cf565b91506147e882615705565b604082019050919050565b6000614800602a836151cf565b915061480b82615754565b604082019050919050565b60006148236023836151cf565b915061482e826157a3565b604082019050919050565b60006148466025836151cf565b9150614851826157f2565b604082019050919050565b60006148696039836151cf565b915061487482615841565b604082019050919050565b600061488c6039836151cf565b915061489782615890565b604082019050919050565b60006148af602b836151cf565b91506148ba826158df565b604082019050919050565b60006148d26026836151cf565b91506148dd8261592e565b604082019050919050565b60006148f56020836151cf565b91506149008261597d565b602082019050919050565b6000614918602f836151cf565b9150614923826159a6565b604082019050919050565b600061493b601a836151cf565b9150614946826159f5565b602082019050919050565b600061495e6032836151cf565b915061496982615a1e565b604082019050919050565b60006149816024836151cf565b915061498c82615a6d565b604082019050919050565b60006149a4603d836151cf565b91506149af82615abc565b604082019050919050565b60006149c76030836151cf565b91506149d282615b0b565b604082019050919050565b60006149ea6022836151cf565b91506149f582615b5a565b604082019050919050565b6000614a0d6000836151c4565b9150614a1882615ba9565b600082019050919050565b6000614a306033836151cf565b9150614a3b82615bac565b604082019050919050565b6000614a536021836151cf565b9150614a5e82615bfb565b604082019050919050565b6000614a766028836151cf565b9150614a8182615c4a565b604082019050919050565b6000614a99602e836151cf565b9150614aa482615c99565b604082019050919050565b6000614abc6027836151cf565b9150614ac782615ce8565b604082019050919050565b6000614adf602c836151cf565b9150614aea82615d37565b604082019050919050565b6000614b02602f836151cf565b9150614b0d82615d86565b604082019050919050565b6000614b25602d836151cf565b9150614b3082615dd5565b604082019050919050565b6000614b486038836151cf565b9150614b5382615e24565b604082019050919050565b614b6781615374565b82525050565b614b7681615374565b82525050565b614b8d614b8882615374565b615490565b82525050565b6000614b9f82846145b2565b60148201915081905092915050565b6000614bba82856145b2565b601482019150614bca8284614b7c565b6020820191508190509392505050565b6000614be682866146b7565b9150614bf282856146b7565b9150614bfe82846146e8565b9150819050949350505050565b6000614c1682614a00565b9150819050919050565b6000602082019050614c3560008301846145a3565b92915050565b6000608082019050614c5060008301876145a3565b614c5d60208301866145a3565b614c6a6040830185614b6d565b8181036060830152614c7c8184614645565b905095945050505050565b60006020820190508181036000830152614ca181846145c9565b905092915050565b6000602082019050614cbe6000830184614627565b92915050565b6000602082019050614cd96000830184614636565b92915050565b60006020820190508181036000830152614cf9818461467e565b905092915050565b60006020820190508181036000830152614d1a81614767565b9050919050565b60006020820190508181036000830152614d3a8161478a565b9050919050565b60006020820190508181036000830152614d5a816147ad565b9050919050565b60006020820190508181036000830152614d7a816147d0565b9050919050565b60006020820190508181036000830152614d9a816147f3565b9050919050565b60006020820190508181036000830152614dba81614816565b9050919050565b60006020820190508181036000830152614dda81614839565b9050919050565b60006020820190508181036000830152614dfa8161485c565b9050919050565b60006020820190508181036000830152614e1a8161487f565b9050919050565b60006020820190508181036000830152614e3a816148a2565b9050919050565b60006020820190508181036000830152614e5a816148c5565b9050919050565b60006020820190508181036000830152614e7a816148e8565b9050919050565b60006020820190508181036000830152614e9a8161490b565b9050919050565b60006020820190508181036000830152614eba8161492e565b9050919050565b60006020820190508181036000830152614eda81614951565b9050919050565b60006020820190508181036000830152614efa81614974565b9050919050565b60006020820190508181036000830152614f1a81614997565b9050919050565b60006020820190508181036000830152614f3a816149ba565b9050919050565b60006020820190508181036000830152614f5a816149dd565b9050919050565b60006020820190508181036000830152614f7a81614a23565b9050919050565b60006020820190508181036000830152614f9a81614a46565b9050919050565b60006020820190508181036000830152614fba81614a69565b9050919050565b60006020820190508181036000830152614fda81614a8c565b9050919050565b60006020820190508181036000830152614ffa81614aaf565b9050919050565b6000602082019050818103600083015261501a81614ad2565b9050919050565b6000602082019050818103600083015261503a81614af5565b9050919050565b6000602082019050818103600083015261505a81614b18565b9050919050565b6000602082019050818103600083015261507a81614b3b565b9050919050565b60006020820190506150966000830184614b6d565b92915050565b60006150a66150b7565b90506150b282826153f2565b919050565b6000604051905090565b600067ffffffffffffffff8211156150dc576150db615587565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561510857615107615587565b5b615111826155d4565b9050602081019050919050565b600067ffffffffffffffff82111561513957615138615587565b5b615142826155d4565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151f682615374565b915061520183615374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615236576152356154cb565b5b828201905092915050565b600061524c82615374565b915061525783615374565b925082615267576152666154fa565b5b828204905092915050565b600061527d82615374565b915061528883615374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152c1576152c06154cb565b5b828202905092915050565b60006152d782615374565b91506152e283615374565b9250828210156152f5576152f46154cb565b5b828203905092915050565b600061530b82615354565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156153ab578082015181840152602081019050615390565b838111156153ba576000848401525b50505050565b600060028204905060018216806153d857607f821691505b602082108114156153ec576153eb615529565b5b50919050565b6153fb826155d4565b810181811067ffffffffffffffff8211171561541a57615419615587565b5b80604052505050565b600061542e82615374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615461576154606154cb565b5b600182019050919050565b60006154778261547e565b9050919050565b6000615489826155e5565b9050919050565b6000819050919050565b60006154a582615374565b91506154b083615374565b9250826154c0576154bf6154fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20596f752068617665207265616368656460008201527f20746865204d4158204e4654207065722061646472657373206c696d69742100602082015250565b7f4d6564696361746564204d6963653a204d617820596f7520686176652072656160008201527f6368656420746865206d617820616d6f756e7420706572207472616e7361637460208201527f696f6e2100000000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20546865204d6963654c697374206d617860008201527f20737570706c7920686173206265656e20726561636865642100000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20496e76616c6964206d696e7420616d6f60008201527f756e742100000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20596f7520646f206e6f7420686176652060008201527f73756666696369656e742066756e647320746f20707572636861736521000000602082015250565b7f4d6564696361746564204d6963653a20596f757220416464726573732069732060008201527f6e6f742077686974656c69737465642100000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a2054686520636f6e74726163742069732060008201527f7061757365642100000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a2054686520436f6c6c656374696f6e206860008201527f617320736f6c64206f7574210000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a205468652050726553616c65206d61782060008201527f737570706c7920686173206265656e2072656163686564210000000000000000602082015250565b615e7c81615300565b8114615e8757600080fd5b50565b615e9381615312565b8114615e9e57600080fd5b50565b615eaa8161531e565b8114615eb557600080fd5b50565b615ec181615328565b8114615ecc57600080fd5b50565b615ed881615374565b8114615ee357600080fd5b5056fea26469706673582212207de2a3a2840eba3bd0e35f369f5faf3f8c93e12085ec6b26026a16ae4b00399d64736f6c63430008070033697066733a2f2f516d586f78554279454553715a696370747a6870343866543943774869346a764253443277754b6e66316e7455332f68696464656e2e6a736f6e697066733a2f2f516d5962374a647476706d7977623975456870506f77627346505659736459556b37437141326f535570667569702f
Deployed Bytecode
0x6080604052600436106103355760003560e01c80636352211e116101ab578063a22cb465116100f7578063d5abeb0111610095578063e985e9c51161006f578063e985e9c514610c0b578063efbd73f414610c48578063f104b78314610c71578063f2fde38b14610c9a57610335565b8063d5abeb0114610b8e578063da080c7a14610bb9578063e0a8085314610be257610335565b8063b88d4fde116100d1578063b88d4fde14610ae1578063ba41b0c614610b0a578063c87b56dd14610b26578063cb48ff7214610b6357610335565b8063a22cb46514610a64578063a45ba8e714610a8d578063b071401b14610ab857610335565b80637ec4a659116101645780638da5cb5b1161013e5780638da5cb5b146109ba57806394354fd0146109e557806394da744f14610a1057806395d89b4114610a3957610335565b80637ec4a6591461093b578063837aea6c146109645780638a3a71b61461098f57610335565b80636352211e1461082f5780636f8b44b01461086c57806370a0823114610895578063715018a6146108d2578063776d4d51146108e95780637cb647591461091257610335565b80632f745c59116102855780634fdd43cb1161022357806358fcb8ca116101fd57806358fcb8ca146107735780635a6f3de7146107b05780635c975abb146107d957806362b99ad41461080457610335565b80634fdd43cb146106f4578063518302271461071d5780635503a0e81461074857610335565b806342842e0e1161025f57806342842e0e14610628578063438b63001461065157806344a0d68a1461068e5780634f6ccce7146106b757610335565b80632f745c59146105a957806330057554146105e65780633ccfd60b1461061157610335565b806316ba10e0116102f257806318cae269116102cc57806318cae269146104ed57806323b872dd1461052a5780632e055bcc146105535780632eb4a7ab1461057e57610335565b806316ba10e01461047057806316c38b3c1461049957806318160ddd146104c257610335565b806301ffc9a71461033a578063069824fb1461037757806306fdde03146103b4578063081812fc146103df578063095ea7b31461041c57806313faede614610445575b600080fd5b34801561034657600080fd5b50610361600480360381019061035c919061441b565b610cc3565b60405161036e9190614ca9565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190614374565b610e0d565b6040516103ab9190614ca9565b60405180910390f35b3480156103c057600080fd5b506103c9610ecc565b6040516103d69190614cdf565b60405180910390f35b3480156103eb57600080fd5b50610406600480360381019061040191906144be565b610f5e565b6040516104139190614c20565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e91906142c5565b610fe3565b005b34801561045157600080fd5b5061045a6110fc565b6040516104679190615081565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190614475565b611102565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906143c1565b611198565b005b3480156104ce57600080fd5b506104d7611231565b6040516104e49190615081565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614142565b611247565b6040516105219190615081565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c91906141af565b61125f565b005b34801561055f57600080fd5b5061056861126f565b6040516105759190615081565b60405180910390f35b34801561058a57600080fd5b50610593611275565b6040516105a09190614cc4565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb91906142c5565b61127b565b6040516105dd9190615081565b60405180910390f35b3480156105f257600080fd5b506105fb611470565b6040516106089190614ca9565b60405180910390f35b34801561061d57600080fd5b50610626611483565b005b34801561063457600080fd5b5061064f600480360381019061064a91906141af565b61157f565b005b34801561065d57600080fd5b5061067860048036038101906106739190614142565b61159f565b6040516106859190614c87565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b091906144be565b6116aa565b005b3480156106c357600080fd5b506106de60048036038101906106d991906144be565b611730565b6040516106eb9190615081565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190614475565b61178f565b005b34801561072957600080fd5b50610732611825565b60405161073f9190614ca9565b60405180910390f35b34801561075457600080fd5b5061075d611838565b60405161076a9190614cdf565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190614305565b6118c6565b6040516107a79190614ca9565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d291906144be565b611915565b005b3480156107e557600080fd5b506107ee61199b565b6040516107fb9190614ca9565b60405180910390f35b34801561081057600080fd5b506108196119ae565b6040516108269190614cdf565b60405180910390f35b34801561083b57600080fd5b50610856600480360381019061085191906144be565b611a3c565b6040516108639190614c20565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906144be565b611a52565b005b3480156108a157600080fd5b506108bc60048036038101906108b79190614142565b611ad8565b6040516108c99190615081565b60405180910390f35b3480156108de57600080fd5b506108e7611bc1565b005b3480156108f557600080fd5b50610910600480360381019061090b91906144be565b611c49565b005b34801561091e57600080fd5b50610939600480360381019061093491906143ee565b611ccf565b005b34801561094757600080fd5b50610962600480360381019061095d9190614475565b611d55565b005b34801561097057600080fd5b50610979611deb565b6040516109869190615081565b60405180910390f35b34801561099b57600080fd5b506109a4611df1565b6040516109b19190614ca9565b60405180910390f35b3480156109c657600080fd5b506109cf611e04565b6040516109dc9190614c20565b60405180910390f35b3480156109f157600080fd5b506109fa611e2e565b604051610a079190615081565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906144be565b611e34565b005b348015610a4557600080fd5b50610a4e611eba565b604051610a5b9190614cdf565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a869190614285565b611f4c565b005b348015610a9957600080fd5b50610aa26120cd565b604051610aaf9190614cdf565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada91906144be565b61215b565b005b348015610aed57600080fd5b50610b086004803603810190610b039190614202565b6121e1565b005b610b246004803603810190610b1f919061452b565b61223d565b005b348015610b3257600080fd5b50610b4d6004803603810190610b4891906144be565b612611565b604051610b5a9190614cdf565b60405180910390f35b348015610b6f57600080fd5b50610b7861276a565b604051610b859190615081565b60405180910390f35b348015610b9a57600080fd5b50610ba3612770565b604051610bb09190615081565b60405180910390f35b348015610bc557600080fd5b50610be06004803603810190610bdb91906143c1565b612776565b005b348015610bee57600080fd5b50610c096004803603810190610c0491906143c1565b61280f565b005b348015610c1757600080fd5b50610c326004803603810190610c2d919061416f565b6128a8565b604051610c3f9190614ca9565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a91906144eb565b61293c565b005b348015610c7d57600080fd5b50610c986004803603810190610c9391906143c1565b612b9a565b005b348015610ca657600080fd5b50610cc16004803603810190610cbc9190614142565b612c33565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d8e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610df657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e065750610e0582612d2b565b5b9050919050565b6000610e83838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060125433604051602001610e689190614b93565b60405160208183030381529060405280519060200120612d95565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614f21565b60405180910390fd5b6001905092915050565b606060018054610edb906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f07906153c0565b8015610f545780601f10610f2957610100808354040283529160200191610f54565b820191906000526020600020905b815481529060010190602001808311610f3757829003601f168201915b5050505050905090565b6000610f6982612dac565b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90615041565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fee82611a3c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690614f41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661107e612dc5565b73ffffffffffffffffffffffffffffffffffffffff1614806110ad57506110ac816110a7612dc5565b6128a8565b5b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614e01565b60405180910390fd5b6110f7838383612dcd565b505050565b600b5481565b61110a612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611128611e04565b73ffffffffffffffffffffffffffffffffffffffff161461117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614e61565b60405180910390fd5b8060099080519060200190611194929190613e13565b5050565b6111a0612dc5565b73ffffffffffffffffffffffffffffffffffffffff166111be611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614e61565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000600160005461124291906152cc565b905090565b60136020528060005260406000206000915090505481565b61126a838383612e7f565b505050565b600d5481565b60125481565b600061128683611ad8565b82106112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614d01565b60405180910390fd5b60006112d1611231565b90506000806000600190505b83811161142e576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146113ce57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611420578684141561141757819550505050505061146a565b83806001019450505b5080806001019150506112dd565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614fc1565b60405180910390fd5b92915050565b601160029054906101000a900460ff1681565b61148b612dc5565b73ffffffffffffffffffffffffffffffffffffffff166114a9611e04565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690614e61565b60405180910390fd5b6000611509611e04565b73ffffffffffffffffffffffffffffffffffffffff164760405161152c90614c0b565b60006040518083038185875af1925050503d8060008114611569576040519150601f19603f3d011682016040523d82523d6000602084013e61156e565b606091505b505090508061157c57600080fd5b50565b61159a838383604051806020016040528060008152506121e1565b505050565b606060006115ac83611ad8565b905060008167ffffffffffffffff8111156115ca576115c9615587565b5b6040519080825280602002602001820160405280156115f85781602001602082028036833780820191505090505b50905060006001905060005b83811080156116155750600e548211155b1561169e57600061162583611a3c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168a578284838151811061166f5761166e615558565b5b602002602001018181525050818061168690615423565b9250505b828061169590615423565b93505050611604565b82945050505050919050565b6116b2612dc5565b73ffffffffffffffffffffffffffffffffffffffff166116d0611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90614e61565b60405180910390fd5b80600b8190555050565b600061173a611231565b821061177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290614da1565b60405180910390fd5b60018261178891906151eb565b9050919050565b611797612dc5565b73ffffffffffffffffffffffffffffffffffffffff166117b5611e04565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614e61565b60405180910390fd5b80600a9080519060200190611821929190613e13565b5050565b601160019054906101000a900460ff1681565b60098054611845906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611871906153c0565b80156118be5780601f10611893576101008083540402835291602001916118be565b820191906000526020600020905b8154815290600101906020018083116118a157829003601f168201915b505050505081565b60008084846040516020016118dc929190614bae565b60405160208183030381529060405280519060200120905061190b6012548285612d959092919063ffffffff16565b9150509392505050565b61191d612dc5565b73ffffffffffffffffffffffffffffffffffffffff1661193b611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198890614e61565b60405180910390fd5b80600c8190555050565b601160009054906101000a900460ff1681565b600880546119bb906153c0565b80601f01602080910402602001604051908101604052809291908181526020018280546119e7906153c0565b8015611a345780601f10611a0957610100808354040283529160200191611a34565b820191906000526020600020905b815481529060010190602001808311611a1757829003601f168201915b505050505081565b6000611a47826133bf565b600001519050919050565b611a5a612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611a78611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614e61565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4090614e21565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611bc9612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611be7611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614e61565b60405180910390fd5b611c47600061355a565b565b611c51612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611c6f611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90614e61565b60405180910390fd5b80600d8190555050565b611cd7612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611cf5611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4290614e61565b60405180910390fd5b8060128190555050565b611d5d612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611d7b611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc890614e61565b60405180910390fd5b8060089080519060200190611de7929190613e13565b5050565b60105481565b601160039054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b611e3c612dc5565b73ffffffffffffffffffffffffffffffffffffffff16611e5a611e04565b73ffffffffffffffffffffffffffffffffffffffff1614611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea790614e61565b60405180910390fd5b8060108190555050565b606060028054611ec9906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef5906153c0565b8015611f425780601f10611f1757610100808354040283529160200191611f42565b820191906000526020600020905b815481529060010190602001808311611f2557829003601f168201915b5050505050905090565b611f54612dc5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990614ea1565b60405180910390fd5b8060066000611fcf612dc5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661207c612dc5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c19190614ca9565b60405180910390a35050565b600a80546120da906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054612106906153c0565b80156121535780601f1061212857610100808354040283529160200191612153565b820191906000526020600020905b81548152906001019060200180831161213657829003601f168201915b505050505081565b612163612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612181611e04565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce90614e61565b60405180910390fd5b80600f8190555050565b6121ec848484612e7f565b6121f884848484613620565b612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614f61565b60405180910390fd5b50505050565b826000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601160009054906101000a900460ff16156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614fe1565b60405180910390fd5b6000821180156122e45750600f548211155b612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90614ee1565b60405180910390fd5b601054828261233291906151eb565b1115612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614d21565b60405180910390fd5b600f548211156123b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123af90614d41565b60405180910390fd5b600e54826123c4611231565b6123ce91906151eb565b111561240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690615001565b60405180910390fd5b84600b5461241d9190615272565b34101561245f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245690614f01565b60405180910390fd5b612467611e04565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125ab5760011515601160029054906101000a900460ff1615151480156124c257506124c18484610e0d565b5b1561252357600c54856124d3611231565b6124dd91906151eb565b111561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614de1565b60405180910390fd5b6125aa565b60011515601160039054906101000a900460ff16151514801561254c575061254b8484610e0d565b5b156125a957600d548561255d611231565b61256791906151eb565b11156125a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259f90615061565b60405180910390fd5b5b5b5b6125b533866137b7565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061260590615423565b91905055505050505050565b606061261c82612dac565b61265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290614e81565b60405180910390fd5b60001515601160019054906101000a900460ff161515141561270957600a8054612684906153c0565b80601f01602080910402602001604051908101604052809291908181526020018280546126b0906153c0565b80156126fd5780601f106126d2576101008083540402835291602001916126fd565b820191906000526020600020905b8154815290600101906020018083116126e057829003601f168201915b50505050509050612765565b60006127136137d5565b905060008151116127335760405180602001604052806000815250612761565b8061273d84613867565b600960405160200161275193929190614bda565b6040516020818303038152906040525b9150505b919050565b600c5481565b600e5481565b61277e612dc5565b73ffffffffffffffffffffffffffffffffffffffff1661279c611e04565b73ffffffffffffffffffffffffffffffffffffffff16146127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e990614e61565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b612817612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612835611e04565b73ffffffffffffffffffffffffffffffffffffffff161461288b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288290614e61565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601160009054906101000a900460ff16156129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c890614fe1565b60405180910390fd5b6000821180156129e35750600f548211155b612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1990614ee1565b60405180910390fd5b6010548282612a3191906151eb565b1115612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614d21565b60405180910390fd5b600f54821115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614d41565b60405180910390fd5b600e5482612ac3611231565b612acd91906151eb565b1115612b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0590615001565b60405180910390fd5b612b16612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612b34611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614e61565b60405180910390fd5b612b9483856137b7565b50505050565b612ba2612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612bc0611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d90614e61565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b612c3b612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612c59611e04565b73ffffffffffffffffffffffffffffffffffffffff1614612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614e61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614d61565b60405180910390fd5b612d288161355a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600082612da285846139c8565b1490509392505050565b6000805482108015612dbe5750600082115b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612e8a826133bf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612eb1612dc5565b73ffffffffffffffffffffffffffffffffffffffff161480612f0d5750612ed6612dc5565b73ffffffffffffffffffffffffffffffffffffffff16612ef584610f5e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f295750612f288260000151612f23612dc5565b6128a8565b5b905080612f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6290614ec1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614e41565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561304d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304490614dc1565b60405180910390fd5b61305a8585856001613a3d565b61306a6000848460000151612dcd565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561334f576132ae81612dac565b1561334e5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133b88585856001613a43565b5050505050565b6133c7613e99565b6133d082612dac565b61340f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340690614d81565b60405180910390fd5b60008290505b6000811115613519576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461350a578092505050613555565b50808060019003915050613415565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90615021565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006136418473ffffffffffffffffffffffffffffffffffffffff16613a49565b156137aa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261366a612dc5565b8786866040518563ffffffff1660e01b815260040161368c9493929190614c3b565b602060405180830381600087803b1580156136a657600080fd5b505af19250505080156136d757506040513d601f19601f820116820180604052508101906136d49190614448565b60015b61375a573d8060008114613707576040519150601f19603f3d011682016040523d82523d6000602084013e61370c565b606091505b50600081511415613752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161374990614f61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506137af565b600190505b949350505050565b6137d1828260405180602001604052806000815250613a6c565b5050565b6060600880546137e4906153c0565b80601f0160208091040260200160405190810160405280929190818152602001828054613810906153c0565b801561385d5780601f106138325761010080835404028352916020019161385d565b820191906000526020600020905b81548152906001019060200180831161384057829003601f168201915b5050505050905090565b606060008214156138af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506139c3565b600082905060005b600082146138e15780806138ca90615423565b915050600a826138da9190615241565b91506138b7565b60008167ffffffffffffffff8111156138fd576138fc615587565b5b6040519080825280601f01601f19166020018201604052801561392f5781602001600182028036833780820191505090505b5090505b600085146139bc5760018261394891906152cc565b9150600a85613957919061549a565b603061396391906151eb565b60f81b81838151811061397957613978615558565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856139b59190615241565b9450613933565b8093505050505b919050565b60008082905060005b8451811015613a325760008582815181106139ef576139ee615558565b5b60200260200101519050808311613a1157613a0a8382613a7e565b9250613a1e565b613a1b8184613a7e565b92505b508080613a2a90615423565b9150506139d1565b508091505092915050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b613a798383836001613a95565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0290614f81565b60405180910390fd5b6000841415613b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4690614fa1565b60405180910390fd5b613b5c6000868387613a3d565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613df657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613de157613da16000888488613620565b613de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd790614f61565b60405180910390fd5b5b81806001019250508080600101915050613d2a565b508060008190555050613e0c6000868387613a43565b5050505050565b828054613e1f906153c0565b90600052602060002090601f016020900481019282613e415760008555613e88565b82601f10613e5a57805160ff1916838001178555613e88565b82800160010185558215613e88579182015b82811115613e87578251825591602001919060010190613e6c565b5b509050613e959190613ed3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613eec576000816000905550600101613ed4565b5090565b6000613f03613efe846150c1565b61509c565b90508083825260208201905082856020860282011115613f2657613f256155c0565b5b60005b85811015613f565781613f3c8882614092565b845260208401935060208301925050600181019050613f29565b5050509392505050565b6000613f73613f6e846150ed565b61509c565b905082815260208101848484011115613f8f57613f8e6155c5565b5b613f9a84828561537e565b509392505050565b6000613fb5613fb08461511e565b61509c565b905082815260208101848484011115613fd157613fd06155c5565b5b613fdc84828561537e565b509392505050565b600081359050613ff381615e73565b92915050565b60008083601f84011261400f5761400e6155bb565b5b8235905067ffffffffffffffff81111561402c5761402b6155b6565b5b602083019150836020820283011115614048576140476155c0565b5b9250929050565b600082601f830112614064576140636155bb565b5b8135614074848260208601613ef0565b91505092915050565b60008135905061408c81615e8a565b92915050565b6000813590506140a181615ea1565b92915050565b6000813590506140b681615eb8565b92915050565b6000815190506140cb81615eb8565b92915050565b600082601f8301126140e6576140e56155bb565b5b81356140f6848260208601613f60565b91505092915050565b600082601f830112614114576141136155bb565b5b8135614124848260208601613fa2565b91505092915050565b60008135905061413c81615ecf565b92915050565b600060208284031215614158576141576155cf565b5b600061416684828501613fe4565b91505092915050565b60008060408385031215614186576141856155cf565b5b600061419485828601613fe4565b92505060206141a585828601613fe4565b9150509250929050565b6000806000606084860312156141c8576141c76155cf565b5b60006141d686828701613fe4565b93505060206141e786828701613fe4565b92505060406141f88682870161412d565b9150509250925092565b6000806000806080858703121561421c5761421b6155cf565b5b600061422a87828801613fe4565b945050602061423b87828801613fe4565b935050604061424c8782880161412d565b925050606085013567ffffffffffffffff81111561426d5761426c6155ca565b5b614279878288016140d1565b91505092959194509250565b6000806040838503121561429c5761429b6155cf565b5b60006142aa85828601613fe4565b92505060206142bb8582860161407d565b9150509250929050565b600080604083850312156142dc576142db6155cf565b5b60006142ea85828601613fe4565b92505060206142fb8582860161412d565b9150509250929050565b60008060006060848603121561431e5761431d6155cf565b5b600061432c86828701613fe4565b935050602061433d8682870161412d565b925050604084013567ffffffffffffffff81111561435e5761435d6155ca565b5b61436a8682870161404f565b9150509250925092565b6000806020838503121561438b5761438a6155cf565b5b600083013567ffffffffffffffff8111156143a9576143a86155ca565b5b6143b585828601613ff9565b92509250509250929050565b6000602082840312156143d7576143d66155cf565b5b60006143e58482850161407d565b91505092915050565b600060208284031215614404576144036155cf565b5b600061441284828501614092565b91505092915050565b600060208284031215614431576144306155cf565b5b600061443f848285016140a7565b91505092915050565b60006020828403121561445e5761445d6155cf565b5b600061446c848285016140bc565b91505092915050565b60006020828403121561448b5761448a6155cf565b5b600082013567ffffffffffffffff8111156144a9576144a86155ca565b5b6144b5848285016140ff565b91505092915050565b6000602082840312156144d4576144d36155cf565b5b60006144e28482850161412d565b91505092915050565b60008060408385031215614502576145016155cf565b5b60006145108582860161412d565b925050602061452185828601613fe4565b9150509250929050565b600080600060408486031215614544576145436155cf565b5b60006145528682870161412d565b935050602084013567ffffffffffffffff811115614573576145726155ca565b5b61457f86828701613ff9565b92509250509250925092565b60006145978383614b5e565b60208301905092915050565b6145ac81615300565b82525050565b6145c36145be82615300565b61546c565b82525050565b60006145d482615174565b6145de81856151a2565b93506145e98361514f565b8060005b8381101561461a578151614601888261458b565b975061460c83615195565b9250506001810190506145ed565b5085935050505092915050565b61463081615312565b82525050565b61463f8161531e565b82525050565b60006146508261517f565b61465a81856151b3565b935061466a81856020860161538d565b614673816155d4565b840191505092915050565b60006146898261518a565b61469381856151cf565b93506146a381856020860161538d565b6146ac816155d4565b840191505092915050565b60006146c28261518a565b6146cc81856151e0565b93506146dc81856020860161538d565b80840191505092915050565b600081546146f5816153c0565b6146ff81866151e0565b9450600182166000811461471a576001811461472b5761475e565b60ff1983168652818601935061475e565b6147348561515f565b60005b8381101561475657815481890152600182019150602081019050614737565b838801955050505b50505092915050565b60006147746022836151cf565b915061477f826155f2565b604082019050919050565b6000614797603f836151cf565b91506147a282615641565b604082019050919050565b60006147ba6044836151cf565b91506147c582615690565b606082019050919050565b60006147dd6026836151cf565b91506147e882615705565b604082019050919050565b6000614800602a836151cf565b915061480b82615754565b604082019050919050565b60006148236023836151cf565b915061482e826157a3565b604082019050919050565b60006148466025836151cf565b9150614851826157f2565b604082019050919050565b60006148696039836151cf565b915061487482615841565b604082019050919050565b600061488c6039836151cf565b915061489782615890565b604082019050919050565b60006148af602b836151cf565b91506148ba826158df565b604082019050919050565b60006148d26026836151cf565b91506148dd8261592e565b604082019050919050565b60006148f56020836151cf565b91506149008261597d565b602082019050919050565b6000614918602f836151cf565b9150614923826159a6565b604082019050919050565b600061493b601a836151cf565b9150614946826159f5565b602082019050919050565b600061495e6032836151cf565b915061496982615a1e565b604082019050919050565b60006149816024836151cf565b915061498c82615a6d565b604082019050919050565b60006149a4603d836151cf565b91506149af82615abc565b604082019050919050565b60006149c76030836151cf565b91506149d282615b0b565b604082019050919050565b60006149ea6022836151cf565b91506149f582615b5a565b604082019050919050565b6000614a0d6000836151c4565b9150614a1882615ba9565b600082019050919050565b6000614a306033836151cf565b9150614a3b82615bac565b604082019050919050565b6000614a536021836151cf565b9150614a5e82615bfb565b604082019050919050565b6000614a766028836151cf565b9150614a8182615c4a565b604082019050919050565b6000614a99602e836151cf565b9150614aa482615c99565b604082019050919050565b6000614abc6027836151cf565b9150614ac782615ce8565b604082019050919050565b6000614adf602c836151cf565b9150614aea82615d37565b604082019050919050565b6000614b02602f836151cf565b9150614b0d82615d86565b604082019050919050565b6000614b25602d836151cf565b9150614b3082615dd5565b604082019050919050565b6000614b486038836151cf565b9150614b5382615e24565b604082019050919050565b614b6781615374565b82525050565b614b7681615374565b82525050565b614b8d614b8882615374565b615490565b82525050565b6000614b9f82846145b2565b60148201915081905092915050565b6000614bba82856145b2565b601482019150614bca8284614b7c565b6020820191508190509392505050565b6000614be682866146b7565b9150614bf282856146b7565b9150614bfe82846146e8565b9150819050949350505050565b6000614c1682614a00565b9150819050919050565b6000602082019050614c3560008301846145a3565b92915050565b6000608082019050614c5060008301876145a3565b614c5d60208301866145a3565b614c6a6040830185614b6d565b8181036060830152614c7c8184614645565b905095945050505050565b60006020820190508181036000830152614ca181846145c9565b905092915050565b6000602082019050614cbe6000830184614627565b92915050565b6000602082019050614cd96000830184614636565b92915050565b60006020820190508181036000830152614cf9818461467e565b905092915050565b60006020820190508181036000830152614d1a81614767565b9050919050565b60006020820190508181036000830152614d3a8161478a565b9050919050565b60006020820190508181036000830152614d5a816147ad565b9050919050565b60006020820190508181036000830152614d7a816147d0565b9050919050565b60006020820190508181036000830152614d9a816147f3565b9050919050565b60006020820190508181036000830152614dba81614816565b9050919050565b60006020820190508181036000830152614dda81614839565b9050919050565b60006020820190508181036000830152614dfa8161485c565b9050919050565b60006020820190508181036000830152614e1a8161487f565b9050919050565b60006020820190508181036000830152614e3a816148a2565b9050919050565b60006020820190508181036000830152614e5a816148c5565b9050919050565b60006020820190508181036000830152614e7a816148e8565b9050919050565b60006020820190508181036000830152614e9a8161490b565b9050919050565b60006020820190508181036000830152614eba8161492e565b9050919050565b60006020820190508181036000830152614eda81614951565b9050919050565b60006020820190508181036000830152614efa81614974565b9050919050565b60006020820190508181036000830152614f1a81614997565b9050919050565b60006020820190508181036000830152614f3a816149ba565b9050919050565b60006020820190508181036000830152614f5a816149dd565b9050919050565b60006020820190508181036000830152614f7a81614a23565b9050919050565b60006020820190508181036000830152614f9a81614a46565b9050919050565b60006020820190508181036000830152614fba81614a69565b9050919050565b60006020820190508181036000830152614fda81614a8c565b9050919050565b60006020820190508181036000830152614ffa81614aaf565b9050919050565b6000602082019050818103600083015261501a81614ad2565b9050919050565b6000602082019050818103600083015261503a81614af5565b9050919050565b6000602082019050818103600083015261505a81614b18565b9050919050565b6000602082019050818103600083015261507a81614b3b565b9050919050565b60006020820190506150966000830184614b6d565b92915050565b60006150a66150b7565b90506150b282826153f2565b919050565b6000604051905090565b600067ffffffffffffffff8211156150dc576150db615587565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561510857615107615587565b5b615111826155d4565b9050602081019050919050565b600067ffffffffffffffff82111561513957615138615587565b5b615142826155d4565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006151f682615374565b915061520183615374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615236576152356154cb565b5b828201905092915050565b600061524c82615374565b915061525783615374565b925082615267576152666154fa565b5b828204905092915050565b600061527d82615374565b915061528883615374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152c1576152c06154cb565b5b828202905092915050565b60006152d782615374565b91506152e283615374565b9250828210156152f5576152f46154cb565b5b828203905092915050565b600061530b82615354565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156153ab578082015181840152602081019050615390565b838111156153ba576000848401525b50505050565b600060028204905060018216806153d857607f821691505b602082108114156153ec576153eb615529565b5b50919050565b6153fb826155d4565b810181811067ffffffffffffffff8211171561541a57615419615587565b5b80604052505050565b600061542e82615374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615461576154606154cb565b5b600182019050919050565b60006154778261547e565b9050919050565b6000615489826155e5565b9050919050565b6000819050919050565b60006154a582615374565b91506154b083615374565b9250826154c0576154bf6154fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20596f752068617665207265616368656460008201527f20746865204d4158204e4654207065722061646472657373206c696d69742100602082015250565b7f4d6564696361746564204d6963653a204d617820596f7520686176652072656160008201527f6368656420746865206d617820616d6f756e7420706572207472616e7361637460208201527f696f6e2100000000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20546865204d6963654c697374206d617860008201527f20737570706c7920686173206265656e20726561636865642100000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20496e76616c6964206d696e7420616d6f60008201527f756e742100000000000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a20596f7520646f206e6f7420686176652060008201527f73756666696369656e742066756e647320746f20707572636861736521000000602082015250565b7f4d6564696361746564204d6963653a20596f757220416464726573732069732060008201527f6e6f742077686974656c69737465642100000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a2054686520636f6e74726163742069732060008201527f7061757365642100000000000000000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a2054686520436f6c6c656374696f6e206860008201527f617320736f6c64206f7574210000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f4d6564696361746564204d6963653a205468652050726553616c65206d61782060008201527f737570706c7920686173206265656e2072656163686564210000000000000000602082015250565b615e7c81615300565b8114615e8757600080fd5b50565b615e9381615312565b8114615e9e57600080fd5b50565b615eaa8161531e565b8114615eb557600080fd5b50565b615ec181615328565b8114615ecc57600080fd5b50565b615ed881615374565b8114615ee357600080fd5b5056fea26469706673582212207de2a3a2840eba3bd0e35f369f5faf3f8c93e12085ec6b26026a16ae4b00399d64736f6c63430008070033
Deployed Bytecode Sourcemap
44737:6124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31255:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50228:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33140:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34702:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34223:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45049:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49722:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49828:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29499:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45566:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35578:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45126:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45454:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30171:1012;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45366:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50719:137;;;;;;;;;;;;;:::i;:::-;;35811:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47408:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48830:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29680:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49478:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45333:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44956:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50005:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49014:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45303:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44869:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32949:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49242:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31691:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8617:103;;;;;;;;;;;;;:::i;:::-;;49129:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49911:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49616:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45247:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45403:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7966:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45202:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48910:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33309:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34988:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44994:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49342:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36059:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46453:786;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48049:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45086:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45166:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48636:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48549:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35347:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47247:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48735:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8875:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31255:372;31357:4;31409:25;31394:40;;;:11;:40;;;;:105;;;;31466:33;31451:48;;;:11;:48;;;;31394:105;:172;;;;31531:35;31516:50;;;:11;:50;;;;31394:172;:225;;;;31583:36;31607:11;31583:23;:36::i;:::-;31394:225;31374:245;;31255:372;;;:::o;50228:375::-;50305:4;50344:151;50381:12;;50344:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50412:10;;50468;50451:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;50441:39;;;;;;50344:18;:151::i;:::-;50322:249;;;;;;;;;;;;:::i;:::-;;;;;;;;;50591:4;50584:11;;50228:375;;;;:::o;33140:100::-;33194:13;33227:5;33220:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33140:100;:::o;34702:214::-;34770:7;34798:16;34806:7;34798;:16::i;:::-;34790:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34884:15;:24;34900:7;34884:24;;;;;;;;;;;;;;;;;;;;;34877:31;;34702:214;;;:::o;34223:413::-;34296:13;34312:24;34328:7;34312:15;:24::i;:::-;34296:40;;34361:5;34355:11;;:2;:11;;;;34347:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34456:5;34440:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34465:37;34482:5;34489:12;:10;:12::i;:::-;34465:16;:37::i;:::-;34440:62;34418:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34600:28;34609:2;34613:7;34622:5;34600:8;:28::i;:::-;34285:351;34223:413;;:::o;45049:32::-;;;;:::o;49722:100::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49806:10:::1;49794:9;:22;;;;;;;;;;;;:::i;:::-;;49722:100:::0;:::o;49828:77::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49893:6:::1;49884;;:15;;;;;;;;;;;;;;;;;;49828:77:::0;:::o;29499:104::-;29552:7;29594:1;29579:12;;:16;;;;:::i;:::-;29572:23;;29499:104;:::o;45566:55::-;;;;;;;;;;;;;;;;;:::o;35578:162::-;35704:28;35714:4;35720:2;35724:7;35704:9;:28::i;:::-;35578:162;;;:::o;45126:35::-;;;;:::o;45454:94::-;;;;:::o;30171:1012::-;30260:7;30296:16;30306:5;30296:9;:16::i;:::-;30288:5;:24;30280:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30362:22;30387:13;:11;:13::i;:::-;30362:38;;30411:19;30441:25;30630:9;30642:1;30630:13;;30625:471;30650:14;30645:1;:19;30625:471;;30690:31;30724:11;:14;30736:1;30724:14;;;;;;;;;;;30690:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30787:1;30761:28;;:9;:14;;;:28;;;30757:111;;30834:9;:14;;;30814:34;;30757:111;30911:5;30890:26;;:17;:26;;;30886:195;;;30960:5;30945:11;:20;30941:85;;;31001:1;30994:8;;;;;;;;;30941:85;31048:13;;;;;;;30886:195;30671:425;30666:3;;;;;;;30625:471;;;;31119:56;;;;;;;;;;:::i;:::-;;;;;;;;30171:1012;;;;;:::o;45366:32::-;;;;;;;;;;;;;:::o;50719:137::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50764:7:::1;50785;:5;:7::i;:::-;50777:21;;50806;50777:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50763:69;;;50847:2;50839:11;;;::::0;::::1;;50756:100;50719:137::o:0;35811:177::-;35941:39;35958:4;35964:2;35968:7;35941:39;;;;;;;;;;;;:16;:39::i;:::-;35811:177;;;:::o;47408:635::-;47483:16;47511:23;47537:17;47547:6;47537:9;:17::i;:::-;47511:43;;47561:30;47608:15;47594:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47561:63;;47631:22;47656:1;47631:26;;47664:23;47700:309;47725:15;47707;:33;:64;;;;;47762:9;;47744:14;:27;;47707:64;47700:309;;;47782:25;47810:23;47818:14;47810:7;:23::i;:::-;47782:51;;47869:6;47848:27;;:17;:27;;;47844:131;;;47921:14;47888:13;47902:15;47888:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;47948:17;;;;;:::i;:::-;;;;47844:131;47985:16;;;;;:::i;:::-;;;;47773:236;47700:309;;;48024:13;48017:20;;;;;;47408:635;;;:::o;48830:74::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48893:5:::1;48886:4;:12;;;;48830:74:::0;:::o;29680:191::-;29747:7;29783:13;:11;:13::i;:::-;29775:5;:21;29767:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29862:1;29854:5;:9;;;;:::i;:::-;29847:16;;29680:191;;;:::o;49478:132::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49586:18:::1;49566:17;:38;;;;;;;;;;;;:::i;:::-;;49478:132:::0;:::o;45333:28::-;;;;;;;;;;;;;:::o;44956:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50005:217::-;50099:4;50112:12;50154:3;50159:8;50137:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50127:42;;;;;;50112:57;;50185:31;50199:10;;50211:4;50185:6;:13;;:31;;;;;:::i;:::-;50178:38;;;50005:217;;;;;:::o;49014:109::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49107:10:::1;49090:14;:27;;;;49014:109:::0;:::o;45303:25::-;;;;;;;;;;;;;:::o;44869:82::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32949:124::-;33013:7;33040:20;33052:7;33040:11;:20::i;:::-;:25;;;33033:32;;32949:124;;;:::o;49242:94::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49320:10:::1;49308:9;:22;;;;49242:94:::0;:::o;31691:221::-;31755:7;31800:1;31783:19;;:5;:19;;;;31775:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31876:12;:19;31889:5;31876:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31868:36;;31861:43;;31691:221;;;:::o;8617:103::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8682:30:::1;8709:1;8682:18;:30::i;:::-;8617:103::o:0;49129:107::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49220:10:::1;49204:13;:26;;;;49129:107:::0;:::o;49911:88::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49988:5:::1;49975:10;:18;;;;49911:88:::0;:::o;49616:100::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49700:10:::1;49688:9;:22;;;;;;;;;;;;:::i;:::-;;49616:100:::0;:::o;45247:35::-;;;;:::o;45403:32::-;;;;;;;;;;;;;:::o;7966:87::-;8012:7;8039:6;;;;;;;;;;;8032:13;;7966:87;:::o;45202:40::-;;;;:::o;48910:98::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48996:6:::1;48977:16;:25;;;;48910:98:::0;:::o;33309:104::-;33365:13;33398:7;33391:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33309:104;:::o;34988:288::-;35095:12;:10;:12::i;:::-;35083:24;;:8;:24;;;;35075:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35196:8;35151:18;:32;35170:12;:10;:12::i;:::-;35151:32;;;;;;;;;;;;;;;:42;35184:8;35151:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35249:8;35220:48;;35235:12;:10;:12::i;:::-;35220:48;;;35259:8;35220:48;;;;;;:::i;:::-;;;;;;;;34988:288;;:::o;44994:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49342:130::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49447:19:::1;49426:18;:40;;;;49342:130:::0;:::o;36059:355::-;36218:28;36228:4;36234:2;36238:7;36218:9;:28::i;:::-;36279:48;36302:4;36308:2;36312:7;36321:5;36279:22;:48::i;:::-;36257:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;36059:355;;;;:::o;46453:786::-;46551:11;45838:25;45866:20;:32;45887:10;45866:32;;;;;;;;;;;;;;;;45838:60;;45916:6;;;;;;;;;;;45915:7;45907:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45995:1;45981:11;:15;:52;;;;;46015:18;;46000:11;:33;;45981:52;45973:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;46124:16;;46109:11;46089:17;:31;;;;:::i;:::-;:51;;46081:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;46238:18;;46223:11;:33;;46215:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46375:9;;46360:11;46344:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;46336:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46599:11:::1;46592:4;;:18;;;;:::i;:::-;46579:9;:31;;46571:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;46703:7;:5;:7::i;:::-;46689:21;;:10;:21;;;46685:461;;46744:4;46727:21;;:13;;;;;;;;;;;:21;;;:52;;;;;46752:27;46766:12;;46752:13;:27::i;:::-;46727:52;46723:414;;;46835:14;;46820:11;46804:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:45;;46796:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;46723:414;;;46957:4;46941:20;;:12;;;;;;;;;;;:20;;;:52;;;;;46966:27;46980:12;;46966:13;:27::i;:::-;46941:52;46937:200;;;47049:13;;47034:11;47018:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:44;;47010:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46937:200;46723:414;46685:461;47155:34;47165:10;47177:11;47155:9;:34::i;:::-;47197:20;:32;47218:10;47197:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;45831:616:::0;46453:786;;;;:::o;48049:494::-;48148:13;48189:17;48197:8;48189:7;:17::i;:::-;48173:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;48296:5;48284:17;;:8;;;;;;;;;;;:17;;;48280:64;;;48319:17;48312:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48280:64;48352:28;48383:10;:8;:10::i;:::-;48352:41;;48438:1;48413:14;48407:28;:32;:130;;;;;;;;;;;;;;;;;48475:14;48491:19;:8;:17;:19::i;:::-;48512:9;48458:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48407:130;48400:137;;;48049:494;;;;:::o;45086:35::-;;;;:::o;45166:31::-;;;;:::o;48636:91::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48715:6:::1;48699:13;;:22;;;;;;;;;;;;;;;;;;48636:91:::0;:::o;48549:81::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48618:6:::1;48607:8;;:17;;;;;;;;;;;;;;;;;;48549:81:::0;:::o;35347:164::-;35444:4;35468:18;:25;35487:5;35468:25;;;;;;;;;;;;;;;:35;35494:8;35468:35;;;;;;;;;;;;;;;;;;;;;;;;;35461:42;;35347:164;;;;:::o;47247:155::-;47333:11;45838:25;45866:20;:32;45887:10;45866:32;;;;;;;;;;;;;;;;45838:60;;45916:6;;;;;;;;;;;45915:7;45907:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45995:1;45981:11;:15;:52;;;;;46015:18;;46000:11;:33;;45981:52;45973:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;46124:16;;46109:11;46089:17;:31;;;;:::i;:::-;:51;;46081:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;46238:18;;46223:11;:33;;46215:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46375:9;;46360:11;46344:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;46336:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;8197:12:::1;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47363:33:::2;47373:9;47384:11;47363:9;:33::i;:::-;45831:616:::0;47247:155;;;:::o;48735:89::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48812:6:::1;48797:12;;:21;;;;;;;;;;;;;;;;;;48735:89:::0;:::o;8875:201::-;8197:12;:10;:12::i;:::-;8186:23;;:7;:5;:7::i;:::-;:23;;;8178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8984:1:::1;8964:22;;:8;:22;;;;8956:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9040:28;9059:8;9040:18;:28::i;:::-;8875:201:::0;:::o;20750:157::-;20835:4;20874:25;20859:40;;;:11;:40;;;;20852:47;;20750:157;;;:::o;956:190::-;1081:4;1134;1105:25;1118:5;1125:4;1105:12;:25::i;:::-;:33;1098:40;;956:190;;;;;:::o;36669:126::-;36726:4;36760:12;;36750:7;:22;:37;;;;;36786:1;36776:7;:11;36750:37;36743:44;;36669:126;;;:::o;6690:98::-;6743:7;6770:10;6763:17;;6690:98;:::o;41604:196::-;41746:2;41719:15;:24;41735:7;41719:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41784:7;41780:2;41764:28;;41773:5;41764:28;;;;;;;;;;;;41604:196;;;:::o;39484:2002::-;39599:35;39637:20;39649:7;39637:11;:20::i;:::-;39599:58;;39670:22;39712:13;:18;;;39696:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;39771:12;:10;:12::i;:::-;39747:36;;:20;39759:7;39747:11;:20::i;:::-;:36;;;39696:87;:154;;;;39800:50;39817:13;:18;;;39837:12;:10;:12::i;:::-;39800:16;:50::i;:::-;39696:154;39670:181;;39872:17;39864:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39987:4;39965:26;;:13;:18;;;:26;;;39957:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40067:1;40053:16;;:2;:16;;;;40045:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40124:43;40146:4;40152:2;40156:7;40165:1;40124:21;:43::i;:::-;40232:49;40249:1;40253:7;40262:13;:18;;;40232:8;:49::i;:::-;40607:1;40577:12;:18;40590:4;40577:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40651:1;40623:12;:16;40636:2;40623:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40697:2;40669:11;:20;40681:7;40669:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;40759:15;40714:11;:20;40726:7;40714:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;41027:19;41059:1;41049:7;:11;41027:33;;41120:1;41079:43;;:11;:24;41091:11;41079:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;41075:295;;;41147:20;41155:11;41147:7;:20::i;:::-;41143:212;;;41224:13;:18;;;41192:11;:24;41204:11;41192:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;41307:13;:28;;;41265:11;:24;41277:11;41265:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;41143:212;41075:295;40552:829;41417:7;41413:2;41398:27;;41407:4;41398:27;;;;;;;;;;;;41436:42;41457:4;41463:2;41467:7;41476:1;41436:20;:42::i;:::-;39588:1898;;39484:2002;;;:::o;32351:536::-;32412:21;;:::i;:::-;32454:16;32462:7;32454;:16::i;:::-;32446:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32560:12;32575:7;32560:22;;32555:244;32591:1;32584:4;:8;32555:244;;;32621:31;32655:11;:17;32667:4;32655:17;;;;;;;;;;;32621:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32721:1;32695:28;;:9;:14;;;:28;;;32691:93;;32755:9;32748:16;;;;;;32691:93;32602:197;32594:6;;;;;;;;32555:244;;;;32822:57;;;;;;;;;;:::i;:::-;;;;;;;;32351:536;;;;:::o;9236:191::-;9310:16;9329:6;;;;;;;;;;;9310:25;;9355:8;9346:6;;:17;;;;;;;;;;;;;;;;;;9410:8;9379:40;;9400:8;9379:40;;;;;;;;;;;;9299:128;9236:191;:::o;42365:804::-;42520:4;42541:15;:2;:13;;;:15::i;:::-;42537:625;;;42593:2;42577:36;;;42614:12;:10;:12::i;:::-;42628:4;42634:7;42643:5;42577:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42573:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42840:1;42823:6;:13;:18;42819:273;;;42866:61;;;;;;;;;;:::i;:::-;;;;;;;;42819:273;43042:6;43036:13;43027:6;43023:2;43019:15;43012:38;42573:534;42710:45;;;42700:55;;;:6;:55;;;;42693:62;;;;;42537:625;43146:4;43139:11;;42365:804;;;;;;;:::o;36803:104::-;36872:27;36882:2;36886:8;36872:27;;;;;;;;;;;;:9;:27::i;:::-;36803:104;;:::o;50609:::-;50669:13;50698:9;50691:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50609:104;:::o;4252:723::-;4308:13;4538:1;4529:5;:10;4525:53;;;4556:10;;;;;;;;;;;;;;;;;;;;;4525:53;4588:12;4603:5;4588:20;;4619:14;4644:78;4659:1;4651:4;:9;4644:78;;4677:8;;;;;:::i;:::-;;;;4708:2;4700:10;;;;;:::i;:::-;;;4644:78;;;4732:19;4764:6;4754:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4732:39;;4782:154;4798:1;4789:5;:10;4782:154;;4826:1;4816:11;;;;;:::i;:::-;;;4893:2;4885:5;:10;;;;:::i;:::-;4872:2;:24;;;;:::i;:::-;4859:39;;4842:6;4849;4842:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4922:2;4913:11;;;;;:::i;:::-;;;4782:154;;;4960:6;4946:21;;;;;4252:723;;;;:::o;1508:675::-;1591:7;1611:20;1634:4;1611:27;;1654:9;1649:497;1673:5;:12;1669:1;:16;1649:497;;;1707:20;1730:5;1736:1;1730:8;;;;;;;;:::i;:::-;;;;;;;;1707:31;;1773:12;1757;:28;1753:382;;1900:42;1915:12;1929;1900:14;:42::i;:::-;1885:57;;1753:382;;;2077:42;2092:12;2106;2077:14;:42::i;:::-;2062:57;;1753:382;1692:454;1687:3;;;;;:::i;:::-;;;;1649:497;;;;2163:12;2156:19;;;1508:675;;;;:::o;43657:159::-;;;;;:::o;44228:158::-;;;;;:::o;10667:326::-;10727:4;10984:1;10962:7;:19;;;:23;10955:30;;10667:326;;;:::o;37270:163::-;37393:32;37399:2;37403:8;37413:5;37420:4;37393:5;:32::i;:::-;37270:163;;;:::o;2191:224::-;2259:13;2322:1;2316:4;2309:15;2351:1;2345:4;2338:15;2392:4;2386;2376:21;2367:30;;2191:224;;;;:::o;37692:1538::-;37831:20;37854:12;;37831:35;;37899:1;37885:16;;:2;:16;;;;37877:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37970:1;37958:8;:13;;37950:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38029:61;38059:1;38063:2;38067:12;38081:8;38029:21;:61::i;:::-;38404:8;38368:12;:16;38381:2;38368:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38469:8;38428:12;:16;38441:2;38428:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38528:2;38495:11;:25;38507:12;38495:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38595:15;38545:11;:25;38557:12;38545:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38628:20;38651:12;38628:35;;38685:9;38680:415;38700:8;38696:1;:12;38680:415;;;38764:12;38760:2;38739:38;;38756:1;38739:38;;;;;;;;;;;;38800:4;38796:249;;;38863:59;38894:1;38898:2;38902:12;38916:5;38863:22;:59::i;:::-;38829:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:249;39065:14;;;;;;;38710:3;;;;;;;38680:415;;;;39126:12;39111;:27;;;;38343:807;39162:60;39191:1;39195:2;39199:12;39213:8;39162:20;:60::i;:::-;37820:1410;37692:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:829::-;7596:6;7604;7612;7661:2;7649:9;7640:7;7636:23;7632:32;7629:119;;;7667:79;;:::i;:::-;7629:119;7787:1;7812:53;7857:7;7848:6;7837:9;7833:22;7812:53;:::i;:::-;7802:63;;7758:117;7914:2;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7885:118;8070:2;8059:9;8055:18;8042:32;8101:18;8093:6;8090:30;8087:117;;;8123:79;;:::i;:::-;8087:117;8228:78;8298:7;8289:6;8278:9;8274:22;8228:78;:::i;:::-;8218:88;;8013:303;7494:829;;;;;:::o;8329:559::-;8415:6;8423;8472:2;8460:9;8451:7;8447:23;8443:32;8440:119;;;8478:79;;:::i;:::-;8440:119;8626:1;8615:9;8611:17;8598:31;8656:18;8648:6;8645:30;8642:117;;;8678:79;;:::i;:::-;8642:117;8791:80;8863:7;8854:6;8843:9;8839:22;8791:80;:::i;:::-;8773:98;;;;8569:312;8329:559;;;;;:::o;8894:323::-;8950:6;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:50;9192:7;9183:6;9172:9;9168:22;9150:50;:::i;:::-;9140:60;;9096:114;8894:323;;;;:::o;9223:329::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9457:1;9482:53;9527:7;9518:6;9507:9;9503:22;9482:53;:::i;:::-;9472:63;;9428:117;9223:329;;;;:::o;9558:327::-;9616:6;9665:2;9653:9;9644:7;9640:23;9636:32;9633:119;;;9671:79;;:::i;:::-;9633:119;9791:1;9816:52;9860:7;9851:6;9840:9;9836:22;9816:52;:::i;:::-;9806:62;;9762:116;9558:327;;;;:::o;9891:349::-;9960:6;10009:2;9997:9;9988:7;9984:23;9980:32;9977:119;;;10015:79;;:::i;:::-;9977:119;10135:1;10160:63;10215:7;10206:6;10195:9;10191:22;10160:63;:::i;:::-;10150:73;;10106:127;9891:349;;;;:::o;10246:509::-;10315:6;10364:2;10352:9;10343:7;10339:23;10335:32;10332:119;;;10370:79;;:::i;:::-;10332:119;10518:1;10507:9;10503:17;10490:31;10548:18;10540:6;10537:30;10534:117;;;10570:79;;:::i;:::-;10534:117;10675:63;10730:7;10721:6;10710:9;10706:22;10675:63;:::i;:::-;10665:73;;10461:287;10246:509;;;;:::o;10761:329::-;10820:6;10869:2;10857:9;10848:7;10844:23;10840:32;10837:119;;;10875:79;;:::i;:::-;10837:119;10995:1;11020:53;11065:7;11056:6;11045:9;11041:22;11020:53;:::i;:::-;11010:63;;10966:117;10761:329;;;;:::o;11096:474::-;11164:6;11172;11221:2;11209:9;11200:7;11196:23;11192:32;11189:119;;;11227:79;;:::i;:::-;11189:119;11347:1;11372:53;11417:7;11408:6;11397:9;11393:22;11372:53;:::i;:::-;11362:63;;11318:117;11474:2;11500:53;11545:7;11536:6;11525:9;11521:22;11500:53;:::i;:::-;11490:63;;11445:118;11096:474;;;;;:::o;11576:704::-;11671:6;11679;11687;11736:2;11724:9;11715:7;11711:23;11707:32;11704:119;;;11742:79;;:::i;:::-;11704:119;11862:1;11887:53;11932:7;11923:6;11912:9;11908:22;11887:53;:::i;:::-;11877:63;;11833:117;12017:2;12006:9;12002:18;11989:32;12048:18;12040:6;12037:30;12034:117;;;12070:79;;:::i;:::-;12034:117;12183:80;12255:7;12246:6;12235:9;12231:22;12183:80;:::i;:::-;12165:98;;;;11960:313;11576:704;;;;;:::o;12286:179::-;12355:10;12376:46;12418:3;12410:6;12376:46;:::i;:::-;12454:4;12449:3;12445:14;12431:28;;12286:179;;;;:::o;12471:118::-;12558:24;12576:5;12558:24;:::i;:::-;12553:3;12546:37;12471:118;;:::o;12595:157::-;12700:45;12720:24;12738:5;12720:24;:::i;:::-;12700:45;:::i;:::-;12695:3;12688:58;12595:157;;:::o;12788:732::-;12907:3;12936:54;12984:5;12936:54;:::i;:::-;13006:86;13085:6;13080:3;13006:86;:::i;:::-;12999:93;;13116:56;13166:5;13116:56;:::i;:::-;13195:7;13226:1;13211:284;13236:6;13233:1;13230:13;13211:284;;;13312:6;13306:13;13339:63;13398:3;13383:13;13339:63;:::i;:::-;13332:70;;13425:60;13478:6;13425:60;:::i;:::-;13415:70;;13271:224;13258:1;13255;13251:9;13246:14;;13211:284;;;13215:14;13511:3;13504:10;;12912:608;;;12788:732;;;;:::o;13526:109::-;13607:21;13622:5;13607:21;:::i;:::-;13602:3;13595:34;13526:109;;:::o;13641:118::-;13728:24;13746:5;13728:24;:::i;:::-;13723:3;13716:37;13641:118;;:::o;13765:360::-;13851:3;13879:38;13911:5;13879:38;:::i;:::-;13933:70;13996:6;13991:3;13933:70;:::i;:::-;13926:77;;14012:52;14057:6;14052:3;14045:4;14038:5;14034:16;14012:52;:::i;:::-;14089:29;14111:6;14089:29;:::i;:::-;14084:3;14080:39;14073:46;;13855:270;13765:360;;;;:::o;14131:364::-;14219:3;14247:39;14280:5;14247:39;:::i;:::-;14302:71;14366:6;14361:3;14302:71;:::i;:::-;14295:78;;14382:52;14427:6;14422:3;14415:4;14408:5;14404:16;14382:52;:::i;:::-;14459:29;14481:6;14459:29;:::i;:::-;14454:3;14450:39;14443:46;;14223:272;14131:364;;;;:::o;14501:377::-;14607:3;14635:39;14668:5;14635:39;:::i;:::-;14690:89;14772:6;14767:3;14690:89;:::i;:::-;14683:96;;14788:52;14833:6;14828:3;14821:4;14814:5;14810:16;14788:52;:::i;:::-;14865:6;14860:3;14856:16;14849:23;;14611:267;14501:377;;;;:::o;14908:845::-;15011:3;15048:5;15042:12;15077:36;15103:9;15077:36;:::i;:::-;15129:89;15211:6;15206:3;15129:89;:::i;:::-;15122:96;;15249:1;15238:9;15234:17;15265:1;15260:137;;;;15411:1;15406:341;;;;15227:520;;15260:137;15344:4;15340:9;15329;15325:25;15320:3;15313:38;15380:6;15375:3;15371:16;15364:23;;15260:137;;15406:341;15473:38;15505:5;15473:38;:::i;:::-;15533:1;15547:154;15561:6;15558:1;15555:13;15547:154;;;15635:7;15629:14;15625:1;15620:3;15616:11;15609:35;15685:1;15676:7;15672:15;15661:26;;15583:4;15580:1;15576:12;15571:17;;15547:154;;;15730:6;15725:3;15721:16;15714:23;;15413:334;;15227:520;;15015:738;;14908:845;;;;:::o;15759:366::-;15901:3;15922:67;15986:2;15981:3;15922:67;:::i;:::-;15915:74;;15998:93;16087:3;15998:93;:::i;:::-;16116:2;16111:3;16107:12;16100:19;;15759:366;;;:::o;16131:::-;16273:3;16294:67;16358:2;16353:3;16294:67;:::i;:::-;16287:74;;16370:93;16459:3;16370:93;:::i;:::-;16488:2;16483:3;16479:12;16472:19;;16131:366;;;:::o;16503:::-;16645:3;16666:67;16730:2;16725:3;16666:67;:::i;:::-;16659:74;;16742:93;16831:3;16742:93;:::i;:::-;16860:2;16855:3;16851:12;16844:19;;16503:366;;;:::o;16875:::-;17017:3;17038:67;17102:2;17097:3;17038:67;:::i;:::-;17031:74;;17114:93;17203:3;17114:93;:::i;:::-;17232:2;17227:3;17223:12;17216:19;;16875:366;;;:::o;17247:::-;17389:3;17410:67;17474:2;17469:3;17410:67;:::i;:::-;17403:74;;17486:93;17575:3;17486:93;:::i;:::-;17604:2;17599:3;17595:12;17588:19;;17247:366;;;:::o;17619:::-;17761:3;17782:67;17846:2;17841:3;17782:67;:::i;:::-;17775:74;;17858:93;17947:3;17858:93;:::i;:::-;17976:2;17971:3;17967:12;17960:19;;17619:366;;;:::o;17991:::-;18133:3;18154:67;18218:2;18213:3;18154:67;:::i;:::-;18147:74;;18230:93;18319:3;18230:93;:::i;:::-;18348:2;18343:3;18339:12;18332:19;;17991:366;;;:::o;18363:::-;18505:3;18526:67;18590:2;18585:3;18526:67;:::i;:::-;18519:74;;18602:93;18691:3;18602:93;:::i;:::-;18720:2;18715:3;18711:12;18704:19;;18363:366;;;:::o;18735:::-;18877:3;18898:67;18962:2;18957:3;18898:67;:::i;:::-;18891:74;;18974:93;19063:3;18974:93;:::i;:::-;19092:2;19087:3;19083:12;19076:19;;18735:366;;;:::o;19107:::-;19249:3;19270:67;19334:2;19329:3;19270:67;:::i;:::-;19263:74;;19346:93;19435:3;19346:93;:::i;:::-;19464:2;19459:3;19455:12;19448:19;;19107:366;;;:::o;19479:::-;19621:3;19642:67;19706:2;19701:3;19642:67;:::i;:::-;19635:74;;19718:93;19807:3;19718:93;:::i;:::-;19836:2;19831:3;19827:12;19820:19;;19479:366;;;:::o;19851:::-;19993:3;20014:67;20078:2;20073:3;20014:67;:::i;:::-;20007:74;;20090:93;20179:3;20090:93;:::i;:::-;20208:2;20203:3;20199:12;20192:19;;19851:366;;;:::o;20223:::-;20365:3;20386:67;20450:2;20445:3;20386:67;:::i;:::-;20379:74;;20462:93;20551:3;20462:93;:::i;:::-;20580:2;20575:3;20571:12;20564:19;;20223:366;;;:::o;20595:::-;20737:3;20758:67;20822:2;20817:3;20758:67;:::i;:::-;20751:74;;20834:93;20923:3;20834:93;:::i;:::-;20952:2;20947:3;20943:12;20936:19;;20595:366;;;:::o;20967:::-;21109:3;21130:67;21194:2;21189:3;21130:67;:::i;:::-;21123:74;;21206:93;21295:3;21206:93;:::i;:::-;21324:2;21319:3;21315:12;21308:19;;20967:366;;;:::o;21339:::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:::-;21853:3;21874:67;21938:2;21933:3;21874:67;:::i;:::-;21867:74;;21950:93;22039:3;21950:93;:::i;:::-;22068:2;22063:3;22059:12;22052:19;;21711:366;;;:::o;22083:::-;22225:3;22246:67;22310:2;22305:3;22246:67;:::i;:::-;22239:74;;22322:93;22411:3;22322:93;:::i;:::-;22440:2;22435:3;22431:12;22424:19;;22083:366;;;:::o;22455:::-;22597:3;22618:67;22682:2;22677:3;22618:67;:::i;:::-;22611:74;;22694:93;22783:3;22694:93;:::i;:::-;22812:2;22807:3;22803:12;22796:19;;22455:366;;;:::o;22827:398::-;22986:3;23007:83;23088:1;23083:3;23007:83;:::i;:::-;23000:90;;23099:93;23188:3;23099:93;:::i;:::-;23217:1;23212:3;23208:11;23201:18;;22827:398;;;:::o;23231:366::-;23373:3;23394:67;23458:2;23453:3;23394:67;:::i;:::-;23387:74;;23470:93;23559:3;23470:93;:::i;:::-;23588:2;23583:3;23579:12;23572:19;;23231:366;;;:::o;23603:::-;23745:3;23766:67;23830:2;23825:3;23766:67;:::i;:::-;23759:74;;23842:93;23931:3;23842:93;:::i;:::-;23960:2;23955:3;23951:12;23944:19;;23603:366;;;:::o;23975:::-;24117:3;24138:67;24202:2;24197:3;24138:67;:::i;:::-;24131:74;;24214:93;24303:3;24214:93;:::i;:::-;24332:2;24327:3;24323:12;24316:19;;23975:366;;;:::o;24347:::-;24489:3;24510:67;24574:2;24569:3;24510:67;:::i;:::-;24503:74;;24586:93;24675:3;24586:93;:::i;:::-;24704:2;24699:3;24695:12;24688:19;;24347:366;;;:::o;24719:::-;24861:3;24882:67;24946:2;24941:3;24882:67;:::i;:::-;24875:74;;24958:93;25047:3;24958:93;:::i;:::-;25076:2;25071:3;25067:12;25060:19;;24719:366;;;:::o;25091:::-;25233:3;25254:67;25318:2;25313:3;25254:67;:::i;:::-;25247:74;;25330:93;25419:3;25330:93;:::i;:::-;25448:2;25443:3;25439:12;25432:19;;25091:366;;;:::o;25463:::-;25605:3;25626:67;25690:2;25685:3;25626:67;:::i;:::-;25619:74;;25702:93;25791:3;25702:93;:::i;:::-;25820:2;25815:3;25811:12;25804:19;;25463:366;;;:::o;25835:::-;25977:3;25998:67;26062:2;26057:3;25998:67;:::i;:::-;25991:74;;26074:93;26163:3;26074:93;:::i;:::-;26192:2;26187:3;26183:12;26176:19;;25835:366;;;:::o;26207:::-;26349:3;26370:67;26434:2;26429:3;26370:67;:::i;:::-;26363:74;;26446:93;26535:3;26446:93;:::i;:::-;26564:2;26559:3;26555:12;26548:19;;26207:366;;;:::o;26579:108::-;26656:24;26674:5;26656:24;:::i;:::-;26651:3;26644:37;26579:108;;:::o;26693:118::-;26780:24;26798:5;26780:24;:::i;:::-;26775:3;26768:37;26693:118;;:::o;26817:157::-;26922:45;26942:24;26960:5;26942:24;:::i;:::-;26922:45;:::i;:::-;26917:3;26910:58;26817:157;;:::o;26980:256::-;27092:3;27107:75;27178:3;27169:6;27107:75;:::i;:::-;27207:2;27202:3;27198:12;27191:19;;27227:3;27220:10;;26980:256;;;;:::o;27242:397::-;27382:3;27397:75;27468:3;27459:6;27397:75;:::i;:::-;27497:2;27492:3;27488:12;27481:19;;27510:75;27581:3;27572:6;27510:75;:::i;:::-;27610:2;27605:3;27601:12;27594:19;;27630:3;27623:10;;27242:397;;;;;:::o;27645:589::-;27870:3;27892:95;27983:3;27974:6;27892:95;:::i;:::-;27885:102;;28004:95;28095:3;28086:6;28004:95;:::i;:::-;27997:102;;28116:92;28204:3;28195:6;28116:92;:::i;:::-;28109:99;;28225:3;28218:10;;27645:589;;;;;;:::o;28240:379::-;28424:3;28446:147;28589:3;28446:147;:::i;:::-;28439:154;;28610:3;28603:10;;28240:379;;;:::o;28625:222::-;28718:4;28756:2;28745:9;28741:18;28733:26;;28769:71;28837:1;28826:9;28822:17;28813:6;28769:71;:::i;:::-;28625:222;;;;:::o;28853:640::-;29048:4;29086:3;29075:9;29071:19;29063:27;;29100:71;29168:1;29157:9;29153:17;29144:6;29100:71;:::i;:::-;29181:72;29249:2;29238:9;29234:18;29225:6;29181:72;:::i;:::-;29263;29331:2;29320:9;29316:18;29307:6;29263:72;:::i;:::-;29382:9;29376:4;29372:20;29367:2;29356:9;29352:18;29345:48;29410:76;29481:4;29472:6;29410:76;:::i;:::-;29402:84;;28853:640;;;;;;;:::o;29499:373::-;29642:4;29680:2;29669:9;29665:18;29657:26;;29729:9;29723:4;29719:20;29715:1;29704:9;29700:17;29693:47;29757:108;29860:4;29851:6;29757:108;:::i;:::-;29749:116;;29499:373;;;;:::o;29878:210::-;29965:4;30003:2;29992:9;29988:18;29980:26;;30016:65;30078:1;30067:9;30063:17;30054:6;30016:65;:::i;:::-;29878:210;;;;:::o;30094:222::-;30187:4;30225:2;30214:9;30210:18;30202:26;;30238:71;30306:1;30295:9;30291:17;30282:6;30238:71;:::i;:::-;30094:222;;;;:::o;30322:313::-;30435:4;30473:2;30462:9;30458:18;30450:26;;30522:9;30516:4;30512:20;30508:1;30497:9;30493:17;30486:47;30550:78;30623:4;30614:6;30550:78;:::i;:::-;30542:86;;30322:313;;;;:::o;30641:419::-;30807:4;30845:2;30834:9;30830:18;30822:26;;30894:9;30888:4;30884:20;30880:1;30869:9;30865:17;30858:47;30922:131;31048:4;30922:131;:::i;:::-;30914:139;;30641:419;;;:::o;31066:::-;31232:4;31270:2;31259:9;31255:18;31247:26;;31319:9;31313:4;31309:20;31305:1;31294:9;31290:17;31283:47;31347:131;31473:4;31347:131;:::i;:::-;31339:139;;31066:419;;;:::o;31491:::-;31657:4;31695:2;31684:9;31680:18;31672:26;;31744:9;31738:4;31734:20;31730:1;31719:9;31715:17;31708:47;31772:131;31898:4;31772:131;:::i;:::-;31764:139;;31491:419;;;:::o;31916:::-;32082:4;32120:2;32109:9;32105:18;32097:26;;32169:9;32163:4;32159:20;32155:1;32144:9;32140:17;32133:47;32197:131;32323:4;32197:131;:::i;:::-;32189:139;;31916:419;;;:::o;32341:::-;32507:4;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32341:419;;;:::o;32766:::-;32932:4;32970:2;32959:9;32955:18;32947:26;;33019:9;33013:4;33009:20;33005:1;32994:9;32990:17;32983:47;33047:131;33173:4;33047:131;:::i;:::-;33039:139;;32766:419;;;:::o;33191:::-;33357:4;33395:2;33384:9;33380:18;33372:26;;33444:9;33438:4;33434:20;33430:1;33419:9;33415:17;33408:47;33472:131;33598:4;33472:131;:::i;:::-;33464:139;;33191:419;;;:::o;33616:::-;33782:4;33820:2;33809:9;33805:18;33797:26;;33869:9;33863:4;33859:20;33855:1;33844:9;33840:17;33833:47;33897:131;34023:4;33897:131;:::i;:::-;33889:139;;33616:419;;;:::o;34041:::-;34207:4;34245:2;34234:9;34230:18;34222:26;;34294:9;34288:4;34284:20;34280:1;34269:9;34265:17;34258:47;34322:131;34448:4;34322:131;:::i;:::-;34314:139;;34041:419;;;:::o;34466:::-;34632:4;34670:2;34659:9;34655:18;34647:26;;34719:9;34713:4;34709:20;34705:1;34694:9;34690:17;34683:47;34747:131;34873:4;34747:131;:::i;:::-;34739:139;;34466:419;;;:::o;34891:::-;35057:4;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;34891:419;;;:::o;35316:::-;35482:4;35520:2;35509:9;35505:18;35497:26;;35569:9;35563:4;35559:20;35555:1;35544:9;35540:17;35533:47;35597:131;35723:4;35597:131;:::i;:::-;35589:139;;35316:419;;;:::o;35741:::-;35907:4;35945:2;35934:9;35930:18;35922:26;;35994:9;35988:4;35984:20;35980:1;35969:9;35965:17;35958:47;36022:131;36148:4;36022:131;:::i;:::-;36014:139;;35741:419;;;:::o;36166:::-;36332:4;36370:2;36359:9;36355:18;36347:26;;36419:9;36413:4;36409:20;36405:1;36394:9;36390:17;36383:47;36447:131;36573:4;36447:131;:::i;:::-;36439:139;;36166:419;;;:::o;36591:::-;36757:4;36795:2;36784:9;36780:18;36772:26;;36844:9;36838:4;36834:20;36830:1;36819:9;36815:17;36808:47;36872:131;36998:4;36872:131;:::i;:::-;36864:139;;36591:419;;;:::o;37016:::-;37182:4;37220:2;37209:9;37205:18;37197:26;;37269:9;37263:4;37259:20;37255:1;37244:9;37240:17;37233:47;37297:131;37423:4;37297:131;:::i;:::-;37289:139;;37016:419;;;:::o;37441:::-;37607:4;37645:2;37634:9;37630:18;37622:26;;37694:9;37688:4;37684:20;37680:1;37669:9;37665:17;37658:47;37722:131;37848:4;37722:131;:::i;:::-;37714:139;;37441:419;;;:::o;37866:::-;38032:4;38070:2;38059:9;38055:18;38047:26;;38119:9;38113:4;38109:20;38105:1;38094:9;38090:17;38083:47;38147:131;38273:4;38147:131;:::i;:::-;38139:139;;37866:419;;;:::o;38291:::-;38457:4;38495:2;38484:9;38480:18;38472:26;;38544:9;38538:4;38534:20;38530:1;38519:9;38515:17;38508:47;38572:131;38698:4;38572:131;:::i;:::-;38564:139;;38291:419;;;:::o;38716:::-;38882:4;38920:2;38909:9;38905:18;38897:26;;38969:9;38963:4;38959:20;38955:1;38944:9;38940:17;38933:47;38997:131;39123:4;38997:131;:::i;:::-;38989:139;;38716:419;;;:::o;39141:::-;39307:4;39345:2;39334:9;39330:18;39322:26;;39394:9;39388:4;39384:20;39380:1;39369:9;39365:17;39358:47;39422:131;39548:4;39422:131;:::i;:::-;39414:139;;39141:419;;;:::o;39566:::-;39732:4;39770:2;39759:9;39755:18;39747:26;;39819:9;39813:4;39809:20;39805:1;39794:9;39790:17;39783:47;39847:131;39973:4;39847:131;:::i;:::-;39839:139;;39566:419;;;:::o;39991:::-;40157:4;40195:2;40184:9;40180:18;40172:26;;40244:9;40238:4;40234:20;40230:1;40219:9;40215:17;40208:47;40272:131;40398:4;40272:131;:::i;:::-;40264:139;;39991:419;;;:::o;40416:::-;40582:4;40620:2;40609:9;40605:18;40597:26;;40669:9;40663:4;40659:20;40655:1;40644:9;40640:17;40633:47;40697:131;40823:4;40697:131;:::i;:::-;40689:139;;40416:419;;;:::o;40841:::-;41007:4;41045:2;41034:9;41030:18;41022:26;;41094:9;41088:4;41084:20;41080:1;41069:9;41065:17;41058:47;41122:131;41248:4;41122:131;:::i;:::-;41114:139;;40841:419;;;:::o;41266:::-;41432:4;41470:2;41459:9;41455:18;41447:26;;41519:9;41513:4;41509:20;41505:1;41494:9;41490:17;41483:47;41547:131;41673:4;41547:131;:::i;:::-;41539:139;;41266:419;;;:::o;41691:::-;41857:4;41895:2;41884:9;41880:18;41872:26;;41944:9;41938:4;41934:20;41930:1;41919:9;41915:17;41908:47;41972:131;42098:4;41972:131;:::i;:::-;41964:139;;41691:419;;;:::o;42116:::-;42282:4;42320:2;42309:9;42305:18;42297:26;;42369:9;42363:4;42359:20;42355:1;42344:9;42340:17;42333:47;42397:131;42523:4;42397:131;:::i;:::-;42389:139;;42116:419;;;:::o;42541:222::-;42634:4;42672:2;42661:9;42657:18;42649:26;;42685:71;42753:1;42742:9;42738:17;42729:6;42685:71;:::i;:::-;42541:222;;;;:::o;42769:129::-;42803:6;42830:20;;:::i;:::-;42820:30;;42859:33;42887:4;42879:6;42859:33;:::i;:::-;42769:129;;;:::o;42904:75::-;42937:6;42970:2;42964:9;42954:19;;42904:75;:::o;42985:311::-;43062:4;43152:18;43144:6;43141:30;43138:56;;;43174:18;;:::i;:::-;43138:56;43224:4;43216:6;43212:17;43204:25;;43284:4;43278;43274:15;43266:23;;42985:311;;;:::o;43302:307::-;43363:4;43453:18;43445:6;43442:30;43439:56;;;43475:18;;:::i;:::-;43439:56;43513:29;43535:6;43513:29;:::i;:::-;43505:37;;43597:4;43591;43587:15;43579:23;;43302:307;;;:::o;43615:308::-;43677:4;43767:18;43759:6;43756:30;43753:56;;;43789:18;;:::i;:::-;43753:56;43827:29;43849:6;43827:29;:::i;:::-;43819:37;;43911:4;43905;43901:15;43893:23;;43615:308;;;:::o;43929:132::-;43996:4;44019:3;44011:11;;44049:4;44044:3;44040:14;44032:22;;43929:132;;;:::o;44067:141::-;44116:4;44139:3;44131:11;;44162:3;44159:1;44152:14;44196:4;44193:1;44183:18;44175:26;;44067:141;;;:::o;44214:114::-;44281:6;44315:5;44309:12;44299:22;;44214:114;;;:::o;44334:98::-;44385:6;44419:5;44413:12;44403:22;;44334:98;;;:::o;44438:99::-;44490:6;44524:5;44518:12;44508:22;;44438:99;;;:::o;44543:113::-;44613:4;44645;44640:3;44636:14;44628:22;;44543:113;;;:::o;44662:184::-;44761:11;44795:6;44790:3;44783:19;44835:4;44830:3;44826:14;44811:29;;44662:184;;;;:::o;44852:168::-;44935:11;44969:6;44964:3;44957:19;45009:4;45004:3;45000:14;44985:29;;44852:168;;;;:::o;45026:147::-;45127:11;45164:3;45149:18;;45026:147;;;;:::o;45179:169::-;45263:11;45297:6;45292:3;45285:19;45337:4;45332:3;45328:14;45313:29;;45179:169;;;;:::o;45354:148::-;45456:11;45493:3;45478:18;;45354:148;;;;:::o;45508:305::-;45548:3;45567:20;45585:1;45567:20;:::i;:::-;45562:25;;45601:20;45619:1;45601:20;:::i;:::-;45596:25;;45755:1;45687:66;45683:74;45680:1;45677:81;45674:107;;;45761:18;;:::i;:::-;45674:107;45805:1;45802;45798:9;45791:16;;45508:305;;;;:::o;45819:185::-;45859:1;45876:20;45894:1;45876:20;:::i;:::-;45871:25;;45910:20;45928:1;45910:20;:::i;:::-;45905:25;;45949:1;45939:35;;45954:18;;:::i;:::-;45939:35;45996:1;45993;45989:9;45984:14;;45819:185;;;;:::o;46010:348::-;46050:7;46073:20;46091:1;46073:20;:::i;:::-;46068:25;;46107:20;46125:1;46107:20;:::i;:::-;46102:25;;46295:1;46227:66;46223:74;46220:1;46217:81;46212:1;46205:9;46198:17;46194:105;46191:131;;;46302:18;;:::i;:::-;46191:131;46350:1;46347;46343:9;46332:20;;46010:348;;;;:::o;46364:191::-;46404:4;46424:20;46442:1;46424:20;:::i;:::-;46419:25;;46458:20;46476:1;46458:20;:::i;:::-;46453:25;;46497:1;46494;46491:8;46488:34;;;46502:18;;:::i;:::-;46488:34;46547:1;46544;46540:9;46532:17;;46364:191;;;;:::o;46561:96::-;46598:7;46627:24;46645:5;46627:24;:::i;:::-;46616:35;;46561:96;;;:::o;46663:90::-;46697:7;46740:5;46733:13;46726:21;46715:32;;46663:90;;;:::o;46759:77::-;46796:7;46825:5;46814:16;;46759:77;;;:::o;46842:149::-;46878:7;46918:66;46911:5;46907:78;46896:89;;46842:149;;;:::o;46997:126::-;47034:7;47074:42;47067:5;47063:54;47052:65;;46997:126;;;:::o;47129:77::-;47166:7;47195:5;47184:16;;47129:77;;;:::o;47212:154::-;47296:6;47291:3;47286;47273:30;47358:1;47349:6;47344:3;47340:16;47333:27;47212:154;;;:::o;47372:307::-;47440:1;47450:113;47464:6;47461:1;47458:13;47450:113;;;47549:1;47544:3;47540:11;47534:18;47530:1;47525:3;47521:11;47514:39;47486:2;47483:1;47479:10;47474:15;;47450:113;;;47581:6;47578:1;47575:13;47572:101;;;47661:1;47652:6;47647:3;47643:16;47636:27;47572:101;47421:258;47372:307;;;:::o;47685:320::-;47729:6;47766:1;47760:4;47756:12;47746:22;;47813:1;47807:4;47803:12;47834:18;47824:81;;47890:4;47882:6;47878:17;47868:27;;47824:81;47952:2;47944:6;47941:14;47921:18;47918:38;47915:84;;;47971:18;;:::i;:::-;47915:84;47736:269;47685:320;;;:::o;48011:281::-;48094:27;48116:4;48094:27;:::i;:::-;48086:6;48082:40;48224:6;48212:10;48209:22;48188:18;48176:10;48173:34;48170:62;48167:88;;;48235:18;;:::i;:::-;48167:88;48275:10;48271:2;48264:22;48054:238;48011:281;;:::o;48298:233::-;48337:3;48360:24;48378:5;48360:24;:::i;:::-;48351:33;;48406:66;48399:5;48396:77;48393:103;;;48476:18;;:::i;:::-;48393:103;48523:1;48516:5;48512:13;48505:20;;48298:233;;;:::o;48537:100::-;48576:7;48605:26;48625:5;48605:26;:::i;:::-;48594:37;;48537:100;;;:::o;48643:94::-;48682:7;48711:20;48725:5;48711:20;:::i;:::-;48700:31;;48643:94;;;:::o;48743:79::-;48782:7;48811:5;48800:16;;48743:79;;;:::o;48828:176::-;48860:1;48877:20;48895:1;48877:20;:::i;:::-;48872:25;;48911:20;48929:1;48911:20;:::i;:::-;48906:25;;48950:1;48940:35;;48955:18;;:::i;:::-;48940:35;48996:1;48993;48989:9;48984:14;;48828:176;;;;:::o;49010:180::-;49058:77;49055:1;49048:88;49155:4;49152:1;49145:15;49179:4;49176:1;49169:15;49196:180;49244:77;49241:1;49234:88;49341:4;49338:1;49331:15;49365:4;49362:1;49355:15;49382:180;49430:77;49427:1;49420:88;49527:4;49524:1;49517:15;49551:4;49548:1;49541:15;49568:180;49616:77;49613:1;49606:88;49713:4;49710:1;49703:15;49737:4;49734:1;49727:15;49754:180;49802:77;49799:1;49792:88;49899:4;49896:1;49889:15;49923:4;49920:1;49913:15;49940:117;50049:1;50046;50039:12;50063:117;50172:1;50169;50162:12;50186:117;50295:1;50292;50285:12;50309:117;50418:1;50415;50408:12;50432:117;50541:1;50538;50531:12;50555:117;50664:1;50661;50654:12;50678:102;50719:6;50770:2;50766:7;50761:2;50754:5;50750:14;50746:28;50736:38;;50678:102;;;:::o;50786:94::-;50819:8;50867:5;50863:2;50859:14;50838:35;;50786:94;;;:::o;50886:221::-;51026:34;51022:1;51014:6;51010:14;51003:58;51095:4;51090:2;51082:6;51078:15;51071:29;50886:221;:::o;51113:250::-;51253:34;51249:1;51241:6;51237:14;51230:58;51322:33;51317:2;51309:6;51305:15;51298:58;51113:250;:::o;51369:292::-;51509:34;51505:1;51497:6;51493:14;51486:58;51578:34;51573:2;51565:6;51561:15;51554:59;51647:6;51642:2;51634:6;51630:15;51623:31;51369:292;:::o;51667:225::-;51807:34;51803:1;51795:6;51791:14;51784:58;51876:8;51871:2;51863:6;51859:15;51852:33;51667:225;:::o;51898:229::-;52038:34;52034:1;52026:6;52022:14;52015:58;52107:12;52102:2;52094:6;52090:15;52083:37;51898:229;:::o;52133:222::-;52273:34;52269:1;52261:6;52257:14;52250:58;52342:5;52337:2;52329:6;52325:15;52318:30;52133:222;:::o;52361:224::-;52501:34;52497:1;52489:6;52485:14;52478:58;52570:7;52565:2;52557:6;52553:15;52546:32;52361:224;:::o;52591:244::-;52731:34;52727:1;52719:6;52715:14;52708:58;52800:27;52795:2;52787:6;52783:15;52776:52;52591:244;:::o;52841:::-;52981:34;52977:1;52969:6;52965:14;52958:58;53050:27;53045:2;53037:6;53033:15;53026:52;52841:244;:::o;53091:230::-;53231:34;53227:1;53219:6;53215:14;53208:58;53300:13;53295:2;53287:6;53283:15;53276:38;53091:230;:::o;53327:225::-;53467:34;53463:1;53455:6;53451:14;53444:58;53536:8;53531:2;53523:6;53519:15;53512:33;53327:225;:::o;53558:182::-;53698:34;53694:1;53686:6;53682:14;53675:58;53558:182;:::o;53746:234::-;53886:34;53882:1;53874:6;53870:14;53863:58;53955:17;53950:2;53942:6;53938:15;53931:42;53746:234;:::o;53986:176::-;54126:28;54122:1;54114:6;54110:14;54103:52;53986:176;:::o;54168:237::-;54308:34;54304:1;54296:6;54292:14;54285:58;54377:20;54372:2;54364:6;54360:15;54353:45;54168:237;:::o;54411:223::-;54551:34;54547:1;54539:6;54535:14;54528:58;54620:6;54615:2;54607:6;54603:15;54596:31;54411:223;:::o;54640:248::-;54780:34;54776:1;54768:6;54764:14;54757:58;54849:31;54844:2;54836:6;54832:15;54825:56;54640:248;:::o;54894:235::-;55034:34;55030:1;55022:6;55018:14;55011:58;55103:18;55098:2;55090:6;55086:15;55079:43;54894:235;:::o;55135:221::-;55275:34;55271:1;55263:6;55259:14;55252:58;55344:4;55339:2;55331:6;55327:15;55320:29;55135:221;:::o;55362:114::-;;:::o;55482:238::-;55622:34;55618:1;55610:6;55606:14;55599:58;55691:21;55686:2;55678:6;55674:15;55667:46;55482:238;:::o;55726:220::-;55866:34;55862:1;55854:6;55850:14;55843:58;55935:3;55930:2;55922:6;55918:15;55911:28;55726:220;:::o;55952:227::-;56092:34;56088:1;56080:6;56076:14;56069:58;56161:10;56156:2;56148:6;56144:15;56137:35;55952:227;:::o;56185:233::-;56325:34;56321:1;56313:6;56309:14;56302:58;56394:16;56389:2;56381:6;56377:15;56370:41;56185:233;:::o;56424:226::-;56564:34;56560:1;56552:6;56548:14;56541:58;56633:9;56628:2;56620:6;56616:15;56609:34;56424:226;:::o;56656:231::-;56796:34;56792:1;56784:6;56780:14;56773:58;56865:14;56860:2;56852:6;56848:15;56841:39;56656:231;:::o;56893:234::-;57033:34;57029:1;57021:6;57017:14;57010:58;57102:17;57097:2;57089:6;57085:15;57078:42;56893:234;:::o;57133:232::-;57273:34;57269:1;57261:6;57257:14;57250:58;57342:15;57337:2;57329:6;57325:15;57318:40;57133:232;:::o;57371:243::-;57511:34;57507:1;57499:6;57495:14;57488:58;57580:26;57575:2;57567:6;57563:15;57556:51;57371:243;:::o;57620:122::-;57693:24;57711:5;57693:24;:::i;:::-;57686:5;57683:35;57673:63;;57732:1;57729;57722:12;57673:63;57620:122;:::o;57748:116::-;57818:21;57833:5;57818:21;:::i;:::-;57811:5;57808:32;57798:60;;57854:1;57851;57844:12;57798:60;57748:116;:::o;57870:122::-;57943:24;57961:5;57943:24;:::i;:::-;57936:5;57933:35;57923:63;;57982:1;57979;57972:12;57923:63;57870:122;:::o;57998:120::-;58070:23;58087:5;58070:23;:::i;:::-;58063:5;58060:34;58050:62;;58108:1;58105;58098:12;58050:62;57998:120;:::o;58124:122::-;58197:24;58215:5;58197:24;:::i;:::-;58190:5;58187:35;58177:63;;58236:1;58233;58226:12;58177:63;58124:122;:::o
Swarm Source
ipfs://7de2a3a2840eba3bd0e35f369f5faf3f8c93e12085ec6b26026a16ae4b00399d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.