ERC-721
Overview
Max Total Supply
2,084 ER
Holders
383
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ERLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EtherRoyale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-22 */ // 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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.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/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: contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // 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_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * 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) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ 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 { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @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) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); _currentIndex = 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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * 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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * 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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/EtherRoyale.sol /* ERC-721A Smart contract @DonFlamingo - https://linktr.ee/donflamingo */ pragma solidity ^0.8.7; contract EtherRoyale is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; string private baseURI; string private hideBaseURI; bool public paused = false; uint256 public maxSupply = 8888; uint256 public price = 0.069 ether; mapping (address => uint256) public saleMintCount; uint256 public saleWalletLimit = 10; bool public saleStarted = false; mapping (address => uint256) public presaleMintCount; uint256 public presaleWalletLimit = 3; bool public presaleStarted = false; bytes32 public presaleMerkleRoot = 0x07c923c6e312ca86ad6cec5d06fad1593b1c93764cfbd9dfe572112cecad9407; bool public revealed = true; event saleModeChanged(); constructor( string memory _hideBaseURI, string memory _tokenUrl) ERC721A ("Ether Royale", "ER"){ baseURI = _tokenUrl; hideBaseURI = _hideBaseURI; } modifier notPaused() { require(!paused, "Contract is paused"); _; } modifier correctPayment(uint8 quantity) { require(quantity * price == msg.value); _; } modifier supplyLimit(uint8 quantity) { require(totalSupply() + quantity <= maxSupply, "No more tokens"); _; } modifier presale(uint8 quantity) { require(presaleStarted, "Presale must be started"); require(presaleMintCount[msg.sender] + quantity <= presaleWalletLimit, "Wallet limit reached"); _; } modifier sale(uint8 quantity) { require(saleStarted, "Sale must be started"); require(saleMintCount[msg.sender] + quantity <= saleWalletLimit, "wallet limit reached"); _; } modifier isValidMerkleProof(bytes32[] calldata merkleProof) { require( MerkleProof.verify( merkleProof, presaleMerkleRoot, keccak256(abi.encodePacked(msg.sender)) ), "Address does not exist in list" ); _; } function saleMint(uint8 quantity) external payable notPaused nonReentrant correctPayment(quantity) supplyLimit(quantity) sale(quantity) { saleMintCount[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function presaleMint(uint8 quantity, bytes32[] calldata merkleProof) external payable notPaused nonReentrant correctPayment(quantity) supplyLimit(quantity) isValidMerkleProof(merkleProof) presale(quantity) { presaleMintCount[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function ownerMint(uint8 quantity, address toAddress) external supplyLimit(quantity) onlyOwner { _safeMint(toAddress, quantity); } function startPresale() external onlyOwner { presaleStarted = true; saleStarted = false; emit saleModeChanged(); } function startSale() external onlyOwner { presaleStarted = false; saleStarted = true; emit saleModeChanged(); } struct BH { address h; uint256 c; } BH public bh; function batchMigration(BH[] memory holders) external onlyOwner { uint256 currentHolderIdx = 0; while (currentHolderIdx < holders.length) { _mint(holders[currentHolderIdx].h, holders[currentHolderIdx].c); currentHolderIdx++; } } function resetSale() external onlyOwner { presaleStarted = false; saleStarted = false; emit saleModeChanged(); } function setPause(bool pause) external onlyOwner { paused = pause; } function updatePrice(uint256 _price) external onlyOwner { price = _price; } function setPresaleLimit(uint8 _presaleLimit) external onlyOwner { presaleWalletLimit = _presaleLimit; } function setSaleLimit(uint8 _saleLimit) external onlyOwner { saleWalletLimit = _saleLimit; } function setPresaleListMerkleRoot(bytes32 merkleRoot) external onlyOwner { presaleMerkleRoot = merkleRoot; } function setBaseURI(string memory _baseURI) external onlyOwner { baseURI = _baseURI; } function setMaxSupply(uint256 _supply) external onlyOwner { maxSupply = _supply; } function setHideBaseURI(string memory _hideBaseURI) external onlyOwner { hideBaseURI = _hideBaseURI; } function getOwnerBaseURI() external onlyOwner view returns (string memory) { return baseURI; } function withdraw() public onlyOwner { uint256 donflamingov = address(this).balance * 15 / 100; uint256 catnipv = address(this).balance * 15 / 100; uint256 tragv = address(this).balance * 31 / 100; (bool donflamingohs, ) = payable(0xdCd6B7449167220724084bfD61f9B205c7dfa5a1).call{value: donflamingov}(""); require(donflamingohs); (bool catniphs, ) = payable(0x026bf664D2C84E4Da15B18d66e41Ab8180f2bda3).call{value: catnipv}(""); require(catniphs); (bool trags, ) = payable(0xE1840cc1BC1C80c576fAeD0DE39fC2c92E6440Ca).call{value: tragv}(""); require(trags); uint256 balance = address(this).balance; payable(0xbF95B5444C3F8d671183ec87984d04b32C842d89).transfer(balance); } function reveal(bool _revealed) public onlyOwner { revealed = _revealed; } function _startTokenId() internal view override virtual returns (uint256) { return 1; } function getBaseURI() external view returns (string memory) { if (!revealed) { return hideBaseURI; } return baseURI; } function leftLimit() external view returns (uint256) { require(presaleStarted || saleStarted, "Sales wasn't started yet"); if (presaleStarted) { return presaleWalletLimit - presaleMintCount[msg.sender]; } if (saleStarted) { return saleWalletLimit - saleMintCount[msg.sender]; } return 0; } 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), "Nonexistent token"); if (!revealed) { return hideBaseURI; } return string(abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_hideBaseURI","type":"string"},{"internalType":"string","name":"_tokenUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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"},{"anonymous":false,"inputs":[],"name":"saleModeChanged","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"h","type":"address"},{"internalType":"uint256","name":"c","type":"uint256"}],"internalType":"struct EtherRoyale.BH[]","name":"holders","type":"tuple[]"}],"name":"batchMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bh","outputs":[{"internalType":"address","name":"h","type":"address"},{"internalType":"uint256","name":"c","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":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerBaseURI","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":[],"name":"leftLimit","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":"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":"uint8","name":"quantity","type":"uint8"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","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":"presaleMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"}],"name":"reveal","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":"uint8","name":"quantity","type":"uint8"}],"name":"saleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"saleMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hideBaseURI","type":"string"}],"name":"setHideBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_presaleLimit","type":"uint8"}],"name":"setPresaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setPresaleListMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_saleLimit","type":"uint8"}],"name":"setSaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506122b8600d5566f5232269808000600e55600a6010556000601160006101000a81548160ff02191690831515021790555060036013556000601460006101000a81548160ff0219169083151502179055507f07c923c6e312ca86ad6cec5d06fad1593b1c93764cfbd9dfe572112cecad940760001b6015556001601660006101000a81548160ff021916908315150217905550348015620000bf57600080fd5b5060405162005dab38038062005dab8339818101604052810190620000e5919062000402565b6040518060400160405280600c81526020017f457468657220526f79616c6500000000000000000000000000000000000000008152506040518060400160405280600281526020017f4552000000000000000000000000000000000000000000000000000000000000815250816002908051906020019062000169929190620002d4565b50806003908051906020019062000182929190620002d4565b5062000193620001fd60201b60201c565b6000819055505050620001bb620001af6200020660201b60201c565b6200020e60201b60201c565b600160098190555080600a9080519060200190620001db929190620002d4565b5081600b9080519060200190620001f4929190620002d4565b5050506200060b565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002e2906200051c565b90600052602060002090601f01602090048101928262000306576000855562000352565b82601f106200032157805160ff191683800117855562000352565b8280016001018555821562000352579182015b828111156200035157825182559160200191906001019062000334565b5b50905062000361919062000365565b5090565b5b808211156200038057600081600090555060010162000366565b5090565b60006200039b6200039584620004b0565b62000487565b905082815260208101848484011115620003ba57620003b9620005eb565b5b620003c7848285620004e6565b509392505050565b600082601f830112620003e757620003e6620005e6565b5b8151620003f984826020860162000384565b91505092915050565b600080604083850312156200041c576200041b620005f5565b5b600083015167ffffffffffffffff8111156200043d576200043c620005f0565b5b6200044b85828601620003cf565b925050602083015167ffffffffffffffff8111156200046f576200046e620005f0565b5b6200047d85828601620003cf565b9150509250929050565b600062000493620004a6565b9050620004a1828262000552565b919050565b6000604051905090565b600067ffffffffffffffff821115620004ce57620004cd620005b7565b5b620004d982620005fa565b9050602081019050919050565b60005b8381101562000506578082015181840152602081019050620004e9565b8381111562000516576000848401525b50505050565b600060028204905060018216806200053557607f821691505b602082108114156200054c576200054b62000588565b5b50919050565b6200055d82620005fa565b810181811067ffffffffffffffff821117156200057f576200057e620005b7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b615790806200061b6000396000f3fe6080604052600436106102c95760003560e01c8063790b3b2b11610175578063b66a0e5d116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610a85578063f218c01c14610ac2578063f2fde38b14610ade578063fd8607e514610b07576102c9565b8063c87b56dd146109f2578063d288823f14610a2f578063d5abeb0114610a5a576102c9565b8063b66a0e5d14610919578063b88d4fde14610930578063bedb86fb14610959578063bf79334614610982578063c0f6baa41461099e578063c1e1d954146109db576102c9565b8063940cd05b1161012e578063940cd05b1461081f57806395d89b4114610848578063a035b1fe14610873578063a22cb4651461089e578063a643ed30146108c7578063a74ea6ce146108f0576102c9565b8063790b3b2b146107235780637b99fab51461074e5780637e02d105146107775780638a16766d146107a05780638d6cc56d146107cb5780638da5cb5b146107f4576102c9565b80633ccfd60b116102345780635c975abb116101ed5780636f8b44b0116101c75780636f8b44b01461067b57806370a08231146106a4578063714c5398146106e1578063715018a61461070c576102c9565b80635c975abb146105ea5780636352211e146106155780636ea451e414610652576102c9565b80633ccfd60b146104ee57806342842e0e14610505578063438b63001461052e578063518302271461056b57806355f804b3146105965780635c474f9e146105bf576102c9565b8063095ea7b311610286578063095ea7b3146103f257806318160ddd1461041b5780631ee525d41461044657806322212e2b1461046f57806323b872dd1461049a578063364e1efd146104c3576102c9565b806301ffc9a7146102ce57806304549d6f1461030b57806304c98b2b1461033657806306fdde031461034d578063081812fc14610378578063094e4072146103b5575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614658565b610b33565b6040516103029190614d18565b60405180910390f35b34801561031757600080fd5b50610320610c15565b60405161032d9190614d18565b60405180910390f35b34801561034257600080fd5b5061034b610c28565b005b34801561035957600080fd5b50610362610d08565b60405161036f9190614d4e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a91906146fb565b610d9a565b6040516103ac9190614c66565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906143f2565b610e16565b6040516103e99190614ef0565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614575565b610e2e565b005b34801561042757600080fd5b50610430610f39565b60405161043d9190614ef0565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906145b5565b610f50565b005b34801561047b57600080fd5b50610484611035565b6040516104919190614d33565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061445f565b61103b565b005b3480156104cf57600080fd5b506104d861104b565b6040516104e59190614ef0565b60405180910390f35b3480156104fa57600080fd5b5061050361118d565b005b34801561051157600080fd5b5061052c6004803603810190610527919061445f565b611467565b005b34801561053a57600080fd5b50610555600480360381019061055091906143f2565b611487565b6040516105629190614cf6565b60405180910390f35b34801561057757600080fd5b50610580611592565b60405161058d9190614d18565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906146b2565b6115a5565b005b3480156105cb57600080fd5b506105d461163b565b6040516105e19190614d18565b60405180910390f35b3480156105f657600080fd5b506105ff61164e565b60405161060c9190614d18565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906146fb565b611661565b6040516106499190614c66565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190614728565b611677565b005b34801561068757600080fd5b506106a2600480360381019061069d91906146fb565b611700565b005b3480156106b057600080fd5b506106cb60048036038101906106c691906143f2565b611786565b6040516106d89190614ef0565b60405180910390f35b3480156106ed57600080fd5b506106f6611856565b6040516107039190614d4e565b60405180910390f35b34801561071857600080fd5b5061072161198f565b005b34801561072f57600080fd5b50610738611a17565b6040516107459190614ef0565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190614755565b611a1d565b005b34801561078357600080fd5b5061079e600480360381019061079991906146b2565b611b06565b005b3480156107ac57600080fd5b506107b5611b9c565b6040516107c29190614ef0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906146fb565b611ba2565b005b34801561080057600080fd5b50610809611c28565b6040516108169190614c66565b60405180910390f35b34801561082b57600080fd5b50610846600480360381019061084191906145fe565b611c52565b005b34801561085457600080fd5b5061085d611ceb565b60405161086a9190614d4e565b60405180910390f35b34801561087f57600080fd5b50610888611d7d565b6040516108959190614ef0565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190614535565b611d83565b005b3480156108d357600080fd5b506108ee60048036038101906108e9919061462b565b611efb565b005b3480156108fc57600080fd5b5061091760048036038101906109129190614728565b611f81565b005b34801561092557600080fd5b5061092e61200a565b005b34801561093c57600080fd5b50610957600480360381019061095291906144b2565b6120ea565b005b34801561096557600080fd5b50610980600480360381019061097b91906145fe565b612166565b005b61099c60048036038101906109979190614728565b6121ff565b005b3480156109aa57600080fd5b506109c560048036038101906109c091906143f2565b61246b565b6040516109d29190614ef0565b60405180910390f35b3480156109e757600080fd5b506109f0612483565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906146fb565b612563565b604051610a269190614d4e565b60405180910390f35b348015610a3b57600080fd5b50610a44612686565b604051610a519190614d4e565b60405180910390f35b348015610a6657600080fd5b50610a6f612794565b604051610a7c9190614ef0565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa7919061441f565b61279a565b604051610ab99190614d18565b60405180910390f35b610adc6004803603810190610ad79190614795565b61282e565b005b348015610aea57600080fd5b50610b056004803603810190610b0091906143f2565b612b53565b005b348015610b1357600080fd5b50610b1c612c4b565b604051610b2a929190614ccd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0e5750610c0d82612c7d565b5b9050919050565b601460009054906101000a900460ff1681565b610c30612ce7565b73ffffffffffffffffffffffffffffffffffffffff16610c4e611c28565b73ffffffffffffffffffffffffffffffffffffffff1614610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90614e50565b60405180910390fd5b6001601460006101000a81548160ff0219169083151502179055506000601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b606060028054610d179061523c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d439061523c565b8015610d905780601f10610d6557610100808354040283529160200191610d90565b820191906000526020600020905b815481529060010190602001808311610d7357829003601f168201915b5050505050905090565b6000610da582612cef565b610ddb576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60126020528060005260406000206000915090505481565b6000610e3982611661565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea1576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ec0612ce7565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ef25750610ef081610eeb612ce7565b61279a565b155b15610f29576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f34838383612d3d565b505050565b6000610f43612def565b6001546000540303905090565b610f58612ce7565b73ffffffffffffffffffffffffffffffffffffffff16610f76611c28565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614e50565b60405180910390fd5b60005b81518110156110315761101e828281518110610fee57610fed6153ca565b5b60200260200101516000015183838151811061100d5761100c6153ca565b5b602002602001015160200151612df8565b80806110299061529f565b915050610fcf565b5050565b60155481565b6110468383836130d5565b505050565b6000601460009054906101000a900460ff16806110745750601160009054906101000a900460ff165b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614df0565b60405180910390fd5b601460009054906101000a900460ff161561111c57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601354611115919061513b565b905061118a565b601160009054906101000a900460ff161561118557600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460105461117e919061513b565b905061118a565b600090505b90565b611195612ce7565b73ffffffffffffffffffffffffffffffffffffffff166111b3611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614e50565b60405180910390fd5b60006064600f4761121a91906150e1565b61122491906150b0565b905060006064600f4761123791906150e1565b61124191906150b0565b905060006064601f4761125491906150e1565b61125e91906150b0565b9050600073dcd6b7449167220724084bfd61f9b205c7dfa5a173ffffffffffffffffffffffffffffffffffffffff168460405161129a90614c51565b60006040518083038185875af1925050503d80600081146112d7576040519150601f19603f3d011682016040523d82523d6000602084013e6112dc565b606091505b50509050806112ea57600080fd5b600073026bf664d2c84e4da15b18d66e41ab8180f2bda373ffffffffffffffffffffffffffffffffffffffff168460405161132490614c51565b60006040518083038185875af1925050503d8060008114611361576040519150601f19603f3d011682016040523d82523d6000602084013e611366565b606091505b505090508061137457600080fd5b600073e1840cc1bc1c80c576faed0de39fc2c92e6440ca73ffffffffffffffffffffffffffffffffffffffff16846040516113ae90614c51565b60006040518083038185875af1925050503d80600081146113eb576040519150601f19603f3d011682016040523d82523d6000602084013e6113f0565b606091505b50509050806113fe57600080fd5b600047905073bf95b5444c3f8d671183ec87984d04b32c842d8973ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561145d573d6000803e3d6000fd5b5050505050505050565b611482838383604051806020016040528060008152506120ea565b505050565b6060600061149483611786565b905060008167ffffffffffffffff8111156114b2576114b16153f9565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060006001905060005b83811080156114fd5750600d548211155b1561158657600061150d83611661565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115725782848381518110611557576115566153ca565b5b602002602001018181525050818061156e9061529f565b9250505b828061157d9061529f565b935050506114ec565b82945050505050919050565b601660009054906101000a900460ff1681565b6115ad612ce7565b73ffffffffffffffffffffffffffffffffffffffff166115cb611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614e50565b60405180910390fd5b80600a9080519060200190611637929190614055565b5050565b601160009054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b600061166c8261358b565b600001519050919050565b61167f612ce7565b73ffffffffffffffffffffffffffffffffffffffff1661169d611c28565b73ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90614e50565b60405180910390fd5b8060ff1660108190555050565b611708612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611726611c28565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614e50565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ee576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6060601660009054906101000a900460ff166118fe57600b80546118799061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a59061523c565b80156118f25780601f106118c7576101008083540402835291602001916118f2565b820191906000526020600020905b8154815290600101906020018083116118d557829003601f168201915b5050505050905061198c565b600a805461190b9061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546119379061523c565b80156119845780601f1061195957610100808354040283529160200191611984565b820191906000526020600020905b81548152906001019060200180831161196757829003601f168201915b505050505090505b90565b611997612ce7565b73ffffffffffffffffffffffffffffffffffffffff166119b5611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e50565b60405180910390fd5b611a15600061381a565b565b60105481565b81600d548160ff16611a2d610f39565b611a37919061505a565b1115611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614dd0565b60405180910390fd5b611a80612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614e50565b60405180910390fd5b611b01828460ff166138e0565b505050565b611b0e612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614e50565b60405180910390fd5b80600b9080519060200190611b98929190614055565b5050565b60135481565b611baa612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611bc8611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614e50565b60405180910390fd5b80600e8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c5a612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611c78611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc590614e50565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b606060038054611cfa9061523c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d269061523c565b8015611d735780601f10611d4857610100808354040283529160200191611d73565b820191906000526020600020905b815481529060010190602001808311611d5657829003601f168201915b5050505050905090565b600e5481565b611d8b612ce7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611dfd612ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611eaa612ce7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eef9190614d18565b60405180910390a35050565b611f03612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611f21611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90614e50565b60405180910390fd5b8060158190555050565b611f89612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611fa7611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614e50565b60405180910390fd5b8060ff1660138190555050565b612012612ce7565b73ffffffffffffffffffffffffffffffffffffffff16612030611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90614e50565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b6120f58484846130d5565b6121148373ffffffffffffffffffffffffffffffffffffffff166138fe565b8015612129575061212784848484613921565b155b15612160576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61216e612ce7565b73ffffffffffffffffffffffffffffffffffffffff1661218c611c28565b73ffffffffffffffffffffffffffffffffffffffff16146121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614e50565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff161561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614eb0565b60405180910390fd5b60026009541415612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c90614ed0565b60405180910390fd5b60026009819055508034600e548260ff166122b091906150e1565b146122ba57600080fd5b81600d548160ff166122ca610f39565b6122d4919061505a565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90614dd0565b60405180910390fd5b82601160009054906101000a900460ff16612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614e90565b60405180910390fd5b6010548160ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b6919061505a565b11156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614d70565b60405180910390fd5b8360ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612449919061505a565b9250508190555061245d338560ff166138e0565b505050600160098190555050565b600f6020528060005260406000206000915090505481565b61248b612ce7565b73ffffffffffffffffffffffffffffffffffffffff166124a9611c28565b73ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614e50565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506000601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b606061256e82612cef565b6125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a490614e30565b60405180910390fd5b601660009054906101000a900460ff1661265357600b80546125ce9061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546125fa9061523c565b80156126475780601f1061261c57610100808354040283529160200191612647565b820191906000526020600020905b81548152906001019060200180831161262a57829003601f168201915b50505050509050612681565b600a61265e83613a81565b60405160200161266f929190614c17565b60405160208183030381529060405290505b919050565b6060612690612ce7565b73ffffffffffffffffffffffffffffffffffffffff166126ae611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614e50565b60405180910390fd5b600a80546127119061523c565b80601f016020809104026020016040519081016040528092919081815260200182805461273d9061523c565b801561278a5780601f1061275f5761010080835404028352916020019161278a565b820191906000526020600020905b81548152906001019060200180831161276d57829003601f168201915b5050505050905090565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c60009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614eb0565b60405180910390fd5b600260095414156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614ed0565b60405180910390fd5b60026009819055508234600e548260ff166128df91906150e1565b146128e957600080fd5b83600d548160ff166128f9610f39565b612903919061505a565b1115612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614dd0565b60405180910390fd5b83836129ba828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506015543360405160200161299f9190614bfc565b60405160208183030381529060405280519060200120613be2565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614e10565b60405180910390fd5b86601460009054906101000a900460ff16612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614e70565b60405180910390fd5b6013548160ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a9a919061505a565b1115612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290614db0565b60405180910390fd5b8760ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2d919061505a565b92505081905550612b41338960ff166138e0565b50505050506001600981905550505050565b612b5b612ce7565b73ffffffffffffffffffffffffffffffffffffffff16612b79611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc690614e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690614d90565b60405180910390fd5b612c488161381a565b50565b60178060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612cfa612def565b11158015612d09575060005482105b8015612d36575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e65576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415612ea0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ead6000848385613bf9565b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550826004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613050578160008190555050506130d06000848385613bff565b505050565b60006130e08261358b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461314b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661316c612ce7565b73ffffffffffffffffffffffffffffffffffffffff16148061319b575061319a85613195612ce7565b61279a565b5b806131e057506131a9612ce7565b73ffffffffffffffffffffffffffffffffffffffff166131c884610d9a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613219576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613280576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61328d8585856001613bf9565b61329960008487612d3d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561351957600054821461351857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135848585856001613bff565b5050505050565b6135936140db565b6000829050806135a1612def565b111580156135b0575060005481105b156137e3576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516137e157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136c5578092505050613815565b5b6001156137e057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146137db578092505050613815565b6136c6565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138fa828260405180602001604052806000815250613c05565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613947612ce7565b8786866040518563ffffffff1660e01b81526004016139699493929190614c81565b602060405180830381600087803b15801561398357600080fd5b505af19250505080156139b457506040513d601f19601f820116820180604052508101906139b19190614685565b60015b613a2e573d80600081146139e4576040519150601f19603f3d011682016040523d82523d6000602084013e6139e9565b606091505b50600081511415613a26576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415613ac9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613bdd565b600082905060005b60008214613afb578080613ae49061529f565b915050600a82613af491906150b0565b9150613ad1565b60008167ffffffffffffffff811115613b1757613b166153f9565b5b6040519080825280601f01601f191660200182016040528015613b495781602001600182028036833780820191505090505b5090505b60008514613bd657600182613b62919061513b565b9150600a85613b71919061530c565b6030613b7d919061505a565b60f81b818381518110613b9357613b926153ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613bcf91906150b0565b9450613b4d565b8093505050505b919050565b600082613bef8584613fc9565b1490509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613c72576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613cad576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cba6000858386613bf9565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050613e7b8673ffffffffffffffffffffffffffffffffffffffff166138fe565b15613f41575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ef06000878480600101955087613921565b613f26576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613e81578260005414613f3c57600080fd5b613fad565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f42575b816000819055505050613fc36000858386613bff565b50505050565b60008082905060005b8451811015614033576000858281518110613ff057613fef6153ca565b5b602002602001015190508083116140125761400b838261403e565b925061401f565b61401c818461403e565b92505b50808061402b9061529f565b915050613fd2565b508091505092915050565b600082600052816020526040600020905092915050565b8280546140619061523c565b90600052602060002090601f01602090048101928261408357600085556140ca565b82601f1061409c57805160ff19168380011785556140ca565b828001600101855582156140ca579182015b828111156140c95782518255916020019190600101906140ae565b5b5090506140d7919061411e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561413757600081600090555060010161411f565b5090565b600061414e61414984614f30565b614f0b565b9050808382526020820190508285604086028201111561417157614170615437565b5b60005b858110156141a157816141878882614378565b845260208401935060408301925050600181019050614174565b5050509392505050565b60006141be6141b984614f5c565b614f0b565b9050828152602081018484840111156141da576141d961543c565b5b6141e58482856151fa565b509392505050565b60006142006141fb84614f8d565b614f0b565b90508281526020810184848401111561421c5761421b61543c565b5b6142278482856151fa565b509392505050565b60008135905061423e816156d0565b92915050565b60008083601f84011261425a5761425961542d565b5b8235905067ffffffffffffffff81111561427757614276615428565b5b60208301915083602082028301111561429357614292615437565b5b9250929050565b600082601f8301126142af576142ae61542d565b5b81356142bf84826020860161413b565b91505092915050565b6000813590506142d7816156e7565b92915050565b6000813590506142ec816156fe565b92915050565b60008135905061430181615715565b92915050565b60008151905061431681615715565b92915050565b600082601f8301126143315761433061542d565b5b81356143418482602086016141ab565b91505092915050565b600082601f83011261435f5761435e61542d565b5b813561436f8482602086016141ed565b91505092915050565b60006040828403121561438e5761438d615432565b5b6143986040614f0b565b905060006143a88482850161422f565b60008301525060206143bc848285016143c8565b60208301525092915050565b6000813590506143d78161572c565b92915050565b6000813590506143ec81615743565b92915050565b60006020828403121561440857614407615446565b5b60006144168482850161422f565b91505092915050565b6000806040838503121561443657614435615446565b5b60006144448582860161422f565b92505060206144558582860161422f565b9150509250929050565b60008060006060848603121561447857614477615446565b5b60006144868682870161422f565b93505060206144978682870161422f565b92505060406144a8868287016143c8565b9150509250925092565b600080600080608085870312156144cc576144cb615446565b5b60006144da8782880161422f565b94505060206144eb8782880161422f565b93505060406144fc878288016143c8565b925050606085013567ffffffffffffffff81111561451d5761451c615441565b5b6145298782880161431c565b91505092959194509250565b6000806040838503121561454c5761454b615446565b5b600061455a8582860161422f565b925050602061456b858286016142c8565b9150509250929050565b6000806040838503121561458c5761458b615446565b5b600061459a8582860161422f565b92505060206145ab858286016143c8565b9150509250929050565b6000602082840312156145cb576145ca615446565b5b600082013567ffffffffffffffff8111156145e9576145e8615441565b5b6145f58482850161429a565b91505092915050565b60006020828403121561461457614613615446565b5b6000614622848285016142c8565b91505092915050565b60006020828403121561464157614640615446565b5b600061464f848285016142dd565b91505092915050565b60006020828403121561466e5761466d615446565b5b600061467c848285016142f2565b91505092915050565b60006020828403121561469b5761469a615446565b5b60006146a984828501614307565b91505092915050565b6000602082840312156146c8576146c7615446565b5b600082013567ffffffffffffffff8111156146e6576146e5615441565b5b6146f28482850161434a565b91505092915050565b60006020828403121561471157614710615446565b5b600061471f848285016143c8565b91505092915050565b60006020828403121561473e5761473d615446565b5b600061474c848285016143dd565b91505092915050565b6000806040838503121561476c5761476b615446565b5b600061477a858286016143dd565b925050602061478b8582860161422f565b9150509250929050565b6000806000604084860312156147ae576147ad615446565b5b60006147bc868287016143dd565b935050602084013567ffffffffffffffff8111156147dd576147dc615441565b5b6147e986828701614244565b92509250509250925092565b60006148018383614bde565b60208301905092915050565b6148168161516f565b82525050565b61482d6148288261516f565b6152e8565b82525050565b600061483e82614fe3565b6148488185615011565b935061485383614fbe565b8060005b8381101561488457815161486b88826147f5565b975061487683615004565b925050600181019050614857565b5085935050505092915050565b61489a81615181565b82525050565b6148a98161518d565b82525050565b60006148ba82614fee565b6148c48185615022565b93506148d4818560208601615209565b6148dd8161544b565b840191505092915050565b60006148f382614ff9565b6148fd818561503e565b935061490d818560208601615209565b6149168161544b565b840191505092915050565b600061492c82614ff9565b614936818561504f565b9350614946818560208601615209565b80840191505092915050565b6000815461495f8161523c565b614969818661504f565b945060018216600081146149845760018114614995576149c8565b60ff198316865281860193506149c8565b61499e85614fce565b60005b838110156149c0578154818901526001820191506020810190506149a1565b838801955050505b50505092915050565b60006149de60148361503e565b91506149e982615469565b602082019050919050565b6000614a0160268361503e565b9150614a0c82615492565b604082019050919050565b6000614a2460148361503e565b9150614a2f826154e1565b602082019050919050565b6000614a47600e8361503e565b9150614a528261550a565b602082019050919050565b6000614a6a60188361503e565b9150614a7582615533565b602082019050919050565b6000614a8d601e8361503e565b9150614a988261555c565b602082019050919050565b6000614ab060118361503e565b9150614abb82615585565b602082019050919050565b6000614ad360058361504f565b9150614ade826155ae565b600582019050919050565b6000614af660208361503e565b9150614b01826155d7565b602082019050919050565b6000614b1960178361503e565b9150614b2482615600565b602082019050919050565b6000614b3c600083615033565b9150614b4782615629565b600082019050919050565b6000614b5f60148361503e565b9150614b6a8261562c565b602082019050919050565b6000614b8260128361503e565b9150614b8d82615655565b602082019050919050565b6000614ba5601f8361503e565b9150614bb08261567e565b602082019050919050565b6000614bc860018361504f565b9150614bd3826156a7565b600182019050919050565b614be7816151e3565b82525050565b614bf6816151e3565b82525050565b6000614c08828461481c565b60148201915081905092915050565b6000614c238285614952565b9150614c2e82614bbb565b9150614c3a8284614921565b9150614c4582614ac6565b91508190509392505050565b6000614c5c82614b2f565b9150819050919050565b6000602082019050614c7b600083018461480d565b92915050565b6000608082019050614c96600083018761480d565b614ca3602083018661480d565b614cb06040830185614bed565b8181036060830152614cc281846148af565b905095945050505050565b6000604082019050614ce2600083018561480d565b614cef6020830184614bed565b9392505050565b60006020820190508181036000830152614d108184614833565b905092915050565b6000602082019050614d2d6000830184614891565b92915050565b6000602082019050614d4860008301846148a0565b92915050565b60006020820190508181036000830152614d6881846148e8565b905092915050565b60006020820190508181036000830152614d89816149d1565b9050919050565b60006020820190508181036000830152614da9816149f4565b9050919050565b60006020820190508181036000830152614dc981614a17565b9050919050565b60006020820190508181036000830152614de981614a3a565b9050919050565b60006020820190508181036000830152614e0981614a5d565b9050919050565b60006020820190508181036000830152614e2981614a80565b9050919050565b60006020820190508181036000830152614e4981614aa3565b9050919050565b60006020820190508181036000830152614e6981614ae9565b9050919050565b60006020820190508181036000830152614e8981614b0c565b9050919050565b60006020820190508181036000830152614ea981614b52565b9050919050565b60006020820190508181036000830152614ec981614b75565b9050919050565b60006020820190508181036000830152614ee981614b98565b9050919050565b6000602082019050614f056000830184614bed565b92915050565b6000614f15614f26565b9050614f21828261526e565b919050565b6000604051905090565b600067ffffffffffffffff821115614f4b57614f4a6153f9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f7757614f766153f9565b5b614f808261544b565b9050602081019050919050565b600067ffffffffffffffff821115614fa857614fa76153f9565b5b614fb18261544b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615065826151e3565b9150615070836151e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150a5576150a461533d565b5b828201905092915050565b60006150bb826151e3565b91506150c6836151e3565b9250826150d6576150d561536c565b5b828204905092915050565b60006150ec826151e3565b91506150f7836151e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151305761512f61533d565b5b828202905092915050565b6000615146826151e3565b9150615151836151e3565b9250828210156151645761516361533d565b5b828203905092915050565b600061517a826151c3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561522757808201518184015260208101905061520c565b83811115615236576000848401525b50505050565b6000600282049050600182168061525457607f821691505b602082108114156152685761526761539b565b5b50919050565b6152778261544b565b810181811067ffffffffffffffff82111715615296576152956153f9565b5b80604052505050565b60006152aa826151e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152dd576152dc61533d565b5b600182019050919050565b60006152f3826152fa565b9050919050565b60006153058261545c565b9050919050565b6000615317826151e3565b9150615322836151e3565b9250826153325761533161536c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f77616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b7f4e6f206d6f726520746f6b656e73000000000000000000000000000000000000600082015250565b7f53616c6573207761736e27742073746172746564207965740000000000000000600082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f50726573616c65206d7573742062652073746172746564000000000000000000600082015250565b50565b7f53616c65206d7573742062652073746172746564000000000000000000000000600082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6156d98161516f565b81146156e457600080fd5b50565b6156f081615181565b81146156fb57600080fd5b50565b6157078161518d565b811461571257600080fd5b50565b61571e81615197565b811461572957600080fd5b50565b615735816151e3565b811461574057600080fd5b50565b61574c816151ed565b811461575757600080fd5b5056fea26469706673582212206cd6882485e9e2c573f5785199051cbb812888ebef051cf9791480afae3f999464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d53393663535941393344655358565931583676376661595a3144695056616d6b6d564c4845445a61774a436500000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51654c795154445171516f36377563624c4a5a324d74324b7233697933636f5666394a62356a6857557a314d0000000000000000000000
Deployed Bytecode
0x6080604052600436106102c95760003560e01c8063790b3b2b11610175578063b66a0e5d116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610a85578063f218c01c14610ac2578063f2fde38b14610ade578063fd8607e514610b07576102c9565b8063c87b56dd146109f2578063d288823f14610a2f578063d5abeb0114610a5a576102c9565b8063b66a0e5d14610919578063b88d4fde14610930578063bedb86fb14610959578063bf79334614610982578063c0f6baa41461099e578063c1e1d954146109db576102c9565b8063940cd05b1161012e578063940cd05b1461081f57806395d89b4114610848578063a035b1fe14610873578063a22cb4651461089e578063a643ed30146108c7578063a74ea6ce146108f0576102c9565b8063790b3b2b146107235780637b99fab51461074e5780637e02d105146107775780638a16766d146107a05780638d6cc56d146107cb5780638da5cb5b146107f4576102c9565b80633ccfd60b116102345780635c975abb116101ed5780636f8b44b0116101c75780636f8b44b01461067b57806370a08231146106a4578063714c5398146106e1578063715018a61461070c576102c9565b80635c975abb146105ea5780636352211e146106155780636ea451e414610652576102c9565b80633ccfd60b146104ee57806342842e0e14610505578063438b63001461052e578063518302271461056b57806355f804b3146105965780635c474f9e146105bf576102c9565b8063095ea7b311610286578063095ea7b3146103f257806318160ddd1461041b5780631ee525d41461044657806322212e2b1461046f57806323b872dd1461049a578063364e1efd146104c3576102c9565b806301ffc9a7146102ce57806304549d6f1461030b57806304c98b2b1461033657806306fdde031461034d578063081812fc14610378578063094e4072146103b5575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614658565b610b33565b6040516103029190614d18565b60405180910390f35b34801561031757600080fd5b50610320610c15565b60405161032d9190614d18565b60405180910390f35b34801561034257600080fd5b5061034b610c28565b005b34801561035957600080fd5b50610362610d08565b60405161036f9190614d4e565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a91906146fb565b610d9a565b6040516103ac9190614c66565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906143f2565b610e16565b6040516103e99190614ef0565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190614575565b610e2e565b005b34801561042757600080fd5b50610430610f39565b60405161043d9190614ef0565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906145b5565b610f50565b005b34801561047b57600080fd5b50610484611035565b6040516104919190614d33565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061445f565b61103b565b005b3480156104cf57600080fd5b506104d861104b565b6040516104e59190614ef0565b60405180910390f35b3480156104fa57600080fd5b5061050361118d565b005b34801561051157600080fd5b5061052c6004803603810190610527919061445f565b611467565b005b34801561053a57600080fd5b50610555600480360381019061055091906143f2565b611487565b6040516105629190614cf6565b60405180910390f35b34801561057757600080fd5b50610580611592565b60405161058d9190614d18565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b891906146b2565b6115a5565b005b3480156105cb57600080fd5b506105d461163b565b6040516105e19190614d18565b60405180910390f35b3480156105f657600080fd5b506105ff61164e565b60405161060c9190614d18565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906146fb565b611661565b6040516106499190614c66565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190614728565b611677565b005b34801561068757600080fd5b506106a2600480360381019061069d91906146fb565b611700565b005b3480156106b057600080fd5b506106cb60048036038101906106c691906143f2565b611786565b6040516106d89190614ef0565b60405180910390f35b3480156106ed57600080fd5b506106f6611856565b6040516107039190614d4e565b60405180910390f35b34801561071857600080fd5b5061072161198f565b005b34801561072f57600080fd5b50610738611a17565b6040516107459190614ef0565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190614755565b611a1d565b005b34801561078357600080fd5b5061079e600480360381019061079991906146b2565b611b06565b005b3480156107ac57600080fd5b506107b5611b9c565b6040516107c29190614ef0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906146fb565b611ba2565b005b34801561080057600080fd5b50610809611c28565b6040516108169190614c66565b60405180910390f35b34801561082b57600080fd5b50610846600480360381019061084191906145fe565b611c52565b005b34801561085457600080fd5b5061085d611ceb565b60405161086a9190614d4e565b60405180910390f35b34801561087f57600080fd5b50610888611d7d565b6040516108959190614ef0565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190614535565b611d83565b005b3480156108d357600080fd5b506108ee60048036038101906108e9919061462b565b611efb565b005b3480156108fc57600080fd5b5061091760048036038101906109129190614728565b611f81565b005b34801561092557600080fd5b5061092e61200a565b005b34801561093c57600080fd5b50610957600480360381019061095291906144b2565b6120ea565b005b34801561096557600080fd5b50610980600480360381019061097b91906145fe565b612166565b005b61099c60048036038101906109979190614728565b6121ff565b005b3480156109aa57600080fd5b506109c560048036038101906109c091906143f2565b61246b565b6040516109d29190614ef0565b60405180910390f35b3480156109e757600080fd5b506109f0612483565b005b3480156109fe57600080fd5b50610a196004803603810190610a1491906146fb565b612563565b604051610a269190614d4e565b60405180910390f35b348015610a3b57600080fd5b50610a44612686565b604051610a519190614d4e565b60405180910390f35b348015610a6657600080fd5b50610a6f612794565b604051610a7c9190614ef0565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa7919061441f565b61279a565b604051610ab99190614d18565b60405180910390f35b610adc6004803603810190610ad79190614795565b61282e565b005b348015610aea57600080fd5b50610b056004803603810190610b0091906143f2565b612b53565b005b348015610b1357600080fd5b50610b1c612c4b565b604051610b2a929190614ccd565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bfe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c0e5750610c0d82612c7d565b5b9050919050565b601460009054906101000a900460ff1681565b610c30612ce7565b73ffffffffffffffffffffffffffffffffffffffff16610c4e611c28565b73ffffffffffffffffffffffffffffffffffffffff1614610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90614e50565b60405180910390fd5b6001601460006101000a81548160ff0219169083151502179055506000601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b606060028054610d179061523c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d439061523c565b8015610d905780601f10610d6557610100808354040283529160200191610d90565b820191906000526020600020905b815481529060010190602001808311610d7357829003601f168201915b5050505050905090565b6000610da582612cef565b610ddb576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60126020528060005260406000206000915090505481565b6000610e3982611661565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ea1576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ec0612ce7565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ef25750610ef081610eeb612ce7565b61279a565b155b15610f29576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f34838383612d3d565b505050565b6000610f43612def565b6001546000540303905090565b610f58612ce7565b73ffffffffffffffffffffffffffffffffffffffff16610f76611c28565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc390614e50565b60405180910390fd5b60005b81518110156110315761101e828281518110610fee57610fed6153ca565b5b60200260200101516000015183838151811061100d5761100c6153ca565b5b602002602001015160200151612df8565b80806110299061529f565b915050610fcf565b5050565b60155481565b6110468383836130d5565b505050565b6000601460009054906101000a900460ff16806110745750601160009054906101000a900460ff165b6110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110aa90614df0565b60405180910390fd5b601460009054906101000a900460ff161561111c57601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601354611115919061513b565b905061118a565b601160009054906101000a900460ff161561118557600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460105461117e919061513b565b905061118a565b600090505b90565b611195612ce7565b73ffffffffffffffffffffffffffffffffffffffff166111b3611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614e50565b60405180910390fd5b60006064600f4761121a91906150e1565b61122491906150b0565b905060006064600f4761123791906150e1565b61124191906150b0565b905060006064601f4761125491906150e1565b61125e91906150b0565b9050600073dcd6b7449167220724084bfd61f9b205c7dfa5a173ffffffffffffffffffffffffffffffffffffffff168460405161129a90614c51565b60006040518083038185875af1925050503d80600081146112d7576040519150601f19603f3d011682016040523d82523d6000602084013e6112dc565b606091505b50509050806112ea57600080fd5b600073026bf664d2c84e4da15b18d66e41ab8180f2bda373ffffffffffffffffffffffffffffffffffffffff168460405161132490614c51565b60006040518083038185875af1925050503d8060008114611361576040519150601f19603f3d011682016040523d82523d6000602084013e611366565b606091505b505090508061137457600080fd5b600073e1840cc1bc1c80c576faed0de39fc2c92e6440ca73ffffffffffffffffffffffffffffffffffffffff16846040516113ae90614c51565b60006040518083038185875af1925050503d80600081146113eb576040519150601f19603f3d011682016040523d82523d6000602084013e6113f0565b606091505b50509050806113fe57600080fd5b600047905073bf95b5444c3f8d671183ec87984d04b32c842d8973ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561145d573d6000803e3d6000fd5b5050505050505050565b611482838383604051806020016040528060008152506120ea565b505050565b6060600061149483611786565b905060008167ffffffffffffffff8111156114b2576114b16153f9565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060006001905060005b83811080156114fd5750600d548211155b1561158657600061150d83611661565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115725782848381518110611557576115566153ca565b5b602002602001018181525050818061156e9061529f565b9250505b828061157d9061529f565b935050506114ec565b82945050505050919050565b601660009054906101000a900460ff1681565b6115ad612ce7565b73ffffffffffffffffffffffffffffffffffffffff166115cb611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614e50565b60405180910390fd5b80600a9080519060200190611637929190614055565b5050565b601160009054906101000a900460ff1681565b600c60009054906101000a900460ff1681565b600061166c8261358b565b600001519050919050565b61167f612ce7565b73ffffffffffffffffffffffffffffffffffffffff1661169d611c28565b73ffffffffffffffffffffffffffffffffffffffff16146116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90614e50565b60405180910390fd5b8060ff1660108190555050565b611708612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611726611c28565b73ffffffffffffffffffffffffffffffffffffffff161461177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614e50565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ee576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6060601660009054906101000a900460ff166118fe57600b80546118799061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a59061523c565b80156118f25780601f106118c7576101008083540402835291602001916118f2565b820191906000526020600020905b8154815290600101906020018083116118d557829003601f168201915b5050505050905061198c565b600a805461190b9061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546119379061523c565b80156119845780601f1061195957610100808354040283529160200191611984565b820191906000526020600020905b81548152906001019060200180831161196757829003601f168201915b505050505090505b90565b611997612ce7565b73ffffffffffffffffffffffffffffffffffffffff166119b5611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614e50565b60405180910390fd5b611a15600061381a565b565b60105481565b81600d548160ff16611a2d610f39565b611a37919061505a565b1115611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614dd0565b60405180910390fd5b611a80612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611a9e611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90614e50565b60405180910390fd5b611b01828460ff166138e0565b505050565b611b0e612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614e50565b60405180910390fd5b80600b9080519060200190611b98929190614055565b5050565b60135481565b611baa612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611bc8611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1590614e50565b60405180910390fd5b80600e8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c5a612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611c78611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc590614e50565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b606060038054611cfa9061523c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d269061523c565b8015611d735780601f10611d4857610100808354040283529160200191611d73565b820191906000526020600020905b815481529060010190602001808311611d5657829003601f168201915b5050505050905090565b600e5481565b611d8b612ce7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df0576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611dfd612ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611eaa612ce7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eef9190614d18565b60405180910390a35050565b611f03612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611f21611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90614e50565b60405180910390fd5b8060158190555050565b611f89612ce7565b73ffffffffffffffffffffffffffffffffffffffff16611fa7611c28565b73ffffffffffffffffffffffffffffffffffffffff1614611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614e50565b60405180910390fd5b8060ff1660138190555050565b612012612ce7565b73ffffffffffffffffffffffffffffffffffffffff16612030611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207d90614e50565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b6120f58484846130d5565b6121148373ffffffffffffffffffffffffffffffffffffffff166138fe565b8015612129575061212784848484613921565b155b15612160576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61216e612ce7565b73ffffffffffffffffffffffffffffffffffffffff1661218c611c28565b73ffffffffffffffffffffffffffffffffffffffff16146121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614e50565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff161561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614eb0565b60405180910390fd5b60026009541415612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c90614ed0565b60405180910390fd5b60026009819055508034600e548260ff166122b091906150e1565b146122ba57600080fd5b81600d548160ff166122ca610f39565b6122d4919061505a565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90614dd0565b60405180910390fd5b82601160009054906101000a900460ff16612365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235c90614e90565b60405180910390fd5b6010548160ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123b6919061505a565b11156123f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90614d70565b60405180910390fd5b8360ff16600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612449919061505a565b9250508190555061245d338560ff166138e0565b505050600160098190555050565b600f6020528060005260406000206000915090505481565b61248b612ce7565b73ffffffffffffffffffffffffffffffffffffffff166124a9611c28565b73ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614e50565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506000601160006101000a81548160ff0219169083151502179055507f3c05c19539e74cee588cdd346d1ce1d0e3f2b2f7c68e888ec5adb697442deaa660405160405180910390a1565b606061256e82612cef565b6125ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a490614e30565b60405180910390fd5b601660009054906101000a900460ff1661265357600b80546125ce9061523c565b80601f01602080910402602001604051908101604052809291908181526020018280546125fa9061523c565b80156126475780601f1061261c57610100808354040283529160200191612647565b820191906000526020600020905b81548152906001019060200180831161262a57829003601f168201915b50505050509050612681565b600a61265e83613a81565b60405160200161266f929190614c17565b60405160208183030381529060405290505b919050565b6060612690612ce7565b73ffffffffffffffffffffffffffffffffffffffff166126ae611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb90614e50565b60405180910390fd5b600a80546127119061523c565b80601f016020809104026020016040519081016040528092919081815260200182805461273d9061523c565b801561278a5780601f1061275f5761010080835404028352916020019161278a565b820191906000526020600020905b81548152906001019060200180831161276d57829003601f168201915b5050505050905090565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c60009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614eb0565b60405180910390fd5b600260095414156128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614ed0565b60405180910390fd5b60026009819055508234600e548260ff166128df91906150e1565b146128e957600080fd5b83600d548160ff166128f9610f39565b612903919061505a565b1115612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614dd0565b60405180910390fd5b83836129ba828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506015543360405160200161299f9190614bfc565b60405160208183030381529060405280519060200120613be2565b6129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f090614e10565b60405180910390fd5b86601460009054906101000a900460ff16612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614e70565b60405180910390fd5b6013548160ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a9a919061505a565b1115612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290614db0565b60405180910390fd5b8760ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2d919061505a565b92505081905550612b41338960ff166138e0565b50505050506001600981905550505050565b612b5b612ce7565b73ffffffffffffffffffffffffffffffffffffffff16612b79611c28565b73ffffffffffffffffffffffffffffffffffffffff1614612bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc690614e50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3690614d90565b60405180910390fd5b612c488161381a565b50565b60178060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612cfa612def565b11158015612d09575060005482105b8015612d36575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e65576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415612ea0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ead6000848385613bf9565b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550826004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613050578160008190555050506130d06000848385613bff565b505050565b60006130e08261358b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461314b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661316c612ce7565b73ffffffffffffffffffffffffffffffffffffffff16148061319b575061319a85613195612ce7565b61279a565b5b806131e057506131a9612ce7565b73ffffffffffffffffffffffffffffffffffffffff166131c884610d9a565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613219576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613280576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61328d8585856001613bf9565b61329960008487612d3d565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561351957600054821461351857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135848585856001613bff565b5050505050565b6135936140db565b6000829050806135a1612def565b111580156135b0575060005481105b156137e3576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516137e157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146136c5578092505050613815565b5b6001156137e057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146137db578092505050613815565b6136c6565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6138fa828260405180602001604052806000815250613c05565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613947612ce7565b8786866040518563ffffffff1660e01b81526004016139699493929190614c81565b602060405180830381600087803b15801561398357600080fd5b505af19250505080156139b457506040513d601f19601f820116820180604052508101906139b19190614685565b60015b613a2e573d80600081146139e4576040519150601f19603f3d011682016040523d82523d6000602084013e6139e9565b606091505b50600081511415613a26576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415613ac9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613bdd565b600082905060005b60008214613afb578080613ae49061529f565b915050600a82613af491906150b0565b9150613ad1565b60008167ffffffffffffffff811115613b1757613b166153f9565b5b6040519080825280601f01601f191660200182016040528015613b495781602001600182028036833780820191505090505b5090505b60008514613bd657600182613b62919061513b565b9150600a85613b71919061530c565b6030613b7d919061505a565b60f81b818381518110613b9357613b926153ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613bcf91906150b0565b9450613b4d565b8093505050505b919050565b600082613bef8584613fc9565b1490509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613c72576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613cad576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cba6000858386613bf9565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050613e7b8673ffffffffffffffffffffffffffffffffffffffff166138fe565b15613f41575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613ef06000878480600101955087613921565b613f26576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613e81578260005414613f3c57600080fd5b613fad565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613f42575b816000819055505050613fc36000858386613bff565b50505050565b60008082905060005b8451811015614033576000858281518110613ff057613fef6153ca565b5b602002602001015190508083116140125761400b838261403e565b925061401f565b61401c818461403e565b92505b50808061402b9061529f565b915050613fd2565b508091505092915050565b600082600052816020526040600020905092915050565b8280546140619061523c565b90600052602060002090601f01602090048101928261408357600085556140ca565b82601f1061409c57805160ff19168380011785556140ca565b828001600101855582156140ca579182015b828111156140c95782518255916020019190600101906140ae565b5b5090506140d7919061411e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561413757600081600090555060010161411f565b5090565b600061414e61414984614f30565b614f0b565b9050808382526020820190508285604086028201111561417157614170615437565b5b60005b858110156141a157816141878882614378565b845260208401935060408301925050600181019050614174565b5050509392505050565b60006141be6141b984614f5c565b614f0b565b9050828152602081018484840111156141da576141d961543c565b5b6141e58482856151fa565b509392505050565b60006142006141fb84614f8d565b614f0b565b90508281526020810184848401111561421c5761421b61543c565b5b6142278482856151fa565b509392505050565b60008135905061423e816156d0565b92915050565b60008083601f84011261425a5761425961542d565b5b8235905067ffffffffffffffff81111561427757614276615428565b5b60208301915083602082028301111561429357614292615437565b5b9250929050565b600082601f8301126142af576142ae61542d565b5b81356142bf84826020860161413b565b91505092915050565b6000813590506142d7816156e7565b92915050565b6000813590506142ec816156fe565b92915050565b60008135905061430181615715565b92915050565b60008151905061431681615715565b92915050565b600082601f8301126143315761433061542d565b5b81356143418482602086016141ab565b91505092915050565b600082601f83011261435f5761435e61542d565b5b813561436f8482602086016141ed565b91505092915050565b60006040828403121561438e5761438d615432565b5b6143986040614f0b565b905060006143a88482850161422f565b60008301525060206143bc848285016143c8565b60208301525092915050565b6000813590506143d78161572c565b92915050565b6000813590506143ec81615743565b92915050565b60006020828403121561440857614407615446565b5b60006144168482850161422f565b91505092915050565b6000806040838503121561443657614435615446565b5b60006144448582860161422f565b92505060206144558582860161422f565b9150509250929050565b60008060006060848603121561447857614477615446565b5b60006144868682870161422f565b93505060206144978682870161422f565b92505060406144a8868287016143c8565b9150509250925092565b600080600080608085870312156144cc576144cb615446565b5b60006144da8782880161422f565b94505060206144eb8782880161422f565b93505060406144fc878288016143c8565b925050606085013567ffffffffffffffff81111561451d5761451c615441565b5b6145298782880161431c565b91505092959194509250565b6000806040838503121561454c5761454b615446565b5b600061455a8582860161422f565b925050602061456b858286016142c8565b9150509250929050565b6000806040838503121561458c5761458b615446565b5b600061459a8582860161422f565b92505060206145ab858286016143c8565b9150509250929050565b6000602082840312156145cb576145ca615446565b5b600082013567ffffffffffffffff8111156145e9576145e8615441565b5b6145f58482850161429a565b91505092915050565b60006020828403121561461457614613615446565b5b6000614622848285016142c8565b91505092915050565b60006020828403121561464157614640615446565b5b600061464f848285016142dd565b91505092915050565b60006020828403121561466e5761466d615446565b5b600061467c848285016142f2565b91505092915050565b60006020828403121561469b5761469a615446565b5b60006146a984828501614307565b91505092915050565b6000602082840312156146c8576146c7615446565b5b600082013567ffffffffffffffff8111156146e6576146e5615441565b5b6146f28482850161434a565b91505092915050565b60006020828403121561471157614710615446565b5b600061471f848285016143c8565b91505092915050565b60006020828403121561473e5761473d615446565b5b600061474c848285016143dd565b91505092915050565b6000806040838503121561476c5761476b615446565b5b600061477a858286016143dd565b925050602061478b8582860161422f565b9150509250929050565b6000806000604084860312156147ae576147ad615446565b5b60006147bc868287016143dd565b935050602084013567ffffffffffffffff8111156147dd576147dc615441565b5b6147e986828701614244565b92509250509250925092565b60006148018383614bde565b60208301905092915050565b6148168161516f565b82525050565b61482d6148288261516f565b6152e8565b82525050565b600061483e82614fe3565b6148488185615011565b935061485383614fbe565b8060005b8381101561488457815161486b88826147f5565b975061487683615004565b925050600181019050614857565b5085935050505092915050565b61489a81615181565b82525050565b6148a98161518d565b82525050565b60006148ba82614fee565b6148c48185615022565b93506148d4818560208601615209565b6148dd8161544b565b840191505092915050565b60006148f382614ff9565b6148fd818561503e565b935061490d818560208601615209565b6149168161544b565b840191505092915050565b600061492c82614ff9565b614936818561504f565b9350614946818560208601615209565b80840191505092915050565b6000815461495f8161523c565b614969818661504f565b945060018216600081146149845760018114614995576149c8565b60ff198316865281860193506149c8565b61499e85614fce565b60005b838110156149c0578154818901526001820191506020810190506149a1565b838801955050505b50505092915050565b60006149de60148361503e565b91506149e982615469565b602082019050919050565b6000614a0160268361503e565b9150614a0c82615492565b604082019050919050565b6000614a2460148361503e565b9150614a2f826154e1565b602082019050919050565b6000614a47600e8361503e565b9150614a528261550a565b602082019050919050565b6000614a6a60188361503e565b9150614a7582615533565b602082019050919050565b6000614a8d601e8361503e565b9150614a988261555c565b602082019050919050565b6000614ab060118361503e565b9150614abb82615585565b602082019050919050565b6000614ad360058361504f565b9150614ade826155ae565b600582019050919050565b6000614af660208361503e565b9150614b01826155d7565b602082019050919050565b6000614b1960178361503e565b9150614b2482615600565b602082019050919050565b6000614b3c600083615033565b9150614b4782615629565b600082019050919050565b6000614b5f60148361503e565b9150614b6a8261562c565b602082019050919050565b6000614b8260128361503e565b9150614b8d82615655565b602082019050919050565b6000614ba5601f8361503e565b9150614bb08261567e565b602082019050919050565b6000614bc860018361504f565b9150614bd3826156a7565b600182019050919050565b614be7816151e3565b82525050565b614bf6816151e3565b82525050565b6000614c08828461481c565b60148201915081905092915050565b6000614c238285614952565b9150614c2e82614bbb565b9150614c3a8284614921565b9150614c4582614ac6565b91508190509392505050565b6000614c5c82614b2f565b9150819050919050565b6000602082019050614c7b600083018461480d565b92915050565b6000608082019050614c96600083018761480d565b614ca3602083018661480d565b614cb06040830185614bed565b8181036060830152614cc281846148af565b905095945050505050565b6000604082019050614ce2600083018561480d565b614cef6020830184614bed565b9392505050565b60006020820190508181036000830152614d108184614833565b905092915050565b6000602082019050614d2d6000830184614891565b92915050565b6000602082019050614d4860008301846148a0565b92915050565b60006020820190508181036000830152614d6881846148e8565b905092915050565b60006020820190508181036000830152614d89816149d1565b9050919050565b60006020820190508181036000830152614da9816149f4565b9050919050565b60006020820190508181036000830152614dc981614a17565b9050919050565b60006020820190508181036000830152614de981614a3a565b9050919050565b60006020820190508181036000830152614e0981614a5d565b9050919050565b60006020820190508181036000830152614e2981614a80565b9050919050565b60006020820190508181036000830152614e4981614aa3565b9050919050565b60006020820190508181036000830152614e6981614ae9565b9050919050565b60006020820190508181036000830152614e8981614b0c565b9050919050565b60006020820190508181036000830152614ea981614b52565b9050919050565b60006020820190508181036000830152614ec981614b75565b9050919050565b60006020820190508181036000830152614ee981614b98565b9050919050565b6000602082019050614f056000830184614bed565b92915050565b6000614f15614f26565b9050614f21828261526e565b919050565b6000604051905090565b600067ffffffffffffffff821115614f4b57614f4a6153f9565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f7757614f766153f9565b5b614f808261544b565b9050602081019050919050565b600067ffffffffffffffff821115614fa857614fa76153f9565b5b614fb18261544b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615065826151e3565b9150615070836151e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150a5576150a461533d565b5b828201905092915050565b60006150bb826151e3565b91506150c6836151e3565b9250826150d6576150d561536c565b5b828204905092915050565b60006150ec826151e3565b91506150f7836151e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151305761512f61533d565b5b828202905092915050565b6000615146826151e3565b9150615151836151e3565b9250828210156151645761516361533d565b5b828203905092915050565b600061517a826151c3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561522757808201518184015260208101905061520c565b83811115615236576000848401525b50505050565b6000600282049050600182168061525457607f821691505b602082108114156152685761526761539b565b5b50919050565b6152778261544b565b810181811067ffffffffffffffff82111715615296576152956153f9565b5b80604052505050565b60006152aa826151e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152dd576152dc61533d565b5b600182019050919050565b60006152f3826152fa565b9050919050565b60006153058261545c565b9050919050565b6000615317826151e3565b9150615322836151e3565b9250826153325761533161536c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f77616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206c696d69742072656163686564000000000000000000000000600082015250565b7f4e6f206d6f726520746f6b656e73000000000000000000000000000000000000600082015250565b7f53616c6573207761736e27742073746172746564207965740000000000000000600082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f50726573616c65206d7573742062652073746172746564000000000000000000600082015250565b50565b7f53616c65206d7573742062652073746172746564000000000000000000000000600082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6156d98161516f565b81146156e457600080fd5b50565b6156f081615181565b81146156fb57600080fd5b50565b6157078161518d565b811461571257600080fd5b50565b61571e81615197565b811461572957600080fd5b50565b615735816151e3565b811461574057600080fd5b50565b61574c816151ed565b811461575757600080fd5b5056fea26469706673582212206cd6882485e9e2c573f5785199051cbb812888ebef051cf9791480afae3f999464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d53393663535941393344655358565931583676376661595a3144695056616d6b6d564c4845445a61774a436500000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d51654c795154445171516f36377563624c4a5a324d74324b7233697933636f5666394a62356a6857557a314d0000000000000000000000
-----Decoded View---------------
Arg [0] : _hideBaseURI (string): ipfs://QmS96cSYA93DeSXVY1X6v7faYZ1DiPVamkmVLHEDZawJCe
Arg [1] : _tokenUrl (string): ipfs://QmQeLyQTDQqQo67ucbLJZ2Mt2Kr3iy3coVf9Jb5jhWUz1M
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [3] : 697066733a2f2f516d5339366353594139334465535856593158367637666159
Arg [4] : 5a3144695056616d6b6d564c4845445a61774a43650000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [6] : 697066733a2f2f516d51654c795154445171516f36377563624c4a5a324d7432
Arg [7] : 4b7233697933636f5666394a62356a6857557a314d0000000000000000000000
Deployed Bytecode Sourcemap
55408:7782:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35380:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55962:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58357:158;;;;;;;;;;;;;:::i;:::-;;38663:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40260:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55855:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39795:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34585:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58795:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56005:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41177:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61595:400;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60359:813;;;;;;;;;;;;;:::i;:::-;;41440:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62007:761;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56119:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59875:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55811:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55583:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38457:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59615:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59991:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35769:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61406:177;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12906:103;;;;;;;;;;;;;:::i;:::-;;55767:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58196:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60103:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55916:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59376:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12255:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61184:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38846:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55658:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40554:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59737:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59481:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58527:155;;;;;;;;;;;;;:::i;:::-;;41718:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59278:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57618:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55709:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59110:156;;;;;;;;;;;;;:::i;:::-;;62780:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60235:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55618:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40932:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57870:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13164:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58770:12;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35380:315;35482:4;35538:25;35523:40;;;:11;:40;;;;:107;;;;35597:33;35582:48;;;:11;:48;;;;35523:107;:162;;;;35649:36;35673:11;35649:23;:36::i;:::-;35523:162;35501:184;;35380:315;;;:::o;55962:34::-;;;;;;;;;;;;;:::o;58357:158::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58430:4:::1;58413:14;;:21;;;;;;;;;;;;;;;;;;58461:5;58447:11;;:19;;;;;;;;;;;;;;;;;;58488:17;;;;;;;;;;58357:158::o:0;38663:104::-;38717:13;38752:5;38745:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38663:104;:::o;40260:212::-;40328:7;40355:16;40363:7;40355;:16::i;:::-;40350:64;;40380:34;;;;;;;;;;;;;;40350:64;40438:15;:24;40454:7;40438:24;;;;;;;;;;;;;;;;;;;;;40431:31;;40260:212;;;:::o;55855:52::-;;;;;;;;;;;;;;;;;:::o;39795:389::-;39870:13;39886:24;39902:7;39886:15;:24::i;:::-;39870:40;;39933:5;39927:11;;:2;:11;;;39923:48;;;39947:24;;;;;;;;;;;;;;39923:48;40008:5;39992:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;40018:37;40035:5;40042:12;:10;:12::i;:::-;40018:16;:37::i;:::-;40017:38;39992:63;39988:142;;;40081:35;;;;;;;;;;;;;;39988:142;40146:28;40155:2;40159:7;40168:5;40146:8;:28::i;:::-;39857:327;39795:389;;:::o;34585:315::-;34629:7;34862:15;:13;:15::i;:::-;34847:12;;34831:13;;:28;:46;34824:53;;34585:315;:::o;58795:303::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58873:24:::1;58918:171;58944:7;:14;58925:16;:33;58918:171;;;58977:63;58983:7;58991:16;58983:25;;;;;;;;:::i;:::-;;;;;;;;:27;;;59012:7;59020:16;59012:25;;;;;;;;:::i;:::-;;;;;;;;:27;;;58977:5;:63::i;:::-;59057:18;;;;;:::i;:::-;;;;58918:171;;;58860:238;58795:303:::0;:::o;56005:101::-;;;;:::o;41177:182::-;41321:28;41331:4;41337:2;41341:7;41321:9;:28::i;:::-;41177:182;;;:::o;61595:400::-;61639:7;61669:14;;;;;;;;;;;:29;;;;61687:11;;;;;;;;;;;61669:29;61661:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;61748:14;;;;;;;;;;;61744:107;;;61809:16;:28;61826:10;61809:28;;;;;;;;;;;;;;;;61788:18;;:49;;;;:::i;:::-;61781:56;;;;61744:107;61867:11;;;;;;;;;;;61863:98;;;61922:13;:25;61936:10;61922:25;;;;;;;;;;;;;;;;61904:15;;:43;;;;:::i;:::-;61897:50;;;;61863:98;61984:1;61977:8;;61595:400;;:::o;60359:813::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60409:20:::1;60461:3;60456:2;60432:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;60409:55;;60477:15;60524:3;60519:2;60495:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;60477:50;;60540:13;60585:3;60580:2;60556:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;60540:48;;60606:18;60638:42;60630:56;;60694:12;60630:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60605:106;;;60732:13;60724:22;;;::::0;::::1;;60764:13;60791:42;60783:56;;60847:7;60783:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60763:96;;;60880:8;60872:17;;;::::0;::::1;;60907:10;60931:42;60923:56;;60987:5;60923:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60906:91;;;61018:5;61010:14;;;::::0;::::1;;61041:15;61059:21;61041:39;;61101:42;61093:60;;:69;61154:7;61093:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;60396:776;;;;;;;60359:813::o:0;41440:197::-;41588:39;41605:4;41611:2;41615:7;41588:39;;;;;;;;;;;;:16;:39::i;:::-;41440:197;;;:::o;62007:761::-;62100:16;62138:23;62164:17;62174:6;62164:9;:17::i;:::-;62138:43;;62194:30;62241:15;62227:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62194:63;;62270:22;62295:1;62270:26;;62309:23;62353:369;62378:15;62360;:33;:64;;;;;62415:9;;62397:14;:27;;62360:64;62353:369;;;62443:25;62471:23;62479:14;62471:7;:23::i;:::-;62443:51;;62540:6;62519:27;;:17;:27;;;62515:157;;;62602:14;62569:13;62583:15;62569:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;62637:17;;;;;:::i;:::-;;;;62515:157;62692:16;;;;;:::i;:::-;;;;62426:296;62353:369;;;62745:13;62738:20;;;;;;62007:761;;;:::o;56119:27::-;;;;;;;;;;;;;:::o;59875:104::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59961:8:::1;59951:7;:18;;;;;;;;;;;;:::i;:::-;;59875:104:::0;:::o;55811:31::-;;;;;;;;;;;;;:::o;55583:26::-;;;;;;;;;;;;;:::o;38457:129::-;38521:7;38550:21;38563:7;38550:12;:21::i;:::-;:26;;;38543:33;;38457:129;;;:::o;59615:110::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59705:10:::1;59687:28;;:15;:28;;;;59615:110:::0;:::o;59991:100::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60074:7:::1;60062:9;:19;;;;59991:100:::0;:::o;35769:212::-;35833:7;35876:1;35859:19;;:5;:19;;;35855:60;;;35887:28;;;;;;;;;;;;;;35855:60;35943:12;:19;35956:5;35943:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;35935:36;;35928:43;;35769:212;;;:::o;61406:177::-;61451:13;61484:8;;;;;;;;;;;61479:64;;61518:11;61511:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61479:64;61566:7;61559:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61406:177;;:::o;12906:103::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12971:30:::1;12998:1;12971:18;:30::i;:::-;12906:103::o:0;55767:35::-;;;;:::o;58196:148::-;58271:8;56731:9;;56719:8;56703:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;56695:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12486:12:::1;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58304:30:::2;58314:9;58325:8;58304:30;;:9;:30::i;:::-;58196:148:::0;;;:::o;60103:120::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60201:12:::1;60187:11;:26;;;;;;;;;;;;:::i;:::-;;60103:120:::0;:::o;55916:37::-;;;;:::o;59376:93::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59453:6:::1;59445:5;:14;;;;59376:93:::0;:::o;12255:87::-;12301:7;12328:6;;;;;;;;;;;12321:13;;12255:87;:::o;61184:93::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61258:9:::1;61247:8;;:20;;;;;;;;;;;;;;;;;;61184:93:::0;:::o;38846:108::-;38902:13;38937:7;38930:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38846:108;:::o;55658:34::-;;;;:::o;40554:297::-;40667:12;:10;:12::i;:::-;40655:24;;:8;:24;;;40651:54;;;40688:17;;;;;;;;;;;;;;40651:54;40767:8;40722:18;:32;40741:12;:10;:12::i;:::-;40722:32;;;;;;;;;;;;;;;:42;40755:8;40722:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;40822:8;40793:48;;40808:12;:10;:12::i;:::-;40793:48;;;40832:8;40793:48;;;;;;:::i;:::-;;;;;;;;40554:297;;:::o;59737:126::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59843:10:::1;59823:17;:30;;;;59737:126:::0;:::o;59481:122::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59580:13:::1;59559:34;;:18;:34;;;;59481:122:::0;:::o;58527:155::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58597:5:::1;58580:14;;:22;;;;;;;;;;;;;;;;;;58629:4;58615:11;;:18;;;;;;;;;;;;;;;;;;58655:17;;;;;;;;;;58527:155::o:0;41718:389::-;41897:28;41907:4;41913:2;41917:7;41897:9;:28::i;:::-;41942:15;:2;:13;;;:15::i;:::-;:76;;;;;41962:56;41993:4;41999:2;42003:7;42012:5;41962:30;:56::i;:::-;41961:57;41942:76;41938:160;;;42044:40;;;;;;;;;;;;;;41938:160;41718:389;;;;:::o;59278:86::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59349:5:::1;59340:6;;:14;;;;;;;;;;;;;;;;;;59278:86:::0;:::o;57618:240::-;56449:6;;;;;;;;;;;56448:7;56440:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1:::1;4799:7;;:19;;4791:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1;4932:7;:18;;;;57707:8:::2;56599:9;56590:5;;56579:8;:16;;;;;;:::i;:::-;:29;56571:38;;;::::0;::::2;;57729:8:::3;56731:9;;56719:8;56703:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;56695:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;57744:8:::4;57085:11;;;;;;;;;;;57077:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;57182:15;;57170:8;57142:36;;:13;:25;57156:10;57142:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:55;;57134:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;57796:8:::5;57767:37;;:13;:25;57781:10;57767:25;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;57817:31;57827:10;57839:8;57817:31;;:9;:31::i;:::-;56772:1:::4;56622::::3;4963::::2;4157::::1;5111:7;:22;;;;57618:240:::0;:::o;55709:49::-;;;;;;;;;;;;;;;;;:::o;59110:156::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59180:5:::1;59163:14;;:22;;;;;;;;;;;;;;;;;;59212:5;59198:11;;:19;;;;;;;;;;;;;;;;;;59239:17;;;;;;;;;;59110:156::o:0;62780:405::-;62908:13;62951:16;62959:7;62951;:16::i;:::-;62943:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;63011:8;;;;;;;;;;;63006:64;;63045:11;63038:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63006:64;63132:7;63146:18;:7;:16;:18::i;:::-;63115:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63086:89;;62780:405;;;;:::o;60235:112::-;60295:13;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60330:7:::1;60323:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60235:112:::0;:::o;55618:31::-;;;;:::o;40932:168::-;41029:4;41055:18;:25;41074:5;41055:25;;;;;;;;;;;;;;;:35;41081:8;41055:35;;;;;;;;;;;;;;;;;;;;;;;;;41048:42;;40932:168;;;;:::o;57870:314::-;56449:6;;;;;;;;;;;56448:7;56440:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1:::1;4799:7;;:19;;4791:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4201:1;4932:7;:18;;;;57994:8:::2;56599:9;56590:5;;56579:8;:16;;;;;;:::i;:::-;:29;56571:38;;;::::0;::::2;;58016:8:::3;56731:9;;56719:8;56703:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;56695:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;58045:11:::4;;57355:165;57394:11;;57355:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57426:17;;57491:10;57474:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;57464:39;;;;;;57355:18;:165::i;:::-;57331:251;;;;;;;;;;;;:::i;:::-;;;;;;;;;58066:8:::5;56849:14;;;;;;;;;;;56841:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;56955:18;;56943:8;56912:39;;:16;:28;56929:10;56912:28;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:61;;56904:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;58122:8:::6;58090:40;;:16;:28;58107:10;58090:28;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;58143:31;58153:10;58165:8;58143:31;;:9;:31::i;:::-;57595:1:::5;56772::::4;;56622::::3;4963::::2;4157::::1;5111:7;:22;;;;57870:314:::0;;;:::o;13164:201::-;12486:12;:10;:12::i;:::-;12475:23;;:7;:5;:7::i;:::-;:23;;;12467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13273:1:::1;13253:22;;:8;:22;;;;13245:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13329:28;13348:8;13329:18;:28::i;:::-;13164:201:::0;:::o;58770:12::-;;;;;;;;;;;;;;;;;;;;;;;:::o;25039:157::-;25124:4;25163:25;25148:40;;;:11;:40;;;;25141:47;;25039:157;;;:::o;10979:98::-;11032:7;11059:10;11052:17;;10979:98;:::o;42380:178::-;42437:4;42482:7;42463:15;:13;:15::i;:::-;:26;;:53;;;;;42503:13;;42493:7;:23;42463:53;:85;;;;;42521:11;:20;42533:7;42521:20;;;;;;;;;;;:27;;;;;;;;;;;;42520:28;42463:85;42456:92;;42380:178;;;:::o;52088:210::-;52240:2;52213:15;:24;52229:7;52213:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;52280:7;52276:2;52260:28;;52269:5;52260:28;;;;;;;;;;;;52088:210;;;:::o;61289:105::-;61354:7;61383:1;61376:8;;61289:105;:::o;45276:1228::-;45343:20;45366:13;;45343:36;;45410:1;45396:16;;:2;:16;;;45392:48;;;45421:19;;;;;;;;;;;;;;45392:48;45469:1;45457:8;:13;45453:44;;;45479:18;;;;;;;;;;;;;;45453:44;45514:61;45544:1;45548:2;45552:12;45566:8;45514:21;:61::i;:::-;45899:8;45864:12;:16;45877:2;45864:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45965:8;45925:12;:16;45938:2;45925:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46028:2;45995:11;:25;46007:12;45995:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;46097:15;46047:11;:25;46059:12;46047:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;46134:20;46157:12;46134:35;;46186:11;46215:8;46200:12;:23;46186:37;;46244:116;46298:14;;;;;;46294:2;46273:40;;46290:1;46273:40;;;;;;;;;;;;46355:3;46339:12;:19;;46244:116;;46396:12;46380:13;:28;;;;45837:585;;46434:60;46463:1;46467:2;46471:12;46485:8;46434:20;:60::i;:::-;45330:1174;45276:1228;;:::o;46782:2226::-;46907:35;46945:21;46958:7;46945:12;:21::i;:::-;46907:59;;47009:4;46987:26;;:13;:18;;;:26;;;46983:67;;47022:28;;;;;;;;;;;;;;46983:67;47067:22;47109:4;47093:20;;:12;:10;:12::i;:::-;:20;;;:75;;;;47132:36;47149:4;47155:12;:10;:12::i;:::-;47132:16;:36::i;:::-;47093:75;:130;;;;47211:12;:10;:12::i;:::-;47187:36;;:20;47199:7;47187:11;:20::i;:::-;:36;;;47093:130;47067:157;;47246:17;47241:66;;47272:35;;;;;;;;;;;;;;47241:66;47338:1;47324:16;;:2;:16;;;47320:52;;;47349:23;;;;;;;;;;;;;;47320:52;47389:43;47411:4;47417:2;47421:7;47430:1;47389:21;:43::i;:::-;47503:35;47520:1;47524:7;47533:4;47503:8;:35::i;:::-;47876:1;47846:12;:18;47859:4;47846:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47922:1;47894:12;:16;47907:2;47894:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47944:31;47978:11;:20;47990:7;47978:20;;;;;;;;;;;47944:54;;48031:2;48015:8;:13;;;:18;;;;;;;;;;;;;;;;;;48083:15;48050:8;:23;;;:49;;;;;;;;;;;;;;;;;;48359:19;48391:1;48381:7;:11;48359:33;;48409:31;48443:11;:24;48455:11;48443:24;;;;;;;;;;;48409:58;;48513:1;48488:27;;:8;:13;;;;;;;;;;;;:27;;;48484:398;;;48704:13;;48689:11;:28;48685:180;;48760:4;48744:8;:13;;;:20;;;;;;;;;;;;;;;;;;48815:13;:28;;;48789:8;:23;;;:54;;;;;;;;;;;;;;;;;;48685:180;48484:398;47819:1076;;;48935:7;48931:2;48916:27;;48925:4;48916:27;;;;;;;;;;;;48956:42;48977:4;48983:2;48987:7;48996:1;48956:20;:42::i;:::-;46894:2114;;46782:2226;;;:::o;37226:1159::-;37288:21;;:::i;:::-;37324:12;37339:7;37324:22;;37413:4;37394:15;:13;:15::i;:::-;:23;;:47;;;;;37428:13;;37421:4;:20;37394:47;37390:922;;;37464:31;37498:11;:17;37510:4;37498:17;;;;;;;;;;;37464:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37541:9;:16;;;37536:759;;37614:1;37588:28;;:9;:14;;;:28;;;37584:105;;37654:9;37647:16;;;;;;37584:105;38001:273;38008:4;38001:273;;;38043:6;;;;;;;;38090:11;:17;38102:4;38090:17;;;;;;;;;;;38078:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38166:1;38140:28;;:9;:14;;;:28;;;38136:113;;38210:9;38203:16;;;;;;38136:113;38001:273;;;37536:759;37443:869;37390:922;38344:31;;;;;;;;;;;;;;37226:1159;;;;:::o;13525:191::-;13599:16;13618:6;;;;;;;;;;;13599:25;;13644:8;13635:6;;:17;;;;;;;;;;;;;;;;;;13699:8;13668:40;;13689:8;13668:40;;;;;;;;;;;;13588:128;13525:191;:::o;42652:108::-;42723:27;42733:2;42737:8;42723:27;;;;;;;;;;;;:9;:27::i;:::-;42652:108;;:::o;14956:326::-;15016:4;15273:1;15251:7;:19;;;:23;15244:30;;14956:326;;;:::o;52812:701::-;52985:4;53024:2;53008:36;;;53045:12;:10;:12::i;:::-;53059:4;53065:7;53074:5;53008:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53004:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53265:1;53248:6;:13;:18;53244:247;;;53296:40;;;;;;;;;;;;;;53244:247;53445:6;53439:13;53430:6;53426:2;53422:15;53415:38;53004:500;53139:45;;;53129:55;;;:6;:55;;;;53122:62;;;52812:701;;;;;;:::o;8541:723::-;8597:13;8827:1;8818:5;:10;8814:53;;;8845:10;;;;;;;;;;;;;;;;;;;;;8814:53;8877:12;8892:5;8877:20;;8908:14;8933:78;8948:1;8940:4;:9;8933:78;;8966:8;;;;;:::i;:::-;;;;8997:2;8989:10;;;;;:::i;:::-;;;8933:78;;;9021:19;9053:6;9043:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9021:39;;9071:154;9087:1;9078:5;:10;9071:154;;9115:1;9105:11;;;;;:::i;:::-;;;9182:2;9174:5;:10;;;;:::i;:::-;9161:2;:24;;;;:::i;:::-;9148:39;;9131:6;9138;9131:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9211:2;9202:11;;;;;:::i;:::-;;;9071:154;;;9249:6;9235:21;;;;;8541:723;;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;54195:169::-;;;;;:::o;55059:168::-;;;;;:::o;43160:1833::-;43293:20;43316:13;;43293:36;;43360:1;43346:16;;:2;:16;;;43342:48;;;43371:19;;;;;;;;;;;;;;43342:48;43419:1;43407:8;:13;43403:44;;;43429:18;;;;;;;;;;;;;;43403:44;43464:61;43494:1;43498:2;43502:12;43516:8;43464:21;:61::i;:::-;43849:8;43814:12;:16;43827:2;43814:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43915:8;43875:12;:16;43888:2;43875:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43978:2;43945:11;:25;43957:12;43945:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;44047:15;43997:11;:25;44009:12;43997:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;44084:20;44107:12;44084:35;;44136:11;44165:8;44150:12;:23;44136:37;;44198:15;:2;:13;;;:15::i;:::-;44194:659;;;44236:324;44294:12;44290:2;44269:38;;44286:1;44269:38;;;;;;;;;;;;44337:69;44376:1;44380:2;44384:14;;;;;;44400:5;44337:30;:69::i;:::-;44332:178;;44444:40;;;;;;;;;;;;;;44332:178;44555:3;44539:12;:19;;44236:324;;44645:12;44628:13;;:29;44624:43;;44659:8;;;44624:43;44194:659;;;44712:124;44770:14;;;;;;44766:2;44745:40;;44762:1;44745:40;;;;;;;;;;;;44831:3;44815:12;:19;;44712:124;;44194:659;44885:12;44869:13;:28;;;;43787:1124;;44923:60;44952:1;44956:2;44960:12;44974:8;44923:20;:60::i;:::-;43280:1713;43160:1833;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;38:782:1:-;154:5;179:101;195:84;272:6;195:84;:::i;:::-;179:101;:::i;:::-;170:110;;300:5;329:6;322:5;315:21;363:4;356:5;352:16;345:23;;389:6;439:3;431:4;423:6;419:17;414:3;410:27;407:36;404:143;;;458:79;;:::i;:::-;404:143;571:1;556:258;581:6;578:1;575:13;556:258;;;649:3;678:57;731:3;719:10;678:57;:::i;:::-;673:3;666:70;765:4;760:3;756:14;749:21;;799:4;794:3;790:14;783:21;;616:198;603:1;600;596:9;591:14;;556:258;;;560:14;160:660;;38:782;;;;;:::o;826:410::-;903:5;928:65;944:48;985:6;944:48;:::i;:::-;928:65;:::i;:::-;919:74;;1016:6;1009:5;1002:21;1054:4;1047:5;1043:16;1092:3;1083:6;1078:3;1074:16;1071:25;1068:112;;;1099:79;;:::i;:::-;1068:112;1189:41;1223:6;1218:3;1213;1189:41;:::i;:::-;909:327;826:410;;;;;:::o;1242:412::-;1320:5;1345:66;1361:49;1403:6;1361:49;:::i;:::-;1345:66;:::i;:::-;1336:75;;1434:6;1427:5;1420:21;1472:4;1465:5;1461:16;1510:3;1501:6;1496:3;1492:16;1489:25;1486:112;;;1517:79;;:::i;:::-;1486:112;1607:41;1641:6;1636:3;1631;1607:41;:::i;:::-;1326:328;1242:412;;;;;:::o;1660:139::-;1706:5;1744:6;1731:20;1722:29;;1760:33;1787:5;1760:33;:::i;:::-;1660:139;;;;:::o;1822:568::-;1895:8;1905:6;1955:3;1948:4;1940:6;1936:17;1932:27;1922:122;;1963:79;;:::i;:::-;1922:122;2076:6;2063:20;2053:30;;2106:18;2098:6;2095:30;2092:117;;;2128:79;;:::i;:::-;2092:117;2242:4;2234:6;2230:17;2218:29;;2296:3;2288:4;2280:6;2276:17;2266:8;2262:32;2259:41;2256:128;;;2303:79;;:::i;:::-;2256:128;1822:568;;;;;:::o;2427:410::-;2518:5;2567:3;2560:4;2552:6;2548:17;2544:27;2534:122;;2575:79;;:::i;:::-;2534:122;2692:6;2679:20;2717:114;2827:3;2819:6;2812:4;2804:6;2800:17;2717:114;:::i;:::-;2708:123;;2524:313;2427:410;;;;:::o;2843:133::-;2886:5;2924:6;2911:20;2902:29;;2940:30;2964:5;2940:30;:::i;:::-;2843:133;;;;:::o;2982:139::-;3028:5;3066:6;3053:20;3044:29;;3082:33;3109:5;3082:33;:::i;:::-;2982:139;;;;:::o;3127:137::-;3172:5;3210:6;3197:20;3188:29;;3226:32;3252:5;3226:32;:::i;:::-;3127:137;;;;:::o;3270:141::-;3326:5;3357:6;3351:13;3342:22;;3373:32;3399:5;3373:32;:::i;:::-;3270:141;;;;:::o;3430:338::-;3485:5;3534:3;3527:4;3519:6;3515:17;3511:27;3501:122;;3542:79;;:::i;:::-;3501:122;3659:6;3646:20;3684:78;3758:3;3750:6;3743:4;3735:6;3731:17;3684:78;:::i;:::-;3675:87;;3491:277;3430:338;;;;:::o;3788:340::-;3844:5;3893:3;3886:4;3878:6;3874:17;3870:27;3860:122;;3901:79;;:::i;:::-;3860:122;4018:6;4005:20;4043:79;4118:3;4110:6;4103:4;4095:6;4091:17;4043:79;:::i;:::-;4034:88;;3850:278;3788:340;;;;:::o;4163:563::-;4232:5;4276:4;4264:9;4259:3;4255:19;4251:30;4248:117;;;4284:79;;:::i;:::-;4248:117;4383:21;4399:4;4383:21;:::i;:::-;4374:30;;4460:1;4500:49;4545:3;4536:6;4525:9;4521:22;4500:49;:::i;:::-;4493:4;4486:5;4482:16;4475:75;4414:147;4617:2;4658:49;4703:3;4694:6;4683:9;4679:22;4658:49;:::i;:::-;4651:4;4644:5;4640:16;4633:75;4571:148;4163:563;;;;:::o;4732:139::-;4778:5;4816:6;4803:20;4794:29;;4832:33;4859:5;4832:33;:::i;:::-;4732:139;;;;:::o;4877:135::-;4921:5;4959:6;4946:20;4937:29;;4975:31;5000:5;4975:31;:::i;:::-;4877:135;;;;:::o;5018:329::-;5077:6;5126:2;5114:9;5105:7;5101:23;5097:32;5094:119;;;5132:79;;:::i;:::-;5094:119;5252:1;5277:53;5322:7;5313:6;5302:9;5298:22;5277:53;:::i;:::-;5267:63;;5223:117;5018:329;;;;:::o;5353:474::-;5421:6;5429;5478:2;5466:9;5457:7;5453:23;5449:32;5446:119;;;5484:79;;:::i;:::-;5446:119;5604:1;5629:53;5674:7;5665:6;5654:9;5650:22;5629:53;:::i;:::-;5619:63;;5575:117;5731:2;5757:53;5802:7;5793:6;5782:9;5778:22;5757:53;:::i;:::-;5747:63;;5702:118;5353:474;;;;;:::o;5833:619::-;5910:6;5918;5926;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;6228:2;6254:53;6299:7;6290:6;6279:9;6275:22;6254:53;:::i;:::-;6244:63;;6199:118;6356:2;6382:53;6427:7;6418:6;6407:9;6403:22;6382:53;:::i;:::-;6372:63;;6327:118;5833:619;;;;;:::o;6458:943::-;6553:6;6561;6569;6577;6626:3;6614:9;6605:7;6601:23;6597:33;6594:120;;;6633:79;;:::i;:::-;6594:120;6753:1;6778:53;6823:7;6814:6;6803:9;6799:22;6778:53;:::i;:::-;6768:63;;6724:117;6880:2;6906:53;6951:7;6942:6;6931:9;6927:22;6906:53;:::i;:::-;6896:63;;6851:118;7008:2;7034:53;7079:7;7070:6;7059:9;7055:22;7034:53;:::i;:::-;7024:63;;6979:118;7164:2;7153:9;7149:18;7136:32;7195:18;7187:6;7184:30;7181:117;;;7217:79;;:::i;:::-;7181:117;7322:62;7376:7;7367:6;7356:9;7352:22;7322:62;:::i;:::-;7312:72;;7107:287;6458:943;;;;;;;:::o;7407:468::-;7472:6;7480;7529:2;7517:9;7508:7;7504:23;7500:32;7497:119;;;7535:79;;:::i;:::-;7497:119;7655:1;7680:53;7725:7;7716:6;7705:9;7701:22;7680:53;:::i;:::-;7670:63;;7626:117;7782:2;7808:50;7850:7;7841:6;7830:9;7826:22;7808:50;:::i;:::-;7798:60;;7753:115;7407:468;;;;;:::o;7881:474::-;7949:6;7957;8006:2;7994:9;7985:7;7981:23;7977:32;7974:119;;;8012:79;;:::i;:::-;7974:119;8132:1;8157:53;8202:7;8193:6;8182:9;8178:22;8157:53;:::i;:::-;8147:63;;8103:117;8259:2;8285:53;8330:7;8321:6;8310:9;8306:22;8285:53;:::i;:::-;8275:63;;8230:118;7881:474;;;;;:::o;8361:579::-;8465:6;8514:2;8502:9;8493:7;8489:23;8485:32;8482:119;;;8520:79;;:::i;:::-;8482:119;8668:1;8657:9;8653:17;8640:31;8698:18;8690:6;8687:30;8684:117;;;8720:79;;:::i;:::-;8684:117;8825:98;8915:7;8906:6;8895:9;8891:22;8825:98;:::i;:::-;8815:108;;8611:322;8361:579;;;;:::o;8946:323::-;9002:6;9051:2;9039:9;9030:7;9026:23;9022:32;9019:119;;;9057:79;;:::i;:::-;9019:119;9177:1;9202:50;9244:7;9235:6;9224:9;9220:22;9202:50;:::i;:::-;9192:60;;9148:114;8946:323;;;;:::o;9275:329::-;9334:6;9383:2;9371:9;9362:7;9358:23;9354:32;9351:119;;;9389:79;;:::i;:::-;9351:119;9509:1;9534:53;9579:7;9570:6;9559:9;9555:22;9534:53;:::i;:::-;9524:63;;9480:117;9275:329;;;;:::o;9610:327::-;9668:6;9717:2;9705:9;9696:7;9692:23;9688:32;9685:119;;;9723:79;;:::i;:::-;9685:119;9843:1;9868:52;9912:7;9903:6;9892:9;9888:22;9868:52;:::i;:::-;9858:62;;9814:116;9610:327;;;;:::o;9943:349::-;10012:6;10061:2;10049:9;10040:7;10036:23;10032:32;10029:119;;;10067:79;;:::i;:::-;10029:119;10187:1;10212:63;10267:7;10258:6;10247:9;10243:22;10212:63;:::i;:::-;10202:73;;10158:127;9943:349;;;;:::o;10298:509::-;10367:6;10416:2;10404:9;10395:7;10391:23;10387:32;10384:119;;;10422:79;;:::i;:::-;10384:119;10570:1;10559:9;10555:17;10542:31;10600:18;10592:6;10589:30;10586:117;;;10622:79;;:::i;:::-;10586:117;10727:63;10782:7;10773:6;10762:9;10758:22;10727:63;:::i;:::-;10717:73;;10513:287;10298:509;;;;:::o;10813:329::-;10872:6;10921:2;10909:9;10900:7;10896:23;10892:32;10889:119;;;10927:79;;:::i;:::-;10889:119;11047:1;11072:53;11117:7;11108:6;11097:9;11093:22;11072:53;:::i;:::-;11062:63;;11018:117;10813:329;;;;:::o;11148:325::-;11205:6;11254:2;11242:9;11233:7;11229:23;11225:32;11222:119;;;11260:79;;:::i;:::-;11222:119;11380:1;11405:51;11448:7;11439:6;11428:9;11424:22;11405:51;:::i;:::-;11395:61;;11351:115;11148:325;;;;:::o;11479:470::-;11545:6;11553;11602:2;11590:9;11581:7;11577:23;11573:32;11570:119;;;11608:79;;:::i;:::-;11570:119;11728:1;11753:51;11796:7;11787:6;11776:9;11772:22;11753:51;:::i;:::-;11743:61;;11699:115;11853:2;11879:53;11924:7;11915:6;11904:9;11900:22;11879:53;:::i;:::-;11869:63;;11824:118;11479:470;;;;;:::o;11955:700::-;12048:6;12056;12064;12113:2;12101:9;12092:7;12088:23;12084:32;12081:119;;;12119:79;;:::i;:::-;12081:119;12239:1;12264:51;12307:7;12298:6;12287:9;12283:22;12264:51;:::i;:::-;12254:61;;12210:115;12392:2;12381:9;12377:18;12364:32;12423:18;12415:6;12412:30;12409:117;;;12445:79;;:::i;:::-;12409:117;12558:80;12630:7;12621:6;12610:9;12606:22;12558:80;:::i;:::-;12540:98;;;;12335:313;11955:700;;;;;:::o;12661:179::-;12730:10;12751:46;12793:3;12785:6;12751:46;:::i;:::-;12829:4;12824:3;12820:14;12806:28;;12661:179;;;;:::o;12846:118::-;12933:24;12951:5;12933:24;:::i;:::-;12928:3;12921:37;12846:118;;:::o;12970:157::-;13075:45;13095:24;13113:5;13095:24;:::i;:::-;13075:45;:::i;:::-;13070:3;13063:58;12970:157;;:::o;13163:732::-;13282:3;13311:54;13359:5;13311:54;:::i;:::-;13381:86;13460:6;13455:3;13381:86;:::i;:::-;13374:93;;13491:56;13541:5;13491:56;:::i;:::-;13570:7;13601:1;13586:284;13611:6;13608:1;13605:13;13586:284;;;13687:6;13681:13;13714:63;13773:3;13758:13;13714:63;:::i;:::-;13707:70;;13800:60;13853:6;13800:60;:::i;:::-;13790:70;;13646:224;13633:1;13630;13626:9;13621:14;;13586:284;;;13590:14;13886:3;13879:10;;13287:608;;;13163:732;;;;:::o;13901:109::-;13982:21;13997:5;13982:21;:::i;:::-;13977:3;13970:34;13901:109;;:::o;14016:118::-;14103:24;14121:5;14103:24;:::i;:::-;14098:3;14091:37;14016:118;;:::o;14140:360::-;14226:3;14254:38;14286:5;14254:38;:::i;:::-;14308:70;14371:6;14366:3;14308:70;:::i;:::-;14301:77;;14387:52;14432:6;14427:3;14420:4;14413:5;14409:16;14387:52;:::i;:::-;14464:29;14486:6;14464:29;:::i;:::-;14459:3;14455:39;14448:46;;14230:270;14140:360;;;;:::o;14506:364::-;14594:3;14622:39;14655:5;14622:39;:::i;:::-;14677:71;14741:6;14736:3;14677:71;:::i;:::-;14670:78;;14757:52;14802:6;14797:3;14790:4;14783:5;14779:16;14757:52;:::i;:::-;14834:29;14856:6;14834:29;:::i;:::-;14829:3;14825:39;14818:46;;14598:272;14506:364;;;;:::o;14876:377::-;14982:3;15010:39;15043:5;15010:39;:::i;:::-;15065:89;15147:6;15142:3;15065:89;:::i;:::-;15058:96;;15163:52;15208:6;15203:3;15196:4;15189:5;15185:16;15163:52;:::i;:::-;15240:6;15235:3;15231:16;15224:23;;14986:267;14876:377;;;;:::o;15283:845::-;15386:3;15423:5;15417:12;15452:36;15478:9;15452:36;:::i;:::-;15504:89;15586:6;15581:3;15504:89;:::i;:::-;15497:96;;15624:1;15613:9;15609:17;15640:1;15635:137;;;;15786:1;15781:341;;;;15602:520;;15635:137;15719:4;15715:9;15704;15700:25;15695:3;15688:38;15755:6;15750:3;15746:16;15739:23;;15635:137;;15781:341;15848:38;15880:5;15848:38;:::i;:::-;15908:1;15922:154;15936:6;15933:1;15930:13;15922:154;;;16010:7;16004:14;16000:1;15995:3;15991:11;15984:35;16060:1;16051:7;16047:15;16036:26;;15958:4;15955:1;15951:12;15946:17;;15922:154;;;16105:6;16100:3;16096:16;16089:23;;15788:334;;15602:520;;15390:738;;15283:845;;;;:::o;16134:366::-;16276:3;16297:67;16361:2;16356:3;16297:67;:::i;:::-;16290:74;;16373:93;16462:3;16373:93;:::i;:::-;16491:2;16486:3;16482:12;16475:19;;16134:366;;;:::o;16506:::-;16648:3;16669:67;16733:2;16728:3;16669:67;:::i;:::-;16662:74;;16745:93;16834:3;16745:93;:::i;:::-;16863:2;16858:3;16854:12;16847:19;;16506:366;;;:::o;16878:::-;17020:3;17041:67;17105:2;17100:3;17041:67;:::i;:::-;17034:74;;17117:93;17206:3;17117:93;:::i;:::-;17235:2;17230:3;17226:12;17219:19;;16878:366;;;:::o;17250:::-;17392:3;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17489:93;17578:3;17489:93;:::i;:::-;17607:2;17602:3;17598:12;17591:19;;17250:366;;;:::o;17622:::-;17764:3;17785:67;17849:2;17844:3;17785:67;:::i;:::-;17778:74;;17861:93;17950:3;17861:93;:::i;:::-;17979:2;17974:3;17970:12;17963:19;;17622:366;;;:::o;17994:::-;18136:3;18157:67;18221:2;18216:3;18157:67;:::i;:::-;18150:74;;18233:93;18322:3;18233:93;:::i;:::-;18351:2;18346:3;18342:12;18335:19;;17994:366;;;:::o;18366:::-;18508:3;18529:67;18593:2;18588:3;18529:67;:::i;:::-;18522:74;;18605:93;18694:3;18605:93;:::i;:::-;18723:2;18718:3;18714:12;18707:19;;18366:366;;;:::o;18738:400::-;18898:3;18919:84;19001:1;18996:3;18919:84;:::i;:::-;18912:91;;19012:93;19101:3;19012:93;:::i;:::-;19130:1;19125:3;19121:11;19114:18;;18738:400;;;:::o;19144:366::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:::-;19658:3;19679:67;19743:2;19738:3;19679:67;:::i;:::-;19672:74;;19755:93;19844:3;19755:93;:::i;:::-;19873:2;19868:3;19864:12;19857:19;;19516:366;;;:::o;19888:398::-;20047:3;20068:83;20149:1;20144:3;20068:83;:::i;:::-;20061:90;;20160:93;20249:3;20160:93;:::i;:::-;20278:1;20273:3;20269:11;20262:18;;19888:398;;;:::o;20292:366::-;20434:3;20455:67;20519:2;20514:3;20455:67;:::i;:::-;20448:74;;20531:93;20620:3;20531:93;:::i;:::-;20649:2;20644:3;20640:12;20633:19;;20292:366;;;:::o;20664:::-;20806:3;20827:67;20891:2;20886:3;20827:67;:::i;:::-;20820:74;;20903:93;20992:3;20903:93;:::i;:::-;21021:2;21016:3;21012:12;21005:19;;20664:366;;;:::o;21036:::-;21178:3;21199:67;21263:2;21258:3;21199:67;:::i;:::-;21192:74;;21275:93;21364:3;21275:93;:::i;:::-;21393:2;21388:3;21384:12;21377:19;;21036:366;;;:::o;21408:400::-;21568:3;21589:84;21671:1;21666:3;21589:84;:::i;:::-;21582:91;;21682:93;21771:3;21682:93;:::i;:::-;21800:1;21795:3;21791:11;21784:18;;21408:400;;;:::o;21814:108::-;21891:24;21909:5;21891:24;:::i;:::-;21886:3;21879:37;21814:108;;:::o;21928:118::-;22015:24;22033:5;22015:24;:::i;:::-;22010:3;22003:37;21928:118;;:::o;22052:256::-;22164:3;22179:75;22250:3;22241:6;22179:75;:::i;:::-;22279:2;22274:3;22270:12;22263:19;;22299:3;22292:10;;22052:256;;;;:::o;22314:961::-;22693:3;22715:92;22803:3;22794:6;22715:92;:::i;:::-;22708:99;;22824:148;22968:3;22824:148;:::i;:::-;22817:155;;22989:95;23080:3;23071:6;22989:95;:::i;:::-;22982:102;;23101:148;23245:3;23101:148;:::i;:::-;23094:155;;23266:3;23259:10;;22314:961;;;;;:::o;23281:379::-;23465:3;23487:147;23630:3;23487:147;:::i;:::-;23480:154;;23651:3;23644:10;;23281:379;;;:::o;23666:222::-;23759:4;23797:2;23786:9;23782:18;23774:26;;23810:71;23878:1;23867:9;23863:17;23854:6;23810:71;:::i;:::-;23666:222;;;;:::o;23894:640::-;24089:4;24127:3;24116:9;24112:19;24104:27;;24141:71;24209:1;24198:9;24194:17;24185:6;24141:71;:::i;:::-;24222:72;24290:2;24279:9;24275:18;24266:6;24222:72;:::i;:::-;24304;24372:2;24361:9;24357:18;24348:6;24304:72;:::i;:::-;24423:9;24417:4;24413:20;24408:2;24397:9;24393:18;24386:48;24451:76;24522:4;24513:6;24451:76;:::i;:::-;24443:84;;23894:640;;;;;;;:::o;24540:332::-;24661:4;24699:2;24688:9;24684:18;24676:26;;24712:71;24780:1;24769:9;24765:17;24756:6;24712:71;:::i;:::-;24793:72;24861:2;24850:9;24846:18;24837:6;24793:72;:::i;:::-;24540:332;;;;;:::o;24878:373::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:108;25239:4;25230:6;25136:108;:::i;:::-;25128:116;;24878:373;;;;:::o;25257:210::-;25344:4;25382:2;25371:9;25367:18;25359:26;;25395:65;25457:1;25446:9;25442:17;25433:6;25395:65;:::i;:::-;25257:210;;;;:::o;25473:222::-;25566:4;25604:2;25593:9;25589:18;25581:26;;25617:71;25685:1;25674:9;25670:17;25661:6;25617:71;:::i;:::-;25473:222;;;;:::o;25701:313::-;25814:4;25852:2;25841:9;25837:18;25829:26;;25901:9;25895:4;25891:20;25887:1;25876:9;25872:17;25865:47;25929:78;26002:4;25993:6;25929:78;:::i;:::-;25921:86;;25701:313;;;;:::o;26020:419::-;26186:4;26224:2;26213:9;26209:18;26201:26;;26273:9;26267:4;26263:20;26259:1;26248:9;26244:17;26237:47;26301:131;26427:4;26301:131;:::i;:::-;26293:139;;26020:419;;;:::o;26445:::-;26611:4;26649:2;26638:9;26634:18;26626:26;;26698:9;26692:4;26688:20;26684:1;26673:9;26669:17;26662:47;26726:131;26852:4;26726:131;:::i;:::-;26718:139;;26445:419;;;:::o;26870:::-;27036:4;27074:2;27063:9;27059:18;27051:26;;27123:9;27117:4;27113:20;27109:1;27098:9;27094:17;27087:47;27151:131;27277:4;27151:131;:::i;:::-;27143:139;;26870:419;;;:::o;27295:::-;27461:4;27499:2;27488:9;27484:18;27476:26;;27548:9;27542:4;27538:20;27534:1;27523:9;27519:17;27512:47;27576:131;27702:4;27576:131;:::i;:::-;27568:139;;27295:419;;;:::o;27720:::-;27886:4;27924:2;27913:9;27909:18;27901:26;;27973:9;27967:4;27963:20;27959:1;27948:9;27944:17;27937:47;28001:131;28127:4;28001:131;:::i;:::-;27993:139;;27720:419;;;:::o;28145:::-;28311:4;28349:2;28338:9;28334:18;28326:26;;28398:9;28392:4;28388:20;28384:1;28373:9;28369:17;28362:47;28426:131;28552:4;28426:131;:::i;:::-;28418:139;;28145:419;;;:::o;28570:::-;28736:4;28774:2;28763:9;28759:18;28751:26;;28823:9;28817:4;28813:20;28809:1;28798:9;28794:17;28787:47;28851:131;28977:4;28851:131;:::i;:::-;28843:139;;28570:419;;;:::o;28995:::-;29161:4;29199:2;29188:9;29184:18;29176:26;;29248:9;29242:4;29238:20;29234:1;29223:9;29219:17;29212:47;29276:131;29402:4;29276:131;:::i;:::-;29268:139;;28995:419;;;:::o;29420:::-;29586:4;29624:2;29613:9;29609:18;29601:26;;29673:9;29667:4;29663:20;29659:1;29648:9;29644:17;29637:47;29701:131;29827:4;29701:131;:::i;:::-;29693:139;;29420:419;;;:::o;29845:::-;30011:4;30049:2;30038:9;30034:18;30026:26;;30098:9;30092:4;30088:20;30084:1;30073:9;30069:17;30062:47;30126:131;30252:4;30126:131;:::i;:::-;30118:139;;29845:419;;;:::o;30270:::-;30436:4;30474:2;30463:9;30459:18;30451:26;;30523:9;30517:4;30513:20;30509:1;30498:9;30494:17;30487:47;30551:131;30677:4;30551:131;:::i;:::-;30543:139;;30270:419;;;:::o;30695:::-;30861:4;30899:2;30888:9;30884:18;30876:26;;30948:9;30942:4;30938:20;30934:1;30923:9;30919:17;30912:47;30976:131;31102:4;30976:131;:::i;:::-;30968:139;;30695:419;;;:::o;31120:222::-;31213:4;31251:2;31240:9;31236:18;31228:26;;31264:71;31332:1;31321:9;31317:17;31308:6;31264:71;:::i;:::-;31120:222;;;;:::o;31348:129::-;31382:6;31409:20;;:::i;:::-;31399:30;;31438:33;31466:4;31458:6;31438:33;:::i;:::-;31348:129;;;:::o;31483:75::-;31516:6;31549:2;31543:9;31533:19;;31483:75;:::o;31564:331::-;31661:4;31751:18;31743:6;31740:30;31737:56;;;31773:18;;:::i;:::-;31737:56;31823:4;31815:6;31811:17;31803:25;;31883:4;31877;31873:15;31865:23;;31564:331;;;:::o;31901:307::-;31962:4;32052:18;32044:6;32041:30;32038:56;;;32074:18;;:::i;:::-;32038:56;32112:29;32134:6;32112:29;:::i;:::-;32104:37;;32196:4;32190;32186:15;32178:23;;31901:307;;;:::o;32214:308::-;32276:4;32366:18;32358:6;32355:30;32352:56;;;32388:18;;:::i;:::-;32352:56;32426:29;32448:6;32426:29;:::i;:::-;32418:37;;32510:4;32504;32500:15;32492:23;;32214:308;;;:::o;32528:132::-;32595:4;32618:3;32610:11;;32648:4;32643:3;32639:14;32631:22;;32528:132;;;:::o;32666:141::-;32715:4;32738:3;32730:11;;32761:3;32758:1;32751:14;32795:4;32792:1;32782:18;32774:26;;32666:141;;;:::o;32813:114::-;32880:6;32914:5;32908:12;32898:22;;32813:114;;;:::o;32933:98::-;32984:6;33018:5;33012:12;33002:22;;32933:98;;;:::o;33037:99::-;33089:6;33123:5;33117:12;33107:22;;33037:99;;;:::o;33142:113::-;33212:4;33244;33239:3;33235:14;33227:22;;33142:113;;;:::o;33261:184::-;33360:11;33394:6;33389:3;33382:19;33434:4;33429:3;33425:14;33410:29;;33261:184;;;;:::o;33451:168::-;33534:11;33568:6;33563:3;33556:19;33608:4;33603:3;33599:14;33584:29;;33451:168;;;;:::o;33625:147::-;33726:11;33763:3;33748:18;;33625:147;;;;:::o;33778:169::-;33862:11;33896:6;33891:3;33884:19;33936:4;33931:3;33927:14;33912:29;;33778:169;;;;:::o;33953:148::-;34055:11;34092:3;34077:18;;33953:148;;;;:::o;34107:305::-;34147:3;34166:20;34184:1;34166:20;:::i;:::-;34161:25;;34200:20;34218:1;34200:20;:::i;:::-;34195:25;;34354:1;34286:66;34282:74;34279:1;34276:81;34273:107;;;34360:18;;:::i;:::-;34273:107;34404:1;34401;34397:9;34390:16;;34107:305;;;;:::o;34418:185::-;34458:1;34475:20;34493:1;34475:20;:::i;:::-;34470:25;;34509:20;34527:1;34509:20;:::i;:::-;34504:25;;34548:1;34538:35;;34553:18;;:::i;:::-;34538:35;34595:1;34592;34588:9;34583:14;;34418:185;;;;:::o;34609:348::-;34649:7;34672:20;34690:1;34672:20;:::i;:::-;34667:25;;34706:20;34724:1;34706:20;:::i;:::-;34701:25;;34894:1;34826:66;34822:74;34819:1;34816:81;34811:1;34804:9;34797:17;34793:105;34790:131;;;34901:18;;:::i;:::-;34790:131;34949:1;34946;34942:9;34931:20;;34609:348;;;;:::o;34963:191::-;35003:4;35023:20;35041:1;35023:20;:::i;:::-;35018:25;;35057:20;35075:1;35057:20;:::i;:::-;35052:25;;35096:1;35093;35090:8;35087:34;;;35101:18;;:::i;:::-;35087:34;35146:1;35143;35139:9;35131:17;;34963:191;;;;:::o;35160:96::-;35197:7;35226:24;35244:5;35226:24;:::i;:::-;35215:35;;35160:96;;;:::o;35262:90::-;35296:7;35339:5;35332:13;35325:21;35314:32;;35262:90;;;:::o;35358:77::-;35395:7;35424:5;35413:16;;35358:77;;;:::o;35441:149::-;35477:7;35517:66;35510:5;35506:78;35495:89;;35441:149;;;:::o;35596:126::-;35633:7;35673:42;35666:5;35662:54;35651:65;;35596:126;;;:::o;35728:77::-;35765:7;35794:5;35783:16;;35728:77;;;:::o;35811:86::-;35846:7;35886:4;35879:5;35875:16;35864:27;;35811:86;;;:::o;35903:154::-;35987:6;35982:3;35977;35964:30;36049:1;36040:6;36035:3;36031:16;36024:27;35903:154;;;:::o;36063:307::-;36131:1;36141:113;36155:6;36152:1;36149:13;36141:113;;;36240:1;36235:3;36231:11;36225:18;36221:1;36216:3;36212:11;36205:39;36177:2;36174:1;36170:10;36165:15;;36141:113;;;36272:6;36269:1;36266:13;36263:101;;;36352:1;36343:6;36338:3;36334:16;36327:27;36263:101;36112:258;36063:307;;;:::o;36376:320::-;36420:6;36457:1;36451:4;36447:12;36437:22;;36504:1;36498:4;36494:12;36525:18;36515:81;;36581:4;36573:6;36569:17;36559:27;;36515:81;36643:2;36635:6;36632:14;36612:18;36609:38;36606:84;;;36662:18;;:::i;:::-;36606:84;36427:269;36376:320;;;:::o;36702:281::-;36785:27;36807:4;36785:27;:::i;:::-;36777:6;36773:40;36915:6;36903:10;36900:22;36879:18;36867:10;36864:34;36861:62;36858:88;;;36926:18;;:::i;:::-;36858:88;36966:10;36962:2;36955:22;36745:238;36702:281;;:::o;36989:233::-;37028:3;37051:24;37069:5;37051:24;:::i;:::-;37042:33;;37097:66;37090:5;37087:77;37084:103;;;37167:18;;:::i;:::-;37084:103;37214:1;37207:5;37203:13;37196:20;;36989:233;;;:::o;37228:100::-;37267:7;37296:26;37316:5;37296:26;:::i;:::-;37285:37;;37228:100;;;:::o;37334:94::-;37373:7;37402:20;37416:5;37402:20;:::i;:::-;37391:31;;37334:94;;;:::o;37434:176::-;37466:1;37483:20;37501:1;37483:20;:::i;:::-;37478:25;;37517:20;37535:1;37517:20;:::i;:::-;37512:25;;37556:1;37546:35;;37561:18;;:::i;:::-;37546:35;37602:1;37599;37595:9;37590:14;;37434:176;;;;:::o;37616:180::-;37664:77;37661:1;37654:88;37761:4;37758:1;37751:15;37785:4;37782:1;37775:15;37802:180;37850:77;37847:1;37840:88;37947:4;37944:1;37937:15;37971:4;37968:1;37961:15;37988:180;38036:77;38033:1;38026:88;38133:4;38130:1;38123:15;38157:4;38154:1;38147:15;38174:180;38222:77;38219:1;38212:88;38319:4;38316:1;38309:15;38343:4;38340:1;38333:15;38360:180;38408:77;38405:1;38398:88;38505:4;38502:1;38495:15;38529:4;38526:1;38519:15;38546:117;38655:1;38652;38645:12;38669:117;38778:1;38775;38768:12;38792:117;38901:1;38898;38891:12;39038:117;39147:1;39144;39137:12;39161:117;39270:1;39267;39260:12;39284:117;39393:1;39390;39383:12;39407:117;39516:1;39513;39506:12;39530:102;39571:6;39622:2;39618:7;39613:2;39606:5;39602:14;39598:28;39588:38;;39530:102;;;:::o;39638:94::-;39671:8;39719:5;39715:2;39711:14;39690:35;;39638:94;;;:::o;39738:170::-;39878:22;39874:1;39866:6;39862:14;39855:46;39738:170;:::o;39914:225::-;40054:34;40050:1;40042:6;40038:14;40031:58;40123:8;40118:2;40110:6;40106:15;40099:33;39914:225;:::o;40145:170::-;40285:22;40281:1;40273:6;40269:14;40262:46;40145:170;:::o;40321:164::-;40461:16;40457:1;40449:6;40445:14;40438:40;40321:164;:::o;40491:174::-;40631:26;40627:1;40619:6;40615:14;40608:50;40491:174;:::o;40671:180::-;40811:32;40807:1;40799:6;40795:14;40788:56;40671:180;:::o;40857:167::-;40997:19;40993:1;40985:6;40981:14;40974:43;40857:167;:::o;41030:155::-;41170:7;41166:1;41158:6;41154:14;41147:31;41030:155;:::o;41191:182::-;41331:34;41327:1;41319:6;41315:14;41308:58;41191:182;:::o;41379:173::-;41519:25;41515:1;41507:6;41503:14;41496:49;41379:173;:::o;41558:114::-;;:::o;41678:170::-;41818:22;41814:1;41806:6;41802:14;41795:46;41678:170;:::o;41854:168::-;41994:20;41990:1;41982:6;41978:14;41971:44;41854:168;:::o;42028:181::-;42168:33;42164:1;42156:6;42152:14;42145:57;42028:181;:::o;42215:151::-;42355:3;42351:1;42343:6;42339:14;42332:27;42215:151;:::o;42372:122::-;42445:24;42463:5;42445:24;:::i;:::-;42438:5;42435:35;42425:63;;42484:1;42481;42474:12;42425:63;42372:122;:::o;42500:116::-;42570:21;42585:5;42570:21;:::i;:::-;42563:5;42560:32;42550:60;;42606:1;42603;42596:12;42550:60;42500:116;:::o;42622:122::-;42695:24;42713:5;42695:24;:::i;:::-;42688:5;42685:35;42675:63;;42734:1;42731;42724:12;42675:63;42622:122;:::o;42750:120::-;42822:23;42839:5;42822:23;:::i;:::-;42815:5;42812:34;42802:62;;42860:1;42857;42850:12;42802:62;42750:120;:::o;42876:122::-;42949:24;42967:5;42949:24;:::i;:::-;42942:5;42939:35;42929:63;;42988:1;42985;42978:12;42929:63;42876:122;:::o;43004:118::-;43075:22;43091:5;43075:22;:::i;:::-;43068:5;43065:33;43055:61;;43112:1;43109;43102:12;43055:61;43004:118;:::o
Swarm Source
ipfs://6cd6882485e9e2c573f5785199051cbb812888ebef051cf9791480afae3f9994
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.