Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 8 from a total of 8 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint Public | 16369282 | 1141 days ago | IN | 0.055 ETH | 0.00259838 | ||||
| Safe Transfer Fr... | 16241437 | 1159 days ago | IN | 0 ETH | 0.00105729 | ||||
| Set Pre Reveal U... | 16155000 | 1171 days ago | IN | 0 ETH | 0.00209198 | ||||
| Set Approval For... | 16134578 | 1174 days ago | IN | 0 ETH | 0.00172681 | ||||
| Mint Public | 16126060 | 1175 days ago | IN | 0.055 ETH | 0.00231855 | ||||
| Mint Win List | 16120783 | 1176 days ago | IN | 0.049 ETH | 0.00255523 | ||||
| Mint Win List | 16120749 | 1176 days ago | IN | 0.049 ETH | 0.00350987 | ||||
| Set Sale Status | 16120745 | 1176 days ago | IN | 0 ETH | 0.00080355 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
STEMIntenseNFT
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-05
*/
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Tree 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.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
*/
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 Calldata version of {verify}
*
* _Available since v4.7._
*/
function verifyCalldata(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProofCalldata(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle 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++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Calldata version of {processProof}
*
* _Available since v4.7._
*/
function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* _Available since v4.7._
*/
function multiProofVerify(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProof(proof, proofFlags, leaves) == root;
}
/**
* @dev Calldata version of {multiProofVerify}
*
* _Available since v4.7._
*/
function multiProofVerifyCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProofCalldata(proof, proofFlags, leaves) == root;
}
/**
* @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
* consuming from one or the other at each step according to the instructions given by
* `proofFlags`.
*
* _Available since v4.7._
*/
function processMultiProof(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Calldata version of {processMultiProof}
*
* _Available since v4.7._
*/
function processMultiProofCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @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);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev 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/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/utils/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/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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: STEMIntesneNFT.sol
pragma solidity 0.8.17;
contract STEMIntenseNFT is ERC721, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
string public _baseTokenURI;
uint256 public _totalSupply;
uint256 public _maxPerWallet;
uint256 public _currentSupply;
bool public _isPublicSaleActive;
bool public _isWinListSaleActive;
string public _merkleTreeInputURI;
bytes32 public _winListMerkleRoot;
address payable public _winAccount;
bool private _isRevealed;
string private _preRevealURI;
mapping(string => uint256) public price;
mapping(address => uint256) public minted;
mapping(address => uint256[]) private accountMints;
constructor(bytes32 winListMerkleRoot_, address payable winAccount_)
public
ERC721("STEM Intense Girls", "STEM")
{
_init();
_winAccount = winAccount_;
_winListMerkleRoot = winListMerkleRoot_;
}
function _init() internal {
_maxPerWallet = 20;
_totalSupply = 7777;
price["public"] = 0.055 ether;
price["winList"] = 0.049 ether;
price["partner"] = 0.044 ether;
_isRevealed = false;
_isPublicSaleActive = false;
_isWinListSaleActive = false;
}
function mintWinList(uint256 quantity, bytes32[] calldata merkleProof)
external
payable
{
require(_isWinListSaleActive == true, "WIN List Sale not active");
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(
_checkEligibility(_winListMerkleRoot, merkleProof, leaf) == true,
"Address not eligible - Invalid merkle proof"
);
require(
_totalSupply >= _currentSupply + quantity,
"Exceeds max supply"
);
require(
_maxPerWallet >= minted[msg.sender] + quantity,
"Exceeds max per wallet"
);
require(
msg.value == quantity * price["winList"],
"Ether value sent is incorrect"
);
_currentSupply += quantity;
minted[msg.sender] += quantity;
_winAccount.transfer(msg.value);
for (uint256 i; i < quantity; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
accountMints[msg.sender].push(newItemId);
_mint(msg.sender, newItemId);
}
}
function mintPublic(uint256 quantity) external payable {
require(_isPublicSaleActive == true, "Public Sale not active");
require(
_totalSupply >= _currentSupply + quantity,
"Exceeds max supply"
);
require(
_maxPerWallet >= minted[msg.sender] + quantity,
"Exceeds max per wallet"
);
require(
msg.value == quantity * price["public"],
"Ether value sent is incorrect"
);
_currentSupply += quantity;
minted[msg.sender] += quantity;
_winAccount.transfer(msg.value);
for (uint256 i; i < quantity; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
accountMints[msg.sender].push(newItemId);
_mint(msg.sender, newItemId);
}
}
function mintPartnership(uint256 quantity) external payable {
require(_isPublicSaleActive == true, "Public Sale not active");
require(
quantity == 50 ||
quantity == 100 ||
quantity == 200 ||
quantity == 500,
"Invalid quantity"
);
require(
_totalSupply >= _currentSupply + quantity,
"Exceeds max supply"
);
require(
msg.value == quantity * price["partner"],
"Ether value sent is incorrect"
);
_currentSupply += quantity;
minted[msg.sender] += quantity;
_winAccount.transfer(msg.value);
for (uint256 i; i < quantity; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
accountMints[msg.sender].push(newItemId);
_mint(msg.sender, newItemId);
}
}
function mintReserve(uint256 quantity, address to) external onlyOwner {
require(
_totalSupply >= _currentSupply + quantity,
"Exceeds max supply"
);
_currentSupply += quantity;
for (uint256 i; i < quantity; i++) {
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
accountMints[to].push(newItemId);
_mint(to, newItemId);
}
}
function burn(uint256 tokenId) external {
require(ownerOf(tokenId) == msg.sender, "Only owner can burn");
_burn(tokenId);
}
function _checkEligibility(
bytes32 merkleRoot,
bytes32[] calldata merkleProof,
bytes32 leaf
) internal pure returns (bool) {
return (MerkleProof.verify(merkleProof, merkleRoot, leaf));
}
function checkWinListEligibility(
address walletAddress,
bytes32[] calldata merkleProof
) external view returns (bool) {
bytes32 leaf = keccak256(abi.encodePacked(walletAddress));
bool eligibility = _checkEligibility(
_winListMerkleRoot,
merkleProof,
leaf
);
return eligibility;
}
function _baseURI() internal view override returns (string memory) {
return _baseTokenURI;
}
function getAccountMints(address _account)
public
view
returns (uint256[] memory)
{
return accountMints[_account];
}
function tokenURI(uint256 tokenId)
public
view
override
returns (string memory)
{
if(!_isRevealed){
return _preRevealURI;
}
return super.tokenURI(tokenId);
}
function setBaseURI(string memory baseURI) public onlyOwner {
_baseTokenURI = baseURI;
}
function setPreRevealURI(string memory preRevealURI) public onlyOwner {
_preRevealURI = preRevealURI;
}
function reveal(string memory baseURI) external onlyOwner{
_baseTokenURI = baseURI;
_isRevealed = true;
}
function setSaleStatus(bool winListSaleStatus, bool publicSaleStatus)
public
onlyOwner
{
_isWinListSaleActive = winListSaleStatus;
_isPublicSaleActive = publicSaleStatus;
}
function setWINMerkleRoot(bytes32 winListMerkleRoot) public onlyOwner {
_winListMerkleRoot = winListMerkleRoot;
}
function setPrice(string memory priceType, uint256 mintPrice)
public
onlyOwner
{
price[priceType] = mintPrice;
}
function setMaxPerWallet(uint256 quantity) public onlyOwner {
_maxPerWallet = quantity;
}
function setWINAccount(address payable winAccount) public onlyOwner {
_winAccount = winAccount;
}
function withdraw() external onlyOwner {
require(payable(msg.sender).send(address(this).balance));
}
function recoverERC20(IERC20 tokenContract, address to) external onlyOwner {
tokenContract.transfer(to, tokenContract.balanceOf(address(this)));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"bytes32","name":"winListMerkleRoot_","type":"bytes32"},{"internalType":"address payable","name":"winAccount_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isWinListSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleTreeInputURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_winAccount","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_winListMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"checkWinListEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccountMints","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintPartnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintWinList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenContract","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"preRevealURI","type":"string"}],"name":"setPreRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"priceType","type":"string"},{"internalType":"uint256","name":"mintPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"winListSaleStatus","type":"bool"},{"internalType":"bool","name":"publicSaleStatus","type":"bool"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"winAccount","type":"address"}],"name":"setWINAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"winListMerkleRoot","type":"bytes32"}],"name":"setWINMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051620059003803806200590083398181016040528101906200003791906200039e565b6040518060400160405280601281526020017f5354454d20496e74656e7365204769726c7300000000000000000000000000008152506040518060400160405280600481526020017f5354454d000000000000000000000000000000000000000000000000000000008152508160009081620000b491906200065f565b508060019081620000c691906200065f565b505050620000e9620000dd6200014960201b60201c565b6200015160201b60201c565b620000f96200021760201b60201c565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e81905550505062000886565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6014600a81905550611e6160098190555066c3663566a5800060116040516200024090620007a1565b90815260200160405180910390208190555066ae153d89fe800060116040516200026a9062000808565b908152602001604051809103902081905550669c51c4521e0000601160405162000294906200086f565b9081526020016040518091039020819055506000600f60146101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550565b600080fd5b6000819050919050565b6200031381620002fe565b81146200031f57600080fd5b50565b600081519050620003338162000308565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003668262000339565b9050919050565b620003788162000359565b81146200038457600080fd5b50565b60008151905062000398816200036d565b92915050565b60008060408385031215620003b857620003b7620002f9565b5b6000620003c88582860162000322565b9250506020620003db8582860162000387565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200046757607f821691505b6020821081036200047d576200047c6200041f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004a8565b620004f38683620004a8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005406200053a62000534846200050b565b62000515565b6200050b565b9050919050565b6000819050919050565b6200055c836200051f565b620005746200056b8262000547565b848454620004b5565b825550505050565b600090565b6200058b6200057c565b6200059881848462000551565b505050565b5b81811015620005c057620005b460008262000581565b6001810190506200059e565b5050565b601f8211156200060f57620005d98162000483565b620005e48462000498565b81016020851015620005f4578190505b6200060c620006038562000498565b8301826200059d565b50505b505050565b600082821c905092915050565b6000620006346000198460080262000614565b1980831691505092915050565b60006200064f838362000621565b9150826002028217905092915050565b6200066a82620003e5565b67ffffffffffffffff811115620006865762000685620003f0565b5b6200069282546200044e565b6200069f828285620005c4565b600060209050601f831160018114620006d75760008415620006c2578287015190505b620006ce858262000641565b8655506200073e565b601f198416620006e78662000483565b60005b828110156200071157848901518255600182019150602085019450602081019050620006ea565b868310156200073157848901516200072d601f89168262000621565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b7f7075626c69630000000000000000000000000000000000000000000000000000600082015250565b60006200078960068362000746565b9150620007968262000751565b600682019050919050565b6000620007ae826200077a565b9150819050919050565b7f77696e4c69737400000000000000000000000000000000000000000000000000600082015250565b6000620007f060078362000746565b9150620007fd82620007b8565b600782019050919050565b60006200081582620007e1565b9150819050919050565b7f706172746e657200000000000000000000000000000000000000000000000000600082015250565b60006200085760078362000746565b915062000864826200081f565b600782019050919050565b60006200087c8262000848565b9150819050919050565b61506a80620008966000396000f3fe6080604052600436106102675760003560e01c8063886f039a11610144578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c5146108fa578063ef60d93a14610937578063efd0cbf914610960578063f2fde38b1461097c578063f5a3ed41146109a5578063fe2c6198146109d057610267565b8063c87b56dd14610815578063cfc86f7b14610852578063d41b73751461087d578063e268e4d3146108a8578063e95de5a0146108d157610267565b8063a4fefad611610108578063a4fefad614610717578063a55eace514610742578063a61f86511461076d578063b274e48e14610798578063b88d4fde146107c1578063c3c1e8ff146107ea57610267565b8063886f039a146106325780638da5cb5b1461065b57806395d89b41146106865780639a6b671a146106b1578063a22cb465146106ee57610267565b80633eaaf86b116101dd57806355f804b3116101a157806355f804b3146105245780636352211e1461054d57806370a082311461058a578063715018a6146105c75780637fa8e5e4146105de578063850dd0911461060957610267565b80633eaaf86b1461046257806342842e0e1461048d57806342966c68146104b65780634c261247146104df578063502274e61461050857610267565b80631a61ba7c1161022f5780631a61ba7c146103565780631e7269c51461039357806322e01192146103d057806323b872dd146103f95780632a85db55146104225780633ccfd60b1461044b57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b314610311578063096b73331461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613302565b610a0d565b6040516102a0919061334a565b60405180910390f35b3480156102b557600080fd5b506102be610aef565b6040516102cb91906133f5565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061344d565b610b81565b60405161030891906134bb565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613502565b610bc7565b005b610354600480360381019061034f919061344d565b610cde565b005b34801561036257600080fd5b5061037d600480360381019061037891906135a7565b610fd7565b60405161038a919061334a565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190613607565b611021565b6040516103c79190613643565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f2919061378e565b611039565b005b34801561040557600080fd5b50610420600480360381019061041b91906137ea565b611068565b005b34801561042e57600080fd5b506104496004803603810190610444919061383d565b6110c8565b005b34801561045757600080fd5b506104606110e3565b005b34801561046e57600080fd5b5061047761112b565b6040516104849190613643565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906137ea565b611131565b005b3480156104c257600080fd5b506104dd60048036038101906104d8919061344d565b611151565b005b3480156104eb57600080fd5b506105066004803603810190610501919061383d565b6111d3565b005b610522600480360381019061051d9190613886565b611209565b005b34801561053057600080fd5b5061054b6004803603810190610546919061383d565b6115ae565b005b34801561055957600080fd5b50610574600480360381019061056f919061344d565b6115c9565b60405161058191906134bb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613607565b61167a565b6040516105be9190613643565b60405180910390f35b3480156105d357600080fd5b506105dc611731565b005b3480156105ea57600080fd5b506105f3611745565b6040516106009190613643565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b91906138e6565b61174b565b005b34801561063e57600080fd5b5061065960048036038101906106549190613964565b61186a565b005b34801561066757600080fd5b5061067061196e565b60405161067d91906134bb565b60405180910390f35b34801561069257600080fd5b5061069b611998565b6040516106a891906133f5565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613607565b611a2a565b6040516106e59190613a62565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613ab0565b611ac1565b005b34801561072357600080fd5b5061072c611ad7565b6040516107399190613643565b60405180910390f35b34801561074e57600080fd5b50610757611add565b6040516107649190613b11565b60405180910390f35b34801561077957600080fd5b50610782611b03565b60405161078f919061334a565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190613b2c565b611b16565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613c0d565b611b56565b005b3480156107f657600080fd5b506107ff611bb8565b60405161080c91906133f5565b60405180910390f35b34801561082157600080fd5b5061083c6004803603810190610837919061344d565b611c46565b60405161084991906133f5565b60405180910390f35b34801561085e57600080fd5b50610867611cff565b60405161087491906133f5565b60405180910390f35b34801561088957600080fd5b50610892611d8d565b60405161089f919061334a565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca919061344d565b611da0565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190613cc6565b611db2565b005b34801561090657600080fd5b50610921600480360381019061091c9190613cf3565b611dc4565b60405161092e919061334a565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613d5f565b611e58565b005b61097a6004803603810190610975919061344d565b611ea4565b005b34801561098857600080fd5b506109a3600480360381019061099e9190613607565b6121c7565b005b3480156109b157600080fd5b506109ba61224a565b6040516109c79190613d9b565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f2919061383d565b612250565b604051610a049190613643565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae85750610ae78261227e565b5b9050919050565b606060008054610afe90613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90613de5565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b8c826122e8565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bd2826115c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c61612333565b73ffffffffffffffffffffffffffffffffffffffff161480610c905750610c8f81610c8a612333565b611dc4565b5b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613f1a565b60405180910390fd5b610cd9838361233b565b505050565b60011515600c60009054906101000a900460ff16151514610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90613f86565b60405180910390fd5b6032811480610d435750606481145b80610d4e575060c881145b80610d5a57506101f481145b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ff2565b60405180910390fd5b80600b54610da79190614041565b6009541015610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906140c1565b60405180910390fd5b6011604051610df990614138565b90815260200160405180910390205481610e13919061414d565b3414610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906141db565b60405180910390fd5b80600b6000828254610e669190614041565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ebc9190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f2b573d6000803e3d6000fd5b5060005b81811015610fd357610f4160076123f4565b6000610f4d600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055610fbf3382612418565b508080610fcb906141fb565b915050610f2f565b5050565b60008084604051602001610feb919061428b565b6040516020818303038152906040528051906020012090506000611013600e548686856125f1565b905080925050509392505050565b60126020528060005260406000206000915090505481565b611041612649565b8060118360405161105291906142d7565b9081526020016040518091039020819055505050565b611079611073612333565b826126c7565b6110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614360565b60405180910390fd5b6110c383838361275c565b505050565b6110d0612649565b80601090816110df919061452c565b5050565b6110eb612649565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061112957600080fd5b565b60095481565b61114c83838360405180602001604052806000815250611b56565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611171826115c9565b73ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be9061464a565b60405180910390fd5b6111d0816129c2565b50565b6111db612649565b80600890816111ea919061452c565b506001600f60146101000a81548160ff02191690831515021790555050565b60011515600c60019054906101000a900460ff1615151461125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906146b6565b60405180910390fd5b600033604051602001611272919061428b565b6040516020818303038152906040528051906020012090506001151561129c600e548585856125f1565b1515146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590614748565b60405180910390fd5b83600b546112ec9190614041565b6009541015611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906140c1565b60405180910390fd5b83601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137b9190614041565b600a5410156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b6906147b4565b60405180910390fd5b60116040516113cd90614820565b908152602001604051809103902054846113e7919061414d565b3414611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906141db565b60405180910390fd5b83600b600082825461143a9190614041565b9250508190555083601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114909190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156114ff573d6000803e3d6000fd5b5060005b848110156115a75761151560076123f4565b6000611521600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556115933382612418565b50808061159f906141fb565b915050611503565b5050505050565b6115b6612649565b80600890816115c5919061452c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890614881565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190614913565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611739612649565b6117436000612adf565b565b600a5481565b611753612649565b81600b546117619190614041565b60095410156117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906140c1565b60405180910390fd5b81600b60008282546117b79190614041565b9250508190555060005b82811015611865576117d360076123f4565b60006117df600761240a565b9050601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556118518382612418565b50808061185d906141fb565b9150506117c1565b505050565b611872612649565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118c891906134bb565b602060405180830381865afa1580156118e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119099190614948565b6040518363ffffffff1660e01b8152600401611926929190614975565b6020604051808303816000875af1158015611945573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196991906149b3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a790613de5565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613de5565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b5050505050905090565b6060601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ab557602002820191906000526020600020905b815481526020019060010190808311611aa1575b50505050509050919050565b611ad3611acc612333565b8383612ba5565b5050565b600b5481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b611b1e612649565b81600c60016101000a81548160ff02191690831515021790555080600c60006101000a81548160ff0219169083151502179055505050565b611b67611b61612333565b836126c7565b611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90614360565b60405180910390fd5b611bb284848484612d11565b50505050565b600d8054611bc590613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf190613de5565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b505050505081565b6060600f60149054906101000a900460ff16611cee5760108054611c6990613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9590613de5565b8015611ce25780601f10611cb757610100808354040283529160200191611ce2565b820191906000526020600020905b815481529060010190602001808311611cc557829003601f168201915b50505050509050611cfa565b611cf782612d6d565b90505b919050565b60088054611d0c90613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3890613de5565b8015611d855780601f10611d5a57610100808354040283529160200191611d85565b820191906000526020600020905b815481529060010190602001808311611d6857829003601f168201915b505050505081565b600c60009054906101000a900460ff1681565b611da8612649565b80600a8190555050565b611dba612649565b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e60612649565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60011515600c60009054906101000a900460ff16151514611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613f86565b60405180910390fd5b80600b54611f089190614041565b6009541015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906140c1565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f979190614041565b600a541015611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd2906147b4565b60405180910390fd5b6011604051611fe990614a2c565b90815260200160405180910390205481612003919061414d565b3414612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906141db565b60405180910390fd5b80600b60008282546120569190614041565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561211b573d6000803e3d6000fd5b5060005b818110156121c35761213160076123f4565b600061213d600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556121af3382612418565b5080806121bb906141fb565b91505061211f565b5050565b6121cf612649565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614ab3565b60405180910390fd5b61224781612adf565b50565b600e5481565b6011818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122f181612dd5565b612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614881565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123ae836115c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614b1f565b60405180910390fd5b61249081612dd5565b156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790614b8b565b60405180910390fd5b6124dc60008383612e41565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252c9190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125ed60008383612e46565b5050565b600061263f848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508684612e4b565b9050949350505050565b612651612333565b73ffffffffffffffffffffffffffffffffffffffff1661266f61196e565b73ffffffffffffffffffffffffffffffffffffffff16146126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc90614bf7565b60405180910390fd5b565b6000806126d3836115c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271557506127148185611dc4565b5b8061275357508373ffffffffffffffffffffffffffffffffffffffff1661273b84610b81565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277c826115c9565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c990614c89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283890614d1b565b60405180910390fd5b61284c838383612e41565b61285760008261233b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a79190614d3b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128fe9190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129bd838383612e46565b505050565b60006129cd826115c9565b90506129db81600084612e41565b6129e660008361233b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a369190614d3b565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612adb81600084612e46565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0a90614dbb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d04919061334a565b60405180910390a3505050565b612d1c84848461275c565b612d2884848484612e62565b612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614e4d565b60405180910390fd5b50505050565b6060612d78826122e8565b6000612d82612fe9565b90506000815111612da25760405180602001604052806000815250612dcd565b80612dac8461307b565b604051602001612dbd929190614e6d565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600082612e5885846131db565b1490509392505050565b6000612e838473ffffffffffffffffffffffffffffffffffffffff16613231565b15612fdc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eac612333565b8786866040518563ffffffff1660e01b8152600401612ece9493929190614ee6565b6020604051808303816000875af1925050508015612f0a57506040513d601f19601f82011682018060405250810190612f079190614f47565b60015b612f8c573d8060008114612f3a576040519150601f19603f3d011682016040523d82523d6000602084013e612f3f565b606091505b506000815103612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90614e4d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe1565b600190505b949350505050565b606060088054612ff890613de5565b80601f016020809104026020016040519081016040528092919081815260200182805461302490613de5565b80156130715780601f1061304657610100808354040283529160200191613071565b820191906000526020600020905b81548152906001019060200180831161305457829003601f168201915b5050505050905090565b6060600082036130c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d6565b600082905060005b600082146130f45780806130dd906141fb565b915050600a826130ed9190614fa3565b91506130ca565b60008167ffffffffffffffff8111156131105761310f613663565b5b6040519080825280601f01601f1916602001820160405280156131425781602001600182028036833780820191505090505b5090505b600085146131cf5760018261315b9190614d3b565b9150600a8561316a9190614fd4565b60306131769190614041565b60f81b81838151811061318c5761318b615005565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c89190614fa3565b9450613146565b8093505050505b919050565b60008082905060005b8451811015613226576132118286838151811061320457613203615005565b5b6020026020010151613254565b9150808061321e906141fb565b9150506131e4565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081831061326c57613267828461327f565b613277565b613276838361327f565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132df816132aa565b81146132ea57600080fd5b50565b6000813590506132fc816132d6565b92915050565b600060208284031215613318576133176132a0565b5b6000613326848285016132ed565b91505092915050565b60008115159050919050565b6133448161332f565b82525050565b600060208201905061335f600083018461333b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561339f578082015181840152602081019050613384565b60008484015250505050565b6000601f19601f8301169050919050565b60006133c782613365565b6133d18185613370565b93506133e1818560208601613381565b6133ea816133ab565b840191505092915050565b6000602082019050818103600083015261340f81846133bc565b905092915050565b6000819050919050565b61342a81613417565b811461343557600080fd5b50565b60008135905061344781613421565b92915050565b600060208284031215613463576134626132a0565b5b600061347184828501613438565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134a58261347a565b9050919050565b6134b58161349a565b82525050565b60006020820190506134d060008301846134ac565b92915050565b6134df8161349a565b81146134ea57600080fd5b50565b6000813590506134fc816134d6565b92915050565b60008060408385031215613519576135186132a0565b5b6000613527858286016134ed565b925050602061353885828601613438565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261356757613566613542565b5b8235905067ffffffffffffffff81111561358457613583613547565b5b6020830191508360208202830111156135a05761359f61354c565b5b9250929050565b6000806000604084860312156135c0576135bf6132a0565b5b60006135ce868287016134ed565b935050602084013567ffffffffffffffff8111156135ef576135ee6132a5565b5b6135fb86828701613551565b92509250509250925092565b60006020828403121561361d5761361c6132a0565b5b600061362b848285016134ed565b91505092915050565b61363d81613417565b82525050565b60006020820190506136586000830184613634565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369b826133ab565b810181811067ffffffffffffffff821117156136ba576136b9613663565b5b80604052505050565b60006136cd613296565b90506136d98282613692565b919050565b600067ffffffffffffffff8211156136f9576136f8613663565b5b613702826133ab565b9050602081019050919050565b82818337600083830152505050565b600061373161372c846136de565b6136c3565b90508281526020810184848401111561374d5761374c61365e565b5b61375884828561370f565b509392505050565b600082601f83011261377557613774613542565b5b813561378584826020860161371e565b91505092915050565b600080604083850312156137a5576137a46132a0565b5b600083013567ffffffffffffffff8111156137c3576137c26132a5565b5b6137cf85828601613760565b92505060206137e085828601613438565b9150509250929050565b600080600060608486031215613803576138026132a0565b5b6000613811868287016134ed565b9350506020613822868287016134ed565b925050604061383386828701613438565b9150509250925092565b600060208284031215613853576138526132a0565b5b600082013567ffffffffffffffff811115613871576138706132a5565b5b61387d84828501613760565b91505092915050565b60008060006040848603121561389f5761389e6132a0565b5b60006138ad86828701613438565b935050602084013567ffffffffffffffff8111156138ce576138cd6132a5565b5b6138da86828701613551565b92509250509250925092565b600080604083850312156138fd576138fc6132a0565b5b600061390b85828601613438565b925050602061391c858286016134ed565b9150509250929050565b60006139318261349a565b9050919050565b61394181613926565b811461394c57600080fd5b50565b60008135905061395e81613938565b92915050565b6000806040838503121561397b5761397a6132a0565b5b60006139898582860161394f565b925050602061399a858286016134ed565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139d981613417565b82525050565b60006139eb83836139d0565b60208301905092915050565b6000602082019050919050565b6000613a0f826139a4565b613a1981856139af565b9350613a24836139c0565b8060005b83811015613a55578151613a3c88826139df565b9750613a47836139f7565b925050600181019050613a28565b5085935050505092915050565b60006020820190508181036000830152613a7c8184613a04565b905092915050565b613a8d8161332f565b8114613a9857600080fd5b50565b600081359050613aaa81613a84565b92915050565b60008060408385031215613ac757613ac66132a0565b5b6000613ad5858286016134ed565b9250506020613ae685828601613a9b565b9150509250929050565b6000613afb8261347a565b9050919050565b613b0b81613af0565b82525050565b6000602082019050613b266000830184613b02565b92915050565b60008060408385031215613b4357613b426132a0565b5b6000613b5185828601613a9b565b9250506020613b6285828601613a9b565b9150509250929050565b600067ffffffffffffffff821115613b8757613b86613663565b5b613b90826133ab565b9050602081019050919050565b6000613bb0613bab84613b6c565b6136c3565b905082815260208101848484011115613bcc57613bcb61365e565b5b613bd784828561370f565b509392505050565b600082601f830112613bf457613bf3613542565b5b8135613c04848260208601613b9d565b91505092915050565b60008060008060808587031215613c2757613c266132a0565b5b6000613c35878288016134ed565b9450506020613c46878288016134ed565b9350506040613c5787828801613438565b925050606085013567ffffffffffffffff811115613c7857613c776132a5565b5b613c8487828801613bdf565b91505092959194509250565b6000819050919050565b613ca381613c90565b8114613cae57600080fd5b50565b600081359050613cc081613c9a565b92915050565b600060208284031215613cdc57613cdb6132a0565b5b6000613cea84828501613cb1565b91505092915050565b60008060408385031215613d0a57613d096132a0565b5b6000613d18858286016134ed565b9250506020613d29858286016134ed565b9150509250929050565b613d3c81613af0565b8114613d4757600080fd5b50565b600081359050613d5981613d33565b92915050565b600060208284031215613d7557613d746132a0565b5b6000613d8384828501613d4a565b91505092915050565b613d9581613c90565b82525050565b6000602082019050613db06000830184613d8c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dfd57607f821691505b602082108103613e1057613e0f613db6565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e72602183613370565b9150613e7d82613e16565b604082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613f04603e83613370565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f5075626c69632053616c65206e6f742061637469766500000000000000000000600082015250565b6000613f70601683613370565b9150613f7b82613f3a565b602082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b7f496e76616c6964207175616e7469747900000000000000000000000000000000600082015250565b6000613fdc601083613370565b9150613fe782613fa6565b602082019050919050565b6000602082019050818103600083015261400b81613fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404c82613417565b915061405783613417565b925082820190508082111561406f5761406e614012565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006140ab601283613370565b91506140b682614075565b602082019050919050565b600060208201905081810360008301526140da8161409e565b9050919050565b600081905092915050565b7f706172746e657200000000000000000000000000000000000000000000000000600082015250565b60006141226007836140e1565b915061412d826140ec565b600782019050919050565b600061414382614115565b9150819050919050565b600061415882613417565b915061416383613417565b925082820261417181613417565b9150828204841483151761418857614187614012565b5b5092915050565b7f45746865722076616c75652073656e7420697320696e636f7272656374000000600082015250565b60006141c5601d83613370565b91506141d08261418f565b602082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613417565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361423857614237614012565b5b600182019050919050565b60008160601b9050919050565b600061425b82614243565b9050919050565b600061426d82614250565b9050919050565b6142856142808261349a565b614262565b82525050565b60006142978284614274565b60148201915081905092915050565b60006142b182613365565b6142bb81856140e1565b93506142cb818560208601613381565b80840191505092915050565b60006142e382846142a6565b915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061434a602e83613370565b9150614355826142ee565b604082019050919050565b600060208201905081810360008301526143798161433d565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143a5565b6143ec86836143a5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061442961442461441f84613417565b614404565b613417565b9050919050565b6000819050919050565b6144438361440e565b61445761444f82614430565b8484546143b2565b825550505050565b600090565b61446c61445f565b61447781848461443a565b505050565b5b8181101561449b57614490600082614464565b60018101905061447d565b5050565b601f8211156144e0576144b181614380565b6144ba84614395565b810160208510156144c9578190505b6144dd6144d585614395565b83018261447c565b50505b505050565b600082821c905092915050565b6000614503600019846008026144e5565b1980831691505092915050565b600061451c83836144f2565b9150826002028217905092915050565b61453582613365565b67ffffffffffffffff81111561454e5761454d613663565b5b6145588254613de5565b61456382828561449f565b600060209050601f8311600181146145965760008415614584578287015190505b61458e8582614510565b8655506145f6565b601f1984166145a486614380565b60005b828110156145cc578489015182556001820191506020850194506020810190506145a7565b868310156145e957848901516145e5601f8916826144f2565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c79206f776e65722063616e206275726e00000000000000000000000000600082015250565b6000614634601383613370565b915061463f826145fe565b602082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f57494e204c6973742053616c65206e6f74206163746976650000000000000000600082015250565b60006146a0601883613370565b91506146ab8261466a565b602082019050919050565b600060208201905081810360008301526146cf81614693565b9050919050565b7f41646472657373206e6f7420656c696769626c65202d20496e76616c6964206d60008201527f65726b6c652070726f6f66000000000000000000000000000000000000000000602082015250565b6000614732602b83613370565b915061473d826146d6565b604082019050919050565b6000602082019050818103600083015261476181614725565b9050919050565b7f45786365656473206d6178207065722077616c6c657400000000000000000000600082015250565b600061479e601683613370565b91506147a982614768565b602082019050919050565b600060208201905081810360008301526147cd81614791565b9050919050565b7f77696e4c69737400000000000000000000000000000000000000000000000000600082015250565b600061480a6007836140e1565b9150614815826147d4565b600782019050919050565b600061482b826147fd565b9150819050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061486b601883613370565b915061487682614835565b602082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006148fd602983613370565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b60008151905061494281613421565b92915050565b60006020828403121561495e5761495d6132a0565b5b600061496c84828501614933565b91505092915050565b600060408201905061498a60008301856134ac565b6149976020830184613634565b9392505050565b6000815190506149ad81613a84565b92915050565b6000602082840312156149c9576149c86132a0565b5b60006149d78482850161499e565b91505092915050565b7f7075626c69630000000000000000000000000000000000000000000000000000600082015250565b6000614a166006836140e1565b9150614a21826149e0565b600682019050919050565b6000614a3782614a09565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a9d602683613370565b9150614aa882614a41565b604082019050919050565b60006020820190508181036000830152614acc81614a90565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b09602083613370565b9150614b1482614ad3565b602082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b75601c83613370565b9150614b8082614b3f565b602082019050919050565b60006020820190508181036000830152614ba481614b68565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614be1602083613370565b9150614bec82614bab565b602082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614c73602583613370565b9150614c7e82614c17565b604082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d05602483613370565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b6000614d4682613417565b9150614d5183613417565b9250828203905081811115614d6957614d68614012565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614da5601983613370565b9150614db082614d6f565b602082019050919050565b60006020820190508181036000830152614dd481614d98565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614e37603283613370565b9150614e4282614ddb565b604082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b6000614e7982856142a6565b9150614e8582846142a6565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614eb882614e91565b614ec28185614e9c565b9350614ed2818560208601613381565b614edb816133ab565b840191505092915050565b6000608082019050614efb60008301876134ac565b614f0860208301866134ac565b614f156040830185613634565b8181036060830152614f278184614ead565b905095945050505050565b600081519050614f41816132d6565b92915050565b600060208284031215614f5d57614f5c6132a0565b5b6000614f6b84828501614f32565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fae82613417565b9150614fb983613417565b925082614fc957614fc8614f74565b5b828204905092915050565b6000614fdf82613417565b9150614fea83613417565b925082614ffa57614ff9614f74565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122003cd8e132d97bfd9acf94fafab4916779f226c1792fa55ae75a1579775c5c35264736f6c6343000811003347c38fd99bb1180b3649cc303a22259fdffc19b37b2caba2e62cbd8232ea4bad0000000000000000000000009f7df40b967bf83626057b373432c3319bbde750
Deployed Bytecode
0x6080604052600436106102675760003560e01c8063886f039a11610144578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c5146108fa578063ef60d93a14610937578063efd0cbf914610960578063f2fde38b1461097c578063f5a3ed41146109a5578063fe2c6198146109d057610267565b8063c87b56dd14610815578063cfc86f7b14610852578063d41b73751461087d578063e268e4d3146108a8578063e95de5a0146108d157610267565b8063a4fefad611610108578063a4fefad614610717578063a55eace514610742578063a61f86511461076d578063b274e48e14610798578063b88d4fde146107c1578063c3c1e8ff146107ea57610267565b8063886f039a146106325780638da5cb5b1461065b57806395d89b41146106865780639a6b671a146106b1578063a22cb465146106ee57610267565b80633eaaf86b116101dd57806355f804b3116101a157806355f804b3146105245780636352211e1461054d57806370a082311461058a578063715018a6146105c75780637fa8e5e4146105de578063850dd0911461060957610267565b80633eaaf86b1461046257806342842e0e1461048d57806342966c68146104b65780634c261247146104df578063502274e61461050857610267565b80631a61ba7c1161022f5780631a61ba7c146103565780631e7269c51461039357806322e01192146103d057806323b872dd146103f95780632a85db55146104225780633ccfd60b1461044b57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b314610311578063096b73331461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613302565b610a0d565b6040516102a0919061334a565b60405180910390f35b3480156102b557600080fd5b506102be610aef565b6040516102cb91906133f5565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061344d565b610b81565b60405161030891906134bb565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613502565b610bc7565b005b610354600480360381019061034f919061344d565b610cde565b005b34801561036257600080fd5b5061037d600480360381019061037891906135a7565b610fd7565b60405161038a919061334a565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190613607565b611021565b6040516103c79190613643565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f2919061378e565b611039565b005b34801561040557600080fd5b50610420600480360381019061041b91906137ea565b611068565b005b34801561042e57600080fd5b506104496004803603810190610444919061383d565b6110c8565b005b34801561045757600080fd5b506104606110e3565b005b34801561046e57600080fd5b5061047761112b565b6040516104849190613643565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906137ea565b611131565b005b3480156104c257600080fd5b506104dd60048036038101906104d8919061344d565b611151565b005b3480156104eb57600080fd5b506105066004803603810190610501919061383d565b6111d3565b005b610522600480360381019061051d9190613886565b611209565b005b34801561053057600080fd5b5061054b6004803603810190610546919061383d565b6115ae565b005b34801561055957600080fd5b50610574600480360381019061056f919061344d565b6115c9565b60405161058191906134bb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613607565b61167a565b6040516105be9190613643565b60405180910390f35b3480156105d357600080fd5b506105dc611731565b005b3480156105ea57600080fd5b506105f3611745565b6040516106009190613643565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b91906138e6565b61174b565b005b34801561063e57600080fd5b5061065960048036038101906106549190613964565b61186a565b005b34801561066757600080fd5b5061067061196e565b60405161067d91906134bb565b60405180910390f35b34801561069257600080fd5b5061069b611998565b6040516106a891906133f5565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613607565b611a2a565b6040516106e59190613a62565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613ab0565b611ac1565b005b34801561072357600080fd5b5061072c611ad7565b6040516107399190613643565b60405180910390f35b34801561074e57600080fd5b50610757611add565b6040516107649190613b11565b60405180910390f35b34801561077957600080fd5b50610782611b03565b60405161078f919061334a565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190613b2c565b611b16565b005b3480156107cd57600080fd5b506107e860048036038101906107e39190613c0d565b611b56565b005b3480156107f657600080fd5b506107ff611bb8565b60405161080c91906133f5565b60405180910390f35b34801561082157600080fd5b5061083c6004803603810190610837919061344d565b611c46565b60405161084991906133f5565b60405180910390f35b34801561085e57600080fd5b50610867611cff565b60405161087491906133f5565b60405180910390f35b34801561088957600080fd5b50610892611d8d565b60405161089f919061334a565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca919061344d565b611da0565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190613cc6565b611db2565b005b34801561090657600080fd5b50610921600480360381019061091c9190613cf3565b611dc4565b60405161092e919061334a565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613d5f565b611e58565b005b61097a6004803603810190610975919061344d565b611ea4565b005b34801561098857600080fd5b506109a3600480360381019061099e9190613607565b6121c7565b005b3480156109b157600080fd5b506109ba61224a565b6040516109c79190613d9b565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f2919061383d565b612250565b604051610a049190613643565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae85750610ae78261227e565b5b9050919050565b606060008054610afe90613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90613de5565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b8c826122e8565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bd2826115c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613e88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c61612333565b73ffffffffffffffffffffffffffffffffffffffff161480610c905750610c8f81610c8a612333565b611dc4565b5b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613f1a565b60405180910390fd5b610cd9838361233b565b505050565b60011515600c60009054906101000a900460ff16151514610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90613f86565b60405180910390fd5b6032811480610d435750606481145b80610d4e575060c881145b80610d5a57506101f481145b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ff2565b60405180910390fd5b80600b54610da79190614041565b6009541015610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906140c1565b60405180910390fd5b6011604051610df990614138565b90815260200160405180910390205481610e13919061414d565b3414610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906141db565b60405180910390fd5b80600b6000828254610e669190614041565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ebc9190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f2b573d6000803e3d6000fd5b5060005b81811015610fd357610f4160076123f4565b6000610f4d600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055610fbf3382612418565b508080610fcb906141fb565b915050610f2f565b5050565b60008084604051602001610feb919061428b565b6040516020818303038152906040528051906020012090506000611013600e548686856125f1565b905080925050509392505050565b60126020528060005260406000206000915090505481565b611041612649565b8060118360405161105291906142d7565b9081526020016040518091039020819055505050565b611079611073612333565b826126c7565b6110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614360565b60405180910390fd5b6110c383838361275c565b505050565b6110d0612649565b80601090816110df919061452c565b5050565b6110eb612649565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061112957600080fd5b565b60095481565b61114c83838360405180602001604052806000815250611b56565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16611171826115c9565b73ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be9061464a565b60405180910390fd5b6111d0816129c2565b50565b6111db612649565b80600890816111ea919061452c565b506001600f60146101000a81548160ff02191690831515021790555050565b60011515600c60019054906101000a900460ff1615151461125f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611256906146b6565b60405180910390fd5b600033604051602001611272919061428b565b6040516020818303038152906040528051906020012090506001151561129c600e548585856125f1565b1515146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590614748565b60405180910390fd5b83600b546112ec9190614041565b6009541015611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906140c1565b60405180910390fd5b83601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137b9190614041565b600a5410156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b6906147b4565b60405180910390fd5b60116040516113cd90614820565b908152602001604051809103902054846113e7919061414d565b3414611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906141db565b60405180910390fd5b83600b600082825461143a9190614041565b9250508190555083601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114909190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156114ff573d6000803e3d6000fd5b5060005b848110156115a75761151560076123f4565b6000611521600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556115933382612418565b50808061159f906141fb565b915050611503565b5050505050565b6115b6612649565b80600890816115c5919061452c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890614881565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e190614913565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611739612649565b6117436000612adf565b565b600a5481565b611753612649565b81600b546117619190614041565b60095410156117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c906140c1565b60405180910390fd5b81600b60008282546117b79190614041565b9250508190555060005b82811015611865576117d360076123f4565b60006117df600761240a565b9050601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556118518382612418565b50808061185d906141fb565b9150506117c1565b505050565b611872612649565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118c891906134bb565b602060405180830381865afa1580156118e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119099190614948565b6040518363ffffffff1660e01b8152600401611926929190614975565b6020604051808303816000875af1158015611945573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196991906149b3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119a790613de5565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613de5565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b5050505050905090565b6060601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ab557602002820191906000526020600020905b815481526020019060010190808311611aa1575b50505050509050919050565b611ad3611acc612333565b8383612ba5565b5050565b600b5481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b611b1e612649565b81600c60016101000a81548160ff02191690831515021790555080600c60006101000a81548160ff0219169083151502179055505050565b611b67611b61612333565b836126c7565b611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90614360565b60405180910390fd5b611bb284848484612d11565b50505050565b600d8054611bc590613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf190613de5565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b505050505081565b6060600f60149054906101000a900460ff16611cee5760108054611c6990613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9590613de5565b8015611ce25780601f10611cb757610100808354040283529160200191611ce2565b820191906000526020600020905b815481529060010190602001808311611cc557829003601f168201915b50505050509050611cfa565b611cf782612d6d565b90505b919050565b60088054611d0c90613de5565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3890613de5565b8015611d855780601f10611d5a57610100808354040283529160200191611d85565b820191906000526020600020905b815481529060010190602001808311611d6857829003601f168201915b505050505081565b600c60009054906101000a900460ff1681565b611da8612649565b80600a8190555050565b611dba612649565b80600e8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e60612649565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60011515600c60009054906101000a900460ff16151514611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613f86565b60405180910390fd5b80600b54611f089190614041565b6009541015611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f43906140c1565b60405180910390fd5b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f979190614041565b600a541015611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd2906147b4565b60405180910390fd5b6011604051611fe990614a2c565b90815260200160405180910390205481612003919061414d565b3414612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906141db565b60405180910390fd5b80600b60008282546120569190614041565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ac9190614041565b92505081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561211b573d6000803e3d6000fd5b5060005b818110156121c35761213160076123f4565b600061213d600761240a565b9050601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556121af3382612418565b5080806121bb906141fb565b91505061211f565b5050565b6121cf612649565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614ab3565b60405180910390fd5b61224781612adf565b50565b600e5481565b6011818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122f181612dd5565b612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614881565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123ae836115c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e90614b1f565b60405180910390fd5b61249081612dd5565b156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790614b8b565b60405180910390fd5b6124dc60008383612e41565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252c9190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125ed60008383612e46565b5050565b600061263f848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508684612e4b565b9050949350505050565b612651612333565b73ffffffffffffffffffffffffffffffffffffffff1661266f61196e565b73ffffffffffffffffffffffffffffffffffffffff16146126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc90614bf7565b60405180910390fd5b565b6000806126d3836115c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061271557506127148185611dc4565b5b8061275357508373ffffffffffffffffffffffffffffffffffffffff1661273b84610b81565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661277c826115c9565b73ffffffffffffffffffffffffffffffffffffffff16146127d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c990614c89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283890614d1b565b60405180910390fd5b61284c838383612e41565b61285760008261233b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a79190614d3b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128fe9190614041565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129bd838383612e46565b505050565b60006129cd826115c9565b90506129db81600084612e41565b6129e660008361233b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a369190614d3b565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612adb81600084612e46565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0a90614dbb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d04919061334a565b60405180910390a3505050565b612d1c84848461275c565b612d2884848484612e62565b612d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5e90614e4d565b60405180910390fd5b50505050565b6060612d78826122e8565b6000612d82612fe9565b90506000815111612da25760405180602001604052806000815250612dcd565b80612dac8461307b565b604051602001612dbd929190614e6d565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600082612e5885846131db565b1490509392505050565b6000612e838473ffffffffffffffffffffffffffffffffffffffff16613231565b15612fdc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eac612333565b8786866040518563ffffffff1660e01b8152600401612ece9493929190614ee6565b6020604051808303816000875af1925050508015612f0a57506040513d601f19601f82011682018060405250810190612f079190614f47565b60015b612f8c573d8060008114612f3a576040519150601f19603f3d011682016040523d82523d6000602084013e612f3f565b606091505b506000815103612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90614e4d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fe1565b600190505b949350505050565b606060088054612ff890613de5565b80601f016020809104026020016040519081016040528092919081815260200182805461302490613de5565b80156130715780601f1061304657610100808354040283529160200191613071565b820191906000526020600020905b81548152906001019060200180831161305457829003601f168201915b5050505050905090565b6060600082036130c2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d6565b600082905060005b600082146130f45780806130dd906141fb565b915050600a826130ed9190614fa3565b91506130ca565b60008167ffffffffffffffff8111156131105761310f613663565b5b6040519080825280601f01601f1916602001820160405280156131425781602001600182028036833780820191505090505b5090505b600085146131cf5760018261315b9190614d3b565b9150600a8561316a9190614fd4565b60306131769190614041565b60f81b81838151811061318c5761318b615005565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c89190614fa3565b9450613146565b8093505050505b919050565b60008082905060005b8451811015613226576132118286838151811061320457613203615005565b5b6020026020010151613254565b9150808061321e906141fb565b9150506131e4565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081831061326c57613267828461327f565b613277565b613276838361327f565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132df816132aa565b81146132ea57600080fd5b50565b6000813590506132fc816132d6565b92915050565b600060208284031215613318576133176132a0565b5b6000613326848285016132ed565b91505092915050565b60008115159050919050565b6133448161332f565b82525050565b600060208201905061335f600083018461333b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561339f578082015181840152602081019050613384565b60008484015250505050565b6000601f19601f8301169050919050565b60006133c782613365565b6133d18185613370565b93506133e1818560208601613381565b6133ea816133ab565b840191505092915050565b6000602082019050818103600083015261340f81846133bc565b905092915050565b6000819050919050565b61342a81613417565b811461343557600080fd5b50565b60008135905061344781613421565b92915050565b600060208284031215613463576134626132a0565b5b600061347184828501613438565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134a58261347a565b9050919050565b6134b58161349a565b82525050565b60006020820190506134d060008301846134ac565b92915050565b6134df8161349a565b81146134ea57600080fd5b50565b6000813590506134fc816134d6565b92915050565b60008060408385031215613519576135186132a0565b5b6000613527858286016134ed565b925050602061353885828601613438565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261356757613566613542565b5b8235905067ffffffffffffffff81111561358457613583613547565b5b6020830191508360208202830111156135a05761359f61354c565b5b9250929050565b6000806000604084860312156135c0576135bf6132a0565b5b60006135ce868287016134ed565b935050602084013567ffffffffffffffff8111156135ef576135ee6132a5565b5b6135fb86828701613551565b92509250509250925092565b60006020828403121561361d5761361c6132a0565b5b600061362b848285016134ed565b91505092915050565b61363d81613417565b82525050565b60006020820190506136586000830184613634565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369b826133ab565b810181811067ffffffffffffffff821117156136ba576136b9613663565b5b80604052505050565b60006136cd613296565b90506136d98282613692565b919050565b600067ffffffffffffffff8211156136f9576136f8613663565b5b613702826133ab565b9050602081019050919050565b82818337600083830152505050565b600061373161372c846136de565b6136c3565b90508281526020810184848401111561374d5761374c61365e565b5b61375884828561370f565b509392505050565b600082601f83011261377557613774613542565b5b813561378584826020860161371e565b91505092915050565b600080604083850312156137a5576137a46132a0565b5b600083013567ffffffffffffffff8111156137c3576137c26132a5565b5b6137cf85828601613760565b92505060206137e085828601613438565b9150509250929050565b600080600060608486031215613803576138026132a0565b5b6000613811868287016134ed565b9350506020613822868287016134ed565b925050604061383386828701613438565b9150509250925092565b600060208284031215613853576138526132a0565b5b600082013567ffffffffffffffff811115613871576138706132a5565b5b61387d84828501613760565b91505092915050565b60008060006040848603121561389f5761389e6132a0565b5b60006138ad86828701613438565b935050602084013567ffffffffffffffff8111156138ce576138cd6132a5565b5b6138da86828701613551565b92509250509250925092565b600080604083850312156138fd576138fc6132a0565b5b600061390b85828601613438565b925050602061391c858286016134ed565b9150509250929050565b60006139318261349a565b9050919050565b61394181613926565b811461394c57600080fd5b50565b60008135905061395e81613938565b92915050565b6000806040838503121561397b5761397a6132a0565b5b60006139898582860161394f565b925050602061399a858286016134ed565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139d981613417565b82525050565b60006139eb83836139d0565b60208301905092915050565b6000602082019050919050565b6000613a0f826139a4565b613a1981856139af565b9350613a24836139c0565b8060005b83811015613a55578151613a3c88826139df565b9750613a47836139f7565b925050600181019050613a28565b5085935050505092915050565b60006020820190508181036000830152613a7c8184613a04565b905092915050565b613a8d8161332f565b8114613a9857600080fd5b50565b600081359050613aaa81613a84565b92915050565b60008060408385031215613ac757613ac66132a0565b5b6000613ad5858286016134ed565b9250506020613ae685828601613a9b565b9150509250929050565b6000613afb8261347a565b9050919050565b613b0b81613af0565b82525050565b6000602082019050613b266000830184613b02565b92915050565b60008060408385031215613b4357613b426132a0565b5b6000613b5185828601613a9b565b9250506020613b6285828601613a9b565b9150509250929050565b600067ffffffffffffffff821115613b8757613b86613663565b5b613b90826133ab565b9050602081019050919050565b6000613bb0613bab84613b6c565b6136c3565b905082815260208101848484011115613bcc57613bcb61365e565b5b613bd784828561370f565b509392505050565b600082601f830112613bf457613bf3613542565b5b8135613c04848260208601613b9d565b91505092915050565b60008060008060808587031215613c2757613c266132a0565b5b6000613c35878288016134ed565b9450506020613c46878288016134ed565b9350506040613c5787828801613438565b925050606085013567ffffffffffffffff811115613c7857613c776132a5565b5b613c8487828801613bdf565b91505092959194509250565b6000819050919050565b613ca381613c90565b8114613cae57600080fd5b50565b600081359050613cc081613c9a565b92915050565b600060208284031215613cdc57613cdb6132a0565b5b6000613cea84828501613cb1565b91505092915050565b60008060408385031215613d0a57613d096132a0565b5b6000613d18858286016134ed565b9250506020613d29858286016134ed565b9150509250929050565b613d3c81613af0565b8114613d4757600080fd5b50565b600081359050613d5981613d33565b92915050565b600060208284031215613d7557613d746132a0565b5b6000613d8384828501613d4a565b91505092915050565b613d9581613c90565b82525050565b6000602082019050613db06000830184613d8c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dfd57607f821691505b602082108103613e1057613e0f613db6565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e72602183613370565b9150613e7d82613e16565b604082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613f04603e83613370565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f5075626c69632053616c65206e6f742061637469766500000000000000000000600082015250565b6000613f70601683613370565b9150613f7b82613f3a565b602082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b7f496e76616c6964207175616e7469747900000000000000000000000000000000600082015250565b6000613fdc601083613370565b9150613fe782613fa6565b602082019050919050565b6000602082019050818103600083015261400b81613fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061404c82613417565b915061405783613417565b925082820190508082111561406f5761406e614012565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006140ab601283613370565b91506140b682614075565b602082019050919050565b600060208201905081810360008301526140da8161409e565b9050919050565b600081905092915050565b7f706172746e657200000000000000000000000000000000000000000000000000600082015250565b60006141226007836140e1565b915061412d826140ec565b600782019050919050565b600061414382614115565b9150819050919050565b600061415882613417565b915061416383613417565b925082820261417181613417565b9150828204841483151761418857614187614012565b5b5092915050565b7f45746865722076616c75652073656e7420697320696e636f7272656374000000600082015250565b60006141c5601d83613370565b91506141d08261418f565b602082019050919050565b600060208201905081810360008301526141f4816141b8565b9050919050565b600061420682613417565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361423857614237614012565b5b600182019050919050565b60008160601b9050919050565b600061425b82614243565b9050919050565b600061426d82614250565b9050919050565b6142856142808261349a565b614262565b82525050565b60006142978284614274565b60148201915081905092915050565b60006142b182613365565b6142bb81856140e1565b93506142cb818560208601613381565b80840191505092915050565b60006142e382846142a6565b915081905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061434a602e83613370565b9150614355826142ee565b604082019050919050565b600060208201905081810360008301526143798161433d565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026143e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143a5565b6143ec86836143a5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061442961442461441f84613417565b614404565b613417565b9050919050565b6000819050919050565b6144438361440e565b61445761444f82614430565b8484546143b2565b825550505050565b600090565b61446c61445f565b61447781848461443a565b505050565b5b8181101561449b57614490600082614464565b60018101905061447d565b5050565b601f8211156144e0576144b181614380565b6144ba84614395565b810160208510156144c9578190505b6144dd6144d585614395565b83018261447c565b50505b505050565b600082821c905092915050565b6000614503600019846008026144e5565b1980831691505092915050565b600061451c83836144f2565b9150826002028217905092915050565b61453582613365565b67ffffffffffffffff81111561454e5761454d613663565b5b6145588254613de5565b61456382828561449f565b600060209050601f8311600181146145965760008415614584578287015190505b61458e8582614510565b8655506145f6565b601f1984166145a486614380565b60005b828110156145cc578489015182556001820191506020850194506020810190506145a7565b868310156145e957848901516145e5601f8916826144f2565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c79206f776e65722063616e206275726e00000000000000000000000000600082015250565b6000614634601383613370565b915061463f826145fe565b602082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f57494e204c6973742053616c65206e6f74206163746976650000000000000000600082015250565b60006146a0601883613370565b91506146ab8261466a565b602082019050919050565b600060208201905081810360008301526146cf81614693565b9050919050565b7f41646472657373206e6f7420656c696769626c65202d20496e76616c6964206d60008201527f65726b6c652070726f6f66000000000000000000000000000000000000000000602082015250565b6000614732602b83613370565b915061473d826146d6565b604082019050919050565b6000602082019050818103600083015261476181614725565b9050919050565b7f45786365656473206d6178207065722077616c6c657400000000000000000000600082015250565b600061479e601683613370565b91506147a982614768565b602082019050919050565b600060208201905081810360008301526147cd81614791565b9050919050565b7f77696e4c69737400000000000000000000000000000000000000000000000000600082015250565b600061480a6007836140e1565b9150614815826147d4565b600782019050919050565b600061482b826147fd565b9150819050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061486b601883613370565b915061487682614835565b602082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006148fd602983613370565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b60008151905061494281613421565b92915050565b60006020828403121561495e5761495d6132a0565b5b600061496c84828501614933565b91505092915050565b600060408201905061498a60008301856134ac565b6149976020830184613634565b9392505050565b6000815190506149ad81613a84565b92915050565b6000602082840312156149c9576149c86132a0565b5b60006149d78482850161499e565b91505092915050565b7f7075626c69630000000000000000000000000000000000000000000000000000600082015250565b6000614a166006836140e1565b9150614a21826149e0565b600682019050919050565b6000614a3782614a09565b9150819050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a9d602683613370565b9150614aa882614a41565b604082019050919050565b60006020820190508181036000830152614acc81614a90565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b09602083613370565b9150614b1482614ad3565b602082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b75601c83613370565b9150614b8082614b3f565b602082019050919050565b60006020820190508181036000830152614ba481614b68565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614be1602083613370565b9150614bec82614bab565b602082019050919050565b60006020820190508181036000830152614c1081614bd4565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614c73602583613370565b9150614c7e82614c17565b604082019050919050565b60006020820190508181036000830152614ca281614c66565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d05602483613370565b9150614d1082614ca9565b604082019050919050565b60006020820190508181036000830152614d3481614cf8565b9050919050565b6000614d4682613417565b9150614d5183613417565b9250828203905081811115614d6957614d68614012565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614da5601983613370565b9150614db082614d6f565b602082019050919050565b60006020820190508181036000830152614dd481614d98565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614e37603283613370565b9150614e4282614ddb565b604082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b6000614e7982856142a6565b9150614e8582846142a6565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000614eb882614e91565b614ec28185614e9c565b9350614ed2818560208601613381565b614edb816133ab565b840191505092915050565b6000608082019050614efb60008301876134ac565b614f0860208301866134ac565b614f156040830185613634565b8181036060830152614f278184614ead565b905095945050505050565b600081519050614f41816132d6565b92915050565b600060208284031215614f5d57614f5c6132a0565b5b6000614f6b84828501614f32565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fae82613417565b9150614fb983613417565b925082614fc957614fc8614f74565b5b828204905092915050565b6000614fdf82613417565b9150614fea83613417565b925082614ffa57614ff9614f74565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122003cd8e132d97bfd9acf94fafab4916779f226c1792fa55ae75a1579775c5c35264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
47c38fd99bb1180b3649cc303a22259fdffc19b37b2caba2e62cbd8232ea4bad0000000000000000000000009f7df40b967bf83626057b373432c3319bbde750
-----Decoded View---------------
Arg [0] : winListMerkleRoot_ (bytes32): 0x47c38fd99bb1180b3649cc303a22259fdffc19b37b2caba2e62cbd8232ea4bad
Arg [1] : winAccount_ (address): 0x9F7Df40b967bf83626057b373432C3319BbdE750
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 47c38fd99bb1180b3649cc303a22259fdffc19b37b2caba2e62cbd8232ea4bad
Arg [1] : 0000000000000000000000009f7df40b967bf83626057b373432c3319bbde750
Deployed Bytecode Sourcemap
51058:7526:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35106:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36033:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37546:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37063:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54418:959;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56252:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51644:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57912:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38246:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57290:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58299:114;;;;;;;;;;;;;:::i;:::-;;51227:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38653:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55857:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57415:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52339:1180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57180:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35744:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35475:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50171:103;;;;;;;;;;;;;:::i;:::-;;51261:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55385:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58421:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49523:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36202:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56757:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37789:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51296:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51489:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51370:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57551:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38909:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51409:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56927:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51193:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51332:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58069:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57777:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38015:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58180:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53527:883;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50429:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51449:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51598:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35106:305;35208:4;35260:25;35245:40;;;:11;:40;;;;:105;;;;35317:33;35302:48;;;:11;:48;;;;35245:105;:158;;;;35367:36;35391:11;35367:23;:36::i;:::-;35245:158;35225:178;;35106:305;;;:::o;36033:100::-;36087:13;36120:5;36113:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36033:100;:::o;37546:171::-;37622:7;37642:23;37657:7;37642:14;:23::i;:::-;37685:15;:24;37701:7;37685:24;;;;;;;;;;;;;;;;;;;;;37678:31;;37546:171;;;:::o;37063:417::-;37144:13;37160:23;37175:7;37160:14;:23::i;:::-;37144:39;;37208:5;37202:11;;:2;:11;;;37194:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37302:5;37286:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37311:37;37328:5;37335:12;:10;:12::i;:::-;37311:16;:37::i;:::-;37286:62;37264:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;37451:21;37460:2;37464:7;37451:8;:21::i;:::-;37133:347;37063:417;;:::o;54418:959::-;54520:4;54497:27;;:19;;;;;;;;;;;:27;;;54489:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54596:2;54584:8;:14;:50;;;;54631:3;54619:8;:15;54584:50;:86;;;;54667:3;54655:8;:15;54584:86;:122;;;;54703:3;54691:8;:15;54584:122;54562:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;54816:8;54799:14;;:25;;;;:::i;:::-;54783:12;;:41;;54761:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;54927:5;:16;;;;;:::i;:::-;;;;;;;;;;;;;;54916:8;:27;;;;:::i;:::-;54903:9;:40;54881:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;55031:8;55013:14;;:26;;;;;;;:::i;:::-;;;;;;;;55072:8;55050:6;:18;55057:10;55050:18;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;55091:11;;;;;;;;;;;:20;;:31;55112:9;55091:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55140:9;55135:235;55155:8;55151:1;:12;55135:235;;;55185:21;:9;:19;:21::i;:::-;55221:17;55241:19;:9;:17;:19::i;:::-;55221:39;;55275:12;:24;55288:10;55275:24;;;;;;;;;;;;;;;55305:9;55275:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55330:28;55336:10;55348:9;55330:5;:28::i;:::-;55170:200;55165:3;;;;;:::i;:::-;;;;55135:235;;;;54418:959;:::o;56252:383::-;56388:4;56405:12;56447:13;56430:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;56420:42;;;;;;56405:57;;56473:16;56492:106;56524:18;;56557:11;;56583:4;56492:17;:106::i;:::-;56473:125;;56616:11;56609:18;;;;56252:383;;;;;:::o;51644:41::-;;;;;;;;;;;;;;;;;:::o;57912:149::-;49409:13;:11;:13::i;:::-;58044:9:::1;58025:5;58031:9;58025:16;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;57912:149:::0;;:::o;38246:336::-;38441:41;38460:12;:10;:12::i;:::-;38474:7;38441:18;:41::i;:::-;38433:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;38546:28;38556:4;38562:2;38566:7;38546:9;:28::i;:::-;38246:336;;;:::o;57290:117::-;49409:13;:11;:13::i;:::-;57387:12:::1;57371:13;:28;;;;;;:::i;:::-;;57290:117:::0;:::o;58299:114::-;49409:13;:11;:13::i;:::-;58365:10:::1;58357:24;;:47;58382:21;58357:47;;;;;;;;;;;;;;;;;;;;;;;58349:56;;;::::0;::::1;;58299:114::o:0;51227:27::-;;;;:::o;38653:185::-;38791:39;38808:4;38814:2;38818:7;38791:39;;;;;;;;;;;;:16;:39::i;:::-;38653:185;;;:::o;55857:146::-;55936:10;55916:30;;:16;55924:7;55916;:16::i;:::-;:30;;;55908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;55981:14;55987:7;55981:5;:14::i;:::-;55857:146;:::o;57415:128::-;49409:13;:11;:13::i;:::-;57499:7:::1;57483:13;:23;;;;;;:::i;:::-;;57531:4;57517:11;;:18;;;;;;;;;;;;;;;;;;57415:128:::0;:::o;52339:1180::-;52493:4;52469:28;;:20;;;;;;;;;;;:28;;;52461:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52539:12;52581:10;52564:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;52554:39;;;;;;52539:54;;52686:4;52626:64;;:56;52644:18;;52664:11;;52677:4;52626:17;:56::i;:::-;:64;;;52604:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;52829:8;52812:14;;:25;;;;:::i;:::-;52796:12;;:41;;52774:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;52954:8;52933:6;:18;52940:10;52933:18;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;52916:13;;:46;;52894:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;53069:5;:16;;;;;:::i;:::-;;;;;;;;;;;;;;53058:8;:27;;;;:::i;:::-;53045:9;:40;53023:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;53173:8;53155:14;;:26;;;;;;;:::i;:::-;;;;;;;;53214:8;53192:6;:18;53199:10;53192:18;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;53233:11;;;;;;;;;;;:20;;:31;53254:9;53233:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53282:9;53277:235;53297:8;53293:1;:12;53277:235;;;53327:21;:9;:19;:21::i;:::-;53363:17;53383:19;:9;:17;:19::i;:::-;53363:39;;53417:12;:24;53430:10;53417:24;;;;;;;;;;;;;;;53447:9;53417:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53472:28;53478:10;53490:9;53472:5;:28::i;:::-;53312:200;53307:3;;;;;:::i;:::-;;;;53277:235;;;;52450:1069;52339:1180;;;:::o;57180:102::-;49409:13;:11;:13::i;:::-;57267:7:::1;57251:13;:23;;;;;;:::i;:::-;;57180:102:::0;:::o;35744:222::-;35816:7;35836:13;35852:7;:16;35860:7;35852:16;;;;;;;;;;;;;;;;;;;;;35836:32;;35904:1;35887:19;;:5;:19;;;35879:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;35953:5;35946:12;;;35744:222;;;:::o;35475:207::-;35547:7;35592:1;35575:19;;:5;:19;;;35567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35658:9;:16;35668:5;35658:16;;;;;;;;;;;;;;;;35651:23;;35475:207;;;:::o;50171:103::-;49409:13;:11;:13::i;:::-;50236:30:::1;50263:1;50236:18;:30::i;:::-;50171:103::o:0;51261:28::-;;;;:::o;55385:464::-;49409:13;:11;:13::i;:::-;55521:8:::1;55504:14;;:25;;;;:::i;:::-;55488:12;;:41;;55466:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;55604:8;55586:14;;:26;;;;;;;:::i;:::-;;;;;;;;55628:9;55623:219;55643:8;55639:1;:12;55623:219;;;55673:21;:9;:19;:21::i;:::-;55709:17;55729:19;:9;:17;:19::i;:::-;55709:39;;55763:12;:16;55776:2;55763:16;;;;;;;;;;;;;;;55785:9;55763:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55810:20;55816:2;55820:9;55810:5;:20::i;:::-;55658:184;55653:3;;;;;:::i;:::-;;;;55623:219;;;;55385:464:::0;;:::o;58421:160::-;49409:13;:11;:13::i;:::-;58507::::1;:22;;;58530:2;58534:13;:23;;;58566:4;58534:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58507:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58421:160:::0;;:::o;49523:87::-;49569:7;49596:6;;;;;;;;;;;49589:13;;49523:87;:::o;36202:104::-;36258:13;36291:7;36284:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36202:104;:::o;56757:162::-;56848:16;56889:12;:22;56902:8;56889:22;;;;;;;;;;;;;;;56882:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56757:162;;;:::o;37789:155::-;37884:52;37903:12;:10;:12::i;:::-;37917:8;37927;37884:18;:52::i;:::-;37789:155;;:::o;51296:29::-;;;;:::o;51489:34::-;;;;;;;;;;;;;:::o;51370:32::-;;;;;;;;;;;;;:::o;57551:218::-;49409:13;:11;:13::i;:::-;57695:17:::1;57672:20;;:40;;;;;;;;;;;;;;;;;;57745:16;57723:19;;:38;;;;;;;;;;;;;;;;;;57551:218:::0;;:::o;38909:323::-;39083:41;39102:12;:10;:12::i;:::-;39116:7;39083:18;:41::i;:::-;39075:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;39186:38;39200:4;39206:2;39210:7;39219:4;39186:13;:38::i;:::-;38909:323;;;;:::o;51409:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56927:245::-;57028:13;57063:11;;;;;;;;;;;57059:63;;57097:13;57090:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57059:63;57141:23;57156:7;57141:14;:23::i;:::-;57134:30;;56927:245;;;;:::o;51193:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51332:31::-;;;;;;;;;;;;;:::o;58069:103::-;49409:13;:11;:13::i;:::-;58156:8:::1;58140:13;:24;;;;58069:103:::0;:::o;57777:127::-;49409:13;:11;:13::i;:::-;57879:17:::1;57858:18;:38;;;;57777:127:::0;:::o;38015:164::-;38112:4;38136:18;:25;38155:5;38136:25;;;;;;;;;;;;;;;:35;38162:8;38136:35;;;;;;;;;;;;;;;;;;;;;;;;;38129:42;;38015:164;;;;:::o;58180:111::-;49409:13;:11;:13::i;:::-;58273:10:::1;58259:11;;:24;;;;;;;;;;;;;;;;;;58180:111:::0;:::o;53527:883::-;53624:4;53601:27;;:19;;;;;;;;;;;:27;;;53593:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53721:8;53704:14;;:25;;;;:::i;:::-;53688:12;;:41;;53666:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;53846:8;53825:6;:18;53832:10;53825:18;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;53808:13;;:46;;53786:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;53961:5;:15;;;;;:::i;:::-;;;;;;;;;;;;;;53950:8;:26;;;;:::i;:::-;53937:9;:39;53915:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;54064:8;54046:14;;:26;;;;;;;:::i;:::-;;;;;;;;54105:8;54083:6;:18;54090:10;54083:18;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;54124:11;;;;;;;;;;;:20;;:31;54145:9;54124:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54173:9;54168:235;54188:8;54184:1;:12;54168:235;;;54218:21;:9;:19;:21::i;:::-;54254:17;54274:19;:9;:17;:19::i;:::-;54254:39;;54308:12;:24;54321:10;54308:24;;;;;;;;;;;;;;;54338:9;54308:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54363:28;54369:10;54381:9;54363:5;:28::i;:::-;54203:200;54198:3;;;;;:::i;:::-;;;;54168:235;;;;53527:883;:::o;50429:201::-;49409:13;:11;:13::i;:::-;50538:1:::1;50518:22;;:8;:22;;::::0;50510:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;50594:28;50613:8;50594:18;:28::i;:::-;50429:201:::0;:::o;51449:33::-;;;;:::o;51598:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22611:157::-;22696:4;22735:25;22720:40;;;:11;:40;;;;22713:47;;22611:157;;;:::o;45521:135::-;45603:16;45611:7;45603;:16::i;:::-;45595:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45521:135;:::o;33485:98::-;33538:7;33565:10;33558:17;;33485:98;:::o;44800:174::-;44902:2;44875:15;:24;44891:7;44875:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44958:7;44954:2;44920:46;;44929:23;44944:7;44929:14;:23::i;:::-;44920:46;;;;;;;;;;;;44800:174;;:::o;32335:127::-;32442:1;32424:7;:14;;;:19;;;;;;;;;;;32335:127;:::o;32213:114::-;32278:7;32305;:14;;;32298:21;;32213:114;;;:::o;42631:439::-;42725:1;42711:16;;:2;:16;;;42703:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42784:16;42792:7;42784;:16::i;:::-;42783:17;42775:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42846:45;42875:1;42879:2;42883:7;42846:20;:45::i;:::-;42921:1;42904:9;:13;42914:2;42904:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42952:2;42933:7;:16;42941:7;42933:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42997:7;42993:2;42972:33;;42989:1;42972:33;;;;;;;;;;;;43018:44;43046:1;43050:2;43054:7;43018:19;:44::i;:::-;42631:439;;:::o;56011:233::-;56161:4;56186:49;56205:11;;56186:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56218:10;56230:4;56186:18;:49::i;:::-;56178:58;;56011:233;;;;;;:::o;49688:132::-;49763:12;:10;:12::i;:::-;49752:23;;:7;:5;:7::i;:::-;:23;;;49744:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49688:132::o;41033:264::-;41126:4;41143:13;41159:23;41174:7;41159:14;:23::i;:::-;41143:39;;41212:5;41201:16;;:7;:16;;;:52;;;;41221:32;41238:5;41245:7;41221:16;:32::i;:::-;41201:52;:87;;;;41281:7;41257:31;;:20;41269:7;41257:11;:20::i;:::-;:31;;;41201:87;41193:96;;;41033:264;;;;:::o;44056:625::-;44215:4;44188:31;;:23;44203:7;44188:14;:23::i;:::-;:31;;;44180:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44294:1;44280:16;;:2;:16;;;44272:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44350:39;44371:4;44377:2;44381:7;44350:20;:39::i;:::-;44454:29;44471:1;44475:7;44454:8;:29::i;:::-;44515:1;44496:9;:15;44506:4;44496:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44544:1;44527:9;:13;44537:2;44527:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44575:2;44556:7;:16;44564:7;44556:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44614:7;44610:2;44595:27;;44604:4;44595:27;;;;;;;;;;;;44635:38;44655:4;44661:2;44665:7;44635:19;:38::i;:::-;44056:625;;;:::o;43299:420::-;43359:13;43375:23;43390:7;43375:14;:23::i;:::-;43359:39;;43411:48;43432:5;43447:1;43451:7;43411:20;:48::i;:::-;43500:29;43517:1;43521:7;43500:8;:29::i;:::-;43562:1;43542:9;:16;43552:5;43542:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;43581:7;:16;43589:7;43581:16;;;;;;;;;;;;43574:23;;;;;;;;;;;43643:7;43639:1;43615:36;;43624:5;43615:36;;;;;;;;;;;;43664:47;43684:5;43699:1;43703:7;43664:19;:47::i;:::-;43348:371;43299:420;:::o;50790:191::-;50864:16;50883:6;;;;;;;;;;;50864:25;;50909:8;50900:6;;:17;;;;;;;;;;;;;;;;;;50964:8;50933:40;;50954:8;50933:40;;;;;;;;;;;;50853:128;50790:191;:::o;45117:315::-;45272:8;45263:17;;:5;:17;;;45255:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45359:8;45321:18;:25;45340:5;45321:25;;;;;;;;;;;;;;;:35;45347:8;45321:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45405:8;45383:41;;45398:5;45383:41;;;45415:8;45383:41;;;;;;:::i;:::-;;;;;;;;45117:315;;;:::o;40113:313::-;40269:28;40279:4;40285:2;40289:7;40269:9;:28::i;:::-;40316:47;40339:4;40345:2;40349:7;40358:4;40316:22;:47::i;:::-;40308:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;40113:313;;;;:::o;36377:281::-;36450:13;36476:23;36491:7;36476:14;:23::i;:::-;36512:21;36536:10;:8;:10::i;:::-;36512:34;;36588:1;36570:7;36564:21;:25;:86;;;;;;;;;;;;;;;;;36616:7;36625:18;:7;:16;:18::i;:::-;36599:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36564:86;36557:93;;;36377:281;;;:::o;40739:127::-;40804:4;40856:1;40828:30;;:7;:16;40836:7;40828:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40821:37;;40739:127;;;:::o;47645:126::-;;;;:::o;48156:125::-;;;;:::o;1219:190::-;1344:4;1397;1368:25;1381:5;1388:4;1368:12;:25::i;:::-;:33;1361:40;;1219:190;;;;;:::o;46220:853::-;46374:4;46395:15;:2;:13;;;:15::i;:::-;46391:675;;;46447:2;46431:36;;;46468:12;:10;:12::i;:::-;46482:4;46488:7;46497:4;46431:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46427:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46689:1;46672:6;:13;:18;46668:328;;46715:60;;;;;;;;;;:::i;:::-;;;;;;;;46668:328;46946:6;46940:13;46931:6;46927:2;46923:15;46916:38;46427:584;46563:41;;;46553:51;;;:6;:51;;;;46546:58;;;;;46391:675;47050:4;47043:11;;46220:853;;;;;;;:::o;56643:106::-;56695:13;56728;56721:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56643:106;:::o;9155:723::-;9211:13;9441:1;9432:5;:10;9428:53;;9459:10;;;;;;;;;;;;;;;;;;;;;9428:53;9491:12;9506:5;9491:20;;9522:14;9547:78;9562:1;9554:4;:9;9547:78;;9580:8;;;;;:::i;:::-;;;;9611:2;9603:10;;;;;:::i;:::-;;;9547:78;;;9635:19;9667:6;9657:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9635:39;;9685:154;9701:1;9692:5;:10;9685:154;;9729:1;9719:11;;;;;:::i;:::-;;;9796:2;9788:5;:10;;;;:::i;:::-;9775:2;:24;;;;:::i;:::-;9762:39;;9745:6;9752;9745:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9825:2;9816:11;;;;;:::i;:::-;;;9685:154;;;9863:6;9849:21;;;;;9155:723;;;;:::o;2086:296::-;2169:7;2189:20;2212:4;2189:27;;2232:9;2227:118;2251:5;:12;2247:1;:16;2227:118;;;2300:33;2310:12;2324:5;2330:1;2324:8;;;;;;;;:::i;:::-;;;;;;;;2300:9;:33::i;:::-;2285:48;;2265:3;;;;;:::i;:::-;;;;2227:118;;;;2362:12;2355:19;;;2086:296;;;;:::o;12455:326::-;12515:4;12772:1;12750:7;:19;;;:23;12743:30;;12455:326;;;:::o;8293:149::-;8356:7;8387:1;8383;:5;:51;;8414:20;8429:1;8432;8414:14;:20::i;:::-;8383:51;;;8391:20;8406:1;8409;8391:14;:20::i;:::-;8383:51;8376:58;;8293:149;;;;:::o;8450:268::-;8518:13;8625:1;8619:4;8612:15;8654:1;8648:4;8641:15;8695:4;8689;8679:21;8670:30;;8450:268;;;;:::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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:117;5245:1;5242;5235:12;5276:568;5349:8;5359:6;5409:3;5402:4;5394:6;5390:17;5386:27;5376:122;;5417:79;;:::i;:::-;5376:122;5530:6;5517:20;5507:30;;5560:18;5552:6;5549:30;5546:117;;;5582:79;;:::i;:::-;5546:117;5696:4;5688:6;5684:17;5672:29;;5750:3;5742:4;5734:6;5730:17;5720:8;5716:32;5713:41;5710:128;;;5757:79;;:::i;:::-;5710:128;5276:568;;;;;:::o;5850:704::-;5945:6;5953;5961;6010:2;5998:9;5989:7;5985:23;5981:32;5978:119;;;6016:79;;:::i;:::-;5978:119;6136:1;6161:53;6206:7;6197:6;6186:9;6182:22;6161:53;:::i;:::-;6151:63;;6107:117;6291:2;6280:9;6276:18;6263:32;6322:18;6314:6;6311:30;6308:117;;;6344:79;;:::i;:::-;6308:117;6457:80;6529:7;6520:6;6509:9;6505:22;6457:80;:::i;:::-;6439:98;;;;6234:313;5850:704;;;;;:::o;6560:329::-;6619:6;6668:2;6656:9;6647:7;6643:23;6639:32;6636:119;;;6674:79;;:::i;:::-;6636:119;6794:1;6819:53;6864:7;6855:6;6844:9;6840:22;6819:53;:::i;:::-;6809:63;;6765:117;6560:329;;;;:::o;6895:118::-;6982:24;7000:5;6982:24;:::i;:::-;6977:3;6970:37;6895:118;;:::o;7019:222::-;7112:4;7150:2;7139:9;7135:18;7127:26;;7163:71;7231:1;7220:9;7216:17;7207:6;7163:71;:::i;:::-;7019:222;;;;:::o;7247:117::-;7356:1;7353;7346:12;7370:180;7418:77;7415:1;7408:88;7515:4;7512:1;7505:15;7539:4;7536:1;7529:15;7556:281;7639:27;7661:4;7639:27;:::i;:::-;7631:6;7627:40;7769:6;7757:10;7754:22;7733:18;7721:10;7718:34;7715:62;7712:88;;;7780:18;;:::i;:::-;7712:88;7820:10;7816:2;7809:22;7599:238;7556:281;;:::o;7843:129::-;7877:6;7904:20;;:::i;:::-;7894:30;;7933:33;7961:4;7953:6;7933:33;:::i;:::-;7843:129;;;:::o;7978:308::-;8040:4;8130:18;8122:6;8119:30;8116:56;;;8152:18;;:::i;:::-;8116:56;8190:29;8212:6;8190:29;:::i;:::-;8182:37;;8274:4;8268;8264:15;8256:23;;7978:308;;;:::o;8292:146::-;8389:6;8384:3;8379;8366:30;8430:1;8421:6;8416:3;8412:16;8405:27;8292:146;;;:::o;8444:425::-;8522:5;8547:66;8563:49;8605:6;8563:49;:::i;:::-;8547:66;:::i;:::-;8538:75;;8636:6;8629:5;8622:21;8674:4;8667:5;8663:16;8712:3;8703:6;8698:3;8694:16;8691:25;8688:112;;;8719:79;;:::i;:::-;8688:112;8809:54;8856:6;8851:3;8846;8809:54;:::i;:::-;8528:341;8444:425;;;;;:::o;8889:340::-;8945:5;8994:3;8987:4;8979:6;8975:17;8971:27;8961:122;;9002:79;;:::i;:::-;8961:122;9119:6;9106:20;9144:79;9219:3;9211:6;9204:4;9196:6;9192:17;9144:79;:::i;:::-;9135:88;;8951:278;8889:340;;;;:::o;9235:654::-;9313:6;9321;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9524:1;9513:9;9509:17;9496:31;9554:18;9546:6;9543:30;9540:117;;;9576:79;;:::i;:::-;9540:117;9681:63;9736:7;9727:6;9716:9;9712:22;9681:63;:::i;:::-;9671:73;;9467:287;9793:2;9819:53;9864:7;9855:6;9844:9;9840:22;9819:53;:::i;:::-;9809:63;;9764:118;9235:654;;;;;:::o;9895:619::-;9972:6;9980;9988;10037:2;10025:9;10016:7;10012:23;10008:32;10005:119;;;10043:79;;:::i;:::-;10005:119;10163:1;10188:53;10233:7;10224:6;10213:9;10209:22;10188:53;:::i;:::-;10178:63;;10134:117;10290:2;10316:53;10361:7;10352:6;10341:9;10337:22;10316:53;:::i;:::-;10306:63;;10261:118;10418:2;10444:53;10489:7;10480:6;10469:9;10465:22;10444:53;:::i;:::-;10434:63;;10389:118;9895:619;;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:704::-;11130:6;11138;11146;11195:2;11183:9;11174:7;11170:23;11166:32;11163:119;;;11201:79;;:::i;:::-;11163:119;11321:1;11346:53;11391:7;11382:6;11371:9;11367:22;11346:53;:::i;:::-;11336:63;;11292:117;11476:2;11465:9;11461:18;11448:32;11507:18;11499:6;11496:30;11493:117;;;11529:79;;:::i;:::-;11493:117;11642:80;11714:7;11705:6;11694:9;11690:22;11642:80;:::i;:::-;11624:98;;;;11419:313;11035:704;;;;;:::o;11745:474::-;11813:6;11821;11870:2;11858:9;11849:7;11845:23;11841:32;11838:119;;;11876:79;;:::i;:::-;11838:119;11996:1;12021:53;12066:7;12057:6;12046:9;12042:22;12021:53;:::i;:::-;12011:63;;11967:117;12123:2;12149:53;12194:7;12185:6;12174:9;12170:22;12149:53;:::i;:::-;12139:63;;12094:118;11745:474;;;;;:::o;12225:111::-;12277:7;12306:24;12324:5;12306:24;:::i;:::-;12295:35;;12225:111;;;:::o;12342:152::-;12430:39;12463:5;12430:39;:::i;:::-;12423:5;12420:50;12410:78;;12484:1;12481;12474:12;12410:78;12342:152;:::o;12500:169::-;12561:5;12599:6;12586:20;12577:29;;12615:48;12657:5;12615:48;:::i;:::-;12500:169;;;;:::o;12675:504::-;12758:6;12766;12815:2;12803:9;12794:7;12790:23;12786:32;12783:119;;;12821:79;;:::i;:::-;12783:119;12941:1;12966:68;13026:7;13017:6;13006:9;13002:22;12966:68;:::i;:::-;12956:78;;12912:132;13083:2;13109:53;13154:7;13145:6;13134:9;13130:22;13109:53;:::i;:::-;13099:63;;13054:118;12675:504;;;;;:::o;13185:114::-;13252:6;13286:5;13280:12;13270:22;;13185:114;;;:::o;13305:184::-;13404:11;13438:6;13433:3;13426:19;13478:4;13473:3;13469:14;13454:29;;13305:184;;;;:::o;13495:132::-;13562:4;13585:3;13577:11;;13615:4;13610:3;13606:14;13598:22;;13495:132;;;:::o;13633:108::-;13710:24;13728:5;13710:24;:::i;:::-;13705:3;13698:37;13633:108;;:::o;13747:179::-;13816:10;13837:46;13879:3;13871:6;13837:46;:::i;:::-;13915:4;13910:3;13906:14;13892:28;;13747:179;;;;:::o;13932:113::-;14002:4;14034;14029:3;14025:14;14017:22;;13932:113;;;:::o;14081:732::-;14200:3;14229:54;14277:5;14229:54;:::i;:::-;14299:86;14378:6;14373:3;14299:86;:::i;:::-;14292:93;;14409:56;14459:5;14409:56;:::i;:::-;14488:7;14519:1;14504:284;14529:6;14526:1;14523:13;14504:284;;;14605:6;14599:13;14632:63;14691:3;14676:13;14632:63;:::i;:::-;14625:70;;14718:60;14771:6;14718:60;:::i;:::-;14708:70;;14564:224;14551:1;14548;14544:9;14539:14;;14504:284;;;14508:14;14804:3;14797:10;;14205:608;;;14081:732;;;;:::o;14819:373::-;14962:4;15000:2;14989:9;14985:18;14977:26;;15049:9;15043:4;15039:20;15035:1;15024:9;15020:17;15013:47;15077:108;15180:4;15171:6;15077:108;:::i;:::-;15069:116;;14819:373;;;;:::o;15198:116::-;15268:21;15283:5;15268:21;:::i;:::-;15261:5;15258:32;15248:60;;15304:1;15301;15294:12;15248:60;15198:116;:::o;15320:133::-;15363:5;15401:6;15388:20;15379:29;;15417:30;15441:5;15417:30;:::i;:::-;15320:133;;;;:::o;15459:468::-;15524:6;15532;15581:2;15569:9;15560:7;15556:23;15552:32;15549:119;;;15587:79;;:::i;:::-;15549:119;15707:1;15732:53;15777:7;15768:6;15757:9;15753:22;15732:53;:::i;:::-;15722:63;;15678:117;15834:2;15860:50;15902:7;15893:6;15882:9;15878:22;15860:50;:::i;:::-;15850:60;;15805:115;15459:468;;;;;:::o;15933:104::-;15978:7;16007:24;16025:5;16007:24;:::i;:::-;15996:35;;15933:104;;;:::o;16043:142::-;16146:32;16172:5;16146:32;:::i;:::-;16141:3;16134:45;16043:142;;:::o;16191:254::-;16300:4;16338:2;16327:9;16323:18;16315:26;;16351:87;16435:1;16424:9;16420:17;16411:6;16351:87;:::i;:::-;16191:254;;;;:::o;16451:462::-;16513:6;16521;16570:2;16558:9;16549:7;16545:23;16541:32;16538:119;;;16576:79;;:::i;:::-;16538:119;16696:1;16721:50;16763:7;16754:6;16743:9;16739:22;16721:50;:::i;:::-;16711:60;;16667:114;16820:2;16846:50;16888:7;16879:6;16868:9;16864:22;16846:50;:::i;:::-;16836:60;;16791:115;16451:462;;;;;:::o;16919:307::-;16980:4;17070:18;17062:6;17059:30;17056:56;;;17092:18;;:::i;:::-;17056:56;17130:29;17152:6;17130:29;:::i;:::-;17122:37;;17214:4;17208;17204:15;17196:23;;16919:307;;;:::o;17232:423::-;17309:5;17334:65;17350:48;17391:6;17350:48;:::i;:::-;17334:65;:::i;:::-;17325:74;;17422:6;17415:5;17408:21;17460:4;17453:5;17449:16;17498:3;17489:6;17484:3;17480:16;17477:25;17474:112;;;17505:79;;:::i;:::-;17474:112;17595:54;17642:6;17637:3;17632;17595:54;:::i;:::-;17315:340;17232:423;;;;;:::o;17674:338::-;17729:5;17778:3;17771:4;17763:6;17759:17;17755:27;17745:122;;17786:79;;:::i;:::-;17745:122;17903:6;17890:20;17928:78;18002:3;17994:6;17987:4;17979:6;17975:17;17928:78;:::i;:::-;17919:87;;17735:277;17674:338;;;;:::o;18018:943::-;18113:6;18121;18129;18137;18186:3;18174:9;18165:7;18161:23;18157:33;18154:120;;;18193:79;;:::i;:::-;18154:120;18313:1;18338:53;18383:7;18374:6;18363:9;18359:22;18338:53;:::i;:::-;18328:63;;18284:117;18440:2;18466:53;18511:7;18502:6;18491:9;18487:22;18466:53;:::i;:::-;18456:63;;18411:118;18568:2;18594:53;18639:7;18630:6;18619:9;18615:22;18594:53;:::i;:::-;18584:63;;18539:118;18724:2;18713:9;18709:18;18696:32;18755:18;18747:6;18744:30;18741:117;;;18777:79;;:::i;:::-;18741:117;18882:62;18936:7;18927:6;18916:9;18912:22;18882:62;:::i;:::-;18872:72;;18667:287;18018:943;;;;;;;:::o;18967:77::-;19004:7;19033:5;19022:16;;18967:77;;;:::o;19050:122::-;19123:24;19141:5;19123:24;:::i;:::-;19116:5;19113:35;19103:63;;19162:1;19159;19152:12;19103:63;19050:122;:::o;19178:139::-;19224:5;19262:6;19249:20;19240:29;;19278:33;19305:5;19278:33;:::i;:::-;19178:139;;;;:::o;19323:329::-;19382:6;19431:2;19419:9;19410:7;19406:23;19402:32;19399:119;;;19437:79;;:::i;:::-;19399:119;19557:1;19582:53;19627:7;19618:6;19607:9;19603:22;19582:53;:::i;:::-;19572:63;;19528:117;19323:329;;;;:::o;19658:474::-;19726:6;19734;19783:2;19771:9;19762:7;19758:23;19754:32;19751:119;;;19789:79;;:::i;:::-;19751:119;19909:1;19934:53;19979:7;19970:6;19959:9;19955:22;19934:53;:::i;:::-;19924:63;;19880:117;20036:2;20062:53;20107:7;20098:6;20087:9;20083:22;20062:53;:::i;:::-;20052:63;;20007:118;19658:474;;;;;:::o;20138:138::-;20219:32;20245:5;20219:32;:::i;:::-;20212:5;20209:43;20199:71;;20266:1;20263;20256:12;20199:71;20138:138;:::o;20282:155::-;20336:5;20374:6;20361:20;20352:29;;20390:41;20425:5;20390:41;:::i;:::-;20282:155;;;;:::o;20443:345::-;20510:6;20559:2;20547:9;20538:7;20534:23;20530:32;20527:119;;;20565:79;;:::i;:::-;20527:119;20685:1;20710:61;20763:7;20754:6;20743:9;20739:22;20710:61;:::i;:::-;20700:71;;20656:125;20443:345;;;;:::o;20794:118::-;20881:24;20899:5;20881:24;:::i;:::-;20876:3;20869:37;20794:118;;:::o;20918:222::-;21011:4;21049:2;21038:9;21034:18;21026:26;;21062:71;21130:1;21119:9;21115:17;21106:6;21062:71;:::i;:::-;20918:222;;;;:::o;21146:180::-;21194:77;21191:1;21184:88;21291:4;21288:1;21281:15;21315:4;21312:1;21305:15;21332:320;21376:6;21413:1;21407:4;21403:12;21393:22;;21460:1;21454:4;21450:12;21481:18;21471:81;;21537:4;21529:6;21525:17;21515:27;;21471:81;21599:2;21591:6;21588:14;21568:18;21565:38;21562:84;;21618:18;;:::i;:::-;21562:84;21383:269;21332:320;;;:::o;21658:220::-;21798:34;21794:1;21786:6;21782:14;21775:58;21867:3;21862:2;21854:6;21850:15;21843:28;21658:220;:::o;21884:366::-;22026:3;22047:67;22111:2;22106:3;22047:67;:::i;:::-;22040:74;;22123:93;22212:3;22123:93;:::i;:::-;22241:2;22236:3;22232:12;22225:19;;21884:366;;;:::o;22256:419::-;22422:4;22460:2;22449:9;22445:18;22437:26;;22509:9;22503:4;22499:20;22495:1;22484:9;22480:17;22473:47;22537:131;22663:4;22537:131;:::i;:::-;22529:139;;22256:419;;;:::o;22681:249::-;22821:34;22817:1;22809:6;22805:14;22798:58;22890:32;22885:2;22877:6;22873:15;22866:57;22681:249;:::o;22936:366::-;23078:3;23099:67;23163:2;23158:3;23099:67;:::i;:::-;23092:74;;23175:93;23264:3;23175:93;:::i;:::-;23293:2;23288:3;23284:12;23277:19;;22936:366;;;:::o;23308:419::-;23474:4;23512:2;23501:9;23497:18;23489:26;;23561:9;23555:4;23551:20;23547:1;23536:9;23532:17;23525:47;23589:131;23715:4;23589:131;:::i;:::-;23581:139;;23308:419;;;:::o;23733:172::-;23873:24;23869:1;23861:6;23857:14;23850:48;23733:172;:::o;23911:366::-;24053:3;24074:67;24138:2;24133:3;24074:67;:::i;:::-;24067:74;;24150:93;24239:3;24150:93;:::i;:::-;24268:2;24263:3;24259:12;24252:19;;23911:366;;;:::o;24283:419::-;24449:4;24487:2;24476:9;24472:18;24464:26;;24536:9;24530:4;24526:20;24522:1;24511:9;24507:17;24500:47;24564:131;24690:4;24564:131;:::i;:::-;24556:139;;24283:419;;;:::o;24708:166::-;24848:18;24844:1;24836:6;24832:14;24825:42;24708:166;:::o;24880:366::-;25022:3;25043:67;25107:2;25102:3;25043:67;:::i;:::-;25036:74;;25119:93;25208:3;25119:93;:::i;:::-;25237:2;25232:3;25228:12;25221:19;;24880:366;;;:::o;25252:419::-;25418:4;25456:2;25445:9;25441:18;25433:26;;25505:9;25499:4;25495:20;25491:1;25480:9;25476:17;25469:47;25533:131;25659:4;25533:131;:::i;:::-;25525:139;;25252:419;;;:::o;25677:180::-;25725:77;25722:1;25715:88;25822:4;25819:1;25812:15;25846:4;25843:1;25836:15;25863:191;25903:3;25922:20;25940:1;25922:20;:::i;:::-;25917:25;;25956:20;25974:1;25956:20;:::i;:::-;25951:25;;25999:1;25996;25992:9;25985:16;;26020:3;26017:1;26014:10;26011:36;;;26027:18;;:::i;:::-;26011:36;25863:191;;;;:::o;26060:168::-;26200:20;26196:1;26188:6;26184:14;26177:44;26060:168;:::o;26234:366::-;26376:3;26397:67;26461:2;26456:3;26397:67;:::i;:::-;26390:74;;26473:93;26562:3;26473:93;:::i;:::-;26591:2;26586:3;26582:12;26575:19;;26234:366;;;:::o;26606:419::-;26772:4;26810:2;26799:9;26795:18;26787:26;;26859:9;26853:4;26849:20;26845:1;26834:9;26830:17;26823:47;26887:131;27013:4;26887:131;:::i;:::-;26879:139;;26606:419;;;:::o;27031:148::-;27133:11;27170:3;27155:18;;27031:148;;;;:::o;27185:157::-;27325:9;27321:1;27313:6;27309:14;27302:33;27185:157;:::o;27348:400::-;27508:3;27529:84;27611:1;27606:3;27529:84;:::i;:::-;27522:91;;27622:93;27711:3;27622:93;:::i;:::-;27740:1;27735:3;27731:11;27724:18;;27348:400;;;:::o;27754:381::-;27939:3;27961:148;28105:3;27961:148;:::i;:::-;27954:155;;28126:3;28119:10;;27754:381;;;:::o;28141:410::-;28181:7;28204:20;28222:1;28204:20;:::i;:::-;28199:25;;28238:20;28256:1;28238:20;:::i;:::-;28233:25;;28293:1;28290;28286:9;28315:30;28333:11;28315:30;:::i;:::-;28304:41;;28494:1;28485:7;28481:15;28478:1;28475:22;28455:1;28448:9;28428:83;28405:139;;28524:18;;:::i;:::-;28405:139;28189:362;28141:410;;;;:::o;28557:179::-;28697:31;28693:1;28685:6;28681:14;28674:55;28557:179;:::o;28742:366::-;28884:3;28905:67;28969:2;28964:3;28905:67;:::i;:::-;28898:74;;28981:93;29070:3;28981:93;:::i;:::-;29099:2;29094:3;29090:12;29083:19;;28742:366;;;:::o;29114:419::-;29280:4;29318:2;29307:9;29303:18;29295:26;;29367:9;29361:4;29357:20;29353:1;29342:9;29338:17;29331:47;29395:131;29521:4;29395:131;:::i;:::-;29387:139;;29114:419;;;:::o;29539:233::-;29578:3;29601:24;29619:5;29601:24;:::i;:::-;29592:33;;29647:66;29640:5;29637:77;29634:103;;29717:18;;:::i;:::-;29634:103;29764:1;29757:5;29753:13;29746:20;;29539:233;;;:::o;29778:94::-;29811:8;29859:5;29855:2;29851:14;29830:35;;29778:94;;;:::o;29878:::-;29917:7;29946:20;29960:5;29946:20;:::i;:::-;29935:31;;29878:94;;;:::o;29978:100::-;30017:7;30046:26;30066:5;30046:26;:::i;:::-;30035:37;;29978:100;;;:::o;30084:157::-;30189:45;30209:24;30227:5;30209:24;:::i;:::-;30189:45;:::i;:::-;30184:3;30177:58;30084:157;;:::o;30247:256::-;30359:3;30374:75;30445:3;30436:6;30374:75;:::i;:::-;30474:2;30469:3;30465:12;30458:19;;30494:3;30487:10;;30247:256;;;;:::o;30509:390::-;30615:3;30643:39;30676:5;30643:39;:::i;:::-;30698:89;30780:6;30775:3;30698:89;:::i;:::-;30691:96;;30796:65;30854:6;30849:3;30842:4;30835:5;30831:16;30796:65;:::i;:::-;30886:6;30881:3;30877:16;30870:23;;30619:280;30509:390;;;;:::o;30905:275::-;31037:3;31059:95;31150:3;31141:6;31059:95;:::i;:::-;31052:102;;31171:3;31164:10;;30905:275;;;;:::o;31186:233::-;31326:34;31322:1;31314:6;31310:14;31303:58;31395:16;31390:2;31382:6;31378:15;31371:41;31186:233;:::o;31425:366::-;31567:3;31588:67;31652:2;31647:3;31588:67;:::i;:::-;31581:74;;31664:93;31753:3;31664:93;:::i;:::-;31782:2;31777:3;31773:12;31766:19;;31425:366;;;:::o;31797:419::-;31963:4;32001:2;31990:9;31986:18;31978:26;;32050:9;32044:4;32040:20;32036:1;32025:9;32021:17;32014:47;32078:131;32204:4;32078:131;:::i;:::-;32070:139;;31797:419;;;:::o;32222:141::-;32271:4;32294:3;32286:11;;32317:3;32314:1;32307:14;32351:4;32348:1;32338:18;32330:26;;32222:141;;;:::o;32369:93::-;32406:6;32453:2;32448;32441:5;32437:14;32433:23;32423:33;;32369:93;;;:::o;32468:107::-;32512:8;32562:5;32556:4;32552:16;32531:37;;32468:107;;;;:::o;32581:393::-;32650:6;32700:1;32688:10;32684:18;32723:97;32753:66;32742:9;32723:97;:::i;:::-;32841:39;32871:8;32860:9;32841:39;:::i;:::-;32829:51;;32913:4;32909:9;32902:5;32898:21;32889:30;;32962:4;32952:8;32948:19;32941:5;32938:30;32928:40;;32657:317;;32581:393;;;;;:::o;32980:60::-;33008:3;33029:5;33022:12;;32980:60;;;:::o;33046:142::-;33096:9;33129:53;33147:34;33156:24;33174:5;33156:24;:::i;:::-;33147:34;:::i;:::-;33129:53;:::i;:::-;33116:66;;33046:142;;;:::o;33194:75::-;33237:3;33258:5;33251:12;;33194:75;;;:::o;33275:269::-;33385:39;33416:7;33385:39;:::i;:::-;33446:91;33495:41;33519:16;33495:41;:::i;:::-;33487:6;33480:4;33474:11;33446:91;:::i;:::-;33440:4;33433:105;33351:193;33275:269;;;:::o;33550:73::-;33595:3;33550:73;:::o;33629:189::-;33706:32;;:::i;:::-;33747:65;33805:6;33797;33791:4;33747:65;:::i;:::-;33682:136;33629:189;;:::o;33824:186::-;33884:120;33901:3;33894:5;33891:14;33884:120;;;33955:39;33992:1;33985:5;33955:39;:::i;:::-;33928:1;33921:5;33917:13;33908:22;;33884:120;;;33824:186;;:::o;34016:543::-;34117:2;34112:3;34109:11;34106:446;;;34151:38;34183:5;34151:38;:::i;:::-;34235:29;34253:10;34235:29;:::i;:::-;34225:8;34221:44;34418:2;34406:10;34403:18;34400:49;;;34439:8;34424:23;;34400:49;34462:80;34518:22;34536:3;34518:22;:::i;:::-;34508:8;34504:37;34491:11;34462:80;:::i;:::-;34121:431;;34106:446;34016:543;;;:::o;34565:117::-;34619:8;34669:5;34663:4;34659:16;34638:37;;34565:117;;;;:::o;34688:169::-;34732:6;34765:51;34813:1;34809:6;34801:5;34798:1;34794:13;34765:51;:::i;:::-;34761:56;34846:4;34840;34836:15;34826:25;;34739:118;34688:169;;;;:::o;34862:295::-;34938:4;35084:29;35109:3;35103:4;35084:29;:::i;:::-;35076:37;;35146:3;35143:1;35139:11;35133:4;35130:21;35122:29;;34862:295;;;;:::o;35162:1395::-;35279:37;35312:3;35279:37;:::i;:::-;35381:18;35373:6;35370:30;35367:56;;;35403:18;;:::i;:::-;35367:56;35447:38;35479:4;35473:11;35447:38;:::i;:::-;35532:67;35592:6;35584;35578:4;35532:67;:::i;:::-;35626:1;35650:4;35637:17;;35682:2;35674:6;35671:14;35699:1;35694:618;;;;36356:1;36373:6;36370:77;;;36422:9;36417:3;36413:19;36407:26;36398:35;;36370:77;36473:67;36533:6;36526:5;36473:67;:::i;:::-;36467:4;36460:81;36329:222;35664:887;;35694:618;35746:4;35742:9;35734:6;35730:22;35780:37;35812:4;35780:37;:::i;:::-;35839:1;35853:208;35867:7;35864:1;35861:14;35853:208;;;35946:9;35941:3;35937:19;35931:26;35923:6;35916:42;35997:1;35989:6;35985:14;35975:24;;36044:2;36033:9;36029:18;36016:31;;35890:4;35887:1;35883:12;35878:17;;35853:208;;;36089:6;36080:7;36077:19;36074:179;;;36147:9;36142:3;36138:19;36132:26;36190:48;36232:4;36224:6;36220:17;36209:9;36190:48;:::i;:::-;36182:6;36175:64;36097:156;36074:179;36299:1;36295;36287:6;36283:14;36279:22;36273:4;36266:36;35701:611;;;35664:887;;35254:1303;;;35162:1395;;:::o;36563:169::-;36703:21;36699:1;36691:6;36687:14;36680:45;36563:169;:::o;36738:366::-;36880:3;36901:67;36965:2;36960:3;36901:67;:::i;:::-;36894:74;;36977:93;37066:3;36977:93;:::i;:::-;37095:2;37090:3;37086:12;37079:19;;36738:366;;;:::o;37110:419::-;37276:4;37314:2;37303:9;37299:18;37291:26;;37363:9;37357:4;37353:20;37349:1;37338:9;37334:17;37327:47;37391:131;37517:4;37391:131;:::i;:::-;37383:139;;37110:419;;;:::o;37535:174::-;37675:26;37671:1;37663:6;37659:14;37652:50;37535:174;:::o;37715:366::-;37857:3;37878:67;37942:2;37937:3;37878:67;:::i;:::-;37871:74;;37954:93;38043:3;37954:93;:::i;:::-;38072:2;38067:3;38063:12;38056:19;;37715:366;;;:::o;38087:419::-;38253:4;38291:2;38280:9;38276:18;38268:26;;38340:9;38334:4;38330:20;38326:1;38315:9;38311:17;38304:47;38368:131;38494:4;38368:131;:::i;:::-;38360:139;;38087:419;;;:::o;38512:230::-;38652:34;38648:1;38640:6;38636:14;38629:58;38721:13;38716:2;38708:6;38704:15;38697:38;38512:230;:::o;38748:366::-;38890:3;38911:67;38975:2;38970:3;38911:67;:::i;:::-;38904:74;;38987:93;39076:3;38987:93;:::i;:::-;39105:2;39100:3;39096:12;39089:19;;38748:366;;;:::o;39120:419::-;39286:4;39324:2;39313:9;39309:18;39301:26;;39373:9;39367:4;39363:20;39359:1;39348:9;39344:17;39337:47;39401:131;39527:4;39401:131;:::i;:::-;39393:139;;39120:419;;;:::o;39545:172::-;39685:24;39681:1;39673:6;39669:14;39662:48;39545:172;:::o;39723:366::-;39865:3;39886:67;39950:2;39945:3;39886:67;:::i;:::-;39879:74;;39962:93;40051:3;39962:93;:::i;:::-;40080:2;40075:3;40071:12;40064:19;;39723:366;;;:::o;40095:419::-;40261:4;40299:2;40288:9;40284:18;40276:26;;40348:9;40342:4;40338:20;40334:1;40323:9;40319:17;40312:47;40376:131;40502:4;40376:131;:::i;:::-;40368:139;;40095:419;;;:::o;40520:157::-;40660:9;40656:1;40648:6;40644:14;40637:33;40520:157;:::o;40683:400::-;40843:3;40864:84;40946:1;40941:3;40864:84;:::i;:::-;40857:91;;40957:93;41046:3;40957:93;:::i;:::-;41075:1;41070:3;41066:11;41059:18;;40683:400;;;:::o;41089:381::-;41274:3;41296:148;41440:3;41296:148;:::i;:::-;41289:155;;41461:3;41454:10;;41089:381;;;:::o;41476:174::-;41616:26;41612:1;41604:6;41600:14;41593:50;41476:174;:::o;41656:366::-;41798:3;41819:67;41883:2;41878:3;41819:67;:::i;:::-;41812:74;;41895:93;41984:3;41895:93;:::i;:::-;42013:2;42008:3;42004:12;41997:19;;41656:366;;;:::o;42028:419::-;42194:4;42232:2;42221:9;42217:18;42209:26;;42281:9;42275:4;42271:20;42267:1;42256:9;42252:17;42245:47;42309:131;42435:4;42309:131;:::i;:::-;42301:139;;42028:419;;;:::o;42453:228::-;42593:34;42589:1;42581:6;42577:14;42570:58;42662:11;42657:2;42649:6;42645:15;42638:36;42453:228;:::o;42687:366::-;42829:3;42850:67;42914:2;42909:3;42850:67;:::i;:::-;42843:74;;42926:93;43015:3;42926:93;:::i;:::-;43044:2;43039:3;43035:12;43028:19;;42687:366;;;:::o;43059:419::-;43225:4;43263:2;43252:9;43248:18;43240:26;;43312:9;43306:4;43302:20;43298:1;43287:9;43283:17;43276:47;43340:131;43466:4;43340:131;:::i;:::-;43332:139;;43059:419;;;:::o;43484:143::-;43541:5;43572:6;43566:13;43557:22;;43588:33;43615:5;43588:33;:::i;:::-;43484:143;;;;:::o;43633:351::-;43703:6;43752:2;43740:9;43731:7;43727:23;43723:32;43720:119;;;43758:79;;:::i;:::-;43720:119;43878:1;43903:64;43959:7;43950:6;43939:9;43935:22;43903:64;:::i;:::-;43893:74;;43849:128;43633:351;;;;:::o;43990:332::-;44111:4;44149:2;44138:9;44134:18;44126:26;;44162:71;44230:1;44219:9;44215:17;44206:6;44162:71;:::i;:::-;44243:72;44311:2;44300:9;44296:18;44287:6;44243:72;:::i;:::-;43990:332;;;;;:::o;44328:137::-;44382:5;44413:6;44407:13;44398:22;;44429:30;44453:5;44429:30;:::i;:::-;44328:137;;;;:::o;44471:345::-;44538:6;44587:2;44575:9;44566:7;44562:23;44558:32;44555:119;;;44593:79;;:::i;:::-;44555:119;44713:1;44738:61;44791:7;44782:6;44771:9;44767:22;44738:61;:::i;:::-;44728:71;;44684:125;44471:345;;;;:::o;44822:156::-;44962:8;44958:1;44950:6;44946:14;44939:32;44822:156;:::o;44984:400::-;45144:3;45165:84;45247:1;45242:3;45165:84;:::i;:::-;45158:91;;45258:93;45347:3;45258:93;:::i;:::-;45376:1;45371:3;45367:11;45360:18;;44984:400;;;:::o;45390:381::-;45575:3;45597:148;45741:3;45597:148;:::i;:::-;45590:155;;45762:3;45755:10;;45390:381;;;:::o;45777:225::-;45917:34;45913:1;45905:6;45901:14;45894:58;45986:8;45981:2;45973:6;45969:15;45962:33;45777:225;:::o;46008:366::-;46150:3;46171:67;46235:2;46230:3;46171:67;:::i;:::-;46164:74;;46247:93;46336:3;46247:93;:::i;:::-;46365:2;46360:3;46356:12;46349:19;;46008:366;;;:::o;46380:419::-;46546:4;46584:2;46573:9;46569:18;46561:26;;46633:9;46627:4;46623:20;46619:1;46608:9;46604:17;46597:47;46661:131;46787:4;46661:131;:::i;:::-;46653:139;;46380:419;;;:::o;46805:182::-;46945:34;46941:1;46933:6;46929:14;46922:58;46805:182;:::o;46993:366::-;47135:3;47156:67;47220:2;47215:3;47156:67;:::i;:::-;47149:74;;47232:93;47321:3;47232:93;:::i;:::-;47350:2;47345:3;47341:12;47334:19;;46993:366;;;:::o;47365:419::-;47531:4;47569:2;47558:9;47554:18;47546:26;;47618:9;47612:4;47608:20;47604:1;47593:9;47589:17;47582:47;47646:131;47772:4;47646:131;:::i;:::-;47638:139;;47365:419;;;:::o;47790:178::-;47930:30;47926:1;47918:6;47914:14;47907:54;47790:178;:::o;47974:366::-;48116:3;48137:67;48201:2;48196:3;48137:67;:::i;:::-;48130:74;;48213:93;48302:3;48213:93;:::i;:::-;48331:2;48326:3;48322:12;48315:19;;47974:366;;;:::o;48346:419::-;48512:4;48550:2;48539:9;48535:18;48527:26;;48599:9;48593:4;48589:20;48585:1;48574:9;48570:17;48563:47;48627:131;48753:4;48627:131;:::i;:::-;48619:139;;48346:419;;;:::o;48771:182::-;48911:34;48907:1;48899:6;48895:14;48888:58;48771:182;:::o;48959:366::-;49101:3;49122:67;49186:2;49181:3;49122:67;:::i;:::-;49115:74;;49198:93;49287:3;49198:93;:::i;:::-;49316:2;49311:3;49307:12;49300:19;;48959:366;;;:::o;49331:419::-;49497:4;49535:2;49524:9;49520:18;49512:26;;49584:9;49578:4;49574:20;49570:1;49559:9;49555:17;49548:47;49612:131;49738:4;49612:131;:::i;:::-;49604:139;;49331:419;;;:::o;49756:224::-;49896:34;49892:1;49884:6;49880:14;49873:58;49965:7;49960:2;49952:6;49948:15;49941:32;49756:224;:::o;49986:366::-;50128:3;50149:67;50213:2;50208:3;50149:67;:::i;:::-;50142:74;;50225:93;50314:3;50225:93;:::i;:::-;50343:2;50338:3;50334:12;50327:19;;49986:366;;;:::o;50358:419::-;50524:4;50562:2;50551:9;50547:18;50539:26;;50611:9;50605:4;50601:20;50597:1;50586:9;50582:17;50575:47;50639:131;50765:4;50639:131;:::i;:::-;50631:139;;50358:419;;;:::o;50783:223::-;50923:34;50919:1;50911:6;50907:14;50900:58;50992:6;50987:2;50979:6;50975:15;50968:31;50783:223;:::o;51012:366::-;51154:3;51175:67;51239:2;51234:3;51175:67;:::i;:::-;51168:74;;51251:93;51340:3;51251:93;:::i;:::-;51369:2;51364:3;51360:12;51353:19;;51012:366;;;:::o;51384:419::-;51550:4;51588:2;51577:9;51573:18;51565:26;;51637:9;51631:4;51627:20;51623:1;51612:9;51608:17;51601:47;51665:131;51791:4;51665:131;:::i;:::-;51657:139;;51384:419;;;:::o;51809:194::-;51849:4;51869:20;51887:1;51869:20;:::i;:::-;51864:25;;51903:20;51921:1;51903:20;:::i;:::-;51898:25;;51947:1;51944;51940:9;51932:17;;51971:1;51965:4;51962:11;51959:37;;;51976:18;;:::i;:::-;51959:37;51809:194;;;;:::o;52009:175::-;52149:27;52145:1;52137:6;52133:14;52126:51;52009:175;:::o;52190:366::-;52332:3;52353:67;52417:2;52412:3;52353:67;:::i;:::-;52346:74;;52429:93;52518:3;52429:93;:::i;:::-;52547:2;52542:3;52538:12;52531:19;;52190:366;;;:::o;52562:419::-;52728:4;52766:2;52755:9;52751:18;52743:26;;52815:9;52809:4;52805:20;52801:1;52790:9;52786:17;52779:47;52843:131;52969:4;52843:131;:::i;:::-;52835:139;;52562:419;;;:::o;52987:237::-;53127:34;53123:1;53115:6;53111:14;53104:58;53196:20;53191:2;53183:6;53179:15;53172:45;52987:237;:::o;53230:366::-;53372:3;53393:67;53457:2;53452:3;53393:67;:::i;:::-;53386:74;;53469:93;53558:3;53469:93;:::i;:::-;53587:2;53582:3;53578:12;53571:19;;53230:366;;;:::o;53602:419::-;53768:4;53806:2;53795:9;53791:18;53783:26;;53855:9;53849:4;53845:20;53841:1;53830:9;53826:17;53819:47;53883:131;54009:4;53883:131;:::i;:::-;53875:139;;53602:419;;;:::o;54027:435::-;54207:3;54229:95;54320:3;54311:6;54229:95;:::i;:::-;54222:102;;54341:95;54432:3;54423:6;54341:95;:::i;:::-;54334:102;;54453:3;54446:10;;54027:435;;;;;:::o;54468:98::-;54519:6;54553:5;54547:12;54537:22;;54468:98;;;:::o;54572:168::-;54655:11;54689:6;54684:3;54677:19;54729:4;54724:3;54720:14;54705:29;;54572:168;;;;:::o;54746:373::-;54832:3;54860:38;54892:5;54860:38;:::i;:::-;54914:70;54977:6;54972:3;54914:70;:::i;:::-;54907:77;;54993:65;55051:6;55046:3;55039:4;55032:5;55028:16;54993:65;:::i;:::-;55083:29;55105:6;55083:29;:::i;:::-;55078:3;55074:39;55067:46;;54836:283;54746:373;;;;:::o;55125:640::-;55320:4;55358:3;55347:9;55343:19;55335:27;;55372:71;55440:1;55429:9;55425:17;55416:6;55372:71;:::i;:::-;55453:72;55521:2;55510:9;55506:18;55497:6;55453:72;:::i;:::-;55535;55603:2;55592:9;55588:18;55579:6;55535:72;:::i;:::-;55654:9;55648:4;55644:20;55639:2;55628:9;55624:18;55617:48;55682:76;55753:4;55744:6;55682:76;:::i;:::-;55674:84;;55125:640;;;;;;;:::o;55771:141::-;55827:5;55858:6;55852:13;55843:22;;55874:32;55900:5;55874:32;:::i;:::-;55771:141;;;;:::o;55918:349::-;55987:6;56036:2;56024:9;56015:7;56011:23;56007:32;56004:119;;;56042:79;;:::i;:::-;56004:119;56162:1;56187:63;56242:7;56233:6;56222:9;56218:22;56187:63;:::i;:::-;56177:73;;56133:127;55918:349;;;;:::o;56273:180::-;56321:77;56318:1;56311:88;56418:4;56415:1;56408:15;56442:4;56439:1;56432:15;56459:185;56499:1;56516:20;56534:1;56516:20;:::i;:::-;56511:25;;56550:20;56568:1;56550:20;:::i;:::-;56545:25;;56589:1;56579:35;;56594:18;;:::i;:::-;56579:35;56636:1;56633;56629:9;56624:14;;56459:185;;;;:::o;56650:176::-;56682:1;56699:20;56717:1;56699:20;:::i;:::-;56694:25;;56733:20;56751:1;56733:20;:::i;:::-;56728:25;;56772:1;56762:35;;56777:18;;:::i;:::-;56762:35;56818:1;56815;56811:9;56806:14;;56650:176;;;;:::o;56832:180::-;56880:77;56877:1;56870:88;56977:4;56974:1;56967:15;57001:4;56998:1;56991:15
Swarm Source
ipfs://03cd8e132d97bfd9acf94fafab4916779f226c1792fa55ae75a1579775c5c352
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.