Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
21 CGOR
Holders
2
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
20 CGORLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CombatGorillas
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-26 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/COMBAT.sol pragma solidity >=0.8.9 <0.9.0; contract CombatGorillas is ERC721, Ownable, ReentrancyGuard { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; bytes32 public merkleRoot; mapping(address => bool) public whitelistClaimed; mapping(address => uint256) public addressMintedBalance; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost; uint256 public maxSupply; uint256 public maxMintAmountPerTx; uint256 public nftPerAddressLimit = 5; bool public paused = true; bool public whitelistMintEnabled = false; bool public revealed = false; constructor( string memory _tokenName, string memory _tokenSymbol, uint256 _cost, uint256 _maxSupply, uint256 _maxMintAmountPerTx, string memory _hiddenMetadataUri ) ERC721(_tokenName, _tokenSymbol) { cost = _cost; maxSupply = _maxSupply; maxMintAmountPerTx = _maxMintAmountPerTx; setHiddenMetadataUri(_hiddenMetadataUri); } fallback() external payable {} receive() external payable {} modifier mintCompliance(uint256 _mintAmount) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded" ); require( _mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); _; } modifier mintPriceCompliance(uint256 _mintAmount) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function whitelistMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { // Verify whitelist requirements require(whitelistMintEnabled, "The whitelist sale is not enabled!"); require(!whitelistClaimed[msg.sender], "Address already claimed!"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid proof!" ); whitelistClaimed[msg.sender] = true; _mintLoop(msg.sender, _mintAmount); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(!paused, "The contract is paused!"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) external onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while ( ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply ) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, _tokenId.toString(), uriSuffix ) ) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function setWhitelistMintEnabled(bool _state) public onlyOwner { whitelistMintEnabled = _state; } function withdraw() public onlyOwner nonReentrant { uint256 contractBalance = address(this).balance; require(contractBalance > 0, "there is nothing in here"); // marketing wallet- 20% of balance (bool mkt, ) = payable(0x9919D3EC4e39Fc03B99dEBC7d46A0fEDa8EEe1D0).call{value: contractBalance * 20 / 100}(""); require(mkt); // wildlife fund - 5% of balance (bool wf, ) = payable(0xe55dbd4A71Be822be00B33481A99a880D18D716b).call{value: contractBalance * 5 / 100}(""); require(wf); // dev wallet - 75% of balance (bool dev, ) = payable(0x19d0FB6d325d9d29Bc7ef6396F07843290932a76).call{value: address(this).balance }(""); require(dev); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); addressMintedBalance[msg.sender]++; _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260405180602001604052806000815250600c90805190602001906200002b92919062000336565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200007992919062000336565b5060056012556001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055506000601360026101000a81548160ff021916908315150217905550348015620000dd57600080fd5b50604051620057a8380380620057a88339818101604052810190620001039190620005be565b858581600090805190602001906200011d92919062000336565b5080600190805190602001906200013692919062000336565b505050620001596200014d6200019360201b60201c565b6200019b60201b60201c565b600160078190555083600f81905550826010819055508160118190555062000187816200026160201b60201c565b5050505050506200079f565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002716200019360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002976200030c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e79062000718565b60405180910390fd5b80600e90805190602001906200030892919062000336565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003449062000769565b90600052602060002090601f016020900481019282620003685760008555620003b4565b82601f106200038357805160ff1916838001178555620003b4565b82800160010185558215620003b4579182015b82811115620003b357825182559160200191906001019062000396565b5b509050620003c39190620003c7565b5090565b5b80821115620003e2576000816000905550600101620003c8565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200044f8262000404565b810181811067ffffffffffffffff8211171562000471576200047062000415565b5b80604052505050565b600062000486620003e6565b905062000494828262000444565b919050565b600067ffffffffffffffff821115620004b757620004b662000415565b5b620004c28262000404565b9050602081019050919050565b60005b83811015620004ef578082015181840152602081019050620004d2565b83811115620004ff576000848401525b50505050565b60006200051c620005168462000499565b6200047a565b9050828152602081018484840111156200053b576200053a620003ff565b5b62000548848285620004cf565b509392505050565b600082601f830112620005685762000567620003fa565b5b81516200057a84826020860162000505565b91505092915050565b6000819050919050565b620005988162000583565b8114620005a457600080fd5b50565b600081519050620005b8816200058d565b92915050565b60008060008060008060c08789031215620005de57620005dd620003f0565b5b600087015167ffffffffffffffff811115620005ff57620005fe620003f5565b5b6200060d89828a0162000550565b965050602087015167ffffffffffffffff811115620006315762000630620003f5565b5b6200063f89828a0162000550565b95505060406200065289828a01620005a7565b94505060606200066589828a01620005a7565b93505060806200067889828a01620005a7565b92505060a087015167ffffffffffffffff8111156200069c576200069b620003f5565b5b620006aa89828a0162000550565b9150509295509295509295565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000700602083620006b7565b91506200070d82620006c8565b602082019050919050565b600060208201905081810360008301526200073381620006f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200078257607f821691505b602082108114156200079957620007986200073a565b5b50919050565b614ff980620007af6000396000f3fe60806040526004361061026b5760003560e01c806370a0823111610144578063b767a098116100b6578063d5abeb011161007a578063d5abeb01146108f4578063db4bec441461091f578063e0a808531461095c578063e985e9c514610985578063efbd73f4146109c2578063f2fde38b146109eb57610272565b8063b767a0981461081e578063b88d4fde14610847578063ba7d2c7614610870578063c87b56dd1461089b578063d2cab056146108d857610272565b806394354fd01161010857806394354fd01461072f57806395d89b411461075a578063a0712d6814610785578063a22cb465146107a1578063a45ba8e7146107ca578063b071401b146107f557610272565b806370a082311461065e578063715018a61461069b5780637cb64759146106b25780637ec4a659146106db5780638da5cb5b1461070457610272565b80633ccfd60b116101dd57806351830227116101a1578063518302271461054a5780635503a0e8146105755780635c975abb146105a057806362b99ad4146105cb5780636352211e146105f65780636caede3d1461063357610272565b80633ccfd60b1461047b57806342842e0e14610492578063438b6300146104bb57806344a0d68a146104f85780634fdd43cb1461052157610272565b806316ba10e01161022f57806316ba10e01461036d57806316c38b3c1461039657806318160ddd146103bf57806318cae269146103ea57806323b872dd146104275780632eb4a7ab1461045057610272565b806301ffc9a71461027457806306fdde03146102b1578063081812fc146102dc578063095ea7b31461031957806313faede61461034257610272565b3661027257005b005b34801561028057600080fd5b5061029b60048036038101906102969190613564565b610a14565b6040516102a891906135ac565b60405180910390f35b3480156102bd57600080fd5b506102c6610af6565b6040516102d39190613660565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906136b8565b610b88565b6040516103109190613726565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061376d565b610c0d565b005b34801561034e57600080fd5b50610357610d25565b60405161036491906137bc565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f919061390c565b610d2b565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613981565b610dc1565b005b3480156103cb57600080fd5b506103d4610e5a565b6040516103e191906137bc565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906139ae565b610e6b565b60405161041e91906137bc565b60405180910390f35b34801561043357600080fd5b5061044e600480360381019061044991906139db565b610e83565b005b34801561045c57600080fd5b50610465610ee3565b6040516104729190613a47565b60405180910390f35b34801561048757600080fd5b50610490610ee9565b005b34801561049e57600080fd5b506104b960048036038101906104b491906139db565b6111d7565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906139ae565b6111f7565b6040516104ef9190613b20565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a91906136b8565b611302565b005b34801561052d57600080fd5b506105486004803603810190610543919061390c565b611388565b005b34801561055657600080fd5b5061055f61141e565b60405161056c91906135ac565b60405180910390f35b34801561058157600080fd5b5061058a611431565b6040516105979190613660565b60405180910390f35b3480156105ac57600080fd5b506105b56114bf565b6040516105c291906135ac565b60405180910390f35b3480156105d757600080fd5b506105e06114d2565b6040516105ed9190613660565b60405180910390f35b34801561060257600080fd5b5061061d600480360381019061061891906136b8565b611560565b60405161062a9190613726565b60405180910390f35b34801561063f57600080fd5b50610648611612565b60405161065591906135ac565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906139ae565b611625565b60405161069291906137bc565b60405180910390f35b3480156106a757600080fd5b506106b06116dd565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613b6e565b611765565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061390c565b6117eb565b005b34801561071057600080fd5b50610719611881565b6040516107269190613726565b60405180910390f35b34801561073b57600080fd5b506107446118ab565b60405161075191906137bc565b60405180910390f35b34801561076657600080fd5b5061076f6118b1565b60405161077c9190613660565b60405180910390f35b61079f600480360381019061079a91906136b8565b611943565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613b9b565b611b6f565b005b3480156107d657600080fd5b506107df611b85565b6040516107ec9190613660565b60405180910390f35b34801561080157600080fd5b5061081c600480360381019061081791906136b8565b611c13565b005b34801561082a57600080fd5b5061084560048036038101906108409190613981565b611c99565b005b34801561085357600080fd5b5061086e60048036038101906108699190613c7c565b611d32565b005b34801561087c57600080fd5b50610885611d94565b60405161089291906137bc565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd91906136b8565b611d9a565b6040516108cf9190613660565b60405180910390f35b6108f260048036038101906108ed9190613d5f565b611ef3565b005b34801561090057600080fd5b506109096122be565b60405161091691906137bc565b60405180910390f35b34801561092b57600080fd5b50610946600480360381019061094191906139ae565b6122c4565b60405161095391906135ac565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613981565b6122e4565b005b34801561099157600080fd5b506109ac60048036038101906109a79190613dbf565b61237d565b6040516109b991906135ac565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613dff565b612411565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906139ae565b61249b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aef5750610aee82612593565b5b9050919050565b606060008054610b0590613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3190613e6e565b8015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b5050505050905090565b6000610b93826125fd565b610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f12565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1882611560565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090613fa4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ca8612669565b73ffffffffffffffffffffffffffffffffffffffff161480610cd75750610cd681610cd1612669565b61237d565b5b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614036565b60405180910390fd5b610d208383612671565b505050565b600f5481565b610d33612669565b73ffffffffffffffffffffffffffffffffffffffff16610d51611881565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906140a2565b60405180910390fd5b80600d9080519060200190610dbd929190613455565b5050565b610dc9612669565b73ffffffffffffffffffffffffffffffffffffffff16610de7611881565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906140a2565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000610e66600861272a565b905090565b600b6020528060005260406000206000915090505481565b610e94610e8e612669565b82612738565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90614134565b60405180910390fd5b610ede838383612816565b505050565b60095481565b610ef1612669565b73ffffffffffffffffffffffffffffffffffffffff16610f0f611881565b73ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c906140a2565b60405180910390fd5b60026007541415610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906141a0565b60405180910390fd5b6002600781905550600047905060008111610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061420c565b60405180910390fd5b6000739919d3ec4e39fc03b99debc7d46a0feda8eee1d073ffffffffffffffffffffffffffffffffffffffff166064601484611037919061425b565b61104191906142e4565b60405161104d90614346565b60006040518083038185875af1925050503d806000811461108a576040519150601f19603f3d011682016040523d82523d6000602084013e61108f565b606091505b505090508061109d57600080fd5b600073e55dbd4a71be822be00b33481a99a880d18d716b73ffffffffffffffffffffffffffffffffffffffff1660646005856110d9919061425b565b6110e391906142e4565b6040516110ef90614346565b60006040518083038185875af1925050503d806000811461112c576040519150601f19603f3d011682016040523d82523d6000602084013e611131565b606091505b505090508061113f57600080fd5b60007319d0fb6d325d9d29bc7ef6396f07843290932a7673ffffffffffffffffffffffffffffffffffffffff164760405161117990614346565b60006040518083038185875af1925050503d80600081146111b6576040519150601f19603f3d011682016040523d82523d6000602084013e6111bb565b606091505b50509050806111c957600080fd5b505050506001600781905550565b6111f283838360405180602001604052806000815250611d32565b505050565b6060600061120483611625565b905060008167ffffffffffffffff811115611222576112216137e1565b5b6040519080825280602002602001820160405280156112505781602001602082028036833780820191505090505b50905060006001905060005b838110801561126d57506010548211155b156112f657600061127d83611560565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e257828483815181106112c7576112c661435b565b5b60200260200101818152505081806112de9061438a565b9250505b82806112ed9061438a565b9350505061125c565b82945050505050919050565b61130a612669565b73ffffffffffffffffffffffffffffffffffffffff16611328611881565b73ffffffffffffffffffffffffffffffffffffffff161461137e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611375906140a2565b60405180910390fd5b80600f8190555050565b611390612669565b73ffffffffffffffffffffffffffffffffffffffff166113ae611881565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906140a2565b60405180910390fd5b80600e908051906020019061141a929190613455565b5050565b601360029054906101000a900460ff1681565b600d805461143e90613e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461146a90613e6e565b80156114b75780601f1061148c576101008083540402835291602001916114b7565b820191906000526020600020905b81548152906001019060200180831161149a57829003601f168201915b505050505081565b601360009054906101000a900460ff1681565b600c80546114df90613e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461150b90613e6e565b80156115585780601f1061152d57610100808354040283529160200191611558565b820191906000526020600020905b81548152906001019060200180831161153b57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614445565b60405180910390fd5b80915050919050565b601360019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d906144d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e5612669565b73ffffffffffffffffffffffffffffffffffffffff16611703611881565b73ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906140a2565b60405180910390fd5b6117636000612a7d565b565b61176d612669565b73ffffffffffffffffffffffffffffffffffffffff1661178b611881565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906140a2565b60405180910390fd5b8060098190555050565b6117f3612669565b73ffffffffffffffffffffffffffffffffffffffff16611811611881565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906140a2565b60405180910390fd5b80600c908051906020019061187d929190613455565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600180546118c090613e6e565b80601f01602080910402602001604051908101604052809291908181526020018280546118ec90613e6e565b80156119395780601f1061190e57610100808354040283529160200191611939565b820191906000526020600020905b81548152906001019060200180831161191c57829003601f168201915b5050505050905090565b806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601254828261199791906144f7565b11156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614599565b60405180910390fd5b6000821180156119ea57506011548211155b611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614605565b60405180910390fd5b826000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600f54611a7c919061425b565b341015611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590614671565b60405180910390fd5b6012548282611acd91906144f7565b1115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0590614599565b60405180910390fd5b601360009054906101000a900460ff1615611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b55906146dd565b60405180910390fd5b611b683386612b43565b5050505050565b611b81611b7a612669565b8383612bd8565b5050565b600e8054611b9290613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbe90613e6e565b8015611c0b5780601f10611be057610100808354040283529160200191611c0b565b820191906000526020600020905b815481529060010190602001808311611bee57829003601f168201915b505050505081565b611c1b612669565b73ffffffffffffffffffffffffffffffffffffffff16611c39611881565b73ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c86906140a2565b60405180910390fd5b8060118190555050565b611ca1612669565b73ffffffffffffffffffffffffffffffffffffffff16611cbf611881565b73ffffffffffffffffffffffffffffffffffffffff1614611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c906140a2565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b611d43611d3d612669565b83612738565b611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614134565b60405180910390fd5b611d8e84848484612d45565b50505050565b60125481565b6060611da5826125fd565b611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb9061476f565b60405180910390fd5b60001515601360029054906101000a900460ff1615151415611e9257600e8054611e0d90613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3990613e6e565b8015611e865780601f10611e5b57610100808354040283529160200191611e86565b820191906000526020600020905b815481529060010190602001808311611e6957829003601f168201915b50505050509050611eee565b6000611e9c612da1565b90506000815111611ebc5760405180602001604052806000815250611eea565b80611ec684612e33565b600d604051602001611eda9392919061485f565b6040516020818303038152906040525b9150505b919050565b826000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506012548282611f4791906144f7565b1115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614599565b60405180910390fd5b600082118015611f9a57506011548211155b611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090614605565b60405180910390fd5b846000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600f5461202c919061425b565b34101561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614671565b60405180910390fd5b601254828261207d91906144f7565b11156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614599565b60405180910390fd5b601360019054906101000a900460ff1661210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614902565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121919061496e565b60405180910390fd5b6000336040516020016121ad91906149d6565b604051602081830303815290604052805190602001209050612213878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060095483612f94565b612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990614a3d565b60405180910390fd5b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122b43389612b43565b5050505050505050565b60105481565b600a6020528060005260406000206000915054906101000a900460ff1681565b6122ec612669565b73ffffffffffffffffffffffffffffffffffffffff1661230a611881565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906140a2565b60405180910390fd5b80601360026101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612419612669565b73ffffffffffffffffffffffffffffffffffffffff16612437611881565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906140a2565b60405180910390fd5b6124978183612b43565b5050565b6124a3612669565b73ffffffffffffffffffffffffffffffffffffffff166124c1611881565b73ffffffffffffffffffffffffffffffffffffffff1614612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e906140a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90614acf565b60405180910390fd5b61259081612a7d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126e483611560565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612743826125fd565b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614b61565b60405180910390fd5b600061278d83611560565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127fc57508373ffffffffffffffffffffffffffffffffffffffff166127e484610b88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061280d575061280c818561237d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283682611560565b73ffffffffffffffffffffffffffffffffffffffff161461288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614bf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390614c85565b60405180910390fd5b612907838383612fab565b612912600082612671565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129629190614ca5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b991906144f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a78838383612fb0565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612bd357612b586008612fb5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612ba89061438a565b9190505550612bc083612bbb600861272a565b612fcb565b8080612bcb9061438a565b915050612b46565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90614d25565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d3891906135ac565b60405180910390a3505050565b612d50848484612816565b612d5c84848484612fe9565b612d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9290614db7565b60405180910390fd5b50505050565b6060600c8054612db090613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ddc90613e6e565b8015612e295780601f10612dfe57610100808354040283529160200191612e29565b820191906000526020600020905b815481529060010190602001808311612e0c57829003601f168201915b5050505050905090565b60606000821415612e7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f8f565b600082905060005b60008214612ead578080612e969061438a565b915050600a82612ea691906142e4565b9150612e83565b60008167ffffffffffffffff811115612ec957612ec86137e1565b5b6040519080825280601f01601f191660200182016040528015612efb5781602001600182028036833780820191505090505b5090505b60008514612f8857600182612f149190614ca5565b9150600a85612f239190614dd7565b6030612f2f91906144f7565b60f81b818381518110612f4557612f4461435b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8191906142e4565b9450612eff565b8093505050505b919050565b600082612fa18584613171565b1490509392505050565b505050565b505050565b6001816000016000828254019250508190555050565b612fe58282604051806020016040528060008152506131e6565b5050565b600061300a8473ffffffffffffffffffffffffffffffffffffffff16613241565b15613164578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613033612669565b8786866040518563ffffffff1660e01b81526004016130559493929190614e5d565b6020604051808303816000875af192505050801561309157506040513d601f19601f8201168201806040525081019061308e9190614ebe565b60015b613114573d80600081146130c1576040519150601f19603f3d011682016040523d82523d6000602084013e6130c6565b606091505b5060008151141561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310390614db7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613169565b600190505b949350505050565b60008082905060005b84518110156131db5760008582815181106131985761319761435b565b5b602002602001015190508083116131ba576131b38382613264565b92506131c7565b6131c48184613264565b92505b5080806131d39061438a565b91505061317a565b508091505092915050565b6131f0838361327b565b6131fd6000848484612fe9565b61323c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323390614db7565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e290614f37565b60405180910390fd5b6132f4816125fd565b15613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b90614fa3565b60405180910390fd5b61334060008383612fab565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339091906144f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461345160008383612fb0565b5050565b82805461346190613e6e565b90600052602060002090601f01602090048101928261348357600085556134ca565b82601f1061349c57805160ff19168380011785556134ca565b828001600101855582156134ca579182015b828111156134c95782518255916020019190600101906134ae565b5b5090506134d791906134db565b5090565b5b808211156134f45760008160009055506001016134dc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135418161350c565b811461354c57600080fd5b50565b60008135905061355e81613538565b92915050565b60006020828403121561357a57613579613502565b5b60006135888482850161354f565b91505092915050565b60008115159050919050565b6135a681613591565b82525050565b60006020820190506135c1600083018461359d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136015780820151818401526020810190506135e6565b83811115613610576000848401525b50505050565b6000601f19601f8301169050919050565b6000613632826135c7565b61363c81856135d2565b935061364c8185602086016135e3565b61365581613616565b840191505092915050565b6000602082019050818103600083015261367a8184613627565b905092915050565b6000819050919050565b61369581613682565b81146136a057600080fd5b50565b6000813590506136b28161368c565b92915050565b6000602082840312156136ce576136cd613502565b5b60006136dc848285016136a3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613710826136e5565b9050919050565b61372081613705565b82525050565b600060208201905061373b6000830184613717565b92915050565b61374a81613705565b811461375557600080fd5b50565b60008135905061376781613741565b92915050565b6000806040838503121561378457613783613502565b5b600061379285828601613758565b92505060206137a3858286016136a3565b9150509250929050565b6137b681613682565b82525050565b60006020820190506137d160008301846137ad565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61381982613616565b810181811067ffffffffffffffff82111715613838576138376137e1565b5b80604052505050565b600061384b6134f8565b90506138578282613810565b919050565b600067ffffffffffffffff821115613877576138766137e1565b5b61388082613616565b9050602081019050919050565b82818337600083830152505050565b60006138af6138aa8461385c565b613841565b9050828152602081018484840111156138cb576138ca6137dc565b5b6138d684828561388d565b509392505050565b600082601f8301126138f3576138f26137d7565b5b813561390384826020860161389c565b91505092915050565b60006020828403121561392257613921613502565b5b600082013567ffffffffffffffff8111156139405761393f613507565b5b61394c848285016138de565b91505092915050565b61395e81613591565b811461396957600080fd5b50565b60008135905061397b81613955565b92915050565b60006020828403121561399757613996613502565b5b60006139a58482850161396c565b91505092915050565b6000602082840312156139c4576139c3613502565b5b60006139d284828501613758565b91505092915050565b6000806000606084860312156139f4576139f3613502565b5b6000613a0286828701613758565b9350506020613a1386828701613758565b9250506040613a24868287016136a3565b9150509250925092565b6000819050919050565b613a4181613a2e565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9781613682565b82525050565b6000613aa98383613a8e565b60208301905092915050565b6000602082019050919050565b6000613acd82613a62565b613ad78185613a6d565b9350613ae283613a7e565b8060005b83811015613b13578151613afa8882613a9d565b9750613b0583613ab5565b925050600181019050613ae6565b5085935050505092915050565b60006020820190508181036000830152613b3a8184613ac2565b905092915050565b613b4b81613a2e565b8114613b5657600080fd5b50565b600081359050613b6881613b42565b92915050565b600060208284031215613b8457613b83613502565b5b6000613b9284828501613b59565b91505092915050565b60008060408385031215613bb257613bb1613502565b5b6000613bc085828601613758565b9250506020613bd18582860161396c565b9150509250929050565b600067ffffffffffffffff821115613bf657613bf56137e1565b5b613bff82613616565b9050602081019050919050565b6000613c1f613c1a84613bdb565b613841565b905082815260208101848484011115613c3b57613c3a6137dc565b5b613c4684828561388d565b509392505050565b600082601f830112613c6357613c626137d7565b5b8135613c73848260208601613c0c565b91505092915050565b60008060008060808587031215613c9657613c95613502565b5b6000613ca487828801613758565b9450506020613cb587828801613758565b9350506040613cc6878288016136a3565b925050606085013567ffffffffffffffff811115613ce757613ce6613507565b5b613cf387828801613c4e565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112613d1f57613d1e6137d7565b5b8235905067ffffffffffffffff811115613d3c57613d3b613cff565b5b602083019150836020820283011115613d5857613d57613d04565b5b9250929050565b600080600060408486031215613d7857613d77613502565b5b6000613d86868287016136a3565b935050602084013567ffffffffffffffff811115613da757613da6613507565b5b613db386828701613d09565b92509250509250925092565b60008060408385031215613dd657613dd5613502565b5b6000613de485828601613758565b9250506020613df585828601613758565b9150509250929050565b60008060408385031215613e1657613e15613502565b5b6000613e24858286016136a3565b9250506020613e3585828601613758565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8657607f821691505b60208210811415613e9a57613e99613e3f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613efc602c836135d2565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f8e6021836135d2565b9150613f9982613f32565b604082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006140206038836135d2565b915061402b82613fc4565b604082019050919050565b6000602082019050818103600083015261404f81614013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061408c6020836135d2565b915061409782614056565b602082019050919050565b600060208201905081810360008301526140bb8161407f565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061411e6031836135d2565b9150614129826140c2565b604082019050919050565b6000602082019050818103600083015261414d81614111565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061418a601f836135d2565b915061419582614154565b602082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f7468657265206973206e6f7468696e6720696e20686572650000000000000000600082015250565b60006141f66018836135d2565b9150614201826141c0565b602082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061426682613682565b915061427183613682565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142aa576142a961422c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142ef82613682565b91506142fa83613682565b92508261430a576143096142b5565b5b828204905092915050565b600081905092915050565b50565b6000614330600083614315565b915061433b82614320565b600082019050919050565b600061435182614323565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061439582613682565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143c8576143c761422c565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061442f6029836135d2565b915061443a826143d3565b604082019050919050565b6000602082019050818103600083015261445e81614422565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006144c1602a836135d2565b91506144cc82614465565b604082019050919050565b600060208201905081810360008301526144f0816144b4565b9050919050565b600061450282613682565b915061450d83613682565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145425761454161422c565b5b828201905092915050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614583601c836135d2565b915061458e8261454d565b602082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006145ef6014836135d2565b91506145fa826145b9565b602082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b600061465b6013836135d2565b915061466682614625565b602082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b60006146c76017836135d2565b91506146d282614691565b602082019050919050565b600060208201905081810360008301526146f6816146ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614759602f836135d2565b9150614764826146fd565b604082019050919050565b600060208201905081810360008301526147888161474c565b9050919050565b600081905092915050565b60006147a5826135c7565b6147af818561478f565b93506147bf8185602086016135e3565b80840191505092915050565b60008190508160005260206000209050919050565b600081546147ed81613e6e565b6147f7818661478f565b94506001821660008114614812576001811461482357614856565b60ff19831686528186019350614856565b61482c856147cb565b60005b8381101561484e5781548189015260018201915060208101905061482f565b838801955050505b50505092915050565b600061486b828661479a565b9150614877828561479a565b915061488382846147e0565b9150819050949350505050565b7f5468652077686974656c6973742073616c65206973206e6f7420656e61626c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ec6022836135d2565b91506148f782614890565b604082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4164647265737320616c726561647920636c61696d6564210000000000000000600082015250565b60006149586018836135d2565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b60008160601b9050919050565b60006149a68261498e565b9050919050565b60006149b88261499b565b9050919050565b6149d06149cb82613705565b6149ad565b82525050565b60006149e282846149bf565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000614a27600e836135d2565b9150614a32826149f1565b602082019050919050565b60006020820190508181036000830152614a5681614a1a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab96026836135d2565b9150614ac482614a5d565b604082019050919050565b60006020820190508181036000830152614ae881614aac565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b4b602c836135d2565b9150614b5682614aef565b604082019050919050565b60006020820190508181036000830152614b7a81614b3e565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614bdd6025836135d2565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c6f6024836135d2565b9150614c7a82614c13565b604082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b6000614cb082613682565b9150614cbb83613682565b925082821015614cce57614ccd61422c565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614d0f6019836135d2565b9150614d1a82614cd9565b602082019050919050565b60006020820190508181036000830152614d3e81614d02565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614da16032836135d2565b9150614dac82614d45565b604082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b6000614de282613682565b9150614ded83613682565b925082614dfd57614dfc6142b5565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e2f82614e08565b614e398185614e13565b9350614e498185602086016135e3565b614e5281613616565b840191505092915050565b6000608082019050614e726000830187613717565b614e7f6020830186613717565b614e8c60408301856137ad565b8181036060830152614e9e8184614e24565b905095945050505050565b600081519050614eb881613538565b92915050565b600060208284031215614ed457614ed3613502565b5b6000614ee284828501614ea9565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f216020836135d2565b9150614f2c82614eeb565b602082019050919050565b60006020820190508181036000830152614f5081614f14565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f8d601c836135d2565b9150614f9882614f57565b602082019050919050565b60006020820190508181036000830152614fbc81614f80565b905091905056fea2646970667358221220c9223575db2648c45fce51e9c0e27221245218b765b84d5d7d3bcf02ee743eaf64736f6c634300080c003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000f8b0a10e470000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000e436f6d626174476f72696c6c6173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443474f52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d504c623974534b41696b7969546f63396453654850425047556e363457774657513942336f556359466b71340000000000000000000000
Deployed Bytecode
0x60806040526004361061026b5760003560e01c806370a0823111610144578063b767a098116100b6578063d5abeb011161007a578063d5abeb01146108f4578063db4bec441461091f578063e0a808531461095c578063e985e9c514610985578063efbd73f4146109c2578063f2fde38b146109eb57610272565b8063b767a0981461081e578063b88d4fde14610847578063ba7d2c7614610870578063c87b56dd1461089b578063d2cab056146108d857610272565b806394354fd01161010857806394354fd01461072f57806395d89b411461075a578063a0712d6814610785578063a22cb465146107a1578063a45ba8e7146107ca578063b071401b146107f557610272565b806370a082311461065e578063715018a61461069b5780637cb64759146106b25780637ec4a659146106db5780638da5cb5b1461070457610272565b80633ccfd60b116101dd57806351830227116101a1578063518302271461054a5780635503a0e8146105755780635c975abb146105a057806362b99ad4146105cb5780636352211e146105f65780636caede3d1461063357610272565b80633ccfd60b1461047b57806342842e0e14610492578063438b6300146104bb57806344a0d68a146104f85780634fdd43cb1461052157610272565b806316ba10e01161022f57806316ba10e01461036d57806316c38b3c1461039657806318160ddd146103bf57806318cae269146103ea57806323b872dd146104275780632eb4a7ab1461045057610272565b806301ffc9a71461027457806306fdde03146102b1578063081812fc146102dc578063095ea7b31461031957806313faede61461034257610272565b3661027257005b005b34801561028057600080fd5b5061029b60048036038101906102969190613564565b610a14565b6040516102a891906135ac565b60405180910390f35b3480156102bd57600080fd5b506102c6610af6565b6040516102d39190613660565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906136b8565b610b88565b6040516103109190613726565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061376d565b610c0d565b005b34801561034e57600080fd5b50610357610d25565b60405161036491906137bc565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f919061390c565b610d2b565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613981565b610dc1565b005b3480156103cb57600080fd5b506103d4610e5a565b6040516103e191906137bc565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906139ae565b610e6b565b60405161041e91906137bc565b60405180910390f35b34801561043357600080fd5b5061044e600480360381019061044991906139db565b610e83565b005b34801561045c57600080fd5b50610465610ee3565b6040516104729190613a47565b60405180910390f35b34801561048757600080fd5b50610490610ee9565b005b34801561049e57600080fd5b506104b960048036038101906104b491906139db565b6111d7565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906139ae565b6111f7565b6040516104ef9190613b20565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a91906136b8565b611302565b005b34801561052d57600080fd5b506105486004803603810190610543919061390c565b611388565b005b34801561055657600080fd5b5061055f61141e565b60405161056c91906135ac565b60405180910390f35b34801561058157600080fd5b5061058a611431565b6040516105979190613660565b60405180910390f35b3480156105ac57600080fd5b506105b56114bf565b6040516105c291906135ac565b60405180910390f35b3480156105d757600080fd5b506105e06114d2565b6040516105ed9190613660565b60405180910390f35b34801561060257600080fd5b5061061d600480360381019061061891906136b8565b611560565b60405161062a9190613726565b60405180910390f35b34801561063f57600080fd5b50610648611612565b60405161065591906135ac565b60405180910390f35b34801561066a57600080fd5b50610685600480360381019061068091906139ae565b611625565b60405161069291906137bc565b60405180910390f35b3480156106a757600080fd5b506106b06116dd565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613b6e565b611765565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061390c565b6117eb565b005b34801561071057600080fd5b50610719611881565b6040516107269190613726565b60405180910390f35b34801561073b57600080fd5b506107446118ab565b60405161075191906137bc565b60405180910390f35b34801561076657600080fd5b5061076f6118b1565b60405161077c9190613660565b60405180910390f35b61079f600480360381019061079a91906136b8565b611943565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613b9b565b611b6f565b005b3480156107d657600080fd5b506107df611b85565b6040516107ec9190613660565b60405180910390f35b34801561080157600080fd5b5061081c600480360381019061081791906136b8565b611c13565b005b34801561082a57600080fd5b5061084560048036038101906108409190613981565b611c99565b005b34801561085357600080fd5b5061086e60048036038101906108699190613c7c565b611d32565b005b34801561087c57600080fd5b50610885611d94565b60405161089291906137bc565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd91906136b8565b611d9a565b6040516108cf9190613660565b60405180910390f35b6108f260048036038101906108ed9190613d5f565b611ef3565b005b34801561090057600080fd5b506109096122be565b60405161091691906137bc565b60405180910390f35b34801561092b57600080fd5b50610946600480360381019061094191906139ae565b6122c4565b60405161095391906135ac565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190613981565b6122e4565b005b34801561099157600080fd5b506109ac60048036038101906109a79190613dbf565b61237d565b6040516109b991906135ac565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613dff565b612411565b005b3480156109f757600080fd5b50610a126004803603810190610a0d91906139ae565b61249b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aef5750610aee82612593565b5b9050919050565b606060008054610b0590613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3190613e6e565b8015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b5050505050905090565b6000610b93826125fd565b610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613f12565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c1882611560565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090613fa4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ca8612669565b73ffffffffffffffffffffffffffffffffffffffff161480610cd75750610cd681610cd1612669565b61237d565b5b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614036565b60405180910390fd5b610d208383612671565b505050565b600f5481565b610d33612669565b73ffffffffffffffffffffffffffffffffffffffff16610d51611881565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e906140a2565b60405180910390fd5b80600d9080519060200190610dbd929190613455565b5050565b610dc9612669565b73ffffffffffffffffffffffffffffffffffffffff16610de7611881565b73ffffffffffffffffffffffffffffffffffffffff1614610e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e34906140a2565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000610e66600861272a565b905090565b600b6020528060005260406000206000915090505481565b610e94610e8e612669565b82612738565b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90614134565b60405180910390fd5b610ede838383612816565b505050565b60095481565b610ef1612669565b73ffffffffffffffffffffffffffffffffffffffff16610f0f611881565b73ffffffffffffffffffffffffffffffffffffffff1614610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c906140a2565b60405180910390fd5b60026007541415610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906141a0565b60405180910390fd5b6002600781905550600047905060008111610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff29061420c565b60405180910390fd5b6000739919d3ec4e39fc03b99debc7d46a0feda8eee1d073ffffffffffffffffffffffffffffffffffffffff166064601484611037919061425b565b61104191906142e4565b60405161104d90614346565b60006040518083038185875af1925050503d806000811461108a576040519150601f19603f3d011682016040523d82523d6000602084013e61108f565b606091505b505090508061109d57600080fd5b600073e55dbd4a71be822be00b33481a99a880d18d716b73ffffffffffffffffffffffffffffffffffffffff1660646005856110d9919061425b565b6110e391906142e4565b6040516110ef90614346565b60006040518083038185875af1925050503d806000811461112c576040519150601f19603f3d011682016040523d82523d6000602084013e611131565b606091505b505090508061113f57600080fd5b60007319d0fb6d325d9d29bc7ef6396f07843290932a7673ffffffffffffffffffffffffffffffffffffffff164760405161117990614346565b60006040518083038185875af1925050503d80600081146111b6576040519150601f19603f3d011682016040523d82523d6000602084013e6111bb565b606091505b50509050806111c957600080fd5b505050506001600781905550565b6111f283838360405180602001604052806000815250611d32565b505050565b6060600061120483611625565b905060008167ffffffffffffffff811115611222576112216137e1565b5b6040519080825280602002602001820160405280156112505781602001602082028036833780820191505090505b50905060006001905060005b838110801561126d57506010548211155b156112f657600061127d83611560565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e257828483815181106112c7576112c661435b565b5b60200260200101818152505081806112de9061438a565b9250505b82806112ed9061438a565b9350505061125c565b82945050505050919050565b61130a612669565b73ffffffffffffffffffffffffffffffffffffffff16611328611881565b73ffffffffffffffffffffffffffffffffffffffff161461137e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611375906140a2565b60405180910390fd5b80600f8190555050565b611390612669565b73ffffffffffffffffffffffffffffffffffffffff166113ae611881565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb906140a2565b60405180910390fd5b80600e908051906020019061141a929190613455565b5050565b601360029054906101000a900460ff1681565b600d805461143e90613e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461146a90613e6e565b80156114b75780601f1061148c576101008083540402835291602001916114b7565b820191906000526020600020905b81548152906001019060200180831161149a57829003601f168201915b505050505081565b601360009054906101000a900460ff1681565b600c80546114df90613e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461150b90613e6e565b80156115585780601f1061152d57610100808354040283529160200191611558565b820191906000526020600020905b81548152906001019060200180831161153b57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614445565b60405180910390fd5b80915050919050565b601360019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d906144d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e5612669565b73ffffffffffffffffffffffffffffffffffffffff16611703611881565b73ffffffffffffffffffffffffffffffffffffffff1614611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906140a2565b60405180910390fd5b6117636000612a7d565b565b61176d612669565b73ffffffffffffffffffffffffffffffffffffffff1661178b611881565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906140a2565b60405180910390fd5b8060098190555050565b6117f3612669565b73ffffffffffffffffffffffffffffffffffffffff16611811611881565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906140a2565b60405180910390fd5b80600c908051906020019061187d929190613455565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600180546118c090613e6e565b80601f01602080910402602001604051908101604052809291908181526020018280546118ec90613e6e565b80156119395780601f1061190e57610100808354040283529160200191611939565b820191906000526020600020905b81548152906001019060200180831161191c57829003601f168201915b5050505050905090565b806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601254828261199791906144f7565b11156119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614599565b60405180910390fd5b6000821180156119ea57506011548211155b611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614605565b60405180910390fd5b826000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600f54611a7c919061425b565b341015611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590614671565b60405180910390fd5b6012548282611acd91906144f7565b1115611b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0590614599565b60405180910390fd5b601360009054906101000a900460ff1615611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b55906146dd565b60405180910390fd5b611b683386612b43565b5050505050565b611b81611b7a612669565b8383612bd8565b5050565b600e8054611b9290613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbe90613e6e565b8015611c0b5780601f10611be057610100808354040283529160200191611c0b565b820191906000526020600020905b815481529060010190602001808311611bee57829003601f168201915b505050505081565b611c1b612669565b73ffffffffffffffffffffffffffffffffffffffff16611c39611881565b73ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c86906140a2565b60405180910390fd5b8060118190555050565b611ca1612669565b73ffffffffffffffffffffffffffffffffffffffff16611cbf611881565b73ffffffffffffffffffffffffffffffffffffffff1614611d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0c906140a2565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b611d43611d3d612669565b83612738565b611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990614134565b60405180910390fd5b611d8e84848484612d45565b50505050565b60125481565b6060611da5826125fd565b611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb9061476f565b60405180910390fd5b60001515601360029054906101000a900460ff1615151415611e9257600e8054611e0d90613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3990613e6e565b8015611e865780601f10611e5b57610100808354040283529160200191611e86565b820191906000526020600020905b815481529060010190602001808311611e6957829003601f168201915b50505050509050611eee565b6000611e9c612da1565b90506000815111611ebc5760405180602001604052806000815250611eea565b80611ec684612e33565b600d604051602001611eda9392919061485f565b6040516020818303038152906040525b9150505b919050565b826000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506012548282611f4791906144f7565b1115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614599565b60405180910390fd5b600082118015611f9a57506011548211155b611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090614605565b60405180910390fd5b846000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600f5461202c919061425b565b34101561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614671565b60405180910390fd5b601254828261207d91906144f7565b11156120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614599565b60405180910390fd5b601360019054906101000a900460ff1661210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614902565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561219a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121919061496e565b60405180910390fd5b6000336040516020016121ad91906149d6565b604051602081830303815290604052805190602001209050612213878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060095483612f94565b612252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224990614a3d565b60405180910390fd5b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506122b43389612b43565b5050505050505050565b60105481565b600a6020528060005260406000206000915054906101000a900460ff1681565b6122ec612669565b73ffffffffffffffffffffffffffffffffffffffff1661230a611881565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906140a2565b60405180910390fd5b80601360026101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612419612669565b73ffffffffffffffffffffffffffffffffffffffff16612437611881565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612484906140a2565b60405180910390fd5b6124978183612b43565b5050565b6124a3612669565b73ffffffffffffffffffffffffffffffffffffffff166124c1611881565b73ffffffffffffffffffffffffffffffffffffffff1614612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e906140a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90614acf565b60405180910390fd5b61259081612a7d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126e483611560565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612743826125fd565b612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614b61565b60405180910390fd5b600061278d83611560565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127fc57508373ffffffffffffffffffffffffffffffffffffffff166127e484610b88565b73ffffffffffffffffffffffffffffffffffffffff16145b8061280d575061280c818561237d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661283682611560565b73ffffffffffffffffffffffffffffffffffffffff161461288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614bf3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f390614c85565b60405180910390fd5b612907838383612fab565b612912600082612671565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129629190614ca5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b991906144f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a78838383612fb0565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612bd357612b586008612fb5565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612ba89061438a565b9190505550612bc083612bbb600861272a565b612fcb565b8080612bcb9061438a565b915050612b46565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e90614d25565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d3891906135ac565b60405180910390a3505050565b612d50848484612816565b612d5c84848484612fe9565b612d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9290614db7565b60405180910390fd5b50505050565b6060600c8054612db090613e6e565b80601f0160208091040260200160405190810160405280929190818152602001828054612ddc90613e6e565b8015612e295780601f10612dfe57610100808354040283529160200191612e29565b820191906000526020600020905b815481529060010190602001808311612e0c57829003601f168201915b5050505050905090565b60606000821415612e7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f8f565b600082905060005b60008214612ead578080612e969061438a565b915050600a82612ea691906142e4565b9150612e83565b60008167ffffffffffffffff811115612ec957612ec86137e1565b5b6040519080825280601f01601f191660200182016040528015612efb5781602001600182028036833780820191505090505b5090505b60008514612f8857600182612f149190614ca5565b9150600a85612f239190614dd7565b6030612f2f91906144f7565b60f81b818381518110612f4557612f4461435b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8191906142e4565b9450612eff565b8093505050505b919050565b600082612fa18584613171565b1490509392505050565b505050565b505050565b6001816000016000828254019250508190555050565b612fe58282604051806020016040528060008152506131e6565b5050565b600061300a8473ffffffffffffffffffffffffffffffffffffffff16613241565b15613164578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613033612669565b8786866040518563ffffffff1660e01b81526004016130559493929190614e5d565b6020604051808303816000875af192505050801561309157506040513d601f19601f8201168201806040525081019061308e9190614ebe565b60015b613114573d80600081146130c1576040519150601f19603f3d011682016040523d82523d6000602084013e6130c6565b606091505b5060008151141561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310390614db7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613169565b600190505b949350505050565b60008082905060005b84518110156131db5760008582815181106131985761319761435b565b5b602002602001015190508083116131ba576131b38382613264565b92506131c7565b6131c48184613264565b92505b5080806131d39061438a565b91505061317a565b508091505092915050565b6131f0838361327b565b6131fd6000848484612fe9565b61323c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323390614db7565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e290614f37565b60405180910390fd5b6132f4816125fd565b15613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b90614fa3565b60405180910390fd5b61334060008383612fab565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339091906144f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461345160008383612fb0565b5050565b82805461346190613e6e565b90600052602060002090601f01602090048101928261348357600085556134ca565b82601f1061349c57805160ff19168380011785556134ca565b828001600101855582156134ca579182015b828111156134c95782518255916020019190600101906134ae565b5b5090506134d791906134db565b5090565b5b808211156134f45760008160009055506001016134dc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135418161350c565b811461354c57600080fd5b50565b60008135905061355e81613538565b92915050565b60006020828403121561357a57613579613502565b5b60006135888482850161354f565b91505092915050565b60008115159050919050565b6135a681613591565b82525050565b60006020820190506135c1600083018461359d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136015780820151818401526020810190506135e6565b83811115613610576000848401525b50505050565b6000601f19601f8301169050919050565b6000613632826135c7565b61363c81856135d2565b935061364c8185602086016135e3565b61365581613616565b840191505092915050565b6000602082019050818103600083015261367a8184613627565b905092915050565b6000819050919050565b61369581613682565b81146136a057600080fd5b50565b6000813590506136b28161368c565b92915050565b6000602082840312156136ce576136cd613502565b5b60006136dc848285016136a3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613710826136e5565b9050919050565b61372081613705565b82525050565b600060208201905061373b6000830184613717565b92915050565b61374a81613705565b811461375557600080fd5b50565b60008135905061376781613741565b92915050565b6000806040838503121561378457613783613502565b5b600061379285828601613758565b92505060206137a3858286016136a3565b9150509250929050565b6137b681613682565b82525050565b60006020820190506137d160008301846137ad565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61381982613616565b810181811067ffffffffffffffff82111715613838576138376137e1565b5b80604052505050565b600061384b6134f8565b90506138578282613810565b919050565b600067ffffffffffffffff821115613877576138766137e1565b5b61388082613616565b9050602081019050919050565b82818337600083830152505050565b60006138af6138aa8461385c565b613841565b9050828152602081018484840111156138cb576138ca6137dc565b5b6138d684828561388d565b509392505050565b600082601f8301126138f3576138f26137d7565b5b813561390384826020860161389c565b91505092915050565b60006020828403121561392257613921613502565b5b600082013567ffffffffffffffff8111156139405761393f613507565b5b61394c848285016138de565b91505092915050565b61395e81613591565b811461396957600080fd5b50565b60008135905061397b81613955565b92915050565b60006020828403121561399757613996613502565b5b60006139a58482850161396c565b91505092915050565b6000602082840312156139c4576139c3613502565b5b60006139d284828501613758565b91505092915050565b6000806000606084860312156139f4576139f3613502565b5b6000613a0286828701613758565b9350506020613a1386828701613758565b9250506040613a24868287016136a3565b9150509250925092565b6000819050919050565b613a4181613a2e565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a9781613682565b82525050565b6000613aa98383613a8e565b60208301905092915050565b6000602082019050919050565b6000613acd82613a62565b613ad78185613a6d565b9350613ae283613a7e565b8060005b83811015613b13578151613afa8882613a9d565b9750613b0583613ab5565b925050600181019050613ae6565b5085935050505092915050565b60006020820190508181036000830152613b3a8184613ac2565b905092915050565b613b4b81613a2e565b8114613b5657600080fd5b50565b600081359050613b6881613b42565b92915050565b600060208284031215613b8457613b83613502565b5b6000613b9284828501613b59565b91505092915050565b60008060408385031215613bb257613bb1613502565b5b6000613bc085828601613758565b9250506020613bd18582860161396c565b9150509250929050565b600067ffffffffffffffff821115613bf657613bf56137e1565b5b613bff82613616565b9050602081019050919050565b6000613c1f613c1a84613bdb565b613841565b905082815260208101848484011115613c3b57613c3a6137dc565b5b613c4684828561388d565b509392505050565b600082601f830112613c6357613c626137d7565b5b8135613c73848260208601613c0c565b91505092915050565b60008060008060808587031215613c9657613c95613502565b5b6000613ca487828801613758565b9450506020613cb587828801613758565b9350506040613cc6878288016136a3565b925050606085013567ffffffffffffffff811115613ce757613ce6613507565b5b613cf387828801613c4e565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112613d1f57613d1e6137d7565b5b8235905067ffffffffffffffff811115613d3c57613d3b613cff565b5b602083019150836020820283011115613d5857613d57613d04565b5b9250929050565b600080600060408486031215613d7857613d77613502565b5b6000613d86868287016136a3565b935050602084013567ffffffffffffffff811115613da757613da6613507565b5b613db386828701613d09565b92509250509250925092565b60008060408385031215613dd657613dd5613502565b5b6000613de485828601613758565b9250506020613df585828601613758565b9150509250929050565b60008060408385031215613e1657613e15613502565b5b6000613e24858286016136a3565b9250506020613e3585828601613758565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e8657607f821691505b60208210811415613e9a57613e99613e3f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613efc602c836135d2565b9150613f0782613ea0565b604082019050919050565b60006020820190508181036000830152613f2b81613eef565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f8e6021836135d2565b9150613f9982613f32565b604082019050919050565b60006020820190508181036000830152613fbd81613f81565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006140206038836135d2565b915061402b82613fc4565b604082019050919050565b6000602082019050818103600083015261404f81614013565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061408c6020836135d2565b915061409782614056565b602082019050919050565b600060208201905081810360008301526140bb8161407f565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061411e6031836135d2565b9150614129826140c2565b604082019050919050565b6000602082019050818103600083015261414d81614111565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061418a601f836135d2565b915061419582614154565b602082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f7468657265206973206e6f7468696e6720696e20686572650000000000000000600082015250565b60006141f66018836135d2565b9150614201826141c0565b602082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061426682613682565b915061427183613682565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142aa576142a961422c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142ef82613682565b91506142fa83613682565b92508261430a576143096142b5565b5b828204905092915050565b600081905092915050565b50565b6000614330600083614315565b915061433b82614320565b600082019050919050565b600061435182614323565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061439582613682565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143c8576143c761422c565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061442f6029836135d2565b915061443a826143d3565b604082019050919050565b6000602082019050818103600083015261445e81614422565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006144c1602a836135d2565b91506144cc82614465565b604082019050919050565b600060208201905081810360008301526144f0816144b4565b9050919050565b600061450282613682565b915061450d83613682565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145425761454161422c565b5b828201905092915050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614583601c836135d2565b915061458e8261454d565b602082019050919050565b600060208201905081810360008301526145b281614576565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006145ef6014836135d2565b91506145fa826145b9565b602082019050919050565b6000602082019050818103600083015261461e816145e2565b9050919050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b600061465b6013836135d2565b915061466682614625565b602082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b60006146c76017836135d2565b91506146d282614691565b602082019050919050565b600060208201905081810360008301526146f6816146ba565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614759602f836135d2565b9150614764826146fd565b604082019050919050565b600060208201905081810360008301526147888161474c565b9050919050565b600081905092915050565b60006147a5826135c7565b6147af818561478f565b93506147bf8185602086016135e3565b80840191505092915050565b60008190508160005260206000209050919050565b600081546147ed81613e6e565b6147f7818661478f565b94506001821660008114614812576001811461482357614856565b60ff19831686528186019350614856565b61482c856147cb565b60005b8381101561484e5781548189015260018201915060208101905061482f565b838801955050505b50505092915050565b600061486b828661479a565b9150614877828561479a565b915061488382846147e0565b9150819050949350505050565b7f5468652077686974656c6973742073616c65206973206e6f7420656e61626c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b60006148ec6022836135d2565b91506148f782614890565b604082019050919050565b6000602082019050818103600083015261491b816148df565b9050919050565b7f4164647265737320616c726561647920636c61696d6564210000000000000000600082015250565b60006149586018836135d2565b915061496382614922565b602082019050919050565b600060208201905081810360008301526149878161494b565b9050919050565b60008160601b9050919050565b60006149a68261498e565b9050919050565b60006149b88261499b565b9050919050565b6149d06149cb82613705565b6149ad565b82525050565b60006149e282846149bf565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000614a27600e836135d2565b9150614a32826149f1565b602082019050919050565b60006020820190508181036000830152614a5681614a1a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ab96026836135d2565b9150614ac482614a5d565b604082019050919050565b60006020820190508181036000830152614ae881614aac565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b4b602c836135d2565b9150614b5682614aef565b604082019050919050565b60006020820190508181036000830152614b7a81614b3e565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614bdd6025836135d2565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c6f6024836135d2565b9150614c7a82614c13565b604082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b6000614cb082613682565b9150614cbb83613682565b925082821015614cce57614ccd61422c565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614d0f6019836135d2565b9150614d1a82614cd9565b602082019050919050565b60006020820190508181036000830152614d3e81614d02565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614da16032836135d2565b9150614dac82614d45565b604082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b6000614de282613682565b9150614ded83613682565b925082614dfd57614dfc6142b5565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614e2f82614e08565b614e398185614e13565b9350614e498185602086016135e3565b614e5281613616565b840191505092915050565b6000608082019050614e726000830187613717565b614e7f6020830186613717565b614e8c60408301856137ad565b8181036060830152614e9e8184614e24565b905095945050505050565b600081519050614eb881613538565b92915050565b600060208284031215614ed457614ed3613502565b5b6000614ee284828501614ea9565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614f216020836135d2565b9150614f2c82614eeb565b602082019050919050565b60006020820190508181036000830152614f5081614f14565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f8d601c836135d2565b9150614f9882614f57565b602082019050919050565b60006020820190508181036000830152614fbc81614f80565b905091905056fea2646970667358221220c9223575db2648c45fce51e9c0e27221245218b765b84d5d7d3bcf02ee743eaf64736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000f8b0a10e470000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000e436f6d626174476f72696c6c6173000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443474f52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d504c623974534b41696b7969546f63396453654850425047556e363457774657513942336f556359466b71340000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): CombatGorillas
Arg [1] : _tokenSymbol (string): CGOR
Arg [2] : _cost (uint256): 70000000000000000
Arg [3] : _maxSupply (uint256): 10000
Arg [4] : _maxMintAmountPerTx (uint256): 3
Arg [5] : _hiddenMetadataUri (string): ipfs://QmPLb9tSKAikyiToc9dSeHPBPGUn64WwFWQ9B3oUcYFkq4
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000000000000f8b0a10e470000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [7] : 436f6d626174476f72696c6c6173000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 43474f5200000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [11] : 697066733a2f2f516d504c623974534b41696b7969546f633964536548504250
Arg [12] : 47556e363457774657513942336f556359466b71340000000000000000000000
Deployed Bytecode Sourcemap
43918:6813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30722:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31667:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33226:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32749:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44365:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49150:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49264:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45811:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44188:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33976:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44101:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49586:739;;;;;;;;;;;;;:::i;:::-;;34386:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47037:737;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48612:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48867:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44585:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44285:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44506:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44250:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31361:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44538:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31091:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11343:103;;;;;;;;;;;;;:::i;:::-;;49355:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49036:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10692:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44422:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31836:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46604:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33519:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44325:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48700:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49467:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34642:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44462:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47782:727;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45914:682;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44391:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48517:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33745:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46871:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11601:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30722:305;30824:4;30876:25;30861:40;;;:11;:40;;;;:105;;;;30933:33;30918:48;;;:11;:48;;;;30861:105;:158;;;;30983:36;31007:11;30983:23;:36::i;:::-;30861:158;30841:178;;30722:305;;;:::o;31667:100::-;31721:13;31754:5;31747:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31667:100;:::o;33226:221::-;33302:7;33330:16;33338:7;33330;:16::i;:::-;33322:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33415:15;:24;33431:7;33415:24;;;;;;;;;;;;;;;;;;;;;33408:31;;33226:221;;;:::o;32749:411::-;32830:13;32846:23;32861:7;32846:14;:23::i;:::-;32830:39;;32894:5;32888:11;;:2;:11;;;;32880:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32988:5;32972:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32997:37;33014:5;33021:12;:10;:12::i;:::-;32997:16;:37::i;:::-;32972:62;32950:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33131:21;33140:2;33144:7;33131:8;:21::i;:::-;32819:341;32749:411;;:::o;44365:19::-;;;;:::o;49150:106::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49238:10:::1;49226:9;:22;;;;;;;;;;;;:::i;:::-;;49150:106:::0;:::o;49264:83::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49333:6:::1;49324;;:15;;;;;;;;;;;;;;;;;;49264:83:::0;:::o;45811:95::-;45855:7;45882:16;:6;:14;:16::i;:::-;45875:23;;45811:95;:::o;44188:55::-;;;;;;;;;;;;;;;;;:::o;33976:339::-;34171:41;34190:12;:10;:12::i;:::-;34204:7;34171:18;:41::i;:::-;34163:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34279:28;34289:4;34295:2;34299:7;34279:9;:28::i;:::-;33976:339;;;:::o;44101:25::-;;;;:::o;49586:739::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;49644:23:::2;49670:21;49644:47;;49725:1;49707:15;:19;49699:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49813:8;49835:42;49827:56;;49915:3;49909:2;49891:15;:20;;;;:::i;:::-;:27;;;;:::i;:::-;49827:96;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49812:111;;;49942:3;49934:12;;;::::0;::::2;;49999:7;50020:42;50012:56;;50099:3;50094:1;50076:15;:19;;;;:::i;:::-;:26;;;;:::i;:::-;50012:95;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49998:109;;;50127:2;50119:11;;;::::0;::::2;;50187:8;50209:42;50201:56;;50265:21;50201:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50186:106;;;50311:3;50303:12;;;::::0;::::2;;49636:689;;;;1768:1:::1;2722:7;:22;;;;49586:739::o:0;34386:185::-;34524:39;34541:4;34547:2;34551:7;34524:39;;;;;;;;;;;;:16;:39::i;:::-;34386:185;;;:::o;47037:737::-;47124:16;47158:23;47184:17;47194:6;47184:9;:17::i;:::-;47158:43;;47212:30;47259:15;47245:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47212:63;;47286:22;47311:1;47286:26;;47323:23;47363:373;47402:15;47384;:33;:64;;;;;47439:9;;47421:14;:27;;47384:64;47363:373;;;47475:25;47503:23;47511:14;47503:7;:23::i;:::-;47475:51;;47568:6;47547:27;;:17;:27;;;47543:151;;;47628:14;47595:13;47609:15;47595:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;47661:17;;;;;:::i;:::-;;;;47543:151;47708:16;;;;;:::i;:::-;;;;47460:276;47363:373;;;47753:13;47746:20;;;;;;47037:737;;;:::o;48612:80::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48679:5:::1;48672:4;:12;;;;48612:80:::0;:::o;48867:161::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49002:18:::1;48982:17;:38;;;;;;;;;;;;:::i;:::-;;48867:161:::0;:::o;44585:28::-;;;;;;;;;;;;;:::o;44285:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44506:25::-;;;;;;;;;;;;;:::o;44250:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31361:239::-;31433:7;31453:13;31469:7;:16;31477:7;31469:16;;;;;;;;;;;;;;;;;;;;;31453:32;;31521:1;31504:19;;:5;:19;;;;31496:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31587:5;31580:12;;;31361:239;;;:::o;44538:40::-;;;;;;;;;;;;;:::o;31091:208::-;31163:7;31208:1;31191:19;;:5;:19;;;;31183:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31275:9;:16;31285:5;31275:16;;;;;;;;;;;;;;;;31268:23;;31091:208;;;:::o;11343:103::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11408:30:::1;11435:1;11408:18;:30::i;:::-;11343:103::o:0;49355:104::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49440:11:::1;49427:10;:24;;;;49355:104:::0;:::o;49036:106::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49124:10:::1;49112:9;:22;;;;;;;;;;;;:::i;:::-;;49036:106:::0;:::o;10692:87::-;10738:7;10765:6;;;;;;;;;;;10758:13;;10692:87;:::o;44422:33::-;;;;:::o;31836:104::-;31892:13;31925:7;31918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31836:104;:::o;46604:259::-;46696:11;45190:24;45217:20;:32;45238:10;45217:32;;;;;;;;;;;;;;;;45190:59;;45304:18;;45289:11;45270:16;:30;;;;:::i;:::-;:52;;45262:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45392:1;45378:11;:15;:52;;;;;45412:18;;45397:11;:33;;45378:52;45369:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46738:11:::1;45546:24;45573:20;:32;45594:10;45573:32;;;;;;;;;;;;;;;;45546:59;;45644:11;45637:4;;:18;;;;:::i;:::-;45624:9;:31;;45616:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45732:18;;45717:11;45698:16;:30;;;;:::i;:::-;:52;;45690:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;46776:6:::2;;;;;;;;;;;46775:7;46767:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46821:34;46831:10;46843:11;46821:9;:34::i;:::-;45535:268:::1;45468:1;45177:300:::0;46604:259;;:::o;33519:155::-;33614:52;33633:12;:10;:12::i;:::-;33647:8;33657;33614:18;:52::i;:::-;33519:155;;:::o;44325:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48700:159::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48832:19:::1;48811:18;:40;;;;48700:159:::0;:::o;49467:111::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49564:6:::1;49541:20;;:29;;;;;;;;;;;;;;;;;;49467:111:::0;:::o;34642:328::-;34817:41;34836:12;:10;:12::i;:::-;34850:7;34817:18;:41::i;:::-;34809:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34923:39;34937:4;34943:2;34947:7;34956:5;34923:13;:39::i;:::-;34642:328;;;;:::o;44462:37::-;;;;:::o;47782:727::-;47901:13;47954:17;47962:8;47954:7;:17::i;:::-;47932:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;48075:5;48063:17;;:8;;;;;;;;;;;:17;;;48059:74;;;48104:17;48097:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48059:74;48145:28;48176:10;:8;:10::i;:::-;48145:41;;48248:1;48223:14;48217:28;:32;:284;;;;;;;;;;;;;;;;;48341:14;48382:19;:8;:17;:19::i;:::-;48428:9;48298:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48217:284;48197:304;;;47782:727;;;;:::o;45914:682::-;46048:11;45190:24;45217:20;:32;45238:10;45217:32;;;;;;;;;;;;;;;;45190:59;;45304:18;;45289:11;45270:16;:30;;;;:::i;:::-;:52;;45262:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45392:1;45378:11;:15;:52;;;;;45412:18;;45397:11;:33;;45378:52;45369:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46090:11:::1;45546:24;45573:20;:32;45594:10;45573:32;;;;;;;;;;;;;;;;45546:59;;45644:11;45637:4;;:18;;;;:::i;:::-;45624:9;:31;;45616:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45732:18;;45717:11;45698:16;:30;;;;:::i;:::-;:52;;45690:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;46169:20:::2;;;;;;;;;;;46161:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46248:16;:28;46265:10;46248:28;;;;;;;;;;;;;;;;;;;;;;;;;46247:29;46239:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46316:12;46358:10;46341:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;46331:39;;;;;;46316:54;;46403:50;46422:12;;46403:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46436:10;;46448:4;46403:18;:50::i;:::-;46381:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46539:4;46508:16;:28;46525:10;46508:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;46554:34;46564:10;46576:11;46554:9;:34::i;:::-;46108:488;45535:268:::1;45468:1;45177:300:::0;45914:682;;;;:::o;44391:24::-;;;;:::o;44133:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;48517:87::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48590:6:::1;48579:8;;:17;;;;;;;;;;;;;;;;;;48517:87:::0;:::o;33745:164::-;33842:4;33866:18;:25;33885:5;33866:25;;;;;;;;;;;;;;;:35;33892:8;33866:35;;;;;;;;;;;;;;;;;;;;;;;;;33859:42;;33745:164;;;;:::o;46871:158::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46988:33:::1;46998:9;47009:11;46988:9;:33::i;:::-;46871:158:::0;;:::o;11601:201::-;10923:12;:10;:12::i;:::-;10912:23;;:7;:5;:7::i;:::-;:23;;;10904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11710:1:::1;11690:22;;:8;:22;;;;11682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11766:28;11785:8;11766:18;:28::i;:::-;11601:201:::0;:::o;23476:157::-;23561:4;23600:25;23585:40;;;:11;:40;;;;23578:47;;23476:157;;;:::o;36480:127::-;36545:4;36597:1;36569:30;;:7;:16;36577:7;36569:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36562:37;;36480:127;;;:::o;9416:98::-;9469:7;9496:10;9489:17;;9416:98;:::o;40626:174::-;40728:2;40701:15;:24;40717:7;40701:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40784:7;40780:2;40746:46;;40755:23;40770:7;40755:14;:23::i;:::-;40746:46;;;;;;;;;;;;40626:174;;:::o;6020:114::-;6085:7;6112;:14;;;6105:21;;6020:114;;;:::o;36774:348::-;36867:4;36892:16;36900:7;36892;:16::i;:::-;36884:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36968:13;36984:23;36999:7;36984:14;:23::i;:::-;36968:39;;37037:5;37026:16;;:7;:16;;;:51;;;;37070:7;37046:31;;:20;37058:7;37046:11;:20::i;:::-;:31;;;37026:51;:87;;;;37081:32;37098:5;37105:7;37081:16;:32::i;:::-;37026:87;37018:96;;;36774:348;;;;:::o;39883:625::-;40042:4;40015:31;;:23;40030:7;40015:14;:23::i;:::-;:31;;;40007:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40121:1;40107:16;;:2;:16;;;;40099:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40177:39;40198:4;40204:2;40208:7;40177:20;:39::i;:::-;40281:29;40298:1;40302:7;40281:8;:29::i;:::-;40342:1;40323:9;:15;40333:4;40323:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40371:1;40354:9;:13;40364:2;40354:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40402:2;40383:7;:16;40391:7;40383:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40441:7;40437:2;40422:27;;40431:4;40422:27;;;;;;;;;;;;40462:38;40482:4;40488:2;40492:7;40462:19;:38::i;:::-;39883:625;;;:::o;11962:191::-;12036:16;12055:6;;;;;;;;;;;12036:25;;12081:8;12072:6;;:17;;;;;;;;;;;;;;;;;;12136:8;12105:40;;12126:8;12105:40;;;;;;;;;;;;12025:128;11962:191;:::o;50335:275::-;50419:9;50414:189;50438:11;50434:1;:15;50414:189;;;50471:18;:6;:16;:18::i;:::-;50504:20;:32;50525:10;50504:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;50553:38;50563:9;50574:16;:6;:14;:16::i;:::-;50553:9;:38::i;:::-;50451:3;;;;;:::i;:::-;;;;50414:189;;;;50335:275;;:::o;40942:315::-;41097:8;41088:17;;:5;:17;;;;41080:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41184:8;41146:18;:25;41165:5;41146:25;;;;;;;;;;;;;;;:35;41172:8;41146:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41230:8;41208:41;;41223:5;41208:41;;;41240:8;41208:41;;;;;;:::i;:::-;;;;;;;;40942:315;;;:::o;35852:::-;36009:28;36019:4;36025:2;36029:7;36009:9;:28::i;:::-;36056:48;36079:4;36085:2;36089:7;36098:5;36056:22;:48::i;:::-;36048:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35852:315;;;;:::o;50618:110::-;50678:13;50711:9;50704:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50618:110;:::o;6978:723::-;7034:13;7264:1;7255:5;:10;7251:53;;;7282:10;;;;;;;;;;;;;;;;;;;;;7251:53;7314:12;7329:5;7314:20;;7345:14;7370:78;7385:1;7377:4;:9;7370:78;;7403:8;;;;;:::i;:::-;;;;7434:2;7426:10;;;;;:::i;:::-;;;7370:78;;;7458:19;7490:6;7480:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7458:39;;7508:154;7524:1;7515:5;:10;7508:154;;7552:1;7542:11;;;;;:::i;:::-;;;7619:2;7611:5;:10;;;;:::i;:::-;7598:2;:24;;;;:::i;:::-;7585:39;;7568:6;7575;7568:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7648:2;7639:11;;;;;:::i;:::-;;;7508:154;;;7686:6;7672:21;;;;;6978:723;;;;:::o;3682:190::-;3807:4;3860;3831:25;3844:5;3851:4;3831:12;:25::i;:::-;:33;3824:40;;3682:190;;;;;:::o;43193:126::-;;;;:::o;43704:125::-;;;;:::o;6142:127::-;6249:1;6231:7;:14;;;:19;;;;;;;;;;;6142:127;:::o;37464:110::-;37540:26;37550:2;37554:7;37540:26;;;;;;;;;;;;:9;:26::i;:::-;37464:110;;:::o;41822:799::-;41977:4;41998:15;:2;:13;;;:15::i;:::-;41994:620;;;42050:2;42034:36;;;42071:12;:10;:12::i;:::-;42085:4;42091:7;42100:5;42034:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42030:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42293:1;42276:6;:13;:18;42272:272;;;42319:60;;;;;;;;;;:::i;:::-;;;;;;;;42272:272;42494:6;42488:13;42479:6;42475:2;42471:15;42464:38;42030:529;42167:41;;;42157:51;;;:6;:51;;;;42150:58;;;;;41994:620;42598:4;42591:11;;41822:799;;;;;;;:::o;4234:675::-;4317:7;4337:20;4360:4;4337:27;;4380:9;4375:497;4399:5;:12;4395:1;:16;4375:497;;;4433:20;4456:5;4462:1;4456:8;;;;;;;;:::i;:::-;;;;;;;;4433:31;;4499:12;4483;:28;4479:382;;4626:42;4641:12;4655;4626:14;:42::i;:::-;4611:57;;4479:382;;;4803:42;4818:12;4832;4803:14;:42::i;:::-;4788:57;;4479:382;4418:454;4413:3;;;;;:::i;:::-;;;;4375:497;;;;4889:12;4882:19;;;4234:675;;;;:::o;37801:321::-;37931:18;37937:2;37941:7;37931:5;:18::i;:::-;37982:54;38013:1;38017:2;38021:7;38030:5;37982:22;:54::i;:::-;37960:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37801:321;;;:::o;13393:326::-;13453:4;13710:1;13688:7;:19;;;:23;13681:30;;13393:326;;;:::o;4917:224::-;4985:13;5048:1;5042:4;5035:15;5077:1;5071:4;5064:15;5118:4;5112;5102:21;5093:30;;4917:224;;;;:::o;38458:439::-;38552:1;38538:16;;:2;:16;;;;38530:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38611:16;38619:7;38611;:16::i;:::-;38610:17;38602:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38673:45;38702:1;38706:2;38710:7;38673:20;:45::i;:::-;38748:1;38731:9;:13;38741:2;38731:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38779:2;38760:7;:16;38768:7;38760:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38824:7;38820:2;38799:33;;38816:1;38799:33;;;;;;;;;;;;38845:44;38873:1;38877:2;38881:7;38845:19;:44::i;:::-;38458:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334: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:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:308::-;6206:4;6296:18;6288:6;6285:30;6282:56;;;6318:18;;:::i;:::-;6282:56;6356:29;6378:6;6356:29;:::i;:::-;6348:37;;6440:4;6434;6430:15;6422:23;;6144:308;;;:::o;6458:154::-;6542:6;6537:3;6532;6519:30;6604:1;6595:6;6590:3;6586:16;6579:27;6458:154;;;:::o;6618:412::-;6696:5;6721:66;6737:49;6779:6;6737:49;:::i;:::-;6721:66;:::i;:::-;6712:75;;6810:6;6803:5;6796:21;6848:4;6841:5;6837:16;6886:3;6877:6;6872:3;6868:16;6865:25;6862:112;;;6893:79;;:::i;:::-;6862:112;6983:41;7017:6;7012:3;7007;6983:41;:::i;:::-;6702:328;6618:412;;;;;:::o;7050:340::-;7106:5;7155:3;7148:4;7140:6;7136:17;7132:27;7122:122;;7163:79;;:::i;:::-;7122:122;7280:6;7267:20;7305:79;7380:3;7372:6;7365:4;7357:6;7353:17;7305:79;:::i;:::-;7296:88;;7112:278;7050:340;;;;:::o;7396:509::-;7465:6;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7825:63;7880:7;7871:6;7860:9;7856:22;7825:63;:::i;:::-;7815:73;;7611:287;7396:509;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:323::-;8228:6;8277:2;8265:9;8256:7;8252:23;8248:32;8245:119;;;8283:79;;:::i;:::-;8245:119;8403:1;8428:50;8470:7;8461:6;8450:9;8446:22;8428:50;:::i;:::-;8418:60;;8374:114;8172:323;;;;:::o;8501:329::-;8560:6;8609:2;8597:9;8588:7;8584:23;8580:32;8577:119;;;8615:79;;:::i;:::-;8577:119;8735:1;8760:53;8805:7;8796:6;8785:9;8781:22;8760:53;:::i;:::-;8750:63;;8706:117;8501:329;;;;:::o;8836:619::-;8913:6;8921;8929;8978:2;8966:9;8957:7;8953:23;8949:32;8946:119;;;8984:79;;:::i;:::-;8946:119;9104:1;9129:53;9174:7;9165:6;9154:9;9150:22;9129:53;:::i;:::-;9119:63;;9075:117;9231:2;9257:53;9302:7;9293:6;9282:9;9278:22;9257:53;:::i;:::-;9247:63;;9202:118;9359:2;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9330:118;8836:619;;;;;:::o;9461:77::-;9498:7;9527:5;9516:16;;9461:77;;;:::o;9544:118::-;9631:24;9649:5;9631:24;:::i;:::-;9626:3;9619:37;9544:118;;:::o;9668:222::-;9761:4;9799:2;9788:9;9784:18;9776:26;;9812:71;9880:1;9869:9;9865:17;9856:6;9812:71;:::i;:::-;9668:222;;;;:::o;9896:114::-;9963:6;9997:5;9991:12;9981:22;;9896:114;;;:::o;10016:184::-;10115:11;10149:6;10144:3;10137:19;10189:4;10184:3;10180:14;10165:29;;10016:184;;;;:::o;10206:132::-;10273:4;10296:3;10288:11;;10326:4;10321:3;10317:14;10309:22;;10206:132;;;:::o;10344:108::-;10421:24;10439:5;10421:24;:::i;:::-;10416:3;10409:37;10344:108;;:::o;10458:179::-;10527:10;10548:46;10590:3;10582:6;10548:46;:::i;:::-;10626:4;10621:3;10617:14;10603:28;;10458:179;;;;:::o;10643:113::-;10713:4;10745;10740:3;10736:14;10728:22;;10643:113;;;:::o;10792:732::-;10911:3;10940:54;10988:5;10940:54;:::i;:::-;11010:86;11089:6;11084:3;11010:86;:::i;:::-;11003:93;;11120:56;11170:5;11120:56;:::i;:::-;11199:7;11230:1;11215:284;11240:6;11237:1;11234:13;11215:284;;;11316:6;11310:13;11343:63;11402:3;11387:13;11343:63;:::i;:::-;11336:70;;11429:60;11482:6;11429:60;:::i;:::-;11419:70;;11275:224;11262:1;11259;11255:9;11250:14;;11215:284;;;11219:14;11515:3;11508:10;;10916:608;;;10792:732;;;;:::o;11530:373::-;11673:4;11711:2;11700:9;11696:18;11688:26;;11760:9;11754:4;11750:20;11746:1;11735:9;11731:17;11724:47;11788:108;11891:4;11882:6;11788:108;:::i;:::-;11780:116;;11530:373;;;;:::o;11909:122::-;11982:24;12000:5;11982:24;:::i;:::-;11975:5;11972:35;11962:63;;12021:1;12018;12011:12;11962:63;11909:122;:::o;12037:139::-;12083:5;12121:6;12108:20;12099:29;;12137:33;12164:5;12137:33;:::i;:::-;12037:139;;;;:::o;12182:329::-;12241:6;12290:2;12278:9;12269:7;12265:23;12261:32;12258:119;;;12296:79;;:::i;:::-;12258:119;12416:1;12441:53;12486:7;12477:6;12466:9;12462:22;12441:53;:::i;:::-;12431:63;;12387:117;12182:329;;;;:::o;12517:468::-;12582:6;12590;12639:2;12627:9;12618:7;12614:23;12610:32;12607:119;;;12645:79;;:::i;:::-;12607:119;12765:1;12790:53;12835:7;12826:6;12815:9;12811:22;12790:53;:::i;:::-;12780:63;;12736:117;12892:2;12918:50;12960:7;12951:6;12940:9;12936:22;12918:50;:::i;:::-;12908:60;;12863:115;12517:468;;;;;:::o;12991:307::-;13052:4;13142:18;13134:6;13131:30;13128:56;;;13164:18;;:::i;:::-;13128:56;13202:29;13224:6;13202:29;:::i;:::-;13194:37;;13286:4;13280;13276:15;13268:23;;12991:307;;;:::o;13304:410::-;13381:5;13406:65;13422:48;13463:6;13422:48;:::i;:::-;13406:65;:::i;:::-;13397:74;;13494:6;13487:5;13480:21;13532:4;13525:5;13521:16;13570:3;13561:6;13556:3;13552:16;13549:25;13546:112;;;13577:79;;:::i;:::-;13546:112;13667:41;13701:6;13696:3;13691;13667:41;:::i;:::-;13387:327;13304:410;;;;;:::o;13733:338::-;13788:5;13837:3;13830:4;13822:6;13818:17;13814:27;13804:122;;13845:79;;:::i;:::-;13804:122;13962:6;13949:20;13987:78;14061:3;14053:6;14046:4;14038:6;14034:17;13987:78;:::i;:::-;13978:87;;13794:277;13733:338;;;;:::o;14077:943::-;14172:6;14180;14188;14196;14245:3;14233:9;14224:7;14220:23;14216:33;14213:120;;;14252:79;;:::i;:::-;14213:120;14372:1;14397:53;14442:7;14433:6;14422:9;14418:22;14397:53;:::i;:::-;14387:63;;14343:117;14499:2;14525:53;14570:7;14561:6;14550:9;14546:22;14525:53;:::i;:::-;14515:63;;14470:118;14627:2;14653:53;14698:7;14689:6;14678:9;14674:22;14653:53;:::i;:::-;14643:63;;14598:118;14783:2;14772:9;14768:18;14755:32;14814:18;14806:6;14803:30;14800:117;;;14836:79;;:::i;:::-;14800:117;14941:62;14995:7;14986:6;14975:9;14971:22;14941:62;:::i;:::-;14931:72;;14726:287;14077:943;;;;;;;:::o;15026:117::-;15135:1;15132;15125:12;15149:117;15258:1;15255;15248:12;15289:568;15362:8;15372:6;15422:3;15415:4;15407:6;15403:17;15399:27;15389:122;;15430:79;;:::i;:::-;15389:122;15543:6;15530:20;15520:30;;15573:18;15565:6;15562:30;15559:117;;;15595:79;;:::i;:::-;15559:117;15709:4;15701:6;15697:17;15685:29;;15763:3;15755:4;15747:6;15743:17;15733:8;15729:32;15726:41;15723:128;;;15770:79;;:::i;:::-;15723:128;15289:568;;;;;:::o;15863:704::-;15958:6;15966;15974;16023:2;16011:9;16002:7;15998:23;15994:32;15991:119;;;16029:79;;:::i;:::-;15991:119;16149:1;16174:53;16219:7;16210:6;16199:9;16195:22;16174:53;:::i;:::-;16164:63;;16120:117;16304:2;16293:9;16289:18;16276:32;16335:18;16327:6;16324:30;16321:117;;;16357:79;;:::i;:::-;16321:117;16470:80;16542:7;16533:6;16522:9;16518:22;16470:80;:::i;:::-;16452:98;;;;16247:313;15863:704;;;;;:::o;16573:474::-;16641:6;16649;16698:2;16686:9;16677:7;16673:23;16669:32;16666:119;;;16704:79;;:::i;:::-;16666:119;16824:1;16849:53;16894:7;16885:6;16874:9;16870:22;16849:53;:::i;:::-;16839:63;;16795:117;16951:2;16977:53;17022:7;17013:6;17002:9;16998:22;16977:53;:::i;:::-;16967:63;;16922:118;16573:474;;;;;:::o;17053:::-;17121:6;17129;17178:2;17166:9;17157:7;17153:23;17149:32;17146:119;;;17184:79;;:::i;:::-;17146:119;17304:1;17329:53;17374:7;17365:6;17354:9;17350:22;17329:53;:::i;:::-;17319:63;;17275:117;17431:2;17457:53;17502:7;17493:6;17482:9;17478:22;17457:53;:::i;:::-;17447:63;;17402:118;17053:474;;;;;:::o;17533:180::-;17581:77;17578:1;17571:88;17678:4;17675:1;17668:15;17702:4;17699:1;17692:15;17719:320;17763:6;17800:1;17794:4;17790:12;17780:22;;17847:1;17841:4;17837:12;17868:18;17858:81;;17924:4;17916:6;17912:17;17902:27;;17858:81;17986:2;17978:6;17975:14;17955:18;17952:38;17949:84;;;18005:18;;:::i;:::-;17949:84;17770:269;17719:320;;;:::o;18045:231::-;18185:34;18181:1;18173:6;18169:14;18162:58;18254:14;18249:2;18241:6;18237:15;18230:39;18045:231;:::o;18282:366::-;18424:3;18445:67;18509:2;18504:3;18445:67;:::i;:::-;18438:74;;18521:93;18610:3;18521:93;:::i;:::-;18639:2;18634:3;18630:12;18623:19;;18282:366;;;:::o;18654:419::-;18820:4;18858:2;18847:9;18843:18;18835:26;;18907:9;18901:4;18897:20;18893:1;18882:9;18878:17;18871:47;18935:131;19061:4;18935:131;:::i;:::-;18927:139;;18654:419;;;:::o;19079:220::-;19219:34;19215:1;19207:6;19203:14;19196:58;19288:3;19283:2;19275:6;19271:15;19264:28;19079:220;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:243::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:26;20306:2;20298:6;20294:15;20287:51;20102:243;:::o;20351:366::-;20493:3;20514:67;20578:2;20573:3;20514:67;:::i;:::-;20507:74;;20590:93;20679:3;20590:93;:::i;:::-;20708:2;20703:3;20699:12;20692:19;;20351:366;;;:::o;20723:419::-;20889:4;20927:2;20916:9;20912:18;20904:26;;20976:9;20970:4;20966:20;20962:1;20951:9;20947:17;20940:47;21004:131;21130:4;21004:131;:::i;:::-;20996:139;;20723:419;;;:::o;21148:182::-;21288:34;21284:1;21276:6;21272:14;21265:58;21148:182;:::o;21336:366::-;21478:3;21499:67;21563:2;21558:3;21499:67;:::i;:::-;21492:74;;21575:93;21664:3;21575:93;:::i;:::-;21693:2;21688:3;21684:12;21677:19;;21336:366;;;:::o;21708:419::-;21874:4;21912:2;21901:9;21897:18;21889:26;;21961:9;21955:4;21951:20;21947:1;21936:9;21932:17;21925:47;21989:131;22115:4;21989:131;:::i;:::-;21981:139;;21708:419;;;:::o;22133:236::-;22273:34;22269:1;22261:6;22257:14;22250:58;22342:19;22337:2;22329:6;22325:15;22318:44;22133:236;:::o;22375:366::-;22517:3;22538:67;22602:2;22597:3;22538:67;:::i;:::-;22531:74;;22614:93;22703:3;22614:93;:::i;:::-;22732:2;22727:3;22723:12;22716:19;;22375:366;;;:::o;22747:419::-;22913:4;22951:2;22940:9;22936:18;22928:26;;23000:9;22994:4;22990:20;22986:1;22975:9;22971:17;22964:47;23028:131;23154:4;23028:131;:::i;:::-;23020:139;;22747:419;;;:::o;23172:181::-;23312:33;23308:1;23300:6;23296:14;23289:57;23172:181;:::o;23359:366::-;23501:3;23522:67;23586:2;23581:3;23522:67;:::i;:::-;23515:74;;23598:93;23687:3;23598:93;:::i;:::-;23716:2;23711:3;23707:12;23700:19;;23359:366;;;:::o;23731:419::-;23897:4;23935:2;23924:9;23920:18;23912:26;;23984:9;23978:4;23974:20;23970:1;23959:9;23955:17;23948:47;24012:131;24138:4;24012:131;:::i;:::-;24004:139;;23731:419;;;:::o;24156:174::-;24296:26;24292:1;24284:6;24280:14;24273:50;24156:174;:::o;24336:366::-;24478:3;24499:67;24563:2;24558:3;24499:67;:::i;:::-;24492:74;;24575:93;24664:3;24575:93;:::i;:::-;24693:2;24688:3;24684:12;24677:19;;24336:366;;;:::o;24708:419::-;24874:4;24912:2;24901:9;24897:18;24889:26;;24961:9;24955:4;24951:20;24947:1;24936:9;24932:17;24925:47;24989:131;25115:4;24989:131;:::i;:::-;24981:139;;24708:419;;;:::o;25133:180::-;25181:77;25178:1;25171:88;25278:4;25275:1;25268:15;25302:4;25299:1;25292:15;25319:348;25359:7;25382:20;25400:1;25382:20;:::i;:::-;25377:25;;25416:20;25434:1;25416:20;:::i;:::-;25411:25;;25604:1;25536:66;25532:74;25529:1;25526:81;25521:1;25514:9;25507:17;25503:105;25500:131;;;25611:18;;:::i;:::-;25500:131;25659:1;25656;25652:9;25641:20;;25319:348;;;;:::o;25673:180::-;25721:77;25718:1;25711:88;25818:4;25815:1;25808:15;25842:4;25839:1;25832:15;25859:185;25899:1;25916:20;25934:1;25916:20;:::i;:::-;25911:25;;25950:20;25968:1;25950:20;:::i;:::-;25945:25;;25989:1;25979:35;;25994:18;;:::i;:::-;25979:35;26036:1;26033;26029:9;26024:14;;25859:185;;;;:::o;26050:147::-;26151:11;26188:3;26173:18;;26050:147;;;;:::o;26203:114::-;;:::o;26323:398::-;26482:3;26503:83;26584:1;26579:3;26503:83;:::i;:::-;26496:90;;26595:93;26684:3;26595:93;:::i;:::-;26713:1;26708:3;26704:11;26697:18;;26323:398;;;:::o;26727:379::-;26911:3;26933:147;27076:3;26933:147;:::i;:::-;26926:154;;27097:3;27090:10;;26727:379;;;:::o;27112:180::-;27160:77;27157:1;27150:88;27257:4;27254:1;27247:15;27281:4;27278:1;27271:15;27298:233;27337:3;27360:24;27378:5;27360:24;:::i;:::-;27351:33;;27406:66;27399:5;27396:77;27393:103;;;27476:18;;:::i;:::-;27393:103;27523:1;27516:5;27512:13;27505:20;;27298:233;;;:::o;27537:228::-;27677:34;27673:1;27665:6;27661:14;27654:58;27746:11;27741:2;27733:6;27729:15;27722:36;27537:228;:::o;27771:366::-;27913:3;27934:67;27998:2;27993:3;27934:67;:::i;:::-;27927:74;;28010:93;28099:3;28010:93;:::i;:::-;28128:2;28123:3;28119:12;28112:19;;27771:366;;;:::o;28143:419::-;28309:4;28347:2;28336:9;28332:18;28324:26;;28396:9;28390:4;28386:20;28382:1;28371:9;28367:17;28360:47;28424:131;28550:4;28424:131;:::i;:::-;28416:139;;28143:419;;;:::o;28568:229::-;28708:34;28704:1;28696:6;28692:14;28685:58;28777:12;28772:2;28764:6;28760:15;28753:37;28568:229;:::o;28803:366::-;28945:3;28966:67;29030:2;29025:3;28966:67;:::i;:::-;28959:74;;29042:93;29131:3;29042:93;:::i;:::-;29160:2;29155:3;29151:12;29144:19;;28803:366;;;:::o;29175:419::-;29341:4;29379:2;29368:9;29364:18;29356:26;;29428:9;29422:4;29418:20;29414:1;29403:9;29399:17;29392:47;29456:131;29582:4;29456:131;:::i;:::-;29448:139;;29175:419;;;:::o;29600:305::-;29640:3;29659:20;29677:1;29659:20;:::i;:::-;29654:25;;29693:20;29711:1;29693:20;:::i;:::-;29688:25;;29847:1;29779:66;29775:74;29772:1;29769:81;29766:107;;;29853:18;;:::i;:::-;29766:107;29897:1;29894;29890:9;29883:16;;29600:305;;;;:::o;29911:178::-;30051:30;30047:1;30039:6;30035:14;30028:54;29911:178;:::o;30095:366::-;30237:3;30258:67;30322:2;30317:3;30258:67;:::i;:::-;30251:74;;30334:93;30423:3;30334:93;:::i;:::-;30452:2;30447:3;30443:12;30436:19;;30095:366;;;:::o;30467:419::-;30633:4;30671:2;30660:9;30656:18;30648:26;;30720:9;30714:4;30710:20;30706:1;30695:9;30691:17;30684:47;30748:131;30874:4;30748:131;:::i;:::-;30740:139;;30467:419;;;:::o;30892:170::-;31032:22;31028:1;31020:6;31016:14;31009:46;30892:170;:::o;31068:366::-;31210:3;31231:67;31295:2;31290:3;31231:67;:::i;:::-;31224:74;;31307:93;31396:3;31307:93;:::i;:::-;31425:2;31420:3;31416:12;31409:19;;31068:366;;;:::o;31440:419::-;31606:4;31644:2;31633:9;31629:18;31621:26;;31693:9;31687:4;31683:20;31679:1;31668:9;31664:17;31657:47;31721:131;31847:4;31721:131;:::i;:::-;31713:139;;31440:419;;;:::o;31865:169::-;32005:21;32001:1;31993:6;31989:14;31982:45;31865:169;:::o;32040:366::-;32182:3;32203:67;32267:2;32262:3;32203:67;:::i;:::-;32196:74;;32279:93;32368:3;32279:93;:::i;:::-;32397:2;32392:3;32388:12;32381:19;;32040:366;;;:::o;32412:419::-;32578:4;32616:2;32605:9;32601:18;32593:26;;32665:9;32659:4;32655:20;32651:1;32640:9;32636:17;32629:47;32693:131;32819:4;32693:131;:::i;:::-;32685:139;;32412:419;;;:::o;32837:173::-;32977:25;32973:1;32965:6;32961:14;32954:49;32837:173;:::o;33016:366::-;33158:3;33179:67;33243:2;33238:3;33179:67;:::i;:::-;33172:74;;33255:93;33344:3;33255:93;:::i;:::-;33373:2;33368:3;33364:12;33357:19;;33016:366;;;:::o;33388:419::-;33554:4;33592:2;33581:9;33577:18;33569:26;;33641:9;33635:4;33631:20;33627:1;33616:9;33612:17;33605:47;33669:131;33795:4;33669:131;:::i;:::-;33661:139;;33388:419;;;:::o;33813:234::-;33953:34;33949:1;33941:6;33937:14;33930:58;34022:17;34017:2;34009:6;34005:15;33998:42;33813:234;:::o;34053:366::-;34195:3;34216:67;34280:2;34275:3;34216:67;:::i;:::-;34209:74;;34292:93;34381:3;34292:93;:::i;:::-;34410:2;34405:3;34401:12;34394:19;;34053:366;;;:::o;34425:419::-;34591:4;34629:2;34618:9;34614:18;34606:26;;34678:9;34672:4;34668:20;34664:1;34653:9;34649:17;34642:47;34706:131;34832:4;34706:131;:::i;:::-;34698:139;;34425:419;;;:::o;34850:148::-;34952:11;34989:3;34974:18;;34850:148;;;;:::o;35004:377::-;35110:3;35138:39;35171:5;35138:39;:::i;:::-;35193:89;35275:6;35270:3;35193:89;:::i;:::-;35186:96;;35291:52;35336:6;35331:3;35324:4;35317:5;35313:16;35291:52;:::i;:::-;35368:6;35363:3;35359:16;35352:23;;35114:267;35004:377;;;;:::o;35387:141::-;35436:4;35459:3;35451:11;;35482:3;35479:1;35472:14;35516:4;35513:1;35503:18;35495:26;;35387:141;;;:::o;35558:845::-;35661:3;35698:5;35692:12;35727:36;35753:9;35727:36;:::i;:::-;35779:89;35861:6;35856:3;35779:89;:::i;:::-;35772:96;;35899:1;35888:9;35884:17;35915:1;35910:137;;;;36061:1;36056:341;;;;35877:520;;35910:137;35994:4;35990:9;35979;35975:25;35970:3;35963:38;36030:6;36025:3;36021:16;36014:23;;35910:137;;36056:341;36123:38;36155:5;36123:38;:::i;:::-;36183:1;36197:154;36211:6;36208:1;36205:13;36197:154;;;36285:7;36279:14;36275:1;36270:3;36266:11;36259:35;36335:1;36326:7;36322:15;36311:26;;36233:4;36230:1;36226:12;36221:17;;36197:154;;;36380:6;36375:3;36371:16;36364:23;;36063:334;;35877:520;;35665:738;;35558:845;;;;:::o;36409:589::-;36634:3;36656:95;36747:3;36738:6;36656:95;:::i;:::-;36649:102;;36768:95;36859:3;36850:6;36768:95;:::i;:::-;36761:102;;36880:92;36968:3;36959:6;36880:92;:::i;:::-;36873:99;;36989:3;36982:10;;36409:589;;;;;;:::o;37004:221::-;37144:34;37140:1;37132:6;37128:14;37121:58;37213:4;37208:2;37200:6;37196:15;37189:29;37004:221;:::o;37231:366::-;37373:3;37394:67;37458:2;37453:3;37394:67;:::i;:::-;37387:74;;37470:93;37559:3;37470:93;:::i;:::-;37588:2;37583:3;37579:12;37572:19;;37231:366;;;:::o;37603:419::-;37769:4;37807:2;37796:9;37792:18;37784:26;;37856:9;37850:4;37846:20;37842:1;37831:9;37827:17;37820:47;37884:131;38010:4;37884:131;:::i;:::-;37876:139;;37603:419;;;:::o;38028:174::-;38168:26;38164:1;38156:6;38152:14;38145:50;38028:174;:::o;38208:366::-;38350:3;38371:67;38435:2;38430:3;38371:67;:::i;:::-;38364:74;;38447:93;38536:3;38447:93;:::i;:::-;38565:2;38560:3;38556:12;38549:19;;38208:366;;;:::o;38580:419::-;38746:4;38784:2;38773:9;38769:18;38761:26;;38833:9;38827:4;38823:20;38819:1;38808:9;38804:17;38797:47;38861:131;38987:4;38861:131;:::i;:::-;38853:139;;38580:419;;;:::o;39005:94::-;39038:8;39086:5;39082:2;39078:14;39057:35;;39005:94;;;:::o;39105:::-;39144:7;39173:20;39187:5;39173:20;:::i;:::-;39162:31;;39105:94;;;:::o;39205:100::-;39244:7;39273:26;39293:5;39273:26;:::i;:::-;39262:37;;39205:100;;;:::o;39311:157::-;39416:45;39436:24;39454:5;39436:24;:::i;:::-;39416:45;:::i;:::-;39411:3;39404:58;39311:157;;:::o;39474:256::-;39586:3;39601:75;39672:3;39663:6;39601:75;:::i;:::-;39701:2;39696:3;39692:12;39685:19;;39721:3;39714:10;;39474:256;;;;:::o;39736:164::-;39876:16;39872:1;39864:6;39860:14;39853:40;39736:164;:::o;39906:366::-;40048:3;40069:67;40133:2;40128:3;40069:67;:::i;:::-;40062:74;;40145:93;40234:3;40145:93;:::i;:::-;40263:2;40258:3;40254:12;40247:19;;39906:366;;;:::o;40278:419::-;40444:4;40482:2;40471:9;40467:18;40459:26;;40531:9;40525:4;40521:20;40517:1;40506:9;40502:17;40495:47;40559:131;40685:4;40559:131;:::i;:::-;40551:139;;40278:419;;;:::o;40703:225::-;40843:34;40839:1;40831:6;40827:14;40820:58;40912:8;40907:2;40899:6;40895:15;40888:33;40703:225;:::o;40934:366::-;41076:3;41097:67;41161:2;41156:3;41097:67;:::i;:::-;41090:74;;41173:93;41262:3;41173:93;:::i;:::-;41291:2;41286:3;41282:12;41275:19;;40934:366;;;:::o;41306:419::-;41472:4;41510:2;41499:9;41495:18;41487:26;;41559:9;41553:4;41549:20;41545:1;41534:9;41530:17;41523:47;41587:131;41713:4;41587:131;:::i;:::-;41579:139;;41306:419;;;:::o;41731:231::-;41871:34;41867:1;41859:6;41855:14;41848:58;41940:14;41935:2;41927:6;41923:15;41916:39;41731:231;:::o;41968:366::-;42110:3;42131:67;42195:2;42190:3;42131:67;:::i;:::-;42124:74;;42207:93;42296:3;42207:93;:::i;:::-;42325:2;42320:3;42316:12;42309:19;;41968:366;;;:::o;42340:419::-;42506:4;42544:2;42533:9;42529:18;42521:26;;42593:9;42587:4;42583:20;42579:1;42568:9;42564:17;42557:47;42621:131;42747:4;42621:131;:::i;:::-;42613:139;;42340:419;;;:::o;42765:224::-;42905:34;42901:1;42893:6;42889:14;42882:58;42974:7;42969:2;42961:6;42957:15;42950:32;42765:224;:::o;42995:366::-;43137:3;43158:67;43222:2;43217:3;43158:67;:::i;:::-;43151:74;;43234:93;43323:3;43234:93;:::i;:::-;43352:2;43347:3;43343:12;43336:19;;42995:366;;;:::o;43367:419::-;43533:4;43571:2;43560:9;43556:18;43548:26;;43620:9;43614:4;43610:20;43606:1;43595:9;43591:17;43584:47;43648:131;43774:4;43648:131;:::i;:::-;43640:139;;43367:419;;;:::o;43792:223::-;43932:34;43928:1;43920:6;43916:14;43909:58;44001:6;43996:2;43988:6;43984:15;43977:31;43792:223;:::o;44021:366::-;44163:3;44184:67;44248:2;44243:3;44184:67;:::i;:::-;44177:74;;44260:93;44349:3;44260:93;:::i;:::-;44378:2;44373:3;44369:12;44362:19;;44021:366;;;:::o;44393:419::-;44559:4;44597:2;44586:9;44582:18;44574:26;;44646:9;44640:4;44636:20;44632:1;44621:9;44617:17;44610:47;44674:131;44800:4;44674:131;:::i;:::-;44666:139;;44393:419;;;:::o;44818:191::-;44858:4;44878:20;44896:1;44878:20;:::i;:::-;44873:25;;44912:20;44930:1;44912:20;:::i;:::-;44907:25;;44951:1;44948;44945:8;44942:34;;;44956:18;;:::i;:::-;44942:34;45001:1;44998;44994:9;44986:17;;44818:191;;;;:::o;45015:175::-;45155:27;45151:1;45143:6;45139:14;45132:51;45015:175;:::o;45196:366::-;45338:3;45359:67;45423:2;45418:3;45359:67;:::i;:::-;45352:74;;45435:93;45524:3;45435:93;:::i;:::-;45553:2;45548:3;45544:12;45537:19;;45196:366;;;:::o;45568:419::-;45734:4;45772:2;45761:9;45757:18;45749:26;;45821:9;45815:4;45811:20;45807:1;45796:9;45792:17;45785:47;45849:131;45975:4;45849:131;:::i;:::-;45841:139;;45568:419;;;:::o;45993:237::-;46133:34;46129:1;46121:6;46117:14;46110:58;46202:20;46197:2;46189:6;46185:15;46178:45;45993:237;:::o;46236:366::-;46378:3;46399:67;46463:2;46458:3;46399:67;:::i;:::-;46392:74;;46475:93;46564:3;46475:93;:::i;:::-;46593:2;46588:3;46584:12;46577:19;;46236:366;;;:::o;46608:419::-;46774:4;46812:2;46801:9;46797:18;46789:26;;46861:9;46855:4;46851:20;46847:1;46836:9;46832:17;46825:47;46889:131;47015:4;46889:131;:::i;:::-;46881:139;;46608:419;;;:::o;47033:176::-;47065:1;47082:20;47100:1;47082:20;:::i;:::-;47077:25;;47116:20;47134:1;47116:20;:::i;:::-;47111:25;;47155:1;47145:35;;47160:18;;:::i;:::-;47145:35;47201:1;47198;47194:9;47189:14;;47033:176;;;;:::o;47215:98::-;47266:6;47300:5;47294:12;47284:22;;47215:98;;;:::o;47319:168::-;47402:11;47436:6;47431:3;47424:19;47476:4;47471:3;47467:14;47452:29;;47319:168;;;;:::o;47493:360::-;47579:3;47607:38;47639:5;47607:38;:::i;:::-;47661:70;47724:6;47719:3;47661:70;:::i;:::-;47654:77;;47740:52;47785:6;47780:3;47773:4;47766:5;47762:16;47740:52;:::i;:::-;47817:29;47839:6;47817:29;:::i;:::-;47812:3;47808:39;47801:46;;47583:270;47493:360;;;;:::o;47859:640::-;48054:4;48092:3;48081:9;48077:19;48069:27;;48106:71;48174:1;48163:9;48159:17;48150:6;48106:71;:::i;:::-;48187:72;48255:2;48244:9;48240:18;48231:6;48187:72;:::i;:::-;48269;48337:2;48326:9;48322:18;48313:6;48269:72;:::i;:::-;48388:9;48382:4;48378:20;48373:2;48362:9;48358:18;48351:48;48416:76;48487:4;48478:6;48416:76;:::i;:::-;48408:84;;47859:640;;;;;;;:::o;48505:141::-;48561:5;48592:6;48586:13;48577:22;;48608:32;48634:5;48608:32;:::i;:::-;48505:141;;;;:::o;48652:349::-;48721:6;48770:2;48758:9;48749:7;48745:23;48741:32;48738:119;;;48776:79;;:::i;:::-;48738:119;48896:1;48921:63;48976:7;48967:6;48956:9;48952:22;48921:63;:::i;:::-;48911:73;;48867:127;48652:349;;;;:::o;49007:182::-;49147:34;49143:1;49135:6;49131:14;49124:58;49007:182;:::o;49195:366::-;49337:3;49358:67;49422:2;49417:3;49358:67;:::i;:::-;49351:74;;49434:93;49523:3;49434:93;:::i;:::-;49552:2;49547:3;49543:12;49536:19;;49195:366;;;:::o;49567:419::-;49733:4;49771:2;49760:9;49756:18;49748:26;;49820:9;49814:4;49810:20;49806:1;49795:9;49791:17;49784:47;49848:131;49974:4;49848:131;:::i;:::-;49840:139;;49567:419;;;:::o;49992:178::-;50132:30;50128:1;50120:6;50116:14;50109:54;49992:178;:::o;50176:366::-;50318:3;50339:67;50403:2;50398:3;50339:67;:::i;:::-;50332:74;;50415:93;50504:3;50415:93;:::i;:::-;50533:2;50528:3;50524:12;50517:19;;50176:366;;;:::o;50548:419::-;50714:4;50752:2;50741:9;50737:18;50729:26;;50801:9;50795:4;50791:20;50787:1;50776:9;50772:17;50765:47;50829:131;50955:4;50829:131;:::i;:::-;50821:139;;50548:419;;;:::o
Swarm Source
ipfs://c9223575db2648c45fce51e9c0e27221245218b765b84d5d7d3bcf02ee743eaf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.