Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
2,812 PIXPAB
Holders
350
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PIXELPablosLol
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-28 */ // SPDX-License-Identifier: MIT // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM // MMMMMMMMMW0xx0XKkolldKMMMWKdolloOWMMMMMMMMMMMMMMMMMWNXKOkxookNMWOooolccllooollkWMMNxllllkNMMMMMMMMMM // MMMMWNNWWk' ';.. oWMMNl lNMW0xdollkNMMMMMOo:'.. ;XMX; :XMMK, ;KMMMMMMMMMM // MMMWx;;od'..';;. :KWMNc lNMk. ,KMMMMWx,. .lXMX; :XMMNl ,KMMMMMMMMMM // MMMWo .. .xNNO, .kMNc :XM0:. .:cdXKl. .lk0NMMX; .....'dNMMNl .:KMMMMMMMMMM // MMMWk. .xMMK, .dMNc ;KMMWKc .Oo ,KMMMNNK; l000KKXNMMMX: .. cXMMMMMMMMMM // MMMNl .dWMK, dWNc ,0MMMWx. .l; ...cXMMMXKK; c00KXWWWMMMX: ..'kNMMMMMMMMMM // MMMWl oWMK, cNNc '0MMMMNkc' .cdoOWMMMMM0' ...cXMMMMMX: .,,dNMMMMMMMMMM // MMMWo :O0d. .,xNNc '0MMMMXkx: ;KMMWNKx. :XMWWMMNc ..lNMMMMMMMMMM // MMMWd. .kNMMNc .OMMMWo. .,;,. 'ONNXXx, .,,.'xWMMMMMWo .cXMMMMMMMMMM // MMMMx. ..oNMMMNc .OMWKk; .xWWNl. ...,dx, .dNXdxNWNXNMMWd. .:xNMMMMMMMMMM // MMMMx. .cxkO00KNMMMMNc .OMO' .,OMMWKxd;. .oc. .:oc..:;'.lXMWd. .'l00kKKO0WMMM // MMMMx. ,KMMMMMMMMMMMNc .kMx. :0XWMMMMMMWo .l; ;KMWd ..,' .,.;KMMM // MMMMx. .OMMMMMMMMMMMNc .kMx. lWMMMMMMMMMd. .do. ;XMWd. ,KMMM // MMMMO'......:0MMMMMMMMMMMNd'....,OMO'....'xWMMMMMMMMMk'....',lo; ........cXMMx...........:KMMM // MMMMWX0KKKXNWMMMMMMMMMMMMMWNXXXKXWMWK0KKXNWMMMMMMMMMMWXKXXNNN0dxd:lxocxXXXXKKK0XWMMNK0KK0KKKKKKXWMMM // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWXKWMWMMWWMMMMMMMMMMMMMMMMMMMMMMMMMM // MMMMMMMWWWNNWMMMWNNNNNWWMWNNNNNNNNWMMMWNNWMMMMMMWWWWWWWMMMMWNNNNNNWMMMMMWNWMMMMMMMWWWWWWMMMWNNWMMMMM // MMMWXKkccc,:0WKd:''''';OWO;......;kNMWx,:0MMMWKOo;,;;,:kNMNx,'''';OMMMMXl'oNMMMX0xc,;;,lKWWx,:0MMMMM // MMMXl'.'d: :0l .,. 'kd. .;. .xWWd..kMMM0, .;::. .oXO. .cooxXMMMMK; :XMMWd. .,c;..,kNo.'OMMMMM // MMMX; ,0x. .xc .kNl .xd. 'o, .dWWd.;0MMMO. lXWWl .k0' .::::o0WMMK:.oNMMWl .OM0' :Ko.:KMMMMM // MMMX; .c; :Oc .d0: 'Ox. .. .lXWd.,0MMMO. cXNWl .kW0dooo; ;XMMK:.lNMMWo .kMK, ;Ko.;0MMMMM // MMMN: .;:dXNc ... .,Od. .;' ,0Mx.'kXXN0, ,dxx; .kMKdool, ;XMMX:.c0XXNd. .lko. :Xd.,kXXNMM // MMMN: .xWWMMNl .:l'..:0O;. .cXWx. .''dNk. cXWd. lKk0X: ...:0Xc .xWd...',xWM // MMMWklldKMMMMWOllxXWOdkXWNKOdooooxKNWWKollloOWNxllllllloKMM0olllllxXXxONklllldXMKollllllkNM0olllo0WM // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM // MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM // 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) } } } // 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/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/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/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/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * 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; /** * @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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // 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/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupplyById; /** * @dev Total amount of tokens in with a given id. */ function totalSupplyById(uint256 id) public view virtual returns (uint256) { return _totalSupplyById[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupplyById(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { require(amounts[i] <= 1, "only one per token id"); _totalSupplyById[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupplyById[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupplyById"); unchecked { _totalSupplyById[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Pausable.sol) pragma solidity ^0.8.0; /** * @dev ERC1155 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. * * _Available since v3.1._ */ abstract contract ERC1155Pausable is ERC1155Supply, Pausable { /** * @dev See {ERC1155-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); require(!paused(), "ERC1155Pausable: token transfer while paused"); } } pragma solidity 0.8.13; contract PIXELPablosLol is ERC1155Pausable, Ownable { uint256 internal currentIndex; string public constant name = "PIXELpablos.lol"; string public constant symbol = "PIXPAB"; bool public isHoldersActive = false; bool public isPublicActive = false; address public genesisContract = 0xd3605059c3cE9fACf625Fa72D727508B7b7F280F; uint256 public constant MAX_MINT_SUPPLY = 10000; uint256 public constant MINT_PRICE = 0.01 * 1 ether; uint256 public totalSupply = 0; bytes32 public merkleRoot; mapping(address => uint256) public whitelistedAddresses; modifier onlyHoldersActive() { require(isHoldersActive, "GenesisNotActive"); _; } modifier onlyPublicActive() { require(isPublicActive, "PublicNotActive"); _; } event NewNFTClaimed(uint256[] tokenIds, address mintedBy); event NewNFTMinted(uint256[] tokenIds, address mintedBy); event NewURI(string newURI, address updatedBy); event UpdatedMerkleRoot(bytes32 hash, address updatedBy); event UpdatedGenesisContract(address _contract, address updatedBy); event WithdrawnPayment(uint256 contractBalance, address withdrawnBy); constructor( bytes32 _merkleRoot, string memory newURI ) ERC1155(newURI) { merkleRoot = _merkleRoot; emit NewURI(newURI, msg.sender); emit UpdatedMerkleRoot(_merkleRoot, msg.sender); } /** * @dev updateTokenURI updates the new token URI in contract. * * Emits a {NewURI} event. * * Requirements: * * - Only owner of contract can call this function **/ function updateTokenURI(string memory newUri) external onlyOwner returns (bool) { _setURI(newUri); emit NewURI(newUri, msg.sender); return true; } /** * @dev updatedMerkleRoot updates the merkle hash in contract. * * Emits a {UpdatedMerkleRoot} event. * * Requirements: * * - Only owner of contract can call this function **/ function updateMerkleRoot(bytes32 hash) external onlyOwner returns (bool) { merkleRoot = hash; emit UpdatedMerkleRoot(hash, msg.sender); return true; } function updateGenesisContract(address _contract) external onlyOwner returns (bool) { genesisContract = _contract; emit UpdatedGenesisContract(_contract, msg.sender); return true; } /** * @dev pauseContract is used to pause contract. * * Emits a {Paused} event. * * Requirements: * * - Only the owner can call this function **/ function pauseContract() external onlyOwner returns (bool) { _pause(); return true; } /** * @dev unpauseContract is used to unpause contract. * * Emits a {Unpaused} event. * * Requirements: * * - Only the owner can call this function **/ function unpauseContract() external onlyOwner returns (bool) { _unpause(); return true; } /** * @dev claim is used to claim new tokens * * Emits a {NewNFTClaimed} event. * * Requirements: * * - Total supply must not exceed MAX_MINT_SUPPLY * - msg.value must be greater than or equal to MINT_PRICE * amountRequested * - Token must not exist * - Token must be owned by msg.sender **/ function claim(uint256[] memory tokenIds, bytes32[] calldata _merkleProof) external payable onlyHoldersActive returns (bool) { uint256 amountRequested = tokenIds.length; require(totalSupply + amountRequested <= MAX_MINT_SUPPLY, "MaximumMintSupplyReached"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( MerkleProof.verify(_merkleProof, merkleRoot, leaf), "InvalidMerkleProof" ); uint256 genesisQuantity = IERC721(genesisContract).balanceOf(msg.sender); uint256 allowedQuantityToMint = 0; require(genesisQuantity > 0, "NonGenesisHolder"); if (genesisQuantity >= 400) { allowedQuantityToMint = 200; } else if (genesisQuantity >= 200) { allowedQuantityToMint = 100; } else if (genesisQuantity >= 50) { allowedQuantityToMint = 50; } else if (genesisQuantity >= 50) { allowedQuantityToMint = 16; } else if (genesisQuantity >= 25) { allowedQuantityToMint = 8; } else if (genesisQuantity >= 10) { allowedQuantityToMint = 4; } else if (genesisQuantity >= 5) { allowedQuantityToMint = 2; } else if (genesisQuantity >= 1) { allowedQuantityToMint = 1; } require( amountRequested <= allowedQuantityToMint && whitelistedAddresses[msg.sender] < allowedQuantityToMint, "MaximumAllowance" ); uint256[] memory amounts = new uint256[](amountRequested); for (uint256 i = 0; i < amountRequested; i++) { require( !(exists(tokenIds[i])), "TokenAlreadyExists" ); bool isRightfulGenesisOwner = IERC721(genesisContract).ownerOf(tokenIds[i]) == msg.sender; require(isRightfulGenesisOwner == true, "NonRightfulGenesisHolder"); amounts[i] = 1; } _mintBatch(msg.sender, tokenIds, amounts, ""); totalSupply += amountRequested; whitelistedAddresses[msg.sender] += amountRequested; emit NewNFTClaimed(tokenIds, msg.sender); return true; } /** * @dev mint is used to mint new tokens. * * Emits a {NewNFTMinted} event. * * Requirements: * * - Total supply must not exceed MAX_MINT_SUPPLY * - msg.value must be greater than or equal to MINT_PRICE * amountRequested **/ function mint(uint256 amountRequested) external payable onlyPublicActive returns (bool) { require(totalSupply + amountRequested <= MAX_MINT_SUPPLY, "MaximumMintSupplyReached"); require(msg.value >= MINT_PRICE * amountRequested, "InsufficientAmount"); uint256[] memory tokenIds = new uint256[](amountRequested); uint256[] memory amounts = new uint256[](amountRequested); uint256 updatedIndex = currentIndex; for (uint256 i = 0; i < amountRequested; i++) { while ( exists(updatedIndex) ) { updatedIndex++; } uint256 tokenId = updatedIndex; tokenIds[i] = tokenId; amounts[i] = 1; updatedIndex++; } currentIndex = updatedIndex; _mintBatch(msg.sender, tokenIds, amounts, ""); emit NewNFTMinted(tokenIds, msg.sender); totalSupply += amountRequested; return true; } /** * @dev uri is used to get the URI of the token. * * Requirements: * * - Token must exist **/ function uri(uint256 _id) public view override returns (string memory) { require(exists(_id), "TokenInexistent"); return string( abi.encodePacked( super.uri(_id), Strings.toString(_id) ) ); } function startSaleHolder() external onlyOwner { isHoldersActive = true; } function endSaleHolder() external onlyOwner { isHoldersActive = false; } function startSalePublic() external onlyOwner { isPublicActive = true; } function endSalePublic() external onlyOwner { isPublicActive = false; } /** * @dev withdrawPayment is used to withdraw payment from contract. * * Emits a {WithdrawnPayment} event. * * Requirements: * * - Only the defaultPlatformAddress can call this function **/ function withdrawPayment() external onlyOwner returns (bool) { uint256 contractBalance = address(this).balance; require(contractBalance > 0, "UnAuthorizedRequest"); (bool sent, ) = owner().call{value: contractBalance}(""); require(sent == true, "TransactionFailed"); emit WithdrawnPayment(contractBalance, msg.sender); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"string","name":"newURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"mintedBy","type":"address"}],"name":"NewNFTClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"mintedBy","type":"address"}],"name":"NewNFTMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"},{"indexed":false,"internalType":"address","name":"updatedBy","type":"address"}],"name":"NewURI","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"address","name":"updatedBy","type":"address"}],"name":"UpdatedGenesisContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"address","name":"updatedBy","type":"address"}],"name":"UpdatedMerkleRoot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"withdrawnBy","type":"address"}],"name":"WithdrawnPayment","type":"event"},{"inputs":[],"name":"MAX_MINT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"endSaleHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSalePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isHoldersActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountRequested","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSaleHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSalePublic","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupplyById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"updateGenesisContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"updateMerkleRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"updateTokenURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawPayment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600660006101000a81548160ff0219169083151502179055506000600660016101000a81548160ff02191690831515021790555073d3605059c3ce9facf625fa72d727508b7b7f280f600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600755348015620000a157600080fd5b5060405162006002380380620060028339818101604052810190620000c791906200050c565b80620000d9816200019a60201b60201c565b506000600460006101000a81548160ff0219169083151502179055506200011562000109620001b660201b60201c565b620001be60201b60201c565b816008819055507fc7908db8c8588ac430ee4efe758e7ba70a0d22e32a138b548fd0d34fa8a4839581336040516200014f92919062000614565b60405180910390a17fa2a63702a7eb4271f96e4ea16c164231eb3f32a28bc80e9c880c36363a5c414682336040516200018a92919062000659565b60405180910390a15050620006ea565b8060029080519060200190620001b292919062000284565b5050565b600033905090565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029290620006b5565b90600052602060002090601f016020900481019282620002b6576000855562000302565b82601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200035d8162000348565b81146200036957600080fd5b50565b6000815190506200037d8162000352565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003d8826200038d565b810181811067ffffffffffffffff82111715620003fa57620003f96200039e565b5b80604052505050565b60006200040f62000334565b90506200041d8282620003cd565b919050565b600067ffffffffffffffff82111562000440576200043f6200039e565b5b6200044b826200038d565b9050602081019050919050565b60005b83811015620004785780820151818401526020810190506200045b565b8381111562000488576000848401525b50505050565b6000620004a56200049f8462000422565b62000403565b905082815260208101848484011115620004c457620004c362000388565b5b620004d184828562000458565b509392505050565b600082601f830112620004f157620004f062000383565b5b8151620005038482602086016200048e565b91505092915050565b600080604083850312156200052657620005256200033e565b5b600062000536858286016200036c565b925050602083015167ffffffffffffffff8111156200055a576200055962000343565b5b6200056885828601620004d9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60006200059b8262000572565b620005a781856200057d565b9350620005b981856020860162000458565b620005c4816200038d565b840191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005fc82620005cf565b9050919050565b6200060e81620005ef565b82525050565b600060408201905081810360008301526200063081856200058e565b905062000641602083018462000603565b9392505050565b620006538162000348565b82525050565b600060408201905062000670600083018562000648565b6200067f602083018462000603565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006ce57607f821691505b602082108103620006e457620006e362000686565b5b50919050565b61590880620006fa6000396000f3fe60806040526004361061020e5760003560e01c80638da5cb5b11610118578063b33712c5116100a0578063d8e99f921161006f578063d8e99f92146107b2578063e8dbce56146107dd578063e985e9c5146107f4578063f242432a14610831578063f2fde38b1461085a5761020e565b8063b33712c5146106f4578063be3b5fe91461071f578063bf2f44b71461074a578063c002d23d146107875761020e565b8063a118babd116100e7578063a118babd14610633578063a22cb4651461065e578063a329e1db14610687578063a3330d25146106b2578063aaddd756146106dd5761020e565b80638da5cb5b1461057057806395d89b411461059b57806398cd6153146105c6578063a0712d68146106035761020e565b80632eb4a7ab1161019b5780634e1273f41161016a5780634e1273f4146104775780634f558e79146104b45780635c975abb146104f1578063626fe4191461051c578063715018a6146105595761020e565b80632eb4a7ab146103b457806331afeb31146103df578063439766ce1461040f5780634783f0ef1461043a5761020e565b80630d9a11a0116101e25780630d9a11a0146102f55780630e89341c1461030c57806318160ddd146103495780631a08c774146103745780632eb2c2d61461038b5761020e565b8062fdd58e1461021357806301ffc9a71461025057806306c933d81461028d57806306fdde03146102ca575b600080fd5b34801561021f57600080fd5b5061023a600480360381019061023591906137df565b610883565b604051610247919061382e565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906138a1565b61094b565b60405161028491906138e9565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613904565b610a2d565b6040516102c1919061382e565b60405180910390f35b3480156102d657600080fd5b506102df610a45565b6040516102ec91906139ca565b60405180910390f35b34801561030157600080fd5b5061030a610a7e565b005b34801561031857600080fd5b50610333600480360381019061032e91906139ec565b610b17565b60405161034091906139ca565b60405180910390f35b34801561035557600080fd5b5061035e610b9a565b60405161036b919061382e565b60405180910390f35b34801561038057600080fd5b50610389610ba0565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613c16565b610c39565b005b3480156103c057600080fd5b506103c9610cda565b6040516103d69190613cfe565b60405180910390f35b6103f960048036038101906103f49190613d74565b610ce0565b60405161040691906138e9565b60405180910390f35b34801561041b57600080fd5b50610424611331565b60405161043191906138e9565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613e1c565b6113be565b60405161046e91906138e9565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613f0c565b611485565b6040516104ab9190614042565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906139ec565b61159e565b6040516104e891906138e9565b60405180910390f35b3480156104fd57600080fd5b506105066115b2565b60405161051391906138e9565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613904565b6115c9565b60405161055091906138e9565b60405180910390f35b34801561056557600080fd5b5061056e6116ca565b005b34801561057c57600080fd5b50610585611752565b6040516105929190614073565b60405180910390f35b3480156105a757600080fd5b506105b061177c565b6040516105bd91906139ca565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e8919061412f565b6117b5565b6040516105fa91906138e9565b60405180910390f35b61061d600480360381019061061891906139ec565b61187e565b60405161062a91906138e9565b60405180910390f35b34801561063f57600080fd5b50610648611b2d565b60405161065591906138e9565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906141a4565b611cef565b005b34801561069357600080fd5b5061069c611d05565b6040516106a9919061382e565b60405180910390f35b3480156106be57600080fd5b506106c7611d0b565b6040516106d491906138e9565b60405180910390f35b3480156106e957600080fd5b506106f2611d1e565b005b34801561070057600080fd5b50610709611db7565b60405161071691906138e9565b60405180910390f35b34801561072b57600080fd5b50610734611e44565b60405161074191906138e9565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906139ec565b611e57565b60405161077e919061382e565b60405180910390f35b34801561079357600080fd5b5061079c611e74565b6040516107a9919061382e565b60405180910390f35b3480156107be57600080fd5b506107c7611e7f565b6040516107d49190614073565b60405180910390f35b3480156107e957600080fd5b506107f2611ea5565b005b34801561080057600080fd5b5061081b600480360381019061081691906141e4565b611f3e565b60405161082891906138e9565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614224565b611fd2565b005b34801561086657600080fd5b50610881600480360381019061087c9190613904565b612073565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea9061432d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a265750610a258261216a565b5b9050919050565b60096020528060005260406000206000915090505481565b6040518060400160405280600f81526020017f504958454c7061626c6f732e6c6f6c000000000000000000000000000000000081525081565b610a866121d4565b73ffffffffffffffffffffffffffffffffffffffff16610aa4611752565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614399565b60405180910390fd5b6000600660006101000a81548160ff021916908315150217905550565b6060610b228261159e565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890614405565b60405180910390fd5b610b6a826121dc565b610b7383612270565b604051602001610b84929190614461565b6040516020818303038152906040529050919050565b60075481565b610ba86121d4565b73ffffffffffffffffffffffffffffffffffffffff16610bc6611752565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390614399565b60405180910390fd5b6000600660016101000a81548160ff021916908315150217905550565b610c416121d4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c875750610c8685610c816121d4565b611f3e565b5b610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906144f7565b60405180910390fd5b610cd385858585856123d0565b5050505050565b60085481565b6000600660009054906101000a900460ff16610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890614563565b60405180910390fd5b60008451905061271081600754610d4891906145b2565b1115610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614654565b60405180910390fd5b600033604051602001610d9c91906146bc565b604051602081830303815290604052805190602001209050610e02858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600854836126e3565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614723565b60405180910390fd5b6000600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e9e9190614073565b602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190614758565b90506000808211610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906147d1565b60405180910390fd5b6101908210610f375760c89050610fb1565b60c88210610f485760649050610fb0565b60328210610f595760329050610faf565b60328210610f6a5760109050610fae565b60198210610f7b5760089050610fad565b600a8210610f8c5760049050610fac565b60058210610f9d5760029050610fab565b60018210610faa57600190505b5b5b5b5b5b5b5b808411158015610fff575080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b61103e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110359061483d565b60405180910390fd5b60008467ffffffffffffffff81111561105a57611059613a1e565b5b6040519080825280602002602001820160405280156110885781602001602082028036833780820191505090505b50905060005b8581101561125d576110b98a82815181106110ac576110ab61485d565b5b602002602001015161159e565b156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906148d8565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8d85815181106111635761116261485d565b5b60200260200101516040518263ffffffff1660e01b8152600401611187919061382e565b602060405180830381865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c8919061490d565b73ffffffffffffffffffffffffffffffffffffffff161490506001151581151514611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614986565b60405180910390fd5b600183838151811061123d5761123c61485d565b5b602002602001018181525050508080611255906149a6565b91505061108e565b50611279338a83604051806020016040528060008152506126fa565b846007600082825461128b91906145b2565b9250508190555084600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e191906145b2565b925050819055507fde2d71f52faa890a279c058c686c85fa154568fcee8b0fff9226f489dbb4008089336040516113199291906149ee565b60405180910390a16001955050505050509392505050565b600061133b6121d4565b73ffffffffffffffffffffffffffffffffffffffff16611359611752565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614399565b60405180910390fd5b6113b7612917565b6001905090565b60006113c86121d4565b73ffffffffffffffffffffffffffffffffffffffff166113e6611752565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614399565b60405180910390fd5b816008819055507fa2a63702a7eb4271f96e4ea16c164231eb3f32a28bc80e9c880c36363a5c41468233604051611474929190614a1e565b60405180910390a160019050919050565b606081518351146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290614ab9565b60405180910390fd5b6000835167ffffffffffffffff8111156114e8576114e7613a1e565b5b6040519080825280602002602001820160405280156115165781602001602082028036833780820191505090505b50905060005b84518110156115935761156385828151811061153b5761153a61485d565b5b60200260200101518583815181106115565761155561485d565b5b6020026020010151610883565b8282815181106115765761157561485d565b5b6020026020010181815250508061158c906149a6565b905061151c565b508091505092915050565b6000806115aa83611e57565b119050919050565b6000600460009054906101000a900460ff16905090565b60006115d36121d4565b73ffffffffffffffffffffffffffffffffffffffff166115f1611752565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90614399565b60405180910390fd5b81600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80232346ebb2dea71c1fd1c47b02ae6346d278c5f92ef1d4463ec0cb31e4596782336040516116b9929190614ad9565b60405180910390a160019050919050565b6116d26121d4565b73ffffffffffffffffffffffffffffffffffffffff166116f0611752565b73ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614399565b60405180910390fd5b61175060006129ba565b565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f504958504142000000000000000000000000000000000000000000000000000081525081565b60006117bf6121d4565b73ffffffffffffffffffffffffffffffffffffffff166117dd611752565b73ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614399565b60405180910390fd5b61183c82612a80565b7fc7908db8c8588ac430ee4efe758e7ba70a0d22e32a138b548fd0d34fa8a48395823360405161186d929190614b02565b60405180910390a160019050919050565b6000600660019054906101000a900460ff166118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690614b7e565b60405180910390fd5b612710826007546118e091906145b2565b1115611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890614654565b60405180910390fd5b81662386f26fc100006119349190614b9e565b341015611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90614c44565b60405180910390fd5b60008267ffffffffffffffff81111561199257611991613a1e565b5b6040519080825280602002602001820160405280156119c05781602001602082028036833780820191505090505b50905060008367ffffffffffffffff8111156119df576119de613a1e565b5b604051908082528060200260200182016040528015611a0d5781602001602082028036833780820191505090505b5090506000600554905060005b85811015611aac575b611a2c8261159e565b15611a44578180611a3c906149a6565b925050611a23565b600082905080858381518110611a5d57611a5c61485d565b5b6020026020010181815250506001848381518110611a7e57611a7d61485d565b5b6020026020010181815250508280611a95906149a6565b935050508080611aa4906149a6565b915050611a1a565b5080600581905550611acf338484604051806020016040528060008152506126fa565b7f7ac6136baaa4f9a0d76c1972a3d2b0061580ddb478a8bf27fd0c9fd3d2d100e98333604051611b009291906149ee565b60405180910390a18460076000828254611b1a91906145b2565b9250508190555060019350505050919050565b6000611b376121d4565b73ffffffffffffffffffffffffffffffffffffffff16611b55611752565b73ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614399565b60405180910390fd5b600047905060008111611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90614cb0565b60405180910390fd5b6000611bfd611752565b73ffffffffffffffffffffffffffffffffffffffff1682604051611c2090614d01565b60006040518083038185875af1925050503d8060008114611c5d576040519150601f19603f3d011682016040523d82523d6000602084013e611c62565b606091505b505090506001151581151514611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614d62565b60405180910390fd5b7fb0caa7e5a1709d95503ec9da196222012fad8495f101214d86c3b72ce101810f8233604051611cde929190614d82565b60405180910390a160019250505090565b611d01611cfa6121d4565b8383612a9a565b5050565b61271081565b600660019054906101000a900460ff1681565b611d266121d4565b73ffffffffffffffffffffffffffffffffffffffff16611d44611752565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614399565b60405180910390fd5b6001600660016101000a81548160ff021916908315150217905550565b6000611dc16121d4565b73ffffffffffffffffffffffffffffffffffffffff16611ddf611752565b73ffffffffffffffffffffffffffffffffffffffff1614611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90614399565b60405180910390fd5b611e3d612c06565b6001905090565b600660009054906101000a900460ff1681565b600060036000838152602001908152602001600020549050919050565b662386f26fc1000081565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ead6121d4565b73ffffffffffffffffffffffffffffffffffffffff16611ecb611752565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614399565b60405180910390fd5b6001600660006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fda6121d4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612020575061201f8561201a6121d4565b611f3e565b5b61205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614e1d565b60405180910390fd5b61206c8585858585612ca8565b5050505050565b61207b6121d4565b73ffffffffffffffffffffffffffffffffffffffff16612099611752565b73ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614399565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614eaf565b60405180910390fd5b612167816129ba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546121eb90614efe565b80601f016020809104026020016040519081016040528092919081815260200182805461221790614efe565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b50505050509050919050565b6060600082036122b7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123cb565b600082905060005b600082146122e95780806122d2906149a6565b915050600a826122e29190614f5e565b91506122bf565b60008167ffffffffffffffff81111561230557612304613a1e565b5b6040519080825280601f01601f1916602001820160405280156123375781602001600182028036833780820191505090505b5090505b600085146123c4576001826123509190614f8f565b9150600a8561235f9190614fc3565b603061236b91906145b2565b60f81b8183815181106123815761238061485d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123bd9190614f5e565b945061233b565b8093505050505b919050565b8151835114612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b90615066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a906150f8565b60405180910390fd5b600061248d6121d4565b905061249d818787878787612f29565b60005b845181101561264e5760008582815181106124be576124bd61485d565b5b6020026020010151905060008583815181106124dd576124dc61485d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561257e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125759061518a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461263391906145b2565b9250508190555050505080612647906149a6565b90506124a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126c59291906151aa565b60405180910390a46126db818787878787612f87565b505050505050565b6000826126f0858461315e565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090615253565b60405180910390fd5b81518351146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490615066565b60405180910390fd5b60006127b76121d4565b90506127c881600087878787612f29565b60005b8451811015612881578381815181106127e7576127e661485d565b5b60200260200101516000808784815181106128055761280461485d565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286791906145b2565b925050819055508080612879906149a6565b9150506127cb565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516128f99291906151aa565b60405180910390a461291081600087878787612f87565b5050505050565b61291f6115b2565b1561295f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612956906152bf565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129a36121d4565b6040516129b09190614073565b60405180910390a1565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190612a96929190613694565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff90615351565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bf991906138e9565b60405180910390a3505050565b612c0e6115b2565b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c44906153bd565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c916121d4565b604051612c9e9190614073565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e906150f8565b60405180910390fd5b6000612d216121d4565b9050612d41818787612d32886131d3565b612d3b886131d3565b87612f29565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf9061518a565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e8d91906145b2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612f0a9291906153dd565b60405180910390a4612f2082888888888861324d565b50505050505050565b612f37868686868686613424565b612f3f6115b2565b15612f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7690615478565b60405180910390fd5b505050505050565b612fa68473ffffffffffffffffffffffffffffffffffffffff16613652565b15613156578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612fec9594939291906154ed565b6020604051808303816000875af192505050801561302857506040513d601f19601f82011682018060405250810190613025919061556a565b60015b6130cd576130346155a4565b806308c379a00361309057506130486155c6565b806130535750613092565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308791906139ca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c4906156c8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061575a565b60405180910390fd5b505b505050505050565b60008082905060005b84518110156131c85760008582815181106131855761318461485d565b5b602002602001015190508083116131a7576131a08382613675565b92506131b4565b6131b18184613675565b92505b5080806131c0906149a6565b915050613167565b508091505092915050565b60606000600167ffffffffffffffff8111156131f2576131f1613a1e565b5b6040519080825280602002602001820160405280156132205781602001602082028036833780820191505090505b50905082816000815181106132385761323761485d565b5b60200260200101818152505080915050919050565b61326c8473ffffffffffffffffffffffffffffffffffffffff16613652565b1561341c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016132b295949392919061577a565b6020604051808303816000875af19250505080156132ee57506040513d601f19601f820116820180604052508101906132eb919061556a565b60015b613393576132fa6155a4565b806308c379a003613356575061330e6155c6565b806133195750613358565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334d91906139ca565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a906156c8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461341a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134119061575a565b60405180910390fd5b505b505050505050565b61343286868686868661368c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135415760005b835181101561353f5760018382815181106134875761348661485d565b5b602002602001015111156134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c790615820565b60405180910390fd5b8281815181106134e3576134e261485d565b5b6020026020010151600360008684815181106135025761350161485d565b5b60200260200101518152602001908152602001600020600082825461352791906145b2565b9250508190555080613538906149a6565b9050613469565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361364a5760005b83518110156136485760008482815181106135965761359561485d565b5b6020026020010151905060008483815181106135b5576135b461485d565b5b602002602001015190506000600360008481526020019081526020016000205490508181101561361a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613611906158b2565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080613641906149a6565b9050613578565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b505050505050565b8280546136a090614efe565b90600052602060002090601f0160209004810192826136c25760008555613709565b82601f106136db57805160ff1916838001178555613709565b82800160010185558215613709579182015b828111156137085782518255916020019190600101906136ed565b5b509050613716919061371a565b5090565b5b8082111561373357600081600090555060010161371b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137768261374b565b9050919050565b6137868161376b565b811461379157600080fd5b50565b6000813590506137a38161377d565b92915050565b6000819050919050565b6137bc816137a9565b81146137c757600080fd5b50565b6000813590506137d9816137b3565b92915050565b600080604083850312156137f6576137f5613741565b5b600061380485828601613794565b9250506020613815858286016137ca565b9150509250929050565b613828816137a9565b82525050565b6000602082019050613843600083018461381f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61387e81613849565b811461388957600080fd5b50565b60008135905061389b81613875565b92915050565b6000602082840312156138b7576138b6613741565b5b60006138c58482850161388c565b91505092915050565b60008115159050919050565b6138e3816138ce565b82525050565b60006020820190506138fe60008301846138da565b92915050565b60006020828403121561391a57613919613741565b5b600061392884828501613794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396b578082015181840152602081019050613950565b8381111561397a576000848401525b50505050565b6000601f19601f8301169050919050565b600061399c82613931565b6139a6818561393c565b93506139b681856020860161394d565b6139bf81613980565b840191505092915050565b600060208201905081810360008301526139e48184613991565b905092915050565b600060208284031215613a0257613a01613741565b5b6000613a10848285016137ca565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a5682613980565b810181811067ffffffffffffffff82111715613a7557613a74613a1e565b5b80604052505050565b6000613a88613737565b9050613a948282613a4d565b919050565b600067ffffffffffffffff821115613ab457613ab3613a1e565b5b602082029050602081019050919050565b600080fd5b6000613add613ad884613a99565b613a7e565b90508083825260208201905060208402830185811115613b0057613aff613ac5565b5b835b81811015613b295780613b1588826137ca565b845260208401935050602081019050613b02565b5050509392505050565b600082601f830112613b4857613b47613a19565b5b8135613b58848260208601613aca565b91505092915050565b600080fd5b600067ffffffffffffffff821115613b8157613b80613a1e565b5b613b8a82613980565b9050602081019050919050565b82818337600083830152505050565b6000613bb9613bb484613b66565b613a7e565b905082815260208101848484011115613bd557613bd4613b61565b5b613be0848285613b97565b509392505050565b600082601f830112613bfd57613bfc613a19565b5b8135613c0d848260208601613ba6565b91505092915050565b600080600080600060a08688031215613c3257613c31613741565b5b6000613c4088828901613794565b9550506020613c5188828901613794565b945050604086013567ffffffffffffffff811115613c7257613c71613746565b5b613c7e88828901613b33565b935050606086013567ffffffffffffffff811115613c9f57613c9e613746565b5b613cab88828901613b33565b925050608086013567ffffffffffffffff811115613ccc57613ccb613746565b5b613cd888828901613be8565b9150509295509295909350565b6000819050919050565b613cf881613ce5565b82525050565b6000602082019050613d136000830184613cef565b92915050565b600080fd5b60008083601f840112613d3457613d33613a19565b5b8235905067ffffffffffffffff811115613d5157613d50613d19565b5b602083019150836020820283011115613d6d57613d6c613ac5565b5b9250929050565b600080600060408486031215613d8d57613d8c613741565b5b600084013567ffffffffffffffff811115613dab57613daa613746565b5b613db786828701613b33565b935050602084013567ffffffffffffffff811115613dd857613dd7613746565b5b613de486828701613d1e565b92509250509250925092565b613df981613ce5565b8114613e0457600080fd5b50565b600081359050613e1681613df0565b92915050565b600060208284031215613e3257613e31613741565b5b6000613e4084828501613e07565b91505092915050565b600067ffffffffffffffff821115613e6457613e63613a1e565b5b602082029050602081019050919050565b6000613e88613e8384613e49565b613a7e565b90508083825260208201905060208402830185811115613eab57613eaa613ac5565b5b835b81811015613ed45780613ec08882613794565b845260208401935050602081019050613ead565b5050509392505050565b600082601f830112613ef357613ef2613a19565b5b8135613f03848260208601613e75565b91505092915050565b60008060408385031215613f2357613f22613741565b5b600083013567ffffffffffffffff811115613f4157613f40613746565b5b613f4d85828601613ede565b925050602083013567ffffffffffffffff811115613f6e57613f6d613746565b5b613f7a85828601613b33565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fb9816137a9565b82525050565b6000613fcb8383613fb0565b60208301905092915050565b6000602082019050919050565b6000613fef82613f84565b613ff98185613f8f565b935061400483613fa0565b8060005b8381101561403557815161401c8882613fbf565b975061402783613fd7565b925050600181019050614008565b5085935050505092915050565b6000602082019050818103600083015261405c8184613fe4565b905092915050565b61406d8161376b565b82525050565b60006020820190506140886000830184614064565b92915050565b600067ffffffffffffffff8211156140a9576140a8613a1e565b5b6140b282613980565b9050602081019050919050565b60006140d26140cd8461408e565b613a7e565b9050828152602081018484840111156140ee576140ed613b61565b5b6140f9848285613b97565b509392505050565b600082601f83011261411657614115613a19565b5b81356141268482602086016140bf565b91505092915050565b60006020828403121561414557614144613741565b5b600082013567ffffffffffffffff81111561416357614162613746565b5b61416f84828501614101565b91505092915050565b614181816138ce565b811461418c57600080fd5b50565b60008135905061419e81614178565b92915050565b600080604083850312156141bb576141ba613741565b5b60006141c985828601613794565b92505060206141da8582860161418f565b9150509250929050565b600080604083850312156141fb576141fa613741565b5b600061420985828601613794565b925050602061421a85828601613794565b9150509250929050565b600080600080600060a086880312156142405761423f613741565b5b600061424e88828901613794565b955050602061425f88828901613794565b9450506040614270888289016137ca565b9350506060614281888289016137ca565b925050608086013567ffffffffffffffff8111156142a2576142a1613746565b5b6142ae88828901613be8565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614317602b8361393c565b9150614322826142bb565b604082019050919050565b600060208201905081810360008301526143468161430a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061438360208361393c565b915061438e8261434d565b602082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f546f6b656e496e6578697374656e740000000000000000000000000000000000600082015250565b60006143ef600f8361393c565b91506143fa826143b9565b602082019050919050565b6000602082019050818103600083015261441e816143e2565b9050919050565b600081905092915050565b600061443b82613931565b6144458185614425565b935061445581856020860161394d565b80840191505092915050565b600061446d8285614430565b91506144798284614430565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006144e160328361393c565b91506144ec82614485565b604082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b7f47656e657369734e6f7441637469766500000000000000000000000000000000600082015250565b600061454d60108361393c565b915061455882614517565b602082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145bd826137a9565b91506145c8836137a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145fd576145fc614583565b5b828201905092915050565b7f4d6178696d756d4d696e74537570706c79526561636865640000000000000000600082015250565b600061463e60188361393c565b915061464982614608565b602082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b60008160601b9050919050565b600061468c82614674565b9050919050565b600061469e82614681565b9050919050565b6146b66146b18261376b565b614693565b82525050565b60006146c882846146a5565b60148201915081905092915050565b7f496e76616c69644d65726b6c6550726f6f660000000000000000000000000000600082015250565b600061470d60128361393c565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b600081519050614752816137b3565b92915050565b60006020828403121561476e5761476d613741565b5b600061477c84828501614743565b91505092915050565b7f4e6f6e47656e65736973486f6c64657200000000000000000000000000000000600082015250565b60006147bb60108361393c565b91506147c682614785565b602082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b7f4d6178696d756d416c6c6f77616e636500000000000000000000000000000000600082015250565b600061482760108361393c565b9150614832826147f1565b602082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e416c72656164794578697374730000000000000000000000000000600082015250565b60006148c260128361393c565b91506148cd8261488c565b602082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b6000815190506149078161377d565b92915050565b60006020828403121561492357614922613741565b5b6000614931848285016148f8565b91505092915050565b7f4e6f6e526967687466756c47656e65736973486f6c6465720000000000000000600082015250565b600061497060188361393c565b915061497b8261493a565b602082019050919050565b6000602082019050818103600083015261499f81614963565b9050919050565b60006149b1826137a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e3576149e2614583565b5b600182019050919050565b60006040820190508181036000830152614a088185613fe4565b9050614a176020830184614064565b9392505050565b6000604082019050614a336000830185613cef565b614a406020830184614064565b9392505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614aa360298361393c565b9150614aae82614a47565b604082019050919050565b60006020820190508181036000830152614ad281614a96565b9050919050565b6000604082019050614aee6000830185614064565b614afb6020830184614064565b9392505050565b60006040820190508181036000830152614b1c8185613991565b9050614b2b6020830184614064565b9392505050565b7f5075626c69634e6f744163746976650000000000000000000000000000000000600082015250565b6000614b68600f8361393c565b9150614b7382614b32565b602082019050919050565b60006020820190508181036000830152614b9781614b5b565b9050919050565b6000614ba9826137a9565b9150614bb4836137a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bed57614bec614583565b5b828202905092915050565b7f496e73756666696369656e74416d6f756e740000000000000000000000000000600082015250565b6000614c2e60128361393c565b9150614c3982614bf8565b602082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f556e417574686f72697a65645265717565737400000000000000000000000000600082015250565b6000614c9a60138361393c565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b600081905092915050565b50565b6000614ceb600083614cd0565b9150614cf682614cdb565b600082019050919050565b6000614d0c82614cde565b9150819050919050565b7f5472616e73616374696f6e4661696c6564000000000000000000000000000000600082015250565b6000614d4c60118361393c565b9150614d5782614d16565b602082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b6000604082019050614d97600083018561381f565b614da46020830184614064565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614e0760298361393c565b9150614e1282614dab565b604082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e9960268361393c565b9150614ea482614e3d565b604082019050919050565b60006020820190508181036000830152614ec881614e8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f1657607f821691505b602082108103614f2957614f28614ecf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f69826137a9565b9150614f74836137a9565b925082614f8457614f83614f2f565b5b828204905092915050565b6000614f9a826137a9565b9150614fa5836137a9565b925082821015614fb857614fb7614583565b5b828203905092915050565b6000614fce826137a9565b9150614fd9836137a9565b925082614fe957614fe8614f2f565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061505060288361393c565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150e260258361393c565b91506150ed82615086565b604082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000615174602a8361393c565b915061517f82615118565b604082019050919050565b600060208201905081810360008301526151a381615167565b9050919050565b600060408201905081810360008301526151c48185613fe4565b905081810360208301526151d88184613fe4565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061523d60218361393c565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006152a960108361393c565b91506152b482615273565b602082019050919050565b600060208201905081810360008301526152d88161529c565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061533b60298361393c565b9150615346826152df565b604082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153a760148361393c565b91506153b282615371565b602082019050919050565b600060208201905081810360008301526153d68161539a565b9050919050565b60006040820190506153f2600083018561381f565b6153ff602083018461381f565b9392505050565b7f455243313135355061757361626c653a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b6000615462602c8361393c565b915061546d82615406565b604082019050919050565b6000602082019050818103600083015261549181615455565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154bf82615498565b6154c981856154a3565b93506154d981856020860161394d565b6154e281613980565b840191505092915050565b600060a0820190506155026000830188614064565b61550f6020830187614064565b81810360408301526155218186613fe4565b905081810360608301526155358185613fe4565b9050818103608083015261554981846154b4565b90509695505050505050565b60008151905061556481613875565b92915050565b6000602082840312156155805761557f613741565b5b600061558e84828501615555565b91505092915050565b60008160e01c9050919050565b600060033d11156155c35760046000803e6155c0600051615597565b90505b90565b600060443d10615653576155d8613737565b60043d036004823e80513d602482011167ffffffffffffffff82111715615600575050615653565b808201805167ffffffffffffffff81111561561e5750505050615653565b80602083010160043d03850181111561563b575050505050615653565b61564a82602001850186613a4d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006156b260348361393c565b91506156bd82615656565b604082019050919050565b600060208201905081810360008301526156e1816156a5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061574460288361393c565b915061574f826156e8565b604082019050919050565b6000602082019050818103600083015261577381615737565b9050919050565b600060a08201905061578f6000830188614064565b61579c6020830187614064565b6157a9604083018661381f565b6157b6606083018561381f565b81810360808301526157c881846154b4565b90509695505050505050565b7f6f6e6c79206f6e652070657220746f6b656e2069640000000000000000000000600082015250565b600061580a60158361393c565b9150615815826157d4565b602082019050919050565b60006020820190508181036000830152615839816157fd565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79427949640000000000000000000000000000000000000000602082015250565b600061589c602c8361393c565b91506158a782615840565b604082019050919050565b600060208201905081810360008301526158cb8161588f565b905091905056fea264697066735822122092f503294a5628b9e3256468c06435c17681a4b5876344a760a3d7b15c8502ed64736f6c634300080d0033b5287ef25a7b56dde4889ba81763f37d4de08e453ce1649305fbecc8fa0af44b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569666d6b6136686332337975736132723568626d6e766d7262766879696c3373766a78347a68626f79693477326a33626335796e792f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020e5760003560e01c80638da5cb5b11610118578063b33712c5116100a0578063d8e99f921161006f578063d8e99f92146107b2578063e8dbce56146107dd578063e985e9c5146107f4578063f242432a14610831578063f2fde38b1461085a5761020e565b8063b33712c5146106f4578063be3b5fe91461071f578063bf2f44b71461074a578063c002d23d146107875761020e565b8063a118babd116100e7578063a118babd14610633578063a22cb4651461065e578063a329e1db14610687578063a3330d25146106b2578063aaddd756146106dd5761020e565b80638da5cb5b1461057057806395d89b411461059b57806398cd6153146105c6578063a0712d68146106035761020e565b80632eb4a7ab1161019b5780634e1273f41161016a5780634e1273f4146104775780634f558e79146104b45780635c975abb146104f1578063626fe4191461051c578063715018a6146105595761020e565b80632eb4a7ab146103b457806331afeb31146103df578063439766ce1461040f5780634783f0ef1461043a5761020e565b80630d9a11a0116101e25780630d9a11a0146102f55780630e89341c1461030c57806318160ddd146103495780631a08c774146103745780632eb2c2d61461038b5761020e565b8062fdd58e1461021357806301ffc9a71461025057806306c933d81461028d57806306fdde03146102ca575b600080fd5b34801561021f57600080fd5b5061023a600480360381019061023591906137df565b610883565b604051610247919061382e565b60405180910390f35b34801561025c57600080fd5b50610277600480360381019061027291906138a1565b61094b565b60405161028491906138e9565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613904565b610a2d565b6040516102c1919061382e565b60405180910390f35b3480156102d657600080fd5b506102df610a45565b6040516102ec91906139ca565b60405180910390f35b34801561030157600080fd5b5061030a610a7e565b005b34801561031857600080fd5b50610333600480360381019061032e91906139ec565b610b17565b60405161034091906139ca565b60405180910390f35b34801561035557600080fd5b5061035e610b9a565b60405161036b919061382e565b60405180910390f35b34801561038057600080fd5b50610389610ba0565b005b34801561039757600080fd5b506103b260048036038101906103ad9190613c16565b610c39565b005b3480156103c057600080fd5b506103c9610cda565b6040516103d69190613cfe565b60405180910390f35b6103f960048036038101906103f49190613d74565b610ce0565b60405161040691906138e9565b60405180910390f35b34801561041b57600080fd5b50610424611331565b60405161043191906138e9565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613e1c565b6113be565b60405161046e91906138e9565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613f0c565b611485565b6040516104ab9190614042565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d691906139ec565b61159e565b6040516104e891906138e9565b60405180910390f35b3480156104fd57600080fd5b506105066115b2565b60405161051391906138e9565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e9190613904565b6115c9565b60405161055091906138e9565b60405180910390f35b34801561056557600080fd5b5061056e6116ca565b005b34801561057c57600080fd5b50610585611752565b6040516105929190614073565b60405180910390f35b3480156105a757600080fd5b506105b061177c565b6040516105bd91906139ca565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e8919061412f565b6117b5565b6040516105fa91906138e9565b60405180910390f35b61061d600480360381019061061891906139ec565b61187e565b60405161062a91906138e9565b60405180910390f35b34801561063f57600080fd5b50610648611b2d565b60405161065591906138e9565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906141a4565b611cef565b005b34801561069357600080fd5b5061069c611d05565b6040516106a9919061382e565b60405180910390f35b3480156106be57600080fd5b506106c7611d0b565b6040516106d491906138e9565b60405180910390f35b3480156106e957600080fd5b506106f2611d1e565b005b34801561070057600080fd5b50610709611db7565b60405161071691906138e9565b60405180910390f35b34801561072b57600080fd5b50610734611e44565b60405161074191906138e9565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c91906139ec565b611e57565b60405161077e919061382e565b60405180910390f35b34801561079357600080fd5b5061079c611e74565b6040516107a9919061382e565b60405180910390f35b3480156107be57600080fd5b506107c7611e7f565b6040516107d49190614073565b60405180910390f35b3480156107e957600080fd5b506107f2611ea5565b005b34801561080057600080fd5b5061081b600480360381019061081691906141e4565b611f3e565b60405161082891906138e9565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614224565b611fd2565b005b34801561086657600080fd5b50610881600480360381019061087c9190613904565b612073565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea9061432d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a265750610a258261216a565b5b9050919050565b60096020528060005260406000206000915090505481565b6040518060400160405280600f81526020017f504958454c7061626c6f732e6c6f6c000000000000000000000000000000000081525081565b610a866121d4565b73ffffffffffffffffffffffffffffffffffffffff16610aa4611752565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614399565b60405180910390fd5b6000600660006101000a81548160ff021916908315150217905550565b6060610b228261159e565b610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890614405565b60405180910390fd5b610b6a826121dc565b610b7383612270565b604051602001610b84929190614461565b6040516020818303038152906040529050919050565b60075481565b610ba86121d4565b73ffffffffffffffffffffffffffffffffffffffff16610bc6611752565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390614399565b60405180910390fd5b6000600660016101000a81548160ff021916908315150217905550565b610c416121d4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c875750610c8685610c816121d4565b611f3e565b5b610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906144f7565b60405180910390fd5b610cd385858585856123d0565b5050505050565b60085481565b6000600660009054906101000a900460ff16610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890614563565b60405180910390fd5b60008451905061271081600754610d4891906145b2565b1115610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614654565b60405180910390fd5b600033604051602001610d9c91906146bc565b604051602081830303815290604052805190602001209050610e02858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600854836126e3565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614723565b60405180910390fd5b6000600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e9e9190614073565b602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190614758565b90506000808211610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906147d1565b60405180910390fd5b6101908210610f375760c89050610fb1565b60c88210610f485760649050610fb0565b60328210610f595760329050610faf565b60328210610f6a5760109050610fae565b60198210610f7b5760089050610fad565b600a8210610f8c5760049050610fac565b60058210610f9d5760029050610fab565b60018210610faa57600190505b5b5b5b5b5b5b5b808411158015610fff575080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b61103e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110359061483d565b60405180910390fd5b60008467ffffffffffffffff81111561105a57611059613a1e565b5b6040519080825280602002602001820160405280156110885781602001602082028036833780820191505090505b50905060005b8581101561125d576110b98a82815181106110ac576110ab61485d565b5b602002602001015161159e565b156110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906148d8565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8d85815181106111635761116261485d565b5b60200260200101516040518263ffffffff1660e01b8152600401611187919061382e565b602060405180830381865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c8919061490d565b73ffffffffffffffffffffffffffffffffffffffff161490506001151581151514611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614986565b60405180910390fd5b600183838151811061123d5761123c61485d565b5b602002602001018181525050508080611255906149a6565b91505061108e565b50611279338a83604051806020016040528060008152506126fa565b846007600082825461128b91906145b2565b9250508190555084600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e191906145b2565b925050819055507fde2d71f52faa890a279c058c686c85fa154568fcee8b0fff9226f489dbb4008089336040516113199291906149ee565b60405180910390a16001955050505050509392505050565b600061133b6121d4565b73ffffffffffffffffffffffffffffffffffffffff16611359611752565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614399565b60405180910390fd5b6113b7612917565b6001905090565b60006113c86121d4565b73ffffffffffffffffffffffffffffffffffffffff166113e6611752565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614399565b60405180910390fd5b816008819055507fa2a63702a7eb4271f96e4ea16c164231eb3f32a28bc80e9c880c36363a5c41468233604051611474929190614a1e565b60405180910390a160019050919050565b606081518351146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290614ab9565b60405180910390fd5b6000835167ffffffffffffffff8111156114e8576114e7613a1e565b5b6040519080825280602002602001820160405280156115165781602001602082028036833780820191505090505b50905060005b84518110156115935761156385828151811061153b5761153a61485d565b5b60200260200101518583815181106115565761155561485d565b5b6020026020010151610883565b8282815181106115765761157561485d565b5b6020026020010181815250508061158c906149a6565b905061151c565b508091505092915050565b6000806115aa83611e57565b119050919050565b6000600460009054906101000a900460ff16905090565b60006115d36121d4565b73ffffffffffffffffffffffffffffffffffffffff166115f1611752565b73ffffffffffffffffffffffffffffffffffffffff1614611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90614399565b60405180910390fd5b81600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80232346ebb2dea71c1fd1c47b02ae6346d278c5f92ef1d4463ec0cb31e4596782336040516116b9929190614ad9565b60405180910390a160019050919050565b6116d26121d4565b73ffffffffffffffffffffffffffffffffffffffff166116f0611752565b73ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614399565b60405180910390fd5b61175060006129ba565b565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600681526020017f504958504142000000000000000000000000000000000000000000000000000081525081565b60006117bf6121d4565b73ffffffffffffffffffffffffffffffffffffffff166117dd611752565b73ffffffffffffffffffffffffffffffffffffffff1614611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614399565b60405180910390fd5b61183c82612a80565b7fc7908db8c8588ac430ee4efe758e7ba70a0d22e32a138b548fd0d34fa8a48395823360405161186d929190614b02565b60405180910390a160019050919050565b6000600660019054906101000a900460ff166118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690614b7e565b60405180910390fd5b612710826007546118e091906145b2565b1115611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191890614654565b60405180910390fd5b81662386f26fc100006119349190614b9e565b341015611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90614c44565b60405180910390fd5b60008267ffffffffffffffff81111561199257611991613a1e565b5b6040519080825280602002602001820160405280156119c05781602001602082028036833780820191505090505b50905060008367ffffffffffffffff8111156119df576119de613a1e565b5b604051908082528060200260200182016040528015611a0d5781602001602082028036833780820191505090505b5090506000600554905060005b85811015611aac575b611a2c8261159e565b15611a44578180611a3c906149a6565b925050611a23565b600082905080858381518110611a5d57611a5c61485d565b5b6020026020010181815250506001848381518110611a7e57611a7d61485d565b5b6020026020010181815250508280611a95906149a6565b935050508080611aa4906149a6565b915050611a1a565b5080600581905550611acf338484604051806020016040528060008152506126fa565b7f7ac6136baaa4f9a0d76c1972a3d2b0061580ddb478a8bf27fd0c9fd3d2d100e98333604051611b009291906149ee565b60405180910390a18460076000828254611b1a91906145b2565b9250508190555060019350505050919050565b6000611b376121d4565b73ffffffffffffffffffffffffffffffffffffffff16611b55611752565b73ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614399565b60405180910390fd5b600047905060008111611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90614cb0565b60405180910390fd5b6000611bfd611752565b73ffffffffffffffffffffffffffffffffffffffff1682604051611c2090614d01565b60006040518083038185875af1925050503d8060008114611c5d576040519150601f19603f3d011682016040523d82523d6000602084013e611c62565b606091505b505090506001151581151514611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614d62565b60405180910390fd5b7fb0caa7e5a1709d95503ec9da196222012fad8495f101214d86c3b72ce101810f8233604051611cde929190614d82565b60405180910390a160019250505090565b611d01611cfa6121d4565b8383612a9a565b5050565b61271081565b600660019054906101000a900460ff1681565b611d266121d4565b73ffffffffffffffffffffffffffffffffffffffff16611d44611752565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614399565b60405180910390fd5b6001600660016101000a81548160ff021916908315150217905550565b6000611dc16121d4565b73ffffffffffffffffffffffffffffffffffffffff16611ddf611752565b73ffffffffffffffffffffffffffffffffffffffff1614611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90614399565b60405180910390fd5b611e3d612c06565b6001905090565b600660009054906101000a900460ff1681565b600060036000838152602001908152602001600020549050919050565b662386f26fc1000081565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ead6121d4565b73ffffffffffffffffffffffffffffffffffffffff16611ecb611752565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614399565b60405180910390fd5b6001600660006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fda6121d4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612020575061201f8561201a6121d4565b611f3e565b5b61205f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205690614e1d565b60405180910390fd5b61206c8585858585612ca8565b5050505050565b61207b6121d4565b73ffffffffffffffffffffffffffffffffffffffff16612099611752565b73ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690614399565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614eaf565b60405180910390fd5b612167816129ba565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546121eb90614efe565b80601f016020809104026020016040519081016040528092919081815260200182805461221790614efe565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b50505050509050919050565b6060600082036122b7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123cb565b600082905060005b600082146122e95780806122d2906149a6565b915050600a826122e29190614f5e565b91506122bf565b60008167ffffffffffffffff81111561230557612304613a1e565b5b6040519080825280601f01601f1916602001820160405280156123375781602001600182028036833780820191505090505b5090505b600085146123c4576001826123509190614f8f565b9150600a8561235f9190614fc3565b603061236b91906145b2565b60f81b8183815181106123815761238061485d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123bd9190614f5e565b945061233b565b8093505050505b919050565b8151835114612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b90615066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247a906150f8565b60405180910390fd5b600061248d6121d4565b905061249d818787878787612f29565b60005b845181101561264e5760008582815181106124be576124bd61485d565b5b6020026020010151905060008583815181106124dd576124dc61485d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561257e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125759061518a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461263391906145b2565b9250508190555050505080612647906149a6565b90506124a0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516126c59291906151aa565b60405180910390a46126db818787878787612f87565b505050505050565b6000826126f0858461315e565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090615253565b60405180910390fd5b81518351146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a490615066565b60405180910390fd5b60006127b76121d4565b90506127c881600087878787612f29565b60005b8451811015612881578381815181106127e7576127e661485d565b5b60200260200101516000808784815181106128055761280461485d565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286791906145b2565b925050819055508080612879906149a6565b9150506127cb565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516128f99291906151aa565b60405180910390a461291081600087878787612f87565b5050505050565b61291f6115b2565b1561295f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612956906152bf565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129a36121d4565b6040516129b09190614073565b60405180910390a1565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060029080519060200190612a96929190613694565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff90615351565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612bf991906138e9565b60405180910390a3505050565b612c0e6115b2565b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c44906153bd565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c916121d4565b604051612c9e9190614073565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e906150f8565b60405180910390fd5b6000612d216121d4565b9050612d41818787612d32886131d3565b612d3b886131d3565b87612f29565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf9061518a565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e8d91906145b2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612f0a9291906153dd565b60405180910390a4612f2082888888888861324d565b50505050505050565b612f37868686868686613424565b612f3f6115b2565b15612f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7690615478565b60405180910390fd5b505050505050565b612fa68473ffffffffffffffffffffffffffffffffffffffff16613652565b15613156578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612fec9594939291906154ed565b6020604051808303816000875af192505050801561302857506040513d601f19601f82011682018060405250810190613025919061556a565b60015b6130cd576130346155a4565b806308c379a00361309057506130486155c6565b806130535750613092565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308791906139ca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c4906156c8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314b9061575a565b60405180910390fd5b505b505050505050565b60008082905060005b84518110156131c85760008582815181106131855761318461485d565b5b602002602001015190508083116131a7576131a08382613675565b92506131b4565b6131b18184613675565b92505b5080806131c0906149a6565b915050613167565b508091505092915050565b60606000600167ffffffffffffffff8111156131f2576131f1613a1e565b5b6040519080825280602002602001820160405280156132205781602001602082028036833780820191505090505b50905082816000815181106132385761323761485d565b5b60200260200101818152505080915050919050565b61326c8473ffffffffffffffffffffffffffffffffffffffff16613652565b1561341c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016132b295949392919061577a565b6020604051808303816000875af19250505080156132ee57506040513d601f19601f820116820180604052508101906132eb919061556a565b60015b613393576132fa6155a4565b806308c379a003613356575061330e6155c6565b806133195750613358565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334d91906139ca565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a906156c8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461341a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134119061575a565b60405180910390fd5b505b505050505050565b61343286868686868661368c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135415760005b835181101561353f5760018382815181106134875761348661485d565b5b602002602001015111156134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c790615820565b60405180910390fd5b8281815181106134e3576134e261485d565b5b6020026020010151600360008684815181106135025761350161485d565b5b60200260200101518152602001908152602001600020600082825461352791906145b2565b9250508190555080613538906149a6565b9050613469565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361364a5760005b83518110156136485760008482815181106135965761359561485d565b5b6020026020010151905060008483815181106135b5576135b461485d565b5b602002602001015190506000600360008481526020019081526020016000205490508181101561361a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613611906158b2565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080613641906149a6565b9050613578565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b505050505050565b8280546136a090614efe565b90600052602060002090601f0160209004810192826136c25760008555613709565b82601f106136db57805160ff1916838001178555613709565b82800160010185558215613709579182015b828111156137085782518255916020019190600101906136ed565b5b509050613716919061371a565b5090565b5b8082111561373357600081600090555060010161371b565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137768261374b565b9050919050565b6137868161376b565b811461379157600080fd5b50565b6000813590506137a38161377d565b92915050565b6000819050919050565b6137bc816137a9565b81146137c757600080fd5b50565b6000813590506137d9816137b3565b92915050565b600080604083850312156137f6576137f5613741565b5b600061380485828601613794565b9250506020613815858286016137ca565b9150509250929050565b613828816137a9565b82525050565b6000602082019050613843600083018461381f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61387e81613849565b811461388957600080fd5b50565b60008135905061389b81613875565b92915050565b6000602082840312156138b7576138b6613741565b5b60006138c58482850161388c565b91505092915050565b60008115159050919050565b6138e3816138ce565b82525050565b60006020820190506138fe60008301846138da565b92915050565b60006020828403121561391a57613919613741565b5b600061392884828501613794565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396b578082015181840152602081019050613950565b8381111561397a576000848401525b50505050565b6000601f19601f8301169050919050565b600061399c82613931565b6139a6818561393c565b93506139b681856020860161394d565b6139bf81613980565b840191505092915050565b600060208201905081810360008301526139e48184613991565b905092915050565b600060208284031215613a0257613a01613741565b5b6000613a10848285016137ca565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a5682613980565b810181811067ffffffffffffffff82111715613a7557613a74613a1e565b5b80604052505050565b6000613a88613737565b9050613a948282613a4d565b919050565b600067ffffffffffffffff821115613ab457613ab3613a1e565b5b602082029050602081019050919050565b600080fd5b6000613add613ad884613a99565b613a7e565b90508083825260208201905060208402830185811115613b0057613aff613ac5565b5b835b81811015613b295780613b1588826137ca565b845260208401935050602081019050613b02565b5050509392505050565b600082601f830112613b4857613b47613a19565b5b8135613b58848260208601613aca565b91505092915050565b600080fd5b600067ffffffffffffffff821115613b8157613b80613a1e565b5b613b8a82613980565b9050602081019050919050565b82818337600083830152505050565b6000613bb9613bb484613b66565b613a7e565b905082815260208101848484011115613bd557613bd4613b61565b5b613be0848285613b97565b509392505050565b600082601f830112613bfd57613bfc613a19565b5b8135613c0d848260208601613ba6565b91505092915050565b600080600080600060a08688031215613c3257613c31613741565b5b6000613c4088828901613794565b9550506020613c5188828901613794565b945050604086013567ffffffffffffffff811115613c7257613c71613746565b5b613c7e88828901613b33565b935050606086013567ffffffffffffffff811115613c9f57613c9e613746565b5b613cab88828901613b33565b925050608086013567ffffffffffffffff811115613ccc57613ccb613746565b5b613cd888828901613be8565b9150509295509295909350565b6000819050919050565b613cf881613ce5565b82525050565b6000602082019050613d136000830184613cef565b92915050565b600080fd5b60008083601f840112613d3457613d33613a19565b5b8235905067ffffffffffffffff811115613d5157613d50613d19565b5b602083019150836020820283011115613d6d57613d6c613ac5565b5b9250929050565b600080600060408486031215613d8d57613d8c613741565b5b600084013567ffffffffffffffff811115613dab57613daa613746565b5b613db786828701613b33565b935050602084013567ffffffffffffffff811115613dd857613dd7613746565b5b613de486828701613d1e565b92509250509250925092565b613df981613ce5565b8114613e0457600080fd5b50565b600081359050613e1681613df0565b92915050565b600060208284031215613e3257613e31613741565b5b6000613e4084828501613e07565b91505092915050565b600067ffffffffffffffff821115613e6457613e63613a1e565b5b602082029050602081019050919050565b6000613e88613e8384613e49565b613a7e565b90508083825260208201905060208402830185811115613eab57613eaa613ac5565b5b835b81811015613ed45780613ec08882613794565b845260208401935050602081019050613ead565b5050509392505050565b600082601f830112613ef357613ef2613a19565b5b8135613f03848260208601613e75565b91505092915050565b60008060408385031215613f2357613f22613741565b5b600083013567ffffffffffffffff811115613f4157613f40613746565b5b613f4d85828601613ede565b925050602083013567ffffffffffffffff811115613f6e57613f6d613746565b5b613f7a85828601613b33565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613fb9816137a9565b82525050565b6000613fcb8383613fb0565b60208301905092915050565b6000602082019050919050565b6000613fef82613f84565b613ff98185613f8f565b935061400483613fa0565b8060005b8381101561403557815161401c8882613fbf565b975061402783613fd7565b925050600181019050614008565b5085935050505092915050565b6000602082019050818103600083015261405c8184613fe4565b905092915050565b61406d8161376b565b82525050565b60006020820190506140886000830184614064565b92915050565b600067ffffffffffffffff8211156140a9576140a8613a1e565b5b6140b282613980565b9050602081019050919050565b60006140d26140cd8461408e565b613a7e565b9050828152602081018484840111156140ee576140ed613b61565b5b6140f9848285613b97565b509392505050565b600082601f83011261411657614115613a19565b5b81356141268482602086016140bf565b91505092915050565b60006020828403121561414557614144613741565b5b600082013567ffffffffffffffff81111561416357614162613746565b5b61416f84828501614101565b91505092915050565b614181816138ce565b811461418c57600080fd5b50565b60008135905061419e81614178565b92915050565b600080604083850312156141bb576141ba613741565b5b60006141c985828601613794565b92505060206141da8582860161418f565b9150509250929050565b600080604083850312156141fb576141fa613741565b5b600061420985828601613794565b925050602061421a85828601613794565b9150509250929050565b600080600080600060a086880312156142405761423f613741565b5b600061424e88828901613794565b955050602061425f88828901613794565b9450506040614270888289016137ca565b9350506060614281888289016137ca565b925050608086013567ffffffffffffffff8111156142a2576142a1613746565b5b6142ae88828901613be8565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614317602b8361393c565b9150614322826142bb565b604082019050919050565b600060208201905081810360008301526143468161430a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061438360208361393c565b915061438e8261434d565b602082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f546f6b656e496e6578697374656e740000000000000000000000000000000000600082015250565b60006143ef600f8361393c565b91506143fa826143b9565b602082019050919050565b6000602082019050818103600083015261441e816143e2565b9050919050565b600081905092915050565b600061443b82613931565b6144458185614425565b935061445581856020860161394d565b80840191505092915050565b600061446d8285614430565b91506144798284614430565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006144e160328361393c565b91506144ec82614485565b604082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b7f47656e657369734e6f7441637469766500000000000000000000000000000000600082015250565b600061454d60108361393c565b915061455882614517565b602082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145bd826137a9565b91506145c8836137a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145fd576145fc614583565b5b828201905092915050565b7f4d6178696d756d4d696e74537570706c79526561636865640000000000000000600082015250565b600061463e60188361393c565b915061464982614608565b602082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b60008160601b9050919050565b600061468c82614674565b9050919050565b600061469e82614681565b9050919050565b6146b66146b18261376b565b614693565b82525050565b60006146c882846146a5565b60148201915081905092915050565b7f496e76616c69644d65726b6c6550726f6f660000000000000000000000000000600082015250565b600061470d60128361393c565b9150614718826146d7565b602082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b600081519050614752816137b3565b92915050565b60006020828403121561476e5761476d613741565b5b600061477c84828501614743565b91505092915050565b7f4e6f6e47656e65736973486f6c64657200000000000000000000000000000000600082015250565b60006147bb60108361393c565b91506147c682614785565b602082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b7f4d6178696d756d416c6c6f77616e636500000000000000000000000000000000600082015250565b600061482760108361393c565b9150614832826147f1565b602082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f546f6b656e416c72656164794578697374730000000000000000000000000000600082015250565b60006148c260128361393c565b91506148cd8261488c565b602082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b6000815190506149078161377d565b92915050565b60006020828403121561492357614922613741565b5b6000614931848285016148f8565b91505092915050565b7f4e6f6e526967687466756c47656e65736973486f6c6465720000000000000000600082015250565b600061497060188361393c565b915061497b8261493a565b602082019050919050565b6000602082019050818103600083015261499f81614963565b9050919050565b60006149b1826137a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e3576149e2614583565b5b600182019050919050565b60006040820190508181036000830152614a088185613fe4565b9050614a176020830184614064565b9392505050565b6000604082019050614a336000830185613cef565b614a406020830184614064565b9392505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000614aa360298361393c565b9150614aae82614a47565b604082019050919050565b60006020820190508181036000830152614ad281614a96565b9050919050565b6000604082019050614aee6000830185614064565b614afb6020830184614064565b9392505050565b60006040820190508181036000830152614b1c8185613991565b9050614b2b6020830184614064565b9392505050565b7f5075626c69634e6f744163746976650000000000000000000000000000000000600082015250565b6000614b68600f8361393c565b9150614b7382614b32565b602082019050919050565b60006020820190508181036000830152614b9781614b5b565b9050919050565b6000614ba9826137a9565b9150614bb4836137a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bed57614bec614583565b5b828202905092915050565b7f496e73756666696369656e74416d6f756e740000000000000000000000000000600082015250565b6000614c2e60128361393c565b9150614c3982614bf8565b602082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b7f556e417574686f72697a65645265717565737400000000000000000000000000600082015250565b6000614c9a60138361393c565b9150614ca582614c64565b602082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b600081905092915050565b50565b6000614ceb600083614cd0565b9150614cf682614cdb565b600082019050919050565b6000614d0c82614cde565b9150819050919050565b7f5472616e73616374696f6e4661696c6564000000000000000000000000000000600082015250565b6000614d4c60118361393c565b9150614d5782614d16565b602082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b6000604082019050614d97600083018561381f565b614da46020830184614064565b9392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614e0760298361393c565b9150614e1282614dab565b604082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e9960268361393c565b9150614ea482614e3d565b604082019050919050565b60006020820190508181036000830152614ec881614e8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f1657607f821691505b602082108103614f2957614f28614ecf565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f69826137a9565b9150614f74836137a9565b925082614f8457614f83614f2f565b5b828204905092915050565b6000614f9a826137a9565b9150614fa5836137a9565b925082821015614fb857614fb7614583565b5b828203905092915050565b6000614fce826137a9565b9150614fd9836137a9565b925082614fe957614fe8614f2f565b5b828206905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061505060288361393c565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150e260258361393c565b91506150ed82615086565b604082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000615174602a8361393c565b915061517f82615118565b604082019050919050565b600060208201905081810360008301526151a381615167565b9050919050565b600060408201905081810360008301526151c48185613fe4565b905081810360208301526151d88184613fe4565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061523d60218361393c565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006152a960108361393c565b91506152b482615273565b602082019050919050565b600060208201905081810360008301526152d88161529c565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061533b60298361393c565b9150615346826152df565b604082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153a760148361393c565b91506153b282615371565b602082019050919050565b600060208201905081810360008301526153d68161539a565b9050919050565b60006040820190506153f2600083018561381f565b6153ff602083018461381f565b9392505050565b7f455243313135355061757361626c653a20746f6b656e207472616e736665722060008201527f7768696c65207061757365640000000000000000000000000000000000000000602082015250565b6000615462602c8361393c565b915061546d82615406565b604082019050919050565b6000602082019050818103600083015261549181615455565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154bf82615498565b6154c981856154a3565b93506154d981856020860161394d565b6154e281613980565b840191505092915050565b600060a0820190506155026000830188614064565b61550f6020830187614064565b81810360408301526155218186613fe4565b905081810360608301526155358185613fe4565b9050818103608083015261554981846154b4565b90509695505050505050565b60008151905061556481613875565b92915050565b6000602082840312156155805761557f613741565b5b600061558e84828501615555565b91505092915050565b60008160e01c9050919050565b600060033d11156155c35760046000803e6155c0600051615597565b90505b90565b600060443d10615653576155d8613737565b60043d036004823e80513d602482011167ffffffffffffffff82111715615600575050615653565b808201805167ffffffffffffffff81111561561e5750505050615653565b80602083010160043d03850181111561563b575050505050615653565b61564a82602001850186613a4d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006156b260348361393c565b91506156bd82615656565b604082019050919050565b600060208201905081810360008301526156e1816156a5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061574460288361393c565b915061574f826156e8565b604082019050919050565b6000602082019050818103600083015261577381615737565b9050919050565b600060a08201905061578f6000830188614064565b61579c6020830187614064565b6157a9604083018661381f565b6157b6606083018561381f565b81810360808301526157c881846154b4565b90509695505050505050565b7f6f6e6c79206f6e652070657220746f6b656e2069640000000000000000000000600082015250565b600061580a60158361393c565b9150615815826157d4565b602082019050919050565b60006020820190508181036000830152615839816157fd565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79427949640000000000000000000000000000000000000000602082015250565b600061589c602c8361393c565b91506158a782615840565b604082019050919050565b600060208201905081810360008301526158cb8161588f565b905091905056fea264697066735822122092f503294a5628b9e3256468c06435c17681a4b5876344a760a3d7b15c8502ed64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
b5287ef25a7b56dde4889ba81763f37d4de08e453ce1649305fbecc8fa0af44b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569666d6b6136686332337975736132723568626d6e766d7262766879696c3373766a78347a68626f79693477326a33626335796e792f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0xb5287ef25a7b56dde4889ba81763f37d4de08e453ce1649305fbecc8fa0af44b
Arg [1] : newURI (string): ipfs://bafybeifmka6hc23yusa2r5hbmnvmrbvhyil3svjx4zhboyi4w2j3bc5yny/
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : b5287ef25a7b56dde4889ba81763f37d4de08e453ce1649305fbecc8fa0af44b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [3] : 697066733a2f2f62616679626569666d6b613668633233797573613272356862
Arg [4] : 6d6e766d7262766879696c3373766a78347a68626f79693477326a3362633579
Arg [5] : 6e792f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
55066:8599:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38221:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37244:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55620:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55163:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62733:86;;;;;;;;;;;;;:::i;:::-;;62344:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55549:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62921:85;;;;;;;;;;;;;:::i;:::-;;40160:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55586:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58688:2231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57880:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57203:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38618:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52689:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11989:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57426:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10040:103;;;;;;;;;;;;;:::i;:::-;;9389:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55217:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56751:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61215:981;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63260:402;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39215:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55435:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55308:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62827:86;;;;;;;;;;;;;:::i;:::-;;58203:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55266:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52470:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55489:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55351:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62638:87;;;;;;;;;;;;;:::i;:::-;;39442:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39682:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10298:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38221:231;38307:7;38354:1;38335:21;;:7;:21;;;38327:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38422:9;:13;38432:2;38422:13;;;;;;;;;;;:22;38436:7;38422:22;;;;;;;;;;;;;;;;38415:29;;38221:231;;;;:::o;37244:310::-;37346:4;37398:26;37383:41;;;:11;:41;;;;:110;;;;37456:37;37441:52;;;:11;:52;;;;37383:110;:163;;;;37510:36;37534:11;37510:23;:36::i;:::-;37383:163;37363:183;;37244:310;;;:::o;55620:55::-;;;;;;;;;;;;;;;;;:::o;55163:47::-;;;;;;;;;;;;;;;;;;;:::o;62733:86::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62806:5:::1;62788:15;;:23;;;;;;;;;;;;;;;;;;62733:86::o:0;62344:286::-;62426:13;62460:11;62467:3;62460:6;:11::i;:::-;62452:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;62561:14;62571:3;62561:9;:14::i;:::-;62577:21;62594:3;62577:16;:21::i;:::-;62530:81;;;;;;;;;:::i;:::-;;;;;;;;;;;;;62504:118;;62344:286;;;:::o;55549:30::-;;;;:::o;62921:85::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62993:5:::1;62976:14;;:22;;;;;;;;;;;;;;;;;;62921:85::o:0;40160:442::-;40401:12;:10;:12::i;:::-;40393:20;;:4;:20;;;:60;;;;40417:36;40434:4;40440:12;:10;:12::i;:::-;40417:16;:36::i;:::-;40393:60;40371:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40542:52;40565:4;40571:2;40575:3;40580:7;40589:4;40542:22;:52::i;:::-;40160:442;;;;;:::o;55586:25::-;;;;:::o;58688:2231::-;58834:4;55730:15;;;;;;;;;;;55722:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;58849:23:::1;58875:8;:15;58849:41;;55477:5;58923:15;58909:11;;:29;;;;:::i;:::-;:48;;58901:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;58997:12;59039:10;59022:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;59012:39;;;;;;58997:54;;59086:50;59105:12;;59086:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59119:10;;59131:4;59086:18;:50::i;:::-;59068:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;59187:23;59221:15;;;;;;;;;;;59213:34;;;59248:10;59213:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59187:72;;59268:29;59338:1:::0;59320:15:::1;:19;59312:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;59394:3;59375:15;:22;59371:681;;59434:3;59410:27;;59371:681;;;59483:3;59464:15;:22;59460:592;;59523:3;59499:27;;59460:592;;;59572:2;59553:15;:21;59549:503;;59611:2;59587:26;;59549:503;;;59659:2;59640:15;:21;59636:416;;59698:2;59674:26;;59636:416;;;59746:2;59727:15;:21;59723:329;;59785:1;59761:25;;59723:329;;;59832:2;59813:15;:21;59809:243;;59871:1;59847:25;;59809:243;;;59918:1;59899:15;:20;59895:157;;59956:1;59932:25;;59895:157;;;60003:1;59984:15;:20;59980:72;;60041:1;60017:25;;59980:72;59895:157;59809:243;59723:329;59636:416;59549:503;59460:592;59371:681;60099:21;60080:15;:40;;:109;;;;;60168:21;60133:20;:32;60154:10;60133:32;;;;;;;;;;;;;;;;:56;60080:109;60062:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;60238:24;60279:15;60265:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60238:57;;60311:9;60306:376;60330:15;60326:1;:19;60306:376;;;60389:19;60396:8;60405:1;60396:11;;;;;;;;:::i;:::-;;;;;;;;60389:6;:19::i;:::-;60387:22;60365:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;60472:27;60551:10;60502:59;;60510:15;;;;;;;;;;;60502:32;;;60535:8;60544:1;60535:11;;;;;;;;:::i;:::-;;;;;;;;60502:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;;60472:89;;60610:4;60584:30;;:22;:30;;;60576:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;60671:1;60658:7;60666:1;60658:10;;;;;;;;:::i;:::-;;;;;;;:14;;;::::0;::::1;60352:330;60347:3;;;;;:::i;:::-;;;;60306:376;;;;60692:45;60703:10;60715:8;60725:7;60692:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;60763:15;60748:11;;:30;;;;;;;:::i;:::-;;;;;;;;60823:15;60787:20;:32;60808:10;60787:32;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;60854:35;60868:8;60878:10;60854:35;;;;;;;:::i;:::-;;;;;;;;60907:4;60900:11;;;;;;;58688:2231:::0;;;;;:::o;57880:108::-;57933:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57950:8:::1;:6;:8::i;:::-;57976:4;57969:11;;57880:108:::0;:::o;57203:215::-;57298:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57333:4:::1;57320:10;:17;;;;57353:35;57371:4;57377:10;57353:35;;;;;;;:::i;:::-;;;;;;;;57406:4;57399:11;;57203:215:::0;;;:::o;38618:524::-;38774:16;38835:3;:10;38816:8;:15;:29;38808:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38904:30;38951:8;:15;38937:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38904:63;;38985:9;38980:122;39004:8;:15;39000:1;:19;38980:122;;;39060:30;39070:8;39079:1;39070:11;;;;;;;;:::i;:::-;;;;;;;;39083:3;39087:1;39083:6;;;;;;;;:::i;:::-;;;;;;;;39060:9;:30::i;:::-;39041:13;39055:1;39041:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;39021:3;;;;:::i;:::-;;;38980:122;;;;39121:13;39114:20;;;38618:524;;;;:::o;52689:126::-;52746:4;52806:1;52770:33;52800:2;52770:29;:33::i;:::-;:37;52763:44;;52689:126;;;:::o;11989:86::-;12036:4;12060:7;;;;;;;;;;;12053:14;;11989:86;:::o;57426:245::-;57531:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57571:9:::1;57553:15;;:27;;;;;;;;;;;;;;;;;;57596:45;57619:9;57630:10;57596:45;;;;;;;:::i;:::-;;;;;;;;57659:4;57652:11;;57426:245:::0;;;:::o;10040:103::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10105:30:::1;10132:1;10105:18;:30::i;:::-;10040:103::o:0;9389:87::-;9435:7;9462:6;;;;;;;;;;;9455:13;;9389:87;:::o;55217:40::-;;;;;;;;;;;;;;;;;;;:::o;56751:210::-;56852:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56874:15:::1;56882:6;56874:7;:15::i;:::-;56905:26;56912:6;56920:10;56905:26;;;;;;;:::i;:::-;;;;;;;;56949:4;56942:11;;56751:210:::0;;;:::o;61215:981::-;61324:4;55837:14;;;;;;;;;;;55829:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;55477:5:::1;61361:15;61347:11;;:29;;;;:::i;:::-;:48;;61339:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;61467:15;55526:14;61454:28;;;;:::i;:::-;61441:9;:41;;61433:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;61516:25;61558:15;61544:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61516:58;;61583:24;61624:15;61610:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61583:57;;61651:20;61674:12;;61651:35;;61702:9;61697:285;61721:15;61717:1;:19;61697:285;;;61754:90;61773:20;61780:12;61773:6;:20::i;:::-;61754:90;;;61818:14;;;;;:::i;:::-;;;;61754:90;;;61856:15;61874:12;61856:30;;61913:7;61899:8;61908:1;61899:11;;;;;;;;:::i;:::-;;;;;;;:21;;;::::0;::::1;61944:1;61931:7;61939:1;61931:10;;;;;;;;:::i;:::-;;;;;;;:14;;;::::0;::::1;61958;;;;;:::i;:::-;;;;61743:239;61738:3;;;;;:::i;:::-;;;;61697:285;;;;62007:12;61992;:27;;;;62030:45;62041:10;62053:8;62063:7;62030:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;62091:34;62104:8;62114:10;62091:34;;;;;;;:::i;:::-;;;;;;;;62151:15;62136:11;;:30;;;;;;;:::i;:::-;;;;;;;;62184:4;62177:11;;;;;61215:981:::0;;;:::o;63260:402::-;63315:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;63332:23:::1;63358:21;63332:47;;63418:1;63400:15;:19;63392:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;63457:9;63472:7;:5;:7::i;:::-;:12;;63492:15;63472:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63456:56;;;63541:4;63533:12;;:4;:12;;;63525:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;63585:45;63602:15;63619:10;63585:45;;;;;;;:::i;:::-;;;;;;;;63650:4;63643:11;;;;63260:402:::0;:::o;39215:155::-;39310:52;39329:12;:10;:12::i;:::-;39343:8;39353;39310:18;:52::i;:::-;39215:155;;:::o;55435:47::-;55477:5;55435:47;:::o;55308:34::-;;;;;;;;;;;;;:::o;62827:86::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62901:4:::1;62884:14;;:21;;;;;;;;;;;;;;;;;;62827:86::o:0;58203:112::-;58258:4;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58275:10:::1;:8;:10::i;:::-;58303:4;58296:11;;58203:112:::0;:::o;55266:35::-;;;;;;;;;;;;;:::o;52470:121::-;52536:7;52563:16;:20;52580:2;52563:20;;;;;;;;;;;;52556:27;;52470:121;;;:::o;55489:51::-;55526:14;55489:51;:::o;55351:75::-;;;;;;;;;;;;;:::o;62638:87::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;62713:4:::1;62695:15;;:22;;;;;;;;;;;;;;;;;;62638:87::o:0;39442:168::-;39541:4;39565:18;:27;39584:7;39565:27;;;;;;;;;;;;;;;:37;39593:8;39565:37;;;;;;;;;;;;;;;;;;;;;;;;;39558:44;;39442:168;;;;:::o;39682:401::-;39898:12;:10;:12::i;:::-;39890:20;;:4;:20;;;:60;;;;39914:36;39931:4;39937:12;:10;:12::i;:::-;39914:16;:36::i;:::-;39890:60;39868:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;40030:45;40048:4;40054:2;40058;40062:6;40070:4;40030:17;:45::i;:::-;39682:401;;;;;:::o;10298:201::-;9620:12;:10;:12::i;:::-;9609:23;;:7;:5;:7::i;:::-;:23;;;9601:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10407:1:::1;10387:22;;:8;:22;;::::0;10379:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10463:28;10482:8;10463:18;:28::i;:::-;10298:201:::0;:::o;28562:157::-;28647:4;28686:25;28671:40;;;:11;:40;;;;28664:47;;28562:157;;;:::o;8113:98::-;8166:7;8193:10;8186:17;;8113:98;:::o;37965:105::-;38025:13;38058:4;38051:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37965:105;;;:::o;5675:723::-;5731:13;5961:1;5952:5;:10;5948:53;;5979:10;;;;;;;;;;;;;;;;;;;;;5948:53;6011:12;6026:5;6011:20;;6042:14;6067:78;6082:1;6074:4;:9;6067:78;;6100:8;;;;;:::i;:::-;;;;6131:2;6123:10;;;;;:::i;:::-;;;6067:78;;;6155:19;6187:6;6177:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:39;;6205:154;6221:1;6212:5;:10;6205:154;;6249:1;6239:11;;;;;:::i;:::-;;;6316:2;6308:5;:10;;;;:::i;:::-;6295:2;:24;;;;:::i;:::-;6282:39;;6265:6;6272;6265:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6345:2;6336:11;;;;;:::i;:::-;;;6205:154;;;6383:6;6369:21;;;;;5675:723;;;;:::o;42244:1074::-;42471:7;:14;42457:3;:10;:28;42449:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42563:1;42549:16;;:2;:16;;;42541:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42620:16;42639:12;:10;:12::i;:::-;42620:31;;42664:60;42685:8;42695:4;42701:2;42705:3;42710:7;42719:4;42664:20;:60::i;:::-;42742:9;42737:421;42761:3;:10;42757:1;:14;42737:421;;;42793:10;42806:3;42810:1;42806:6;;;;;;;;:::i;:::-;;;;;;;;42793:19;;42827:14;42844:7;42852:1;42844:10;;;;;;;;:::i;:::-;;;;;;;;42827:27;;42871:19;42893:9;:13;42903:2;42893:13;;;;;;;;;;;:19;42907:4;42893:19;;;;;;;;;;;;;;;;42871:41;;42950:6;42935:11;:21;;42927:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43083:6;43069:11;:20;43047:9;:13;43057:2;43047:13;;;;;;;;;;;:19;43061:4;43047:19;;;;;;;;;;;;;;;:42;;;;43140:6;43119:9;:13;43129:2;43119:13;;;;;;;;;;;:17;43133:2;43119:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;42778:380;;;42773:3;;;;:::i;:::-;;;42737:421;;;;43205:2;43175:47;;43199:4;43175:47;;43189:8;43175:47;;;43209:3;43214:7;43175:47;;;;;;;:::i;:::-;;;;;;;;43235:75;43271:8;43281:4;43287:2;43291:3;43296:7;43305:4;43235:35;:75::i;:::-;42438:880;42244:1074;;;;;:::o;3900:190::-;4025:4;4078;4049:25;4062:5;4069:4;4049:12;:25::i;:::-;:33;4042:40;;3900:190;;;;;:::o;45561:735::-;45753:1;45739:16;;:2;:16;;;45731:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45826:7;:14;45812:3;:10;:28;45804:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;45898:16;45917:12;:10;:12::i;:::-;45898:31;;45942:66;45963:8;45981:1;45985:2;45989:3;45994:7;46003:4;45942:20;:66::i;:::-;46026:9;46021:103;46045:3;:10;46041:1;:14;46021:103;;;46102:7;46110:1;46102:10;;;;;;;;:::i;:::-;;;;;;;;46077:9;:17;46087:3;46091:1;46087:6;;;;;;;;:::i;:::-;;;;;;;;46077:17;;;;;;;;;;;:21;46095:2;46077:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;46057:3;;;;;:::i;:::-;;;;46021:103;;;;46177:2;46141:53;;46173:1;46141:53;;46155:8;46141:53;;;46181:3;46186:7;46141:53;;;;;;;:::i;:::-;;;;;;;;46207:81;46243:8;46261:1;46265:2;46269:3;46274:7;46283:4;46207:35;:81::i;:::-;45720:576;45561:735;;;;:::o;12789:118::-;12315:8;:6;:8::i;:::-;12314:9;12306:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12859:4:::1;12849:7;;:14;;;;;;;;;;;;;;;;;;12879:20;12886:12;:10;:12::i;:::-;12879:20;;;;;;:::i;:::-;;;;;;;;12789:118::o:0;10659:191::-;10733:16;10752:6;;;;;;;;;;;10733:25;;10778:8;10769:6;;:17;;;;;;;;;;;;;;;;;;10833:8;10802:40;;10823:8;10802:40;;;;;;;;;;;;10722:128;10659:191;:::o;44162:88::-;44236:6;44229:4;:13;;;;;;;;;;;;:::i;:::-;;44162:88;:::o;48430:331::-;48585:8;48576:17;;:5;:17;;;48568:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48688:8;48650:18;:25;48669:5;48650:25;;;;;;;;;;;;;;;:35;48676:8;48650:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;48734:8;48712:41;;48727:5;48712:41;;;48744:8;48712:41;;;;;;:::i;:::-;;;;;;;;48430:331;;;:::o;13048:120::-;12592:8;:6;:8::i;:::-;12584:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13117:5:::1;13107:7;;:15;;;;;;;;;;;;;;;;;;13138:22;13147:12;:10;:12::i;:::-;13138:22;;;;;;:::i;:::-;;;;;;;;13048:120::o:0;41066:820::-;41268:1;41254:16;;:2;:16;;;41246:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41325:16;41344:12;:10;:12::i;:::-;41325:31;;41369:96;41390:8;41400:4;41406:2;41410:21;41428:2;41410:17;:21::i;:::-;41433:25;41451:6;41433:17;:25::i;:::-;41460:4;41369:20;:96::i;:::-;41478:19;41500:9;:13;41510:2;41500:13;;;;;;;;;;;:19;41514:4;41500:19;;;;;;;;;;;;;;;;41478:41;;41553:6;41538:11;:21;;41530:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41678:6;41664:11;:20;41642:9;:13;41652:2;41642:13;;;;;;;;;;;:19;41656:4;41642:19;;;;;;;;;;;;;;;:42;;;;41727:6;41706:9;:13;41716:2;41706:13;;;;;;;;;;;:17;41720:2;41706:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;41782:2;41751:46;;41776:4;41751:46;;41766:8;41751:46;;;41786:2;41790:6;41751:46;;;;;;;:::i;:::-;;;;;;;;41810:68;41841:8;41851:4;41857:2;41861;41865:6;41873:4;41810:30;:68::i;:::-;41235:651;;41066:820;;;;;:::o;54636:392::-;54875:66;54902:8;54912:4;54918:2;54922:3;54927:7;54936:4;54875:26;:66::i;:::-;54963:8;:6;:8::i;:::-;54962:9;54954:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;54636:392;;;;;;:::o;50698:813::-;50938:15;:2;:13;;;:15::i;:::-;50934:570;;;50991:2;50974:43;;;51018:8;51028:4;51034:3;51039:7;51048:4;50974:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;50970:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;51366:6;51359:14;;;;;;;;;;;:::i;:::-;;;;;;;;50970:523;;;51415:62;;;;;;;;;;:::i;:::-;;;;;;;;50970:523;51147:48;;;51135:60;;;:8;:60;;;;51131:159;;51220:50;;;;;;;;;;:::i;:::-;;;;;;;;51131:159;51054:251;50934:570;50698:813;;;;;;:::o;4452:675::-;4535:7;4555:20;4578:4;4555:27;;4598:9;4593:497;4617:5;:12;4613:1;:16;4593:497;;;4651:20;4674:5;4680:1;4674:8;;;;;;;;:::i;:::-;;;;;;;;4651:31;;4717:12;4701;:28;4697:382;;4844:42;4859:12;4873;4844:14;:42::i;:::-;4829:57;;4697:382;;;5021:42;5036:12;5050;5021:14;:42::i;:::-;5006:57;;4697:382;4636:454;4631:3;;;;;:::i;:::-;;;;4593:497;;;;5107:12;5100:19;;;4452:675;;;;:::o;51519:198::-;51585:16;51614:22;51653:1;51639:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51614:41;;51677:7;51666:5;51672:1;51666:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;51704:5;51697:12;;;51519:198;;;:::o;49946:744::-;50161:15;:2;:13;;;:15::i;:::-;50157:526;;;50214:2;50197:38;;;50236:8;50246:4;50252:2;50256:6;50264:4;50197:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;50193:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;50545:6;50538:14;;;;;;;;;;;:::i;:::-;;;;;;;;50193:479;;;50594:62;;;;;;;;;;:::i;:::-;;;;;;;;50193:479;50331:43;;;50319:55;;;:8;:55;;;;50315:154;;50399:50;;;;;;;;;;:::i;:::-;;;;;;;;50315:154;50270:214;50157:526;49946:744;;;;;;:::o;52890:1015::-;53129:66;53156:8;53166:4;53172:2;53176:3;53181:7;53190:4;53129:26;:66::i;:::-;53228:1;53212:18;;:4;:18;;;53208:232;;53252:9;53247:182;53271:3;:10;53267:1;:14;53247:182;;;53329:1;53315:7;53323:1;53315:10;;;;;;;;:::i;:::-;;;;;;;;:15;;53307:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;53403:7;53411:1;53403:10;;;;;;;;:::i;:::-;;;;;;;;53375:16;:24;53392:3;53396:1;53392:6;;;;;;;;:::i;:::-;;;;;;;;53375:24;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;53283:3;;;;:::i;:::-;;;53247:182;;;;53208:232;53470:1;53456:16;;:2;:16;;;53452:446;;53494:9;53489:398;53513:3;:10;53509:1;:14;53489:398;;;53549:10;53562:3;53566:1;53562:6;;;;;;;;:::i;:::-;;;;;;;;53549:19;;53587:14;53604:7;53612:1;53604:10;;;;;;;;:::i;:::-;;;;;;;;53587:27;;53633:14;53650:16;:20;53667:2;53650:20;;;;;;;;;;;;53633:37;;53707:6;53697;:16;;53689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;53846:6;53837;:15;53814:16;:20;53831:2;53814:20;;;;;;;;;;;:38;;;;53530:357;;;53525:3;;;;:::i;:::-;;;53489:398;;;;53452:446;52890:1015;;;;;;:::o;14408:326::-;14468:4;14725:1;14703:7;:19;;;:23;14696:30;;14408:326;;;:::o;5135:224::-;5203:13;5266:1;5260:4;5253:15;5295:1;5289:4;5282:15;5336:4;5330;5320:21;5311:30;;5135:224;;;;:::o;49717:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:329::-;4997:6;5046:2;5034:9;5025:7;5021:23;5017:32;5014:119;;;5052:79;;:::i;:::-;5014:119;5172:1;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5143:117;4938:329;;;;:::o;5273:117::-;5382:1;5379;5372:12;5396:180;5444:77;5441:1;5434:88;5541:4;5538:1;5531:15;5565:4;5562:1;5555:15;5582:281;5665:27;5687:4;5665:27;:::i;:::-;5657:6;5653:40;5795:6;5783:10;5780:22;5759:18;5747:10;5744:34;5741:62;5738:88;;;5806:18;;:::i;:::-;5738:88;5846:10;5842:2;5835:22;5625:238;5582:281;;:::o;5869:129::-;5903:6;5930:20;;:::i;:::-;5920:30;;5959:33;5987:4;5979:6;5959:33;:::i;:::-;5869:129;;;:::o;6004:311::-;6081:4;6171:18;6163:6;6160:30;6157:56;;;6193:18;;:::i;:::-;6157:56;6243:4;6235:6;6231:17;6223:25;;6303:4;6297;6293:15;6285:23;;6004:311;;;:::o;6321:117::-;6430:1;6427;6420:12;6461:710;6557:5;6582:81;6598:64;6655:6;6598:64;:::i;:::-;6582:81;:::i;:::-;6573:90;;6683:5;6712:6;6705:5;6698:21;6746:4;6739:5;6735:16;6728:23;;6799:4;6791:6;6787:17;6779:6;6775:30;6828:3;6820:6;6817:15;6814:122;;;6847:79;;:::i;:::-;6814:122;6962:6;6945:220;6979:6;6974:3;6971:15;6945:220;;;7054:3;7083:37;7116:3;7104:10;7083:37;:::i;:::-;7078:3;7071:50;7150:4;7145:3;7141:14;7134:21;;7021:144;7005:4;7000:3;6996:14;6989:21;;6945:220;;;6949:21;6563:608;;6461:710;;;;;:::o;7194:370::-;7265:5;7314:3;7307:4;7299:6;7295:17;7291:27;7281:122;;7322:79;;:::i;:::-;7281:122;7439:6;7426:20;7464:94;7554:3;7546:6;7539:4;7531:6;7527:17;7464:94;:::i;:::-;7455:103;;7271:293;7194:370;;;;:::o;7570:117::-;7679:1;7676;7669:12;7693:307;7754:4;7844:18;7836:6;7833:30;7830:56;;;7866:18;;:::i;:::-;7830:56;7904:29;7926:6;7904:29;:::i;:::-;7896:37;;7988:4;7982;7978:15;7970:23;;7693:307;;;:::o;8006:154::-;8090:6;8085:3;8080;8067:30;8152:1;8143:6;8138:3;8134:16;8127:27;8006:154;;;:::o;8166:410::-;8243:5;8268:65;8284:48;8325:6;8284:48;:::i;:::-;8268:65;:::i;:::-;8259:74;;8356:6;8349:5;8342:21;8394:4;8387:5;8383:16;8432:3;8423:6;8418:3;8414:16;8411:25;8408:112;;;8439:79;;:::i;:::-;8408:112;8529:41;8563:6;8558:3;8553;8529:41;:::i;:::-;8249:327;8166:410;;;;;:::o;8595:338::-;8650:5;8699:3;8692:4;8684:6;8680:17;8676:27;8666:122;;8707:79;;:::i;:::-;8666:122;8824:6;8811:20;8849:78;8923:3;8915:6;8908:4;8900:6;8896:17;8849:78;:::i;:::-;8840:87;;8656:277;8595:338;;;;:::o;8939:1509::-;9093:6;9101;9109;9117;9125;9174:3;9162:9;9153:7;9149:23;9145:33;9142:120;;;9181:79;;:::i;:::-;9142:120;9301:1;9326:53;9371:7;9362:6;9351:9;9347:22;9326:53;:::i;:::-;9316:63;;9272:117;9428:2;9454:53;9499:7;9490:6;9479:9;9475:22;9454:53;:::i;:::-;9444:63;;9399:118;9584:2;9573:9;9569:18;9556:32;9615:18;9607:6;9604:30;9601:117;;;9637:79;;:::i;:::-;9601:117;9742:78;9812:7;9803:6;9792:9;9788:22;9742:78;:::i;:::-;9732:88;;9527:303;9897:2;9886:9;9882:18;9869:32;9928:18;9920:6;9917:30;9914:117;;;9950:79;;:::i;:::-;9914:117;10055:78;10125:7;10116:6;10105:9;10101:22;10055:78;:::i;:::-;10045:88;;9840:303;10210:3;10199:9;10195:19;10182:33;10242:18;10234:6;10231:30;10228:117;;;10264:79;;:::i;:::-;10228:117;10369:62;10423:7;10414:6;10403:9;10399:22;10369:62;:::i;:::-;10359:72;;10153:288;8939:1509;;;;;;;;:::o;10454:77::-;10491:7;10520:5;10509:16;;10454:77;;;:::o;10537:118::-;10624:24;10642:5;10624:24;:::i;:::-;10619:3;10612:37;10537:118;;:::o;10661:222::-;10754:4;10792:2;10781:9;10777:18;10769:26;;10805:71;10873:1;10862:9;10858:17;10849:6;10805:71;:::i;:::-;10661:222;;;;:::o;10889:117::-;10998:1;10995;10988:12;11029:568;11102:8;11112:6;11162:3;11155:4;11147:6;11143:17;11139:27;11129:122;;11170:79;;:::i;:::-;11129:122;11283:6;11270:20;11260:30;;11313:18;11305:6;11302:30;11299:117;;;11335:79;;:::i;:::-;11299:117;11449:4;11441:6;11437:17;11425:29;;11503:3;11495:4;11487:6;11483:17;11473:8;11469:32;11466:41;11463:128;;;11510:79;;:::i;:::-;11463:128;11029:568;;;;;:::o;11603:914::-;11723:6;11731;11739;11788:2;11776:9;11767:7;11763:23;11759:32;11756:119;;;11794:79;;:::i;:::-;11756:119;11942:1;11931:9;11927:17;11914:31;11972:18;11964:6;11961:30;11958:117;;;11994:79;;:::i;:::-;11958:117;12099:78;12169:7;12160:6;12149:9;12145:22;12099:78;:::i;:::-;12089:88;;11885:302;12254:2;12243:9;12239:18;12226:32;12285:18;12277:6;12274:30;12271:117;;;12307:79;;:::i;:::-;12271:117;12420:80;12492:7;12483:6;12472:9;12468:22;12420:80;:::i;:::-;12402:98;;;;12197:313;11603:914;;;;;:::o;12523:122::-;12596:24;12614:5;12596:24;:::i;:::-;12589:5;12586:35;12576:63;;12635:1;12632;12625:12;12576:63;12523:122;:::o;12651:139::-;12697:5;12735:6;12722:20;12713:29;;12751:33;12778:5;12751:33;:::i;:::-;12651:139;;;;:::o;12796:329::-;12855:6;12904:2;12892:9;12883:7;12879:23;12875:32;12872:119;;;12910:79;;:::i;:::-;12872:119;13030:1;13055:53;13100:7;13091:6;13080:9;13076:22;13055:53;:::i;:::-;13045:63;;13001:117;12796:329;;;;:::o;13131:311::-;13208:4;13298:18;13290:6;13287:30;13284:56;;;13320:18;;:::i;:::-;13284:56;13370:4;13362:6;13358:17;13350:25;;13430:4;13424;13420:15;13412:23;;13131:311;;;:::o;13465:710::-;13561:5;13586:81;13602:64;13659:6;13602:64;:::i;:::-;13586:81;:::i;:::-;13577:90;;13687:5;13716:6;13709:5;13702:21;13750:4;13743:5;13739:16;13732:23;;13803:4;13795:6;13791:17;13783:6;13779:30;13832:3;13824:6;13821:15;13818:122;;;13851:79;;:::i;:::-;13818:122;13966:6;13949:220;13983:6;13978:3;13975:15;13949:220;;;14058:3;14087:37;14120:3;14108:10;14087:37;:::i;:::-;14082:3;14075:50;14154:4;14149:3;14145:14;14138:21;;14025:144;14009:4;14004:3;14000:14;13993:21;;13949:220;;;13953:21;13567:608;;13465:710;;;;;:::o;14198:370::-;14269:5;14318:3;14311:4;14303:6;14299:17;14295:27;14285:122;;14326:79;;:::i;:::-;14285:122;14443:6;14430:20;14468:94;14558:3;14550:6;14543:4;14535:6;14531:17;14468:94;:::i;:::-;14459:103;;14275:293;14198:370;;;;:::o;14574:894::-;14692:6;14700;14749:2;14737:9;14728:7;14724:23;14720:32;14717:119;;;14755:79;;:::i;:::-;14717:119;14903:1;14892:9;14888:17;14875:31;14933:18;14925:6;14922:30;14919:117;;;14955:79;;:::i;:::-;14919:117;15060:78;15130:7;15121:6;15110:9;15106:22;15060:78;:::i;:::-;15050:88;;14846:302;15215:2;15204:9;15200:18;15187:32;15246:18;15238:6;15235:30;15232:117;;;15268:79;;:::i;:::-;15232:117;15373:78;15443:7;15434:6;15423:9;15419:22;15373:78;:::i;:::-;15363:88;;15158:303;14574:894;;;;;:::o;15474:114::-;15541:6;15575:5;15569:12;15559:22;;15474:114;;;:::o;15594:184::-;15693:11;15727:6;15722:3;15715:19;15767:4;15762:3;15758:14;15743:29;;15594:184;;;;:::o;15784:132::-;15851:4;15874:3;15866:11;;15904:4;15899:3;15895:14;15887:22;;15784:132;;;:::o;15922:108::-;15999:24;16017:5;15999:24;:::i;:::-;15994:3;15987:37;15922:108;;:::o;16036:179::-;16105:10;16126:46;16168:3;16160:6;16126:46;:::i;:::-;16204:4;16199:3;16195:14;16181:28;;16036:179;;;;:::o;16221:113::-;16291:4;16323;16318:3;16314:14;16306:22;;16221:113;;;:::o;16370:732::-;16489:3;16518:54;16566:5;16518:54;:::i;:::-;16588:86;16667:6;16662:3;16588:86;:::i;:::-;16581:93;;16698:56;16748:5;16698:56;:::i;:::-;16777:7;16808:1;16793:284;16818:6;16815:1;16812:13;16793:284;;;16894:6;16888:13;16921:63;16980:3;16965:13;16921:63;:::i;:::-;16914:70;;17007:60;17060:6;17007:60;:::i;:::-;16997:70;;16853:224;16840:1;16837;16833:9;16828:14;;16793:284;;;16797:14;17093:3;17086:10;;16494:608;;;16370:732;;;;:::o;17108:373::-;17251:4;17289:2;17278:9;17274:18;17266:26;;17338:9;17332:4;17328:20;17324:1;17313:9;17309:17;17302:47;17366:108;17469:4;17460:6;17366:108;:::i;:::-;17358:116;;17108:373;;;;:::o;17487:118::-;17574:24;17592:5;17574:24;:::i;:::-;17569:3;17562:37;17487:118;;:::o;17611:222::-;17704:4;17742:2;17731:9;17727:18;17719:26;;17755:71;17823:1;17812:9;17808:17;17799:6;17755:71;:::i;:::-;17611:222;;;;:::o;17839:308::-;17901:4;17991:18;17983:6;17980:30;17977:56;;;18013:18;;:::i;:::-;17977:56;18051:29;18073:6;18051:29;:::i;:::-;18043:37;;18135:4;18129;18125:15;18117:23;;17839:308;;;:::o;18153:412::-;18231:5;18256:66;18272:49;18314:6;18272:49;:::i;:::-;18256:66;:::i;:::-;18247:75;;18345:6;18338:5;18331:21;18383:4;18376:5;18372:16;18421:3;18412:6;18407:3;18403:16;18400:25;18397:112;;;18428:79;;:::i;:::-;18397:112;18518:41;18552:6;18547:3;18542;18518:41;:::i;:::-;18237:328;18153:412;;;;;:::o;18585:340::-;18641:5;18690:3;18683:4;18675:6;18671:17;18667:27;18657:122;;18698:79;;:::i;:::-;18657:122;18815:6;18802:20;18840:79;18915:3;18907:6;18900:4;18892:6;18888:17;18840:79;:::i;:::-;18831:88;;18647:278;18585:340;;;;:::o;18931:509::-;19000:6;19049:2;19037:9;19028:7;19024:23;19020:32;19017:119;;;19055:79;;:::i;:::-;19017:119;19203:1;19192:9;19188:17;19175:31;19233:18;19225:6;19222:30;19219:117;;;19255:79;;:::i;:::-;19219:117;19360:63;19415:7;19406:6;19395:9;19391:22;19360:63;:::i;:::-;19350:73;;19146:287;18931:509;;;;:::o;19446:116::-;19516:21;19531:5;19516:21;:::i;:::-;19509:5;19506:32;19496:60;;19552:1;19549;19542:12;19496:60;19446:116;:::o;19568:133::-;19611:5;19649:6;19636:20;19627:29;;19665:30;19689:5;19665:30;:::i;:::-;19568:133;;;;:::o;19707:468::-;19772:6;19780;19829:2;19817:9;19808:7;19804:23;19800:32;19797:119;;;19835:79;;:::i;:::-;19797:119;19955:1;19980:53;20025:7;20016:6;20005:9;20001:22;19980:53;:::i;:::-;19970:63;;19926:117;20082:2;20108:50;20150:7;20141:6;20130:9;20126:22;20108:50;:::i;:::-;20098:60;;20053:115;19707:468;;;;;:::o;20181:474::-;20249:6;20257;20306:2;20294:9;20285:7;20281:23;20277:32;20274:119;;;20312:79;;:::i;:::-;20274:119;20432:1;20457:53;20502:7;20493:6;20482:9;20478:22;20457:53;:::i;:::-;20447:63;;20403:117;20559:2;20585:53;20630:7;20621:6;20610:9;20606:22;20585:53;:::i;:::-;20575:63;;20530:118;20181:474;;;;;:::o;20661:1089::-;20765:6;20773;20781;20789;20797;20846:3;20834:9;20825:7;20821:23;20817:33;20814:120;;;20853:79;;:::i;:::-;20814:120;20973:1;20998:53;21043:7;21034:6;21023:9;21019:22;20998:53;:::i;:::-;20988:63;;20944:117;21100:2;21126:53;21171:7;21162:6;21151:9;21147:22;21126:53;:::i;:::-;21116:63;;21071:118;21228:2;21254:53;21299:7;21290:6;21279:9;21275:22;21254:53;:::i;:::-;21244:63;;21199:118;21356:2;21382:53;21427:7;21418:6;21407:9;21403:22;21382:53;:::i;:::-;21372:63;;21327:118;21512:3;21501:9;21497:19;21484:33;21544:18;21536:6;21533:30;21530:117;;;21566:79;;:::i;:::-;21530:117;21671:62;21725:7;21716:6;21705:9;21701:22;21671:62;:::i;:::-;21661:72;;21455:288;20661:1089;;;;;;;;:::o;21756:230::-;21896:34;21892:1;21884:6;21880:14;21873:58;21965:13;21960:2;21952:6;21948:15;21941:38;21756:230;:::o;21992:366::-;22134:3;22155:67;22219:2;22214:3;22155:67;:::i;:::-;22148:74;;22231:93;22320:3;22231:93;:::i;:::-;22349:2;22344:3;22340:12;22333:19;;21992:366;;;:::o;22364:419::-;22530:4;22568:2;22557:9;22553:18;22545:26;;22617:9;22611:4;22607:20;22603:1;22592:9;22588:17;22581:47;22645:131;22771:4;22645:131;:::i;:::-;22637:139;;22364:419;;;:::o;22789:182::-;22929:34;22925:1;22917:6;22913:14;22906:58;22789:182;:::o;22977:366::-;23119:3;23140:67;23204:2;23199:3;23140:67;:::i;:::-;23133:74;;23216:93;23305:3;23216:93;:::i;:::-;23334:2;23329:3;23325:12;23318:19;;22977:366;;;:::o;23349:419::-;23515:4;23553:2;23542:9;23538:18;23530:26;;23602:9;23596:4;23592:20;23588:1;23577:9;23573:17;23566:47;23630:131;23756:4;23630:131;:::i;:::-;23622:139;;23349:419;;;:::o;23774:165::-;23914:17;23910:1;23902:6;23898:14;23891:41;23774:165;:::o;23945:366::-;24087:3;24108:67;24172:2;24167:3;24108:67;:::i;:::-;24101:74;;24184:93;24273:3;24184:93;:::i;:::-;24302:2;24297:3;24293:12;24286:19;;23945:366;;;:::o;24317:419::-;24483:4;24521:2;24510:9;24506:18;24498:26;;24570:9;24564:4;24560:20;24556:1;24545:9;24541:17;24534:47;24598:131;24724:4;24598:131;:::i;:::-;24590:139;;24317:419;;;:::o;24742:148::-;24844:11;24881:3;24866:18;;24742:148;;;;:::o;24896:377::-;25002:3;25030:39;25063:5;25030:39;:::i;:::-;25085:89;25167:6;25162:3;25085:89;:::i;:::-;25078:96;;25183:52;25228:6;25223:3;25216:4;25209:5;25205:16;25183:52;:::i;:::-;25260:6;25255:3;25251:16;25244:23;;25006:267;24896:377;;;;:::o;25279:435::-;25459:3;25481:95;25572:3;25563:6;25481:95;:::i;:::-;25474:102;;25593:95;25684:3;25675:6;25593:95;:::i;:::-;25586:102;;25705:3;25698:10;;25279:435;;;;;:::o;25720:237::-;25860:34;25856:1;25848:6;25844:14;25837:58;25929:20;25924:2;25916:6;25912:15;25905:45;25720:237;:::o;25963:366::-;26105:3;26126:67;26190:2;26185:3;26126:67;:::i;:::-;26119:74;;26202:93;26291:3;26202:93;:::i;:::-;26320:2;26315:3;26311:12;26304:19;;25963:366;;;:::o;26335:419::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:166::-;26900:18;26896:1;26888:6;26884:14;26877:42;26760:166;:::o;26932:366::-;27074:3;27095:67;27159:2;27154:3;27095:67;:::i;:::-;27088:74;;27171:93;27260:3;27171:93;:::i;:::-;27289:2;27284:3;27280:12;27273:19;;26932:366;;;:::o;27304:419::-;27470:4;27508:2;27497:9;27493:18;27485:26;;27557:9;27551:4;27547:20;27543:1;27532:9;27528:17;27521:47;27585:131;27711:4;27585:131;:::i;:::-;27577:139;;27304:419;;;:::o;27729:180::-;27777:77;27774:1;27767:88;27874:4;27871:1;27864:15;27898:4;27895:1;27888:15;27915:305;27955:3;27974:20;27992:1;27974:20;:::i;:::-;27969:25;;28008:20;28026:1;28008:20;:::i;:::-;28003:25;;28162:1;28094:66;28090:74;28087:1;28084:81;28081:107;;;28168:18;;:::i;:::-;28081:107;28212:1;28209;28205:9;28198:16;;27915:305;;;;:::o;28226:174::-;28366:26;28362:1;28354:6;28350:14;28343:50;28226:174;:::o;28406:366::-;28548:3;28569:67;28633:2;28628:3;28569:67;:::i;:::-;28562:74;;28645:93;28734:3;28645:93;:::i;:::-;28763:2;28758:3;28754:12;28747:19;;28406:366;;;:::o;28778:419::-;28944:4;28982:2;28971:9;28967:18;28959:26;;29031:9;29025:4;29021:20;29017:1;29006:9;29002:17;28995:47;29059:131;29185:4;29059:131;:::i;:::-;29051:139;;28778:419;;;:::o;29203:94::-;29236:8;29284:5;29280:2;29276:14;29255:35;;29203:94;;;:::o;29303:::-;29342:7;29371:20;29385:5;29371:20;:::i;:::-;29360:31;;29303:94;;;:::o;29403:100::-;29442:7;29471:26;29491:5;29471:26;:::i;:::-;29460:37;;29403:100;;;:::o;29509:157::-;29614:45;29634:24;29652:5;29634:24;:::i;:::-;29614:45;:::i;:::-;29609:3;29602:58;29509:157;;:::o;29672:256::-;29784:3;29799:75;29870:3;29861:6;29799:75;:::i;:::-;29899:2;29894:3;29890:12;29883:19;;29919:3;29912:10;;29672:256;;;;:::o;29934:168::-;30074:20;30070:1;30062:6;30058:14;30051:44;29934:168;:::o;30108:366::-;30250:3;30271:67;30335:2;30330:3;30271:67;:::i;:::-;30264:74;;30347:93;30436:3;30347:93;:::i;:::-;30465:2;30460:3;30456:12;30449:19;;30108:366;;;:::o;30480:419::-;30646:4;30684:2;30673:9;30669:18;30661:26;;30733:9;30727:4;30723:20;30719:1;30708:9;30704:17;30697:47;30761:131;30887:4;30761:131;:::i;:::-;30753:139;;30480:419;;;:::o;30905:143::-;30962:5;30993:6;30987:13;30978:22;;31009:33;31036:5;31009:33;:::i;:::-;30905:143;;;;:::o;31054:351::-;31124:6;31173:2;31161:9;31152:7;31148:23;31144:32;31141:119;;;31179:79;;:::i;:::-;31141:119;31299:1;31324:64;31380:7;31371:6;31360:9;31356:22;31324:64;:::i;:::-;31314:74;;31270:128;31054:351;;;;:::o;31411:166::-;31551:18;31547:1;31539:6;31535:14;31528:42;31411:166;:::o;31583:366::-;31725:3;31746:67;31810:2;31805:3;31746:67;:::i;:::-;31739:74;;31822:93;31911:3;31822:93;:::i;:::-;31940:2;31935:3;31931:12;31924:19;;31583:366;;;:::o;31955:419::-;32121:4;32159:2;32148:9;32144:18;32136:26;;32208:9;32202:4;32198:20;32194:1;32183:9;32179:17;32172:47;32236:131;32362:4;32236:131;:::i;:::-;32228:139;;31955:419;;;:::o;32380:166::-;32520:18;32516:1;32508:6;32504:14;32497:42;32380:166;:::o;32552:366::-;32694:3;32715:67;32779:2;32774:3;32715:67;:::i;:::-;32708:74;;32791:93;32880:3;32791:93;:::i;:::-;32909:2;32904:3;32900:12;32893:19;;32552:366;;;:::o;32924:419::-;33090:4;33128:2;33117:9;33113:18;33105:26;;33177:9;33171:4;33167:20;33163:1;33152:9;33148:17;33141:47;33205:131;33331:4;33205:131;:::i;:::-;33197:139;;32924:419;;;:::o;33349:180::-;33397:77;33394:1;33387:88;33494:4;33491:1;33484:15;33518:4;33515:1;33508:15;33535:168;33675:20;33671:1;33663:6;33659:14;33652:44;33535:168;:::o;33709:366::-;33851:3;33872:67;33936:2;33931:3;33872:67;:::i;:::-;33865:74;;33948:93;34037:3;33948:93;:::i;:::-;34066:2;34061:3;34057:12;34050:19;;33709:366;;;:::o;34081:419::-;34247:4;34285:2;34274:9;34270:18;34262:26;;34334:9;34328:4;34324:20;34320:1;34309:9;34305:17;34298:47;34362:131;34488:4;34362:131;:::i;:::-;34354:139;;34081:419;;;:::o;34506:143::-;34563:5;34594:6;34588:13;34579:22;;34610:33;34637:5;34610:33;:::i;:::-;34506:143;;;;:::o;34655:351::-;34725:6;34774:2;34762:9;34753:7;34749:23;34745:32;34742:119;;;34780:79;;:::i;:::-;34742:119;34900:1;34925:64;34981:7;34972:6;34961:9;34957:22;34925:64;:::i;:::-;34915:74;;34871:128;34655:351;;;;:::o;35012:174::-;35152:26;35148:1;35140:6;35136:14;35129:50;35012:174;:::o;35192:366::-;35334:3;35355:67;35419:2;35414:3;35355:67;:::i;:::-;35348:74;;35431:93;35520:3;35431:93;:::i;:::-;35549:2;35544:3;35540:12;35533:19;;35192:366;;;:::o;35564:419::-;35730:4;35768:2;35757:9;35753:18;35745:26;;35817:9;35811:4;35807:20;35803:1;35792:9;35788:17;35781:47;35845:131;35971:4;35845:131;:::i;:::-;35837:139;;35564:419;;;:::o;35989:233::-;36028:3;36051:24;36069:5;36051:24;:::i;:::-;36042:33;;36097:66;36090:5;36087:77;36084:103;;36167:18;;:::i;:::-;36084:103;36214:1;36207:5;36203:13;36196:20;;35989:233;;;:::o;36228:483::-;36399:4;36437:2;36426:9;36422:18;36414:26;;36486:9;36480:4;36476:20;36472:1;36461:9;36457:17;36450:47;36514:108;36617:4;36608:6;36514:108;:::i;:::-;36506:116;;36632:72;36700:2;36689:9;36685:18;36676:6;36632:72;:::i;:::-;36228:483;;;;;:::o;36717:332::-;36838:4;36876:2;36865:9;36861:18;36853:26;;36889:71;36957:1;36946:9;36942:17;36933:6;36889:71;:::i;:::-;36970:72;37038:2;37027:9;37023:18;37014:6;36970:72;:::i;:::-;36717:332;;;;;:::o;37055:228::-;37195:34;37191:1;37183:6;37179:14;37172:58;37264:11;37259:2;37251:6;37247:15;37240:36;37055:228;:::o;37289:366::-;37431:3;37452:67;37516:2;37511:3;37452:67;:::i;:::-;37445:74;;37528:93;37617:3;37528:93;:::i;:::-;37646:2;37641:3;37637:12;37630:19;;37289:366;;;:::o;37661:419::-;37827:4;37865:2;37854:9;37850:18;37842:26;;37914:9;37908:4;37904:20;37900:1;37889:9;37885:17;37878:47;37942:131;38068:4;37942:131;:::i;:::-;37934:139;;37661:419;;;:::o;38086:332::-;38207:4;38245:2;38234:9;38230:18;38222:26;;38258:71;38326:1;38315:9;38311:17;38302:6;38258:71;:::i;:::-;38339:72;38407:2;38396:9;38392:18;38383:6;38339:72;:::i;:::-;38086:332;;;;;:::o;38424:423::-;38565:4;38603:2;38592:9;38588:18;38580:26;;38652:9;38646:4;38642:20;38638:1;38627:9;38623:17;38616:47;38680:78;38753:4;38744:6;38680:78;:::i;:::-;38672:86;;38768:72;38836:2;38825:9;38821:18;38812:6;38768:72;:::i;:::-;38424:423;;;;;:::o;38853:165::-;38993:17;38989:1;38981:6;38977:14;38970:41;38853:165;:::o;39024:366::-;39166:3;39187:67;39251:2;39246:3;39187:67;:::i;:::-;39180:74;;39263:93;39352:3;39263:93;:::i;:::-;39381:2;39376:3;39372:12;39365:19;;39024:366;;;:::o;39396:419::-;39562:4;39600:2;39589:9;39585:18;39577:26;;39649:9;39643:4;39639:20;39635:1;39624:9;39620:17;39613:47;39677:131;39803:4;39677:131;:::i;:::-;39669:139;;39396:419;;;:::o;39821:348::-;39861:7;39884:20;39902:1;39884:20;:::i;:::-;39879:25;;39918:20;39936:1;39918:20;:::i;:::-;39913:25;;40106:1;40038:66;40034:74;40031:1;40028:81;40023:1;40016:9;40009:17;40005:105;40002:131;;;40113:18;;:::i;:::-;40002:131;40161:1;40158;40154:9;40143:20;;39821:348;;;;:::o;40175:168::-;40315:20;40311:1;40303:6;40299:14;40292:44;40175:168;:::o;40349:366::-;40491:3;40512:67;40576:2;40571:3;40512:67;:::i;:::-;40505:74;;40588:93;40677:3;40588:93;:::i;:::-;40706:2;40701:3;40697:12;40690:19;;40349:366;;;:::o;40721:419::-;40887:4;40925:2;40914:9;40910:18;40902:26;;40974:9;40968:4;40964:20;40960:1;40949:9;40945:17;40938:47;41002:131;41128:4;41002:131;:::i;:::-;40994:139;;40721:419;;;:::o;41146:169::-;41286:21;41282:1;41274:6;41270:14;41263:45;41146:169;:::o;41321:366::-;41463:3;41484:67;41548:2;41543:3;41484:67;:::i;:::-;41477:74;;41560:93;41649:3;41560:93;:::i;:::-;41678:2;41673:3;41669:12;41662:19;;41321:366;;;:::o;41693:419::-;41859:4;41897:2;41886:9;41882:18;41874:26;;41946:9;41940:4;41936:20;41932:1;41921:9;41917:17;41910:47;41974:131;42100:4;41974:131;:::i;:::-;41966:139;;41693:419;;;:::o;42118:147::-;42219:11;42256:3;42241:18;;42118:147;;;;:::o;42271:114::-;;:::o;42391:398::-;42550:3;42571:83;42652:1;42647:3;42571:83;:::i;:::-;42564:90;;42663:93;42752:3;42663:93;:::i;:::-;42781:1;42776:3;42772:11;42765:18;;42391:398;;;:::o;42795:379::-;42979:3;43001:147;43144:3;43001:147;:::i;:::-;42994:154;;43165:3;43158:10;;42795:379;;;:::o;43180:167::-;43320:19;43316:1;43308:6;43304:14;43297:43;43180:167;:::o;43353:366::-;43495:3;43516:67;43580:2;43575:3;43516:67;:::i;:::-;43509:74;;43592:93;43681:3;43592:93;:::i;:::-;43710:2;43705:3;43701:12;43694:19;;43353:366;;;:::o;43725:419::-;43891:4;43929:2;43918:9;43914:18;43906:26;;43978:9;43972:4;43968:20;43964:1;43953:9;43949:17;43942:47;44006:131;44132:4;44006:131;:::i;:::-;43998:139;;43725:419;;;:::o;44150:332::-;44271:4;44309:2;44298:9;44294:18;44286:26;;44322:71;44390:1;44379:9;44375:17;44366:6;44322:71;:::i;:::-;44403:72;44471:2;44460:9;44456:18;44447:6;44403:72;:::i;:::-;44150:332;;;;;:::o;44488:228::-;44628:34;44624:1;44616:6;44612:14;44605:58;44697:11;44692:2;44684:6;44680:15;44673:36;44488:228;:::o;44722:366::-;44864:3;44885:67;44949:2;44944:3;44885:67;:::i;:::-;44878:74;;44961:93;45050:3;44961:93;:::i;:::-;45079:2;45074:3;45070:12;45063:19;;44722:366;;;:::o;45094:419::-;45260:4;45298:2;45287:9;45283:18;45275:26;;45347:9;45341:4;45337:20;45333:1;45322:9;45318:17;45311:47;45375:131;45501:4;45375:131;:::i;:::-;45367:139;;45094:419;;;:::o;45519:225::-;45659:34;45655:1;45647:6;45643:14;45636:58;45728:8;45723:2;45715:6;45711:15;45704:33;45519:225;:::o;45750:366::-;45892:3;45913:67;45977:2;45972:3;45913:67;:::i;:::-;45906:74;;45989:93;46078:3;45989:93;:::i;:::-;46107:2;46102:3;46098:12;46091:19;;45750:366;;;:::o;46122:419::-;46288:4;46326:2;46315:9;46311:18;46303:26;;46375:9;46369:4;46365:20;46361:1;46350:9;46346:17;46339:47;46403:131;46529:4;46403:131;:::i;:::-;46395:139;;46122:419;;;:::o;46547:180::-;46595:77;46592:1;46585:88;46692:4;46689:1;46682:15;46716:4;46713:1;46706:15;46733:320;46777:6;46814:1;46808:4;46804:12;46794:22;;46861:1;46855:4;46851:12;46882:18;46872:81;;46938:4;46930:6;46926:17;46916:27;;46872:81;47000:2;46992:6;46989:14;46969:18;46966:38;46963:84;;47019:18;;:::i;:::-;46963:84;46784:269;46733:320;;;:::o;47059:180::-;47107:77;47104:1;47097:88;47204:4;47201:1;47194:15;47228:4;47225:1;47218:15;47245:185;47285:1;47302:20;47320:1;47302:20;:::i;:::-;47297:25;;47336:20;47354:1;47336:20;:::i;:::-;47331:25;;47375:1;47365:35;;47380:18;;:::i;:::-;47365:35;47422:1;47419;47415:9;47410:14;;47245:185;;;;:::o;47436:191::-;47476:4;47496:20;47514:1;47496:20;:::i;:::-;47491:25;;47530:20;47548:1;47530:20;:::i;:::-;47525:25;;47569:1;47566;47563:8;47560:34;;;47574:18;;:::i;:::-;47560:34;47619:1;47616;47612:9;47604:17;;47436:191;;;;:::o;47633:176::-;47665:1;47682:20;47700:1;47682:20;:::i;:::-;47677:25;;47716:20;47734:1;47716:20;:::i;:::-;47711:25;;47755:1;47745:35;;47760:18;;:::i;:::-;47745:35;47801:1;47798;47794:9;47789:14;;47633:176;;;;:::o;47815:227::-;47955:34;47951:1;47943:6;47939:14;47932:58;48024:10;48019:2;48011:6;48007:15;48000:35;47815:227;:::o;48048:366::-;48190:3;48211:67;48275:2;48270:3;48211:67;:::i;:::-;48204:74;;48287:93;48376:3;48287:93;:::i;:::-;48405:2;48400:3;48396:12;48389:19;;48048:366;;;:::o;48420:419::-;48586:4;48624:2;48613:9;48609:18;48601:26;;48673:9;48667:4;48663:20;48659:1;48648:9;48644:17;48637:47;48701:131;48827:4;48701:131;:::i;:::-;48693:139;;48420:419;;;:::o;48845:224::-;48985:34;48981:1;48973:6;48969:14;48962:58;49054:7;49049:2;49041:6;49037:15;49030:32;48845:224;:::o;49075:366::-;49217:3;49238:67;49302:2;49297:3;49238:67;:::i;:::-;49231:74;;49314:93;49403:3;49314:93;:::i;:::-;49432:2;49427:3;49423:12;49416:19;;49075:366;;;:::o;49447:419::-;49613:4;49651:2;49640:9;49636:18;49628:26;;49700:9;49694:4;49690:20;49686:1;49675:9;49671:17;49664:47;49728:131;49854:4;49728:131;:::i;:::-;49720:139;;49447:419;;;:::o;49872:229::-;50012:34;50008:1;50000:6;49996:14;49989:58;50081:12;50076:2;50068:6;50064:15;50057:37;49872:229;:::o;50107:366::-;50249:3;50270:67;50334:2;50329:3;50270:67;:::i;:::-;50263:74;;50346:93;50435:3;50346:93;:::i;:::-;50464:2;50459:3;50455:12;50448:19;;50107:366;;;:::o;50479:419::-;50645:4;50683:2;50672:9;50668:18;50660:26;;50732:9;50726:4;50722:20;50718:1;50707:9;50703:17;50696:47;50760:131;50886:4;50760:131;:::i;:::-;50752:139;;50479:419;;;:::o;50904:634::-;51125:4;51163:2;51152:9;51148:18;51140:26;;51212:9;51206:4;51202:20;51198:1;51187:9;51183:17;51176:47;51240:108;51343:4;51334:6;51240:108;:::i;:::-;51232:116;;51395:9;51389:4;51385:20;51380:2;51369:9;51365:18;51358:48;51423:108;51526:4;51517:6;51423:108;:::i;:::-;51415:116;;50904:634;;;;;:::o;51544:220::-;51684:34;51680:1;51672:6;51668:14;51661:58;51753:3;51748:2;51740:6;51736:15;51729:28;51544:220;:::o;51770:366::-;51912:3;51933:67;51997:2;51992:3;51933:67;:::i;:::-;51926:74;;52009:93;52098:3;52009:93;:::i;:::-;52127:2;52122:3;52118:12;52111:19;;51770:366;;;:::o;52142:419::-;52308:4;52346:2;52335:9;52331:18;52323:26;;52395:9;52389:4;52385:20;52381:1;52370:9;52366:17;52359:47;52423:131;52549:4;52423:131;:::i;:::-;52415:139;;52142:419;;;:::o;52567:166::-;52707:18;52703:1;52695:6;52691:14;52684:42;52567:166;:::o;52739:366::-;52881:3;52902:67;52966:2;52961:3;52902:67;:::i;:::-;52895:74;;52978:93;53067:3;52978:93;:::i;:::-;53096:2;53091:3;53087:12;53080:19;;52739:366;;;:::o;53111:419::-;53277:4;53315:2;53304:9;53300:18;53292:26;;53364:9;53358:4;53354:20;53350:1;53339:9;53335:17;53328:47;53392:131;53518:4;53392:131;:::i;:::-;53384:139;;53111:419;;;:::o;53536:228::-;53676:34;53672:1;53664:6;53660:14;53653:58;53745:11;53740:2;53732:6;53728:15;53721:36;53536:228;:::o;53770:366::-;53912:3;53933:67;53997:2;53992:3;53933:67;:::i;:::-;53926:74;;54009:93;54098:3;54009:93;:::i;:::-;54127:2;54122:3;54118:12;54111:19;;53770:366;;;:::o;54142:419::-;54308:4;54346:2;54335:9;54331:18;54323:26;;54395:9;54389:4;54385:20;54381:1;54370:9;54366:17;54359:47;54423:131;54549:4;54423:131;:::i;:::-;54415:139;;54142:419;;;:::o;54567:170::-;54707:22;54703:1;54695:6;54691:14;54684:46;54567:170;:::o;54743:366::-;54885:3;54906:67;54970:2;54965:3;54906:67;:::i;:::-;54899:74;;54982:93;55071:3;54982:93;:::i;:::-;55100:2;55095:3;55091:12;55084:19;;54743:366;;;:::o;55115:419::-;55281:4;55319:2;55308:9;55304:18;55296:26;;55368:9;55362:4;55358:20;55354:1;55343:9;55339:17;55332:47;55396:131;55522:4;55396:131;:::i;:::-;55388:139;;55115:419;;;:::o;55540:332::-;55661:4;55699:2;55688:9;55684:18;55676:26;;55712:71;55780:1;55769:9;55765:17;55756:6;55712:71;:::i;:::-;55793:72;55861:2;55850:9;55846:18;55837:6;55793:72;:::i;:::-;55540:332;;;;;:::o;55878:231::-;56018:34;56014:1;56006:6;56002:14;55995:58;56087:14;56082:2;56074:6;56070:15;56063:39;55878:231;:::o;56115:366::-;56257:3;56278:67;56342:2;56337:3;56278:67;:::i;:::-;56271:74;;56354:93;56443:3;56354:93;:::i;:::-;56472:2;56467:3;56463:12;56456:19;;56115:366;;;:::o;56487:419::-;56653:4;56691:2;56680:9;56676:18;56668:26;;56740:9;56734:4;56730:20;56726:1;56715:9;56711:17;56704:47;56768:131;56894:4;56768:131;:::i;:::-;56760:139;;56487:419;;;:::o;56912:98::-;56963:6;56997:5;56991:12;56981:22;;56912:98;;;:::o;57016:168::-;57099:11;57133:6;57128:3;57121:19;57173:4;57168:3;57164:14;57149:29;;57016:168;;;;:::o;57190:360::-;57276:3;57304:38;57336:5;57304:38;:::i;:::-;57358:70;57421:6;57416:3;57358:70;:::i;:::-;57351:77;;57437:52;57482:6;57477:3;57470:4;57463:5;57459:16;57437:52;:::i;:::-;57514:29;57536:6;57514:29;:::i;:::-;57509:3;57505:39;57498:46;;57280:270;57190:360;;;;:::o;57556:1053::-;57879:4;57917:3;57906:9;57902:19;57894:27;;57931:71;57999:1;57988:9;57984:17;57975:6;57931:71;:::i;:::-;58012:72;58080:2;58069:9;58065:18;58056:6;58012:72;:::i;:::-;58131:9;58125:4;58121:20;58116:2;58105:9;58101:18;58094:48;58159:108;58262:4;58253:6;58159:108;:::i;:::-;58151:116;;58314:9;58308:4;58304:20;58299:2;58288:9;58284:18;58277:48;58342:108;58445:4;58436:6;58342:108;:::i;:::-;58334:116;;58498:9;58492:4;58488:20;58482:3;58471:9;58467:19;58460:49;58526:76;58597:4;58588:6;58526:76;:::i;:::-;58518:84;;57556:1053;;;;;;;;:::o;58615:141::-;58671:5;58702:6;58696:13;58687:22;;58718:32;58744:5;58718:32;:::i;:::-;58615:141;;;;:::o;58762:349::-;58831:6;58880:2;58868:9;58859:7;58855:23;58851:32;58848:119;;;58886:79;;:::i;:::-;58848:119;59006:1;59031:63;59086:7;59077:6;59066:9;59062:22;59031:63;:::i;:::-;59021:73;;58977:127;58762:349;;;;:::o;59117:106::-;59161:8;59210:5;59205:3;59201:15;59180:36;;59117:106;;;:::o;59229:183::-;59264:3;59302:1;59284:16;59281:23;59278:128;;;59340:1;59337;59334;59319:23;59362:34;59393:1;59387:8;59362:34;:::i;:::-;59355:41;;59278:128;59229:183;:::o;59418:711::-;59457:3;59495:4;59477:16;59474:26;59503:5;59471:39;59532:20;;:::i;:::-;59607:1;59589:16;59585:24;59582:1;59576:4;59561:49;59640:4;59634:11;59739:16;59732:4;59724:6;59720:17;59717:39;59684:18;59676:6;59673:30;59657:113;59654:146;;;59785:5;;;;59654:146;59831:6;59825:4;59821:17;59867:3;59861:10;59894:18;59886:6;59883:30;59880:43;;;59916:5;;;;;;59880:43;59964:6;59957:4;59952:3;59948:14;59944:27;60023:1;60005:16;60001:24;59995:4;59991:35;59986:3;59983:44;59980:57;;;60030:5;;;;;;;59980:57;60047;60095:6;60089:4;60085:17;60077:6;60073:30;60067:4;60047:57;:::i;:::-;60120:3;60113:10;;59461:668;;;;;59418:711;;:::o;60135:239::-;60275:34;60271:1;60263:6;60259:14;60252:58;60344:22;60339:2;60331:6;60327:15;60320:47;60135:239;:::o;60380:366::-;60522:3;60543:67;60607:2;60602:3;60543:67;:::i;:::-;60536:74;;60619:93;60708:3;60619:93;:::i;:::-;60737:2;60732:3;60728:12;60721:19;;60380:366;;;:::o;60752:419::-;60918:4;60956:2;60945:9;60941:18;60933:26;;61005:9;60999:4;60995:20;60991:1;60980:9;60976:17;60969:47;61033:131;61159:4;61033:131;:::i;:::-;61025:139;;60752:419;;;:::o;61177:227::-;61317:34;61313:1;61305:6;61301:14;61294:58;61386:10;61381:2;61373:6;61369:15;61362:35;61177:227;:::o;61410:366::-;61552:3;61573:67;61637:2;61632:3;61573:67;:::i;:::-;61566:74;;61649:93;61738:3;61649:93;:::i;:::-;61767:2;61762:3;61758:12;61751:19;;61410:366;;;:::o;61782:419::-;61948:4;61986:2;61975:9;61971:18;61963:26;;62035:9;62029:4;62025:20;62021:1;62010:9;62006:17;61999:47;62063:131;62189:4;62063:131;:::i;:::-;62055:139;;61782:419;;;:::o;62207:751::-;62430:4;62468:3;62457:9;62453:19;62445:27;;62482:71;62550:1;62539:9;62535:17;62526:6;62482:71;:::i;:::-;62563:72;62631:2;62620:9;62616:18;62607:6;62563:72;:::i;:::-;62645;62713:2;62702:9;62698:18;62689:6;62645:72;:::i;:::-;62727;62795:2;62784:9;62780:18;62771:6;62727:72;:::i;:::-;62847:9;62841:4;62837:20;62831:3;62820:9;62816:19;62809:49;62875:76;62946:4;62937:6;62875:76;:::i;:::-;62867:84;;62207:751;;;;;;;;:::o;62964:171::-;63104:23;63100:1;63092:6;63088:14;63081:47;62964:171;:::o;63141:366::-;63283:3;63304:67;63368:2;63363:3;63304:67;:::i;:::-;63297:74;;63380:93;63469:3;63380:93;:::i;:::-;63498:2;63493:3;63489:12;63482:19;;63141:366;;;:::o;63513:419::-;63679:4;63717:2;63706:9;63702:18;63694:26;;63766:9;63760:4;63756:20;63752:1;63741:9;63737:17;63730:47;63794:131;63920:4;63794:131;:::i;:::-;63786:139;;63513:419;;;:::o;63938:231::-;64078:34;64074:1;64066:6;64062:14;64055:58;64147:14;64142:2;64134:6;64130:15;64123:39;63938:231;:::o;64175:366::-;64317:3;64338:67;64402:2;64397:3;64338:67;:::i;:::-;64331:74;;64414:93;64503:3;64414:93;:::i;:::-;64532:2;64527:3;64523:12;64516:19;;64175:366;;;:::o;64547:419::-;64713:4;64751:2;64740:9;64736:18;64728:26;;64800:9;64794:4;64790:20;64786:1;64775:9;64771:17;64764:47;64828:131;64954:4;64828:131;:::i;:::-;64820:139;;64547:419;;;:::o
Swarm Source
ipfs://92f503294a5628b9e3256468c06435c17681a4b5876344a760a3d7b15c8502ed
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.