ERC-721
Overview
Max Total Supply
100 BOOOB
Holders
53
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BOOOBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BOOOB
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-24 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * */ 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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @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/IERC721Receiver.sol /** * @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/token/ERC721/extensions/IERC721Metadata.sol /** * @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/utils/Address.sol /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @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/ERC721.sol /** * @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}. 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public 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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * 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 { } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/BOOOB.sol contract BOOOB is ERC721Enumerable, Ownable { using SafeMath for uint256; // Private members mapping (address => uint256) private whiteListMints; // Whitelisted mints per address string private baseURL = ""; // Base URI bytes32 private whiteListMerkle = ""; // Whitelist merkle proof // Constants uint256 constant public MAX_BOOOBS = 8008; // Maximum supply uint256 constant public BOOB_PRICE = 60000000000000000; // 0.06 ETH // Sale data uint public maxBooobsPerMint = 25; // Max booobs in one go ! bool public mintingActive = false; // Minting active // Presale data bool public presaleActive = false; // Presale active uint256 public maxBOOOBSPerWhiteAddress = 50; // Total maximum booobs for whitelisted wallet uint public maxBooobsPerPresaleMint = 25; // Max pre-sale booobs in one go ! constructor( string memory name, string memory symbol, string memory baseURI ) ERC721(name, symbol) { baseURL = baseURI; } function mintBooob(uint numBooobs) public payable { require(mintingActive, "Minting not active."); require(numBooobs > 0, "More than 0 please."); require( totalSupply().add(numBooobs) <= MAX_BOOOBS, 'Only 8008 booobs are available' ); require(numBooobs <= maxBooobsPerMint, "Cannot mint this number of booobs in tx !"); require(BOOB_PRICE.mul(numBooobs) <= msg.value, 'Eth sent not sufficient.'); for(uint i = 0; i < numBooobs; i++) { uint mintIndex = totalSupply(); if (mintIndex < MAX_BOOOBS) { _safeMint(msg.sender, mintIndex); } } } function mintBooobWhitelist(uint numBooobs, uint merkleIndex, bytes32[] calldata merkleProof) public payable { require(presaleActive, "Presale not active."); require(numBooobs > 0, "More than 0 please."); require(isWhitelisted(merkleIndex, merkleProof), "Not whitelisted !"); require(whiteListMints[msg.sender].add(numBooobs) <= maxBOOOBSPerWhiteAddress, "More than your allowed presale booobs!"); require(totalSupply().add(numBooobs) <= MAX_BOOOBS, "Only 8008 booobs are available"); require(numBooobs <= maxBooobsPerPresaleMint, "Cannot mint this number of presale booobs in one tx !"); require(BOOB_PRICE.mul(numBooobs) <= msg.value, 'Eth sent not sufficient.'); for(uint i = 0; i < numBooobs; i++) { uint mintIndex = totalSupply(); if (mintIndex < MAX_BOOOBS) { _safeMint(msg.sender, mintIndex); whiteListMints[msg.sender] = whiteListMints[msg.sender].add(1); } } } function isWhitelisted (uint merkleIndex, bytes32[] calldata merkleProof) public view returns (bool) { bytes32 nHash = keccak256(abi.encodePacked(merkleIndex, msg.sender)); return MerkleProof.verify(merkleProof, whiteListMerkle, nHash); } // OWNER ONLY METHODS function withdrawBalance() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function reserveBooobs(uint256 quantity) public onlyOwner { for(uint i = 0; i < quantity; i++) { uint mintIndex = totalSupply(); if (mintIndex < MAX_BOOOBS) { _safeMint(msg.sender, mintIndex); } } } function switchMinting() public onlyOwner { mintingActive = !mintingActive; } function switchPresale() public onlyOwner { presaleActive = !presaleActive; } function setMaxQuantityPerMint (uint256 quantity) public onlyOwner { maxBooobsPerMint = quantity; } function setMaxQuantityPerPresaleMint (uint256 quantity) public onlyOwner { maxBooobsPerPresaleMint = quantity; } function setWhitelistMerkle (bytes32 merkle) public onlyOwner { whiteListMerkle = merkle; } function setMaxPerWhitelistAddress (uint256 quantity) public onlyOwner { maxBOOOBSPerWhiteAddress = quantity; } function setBaseURI(string memory baseURI) external onlyOwner() { baseURL = baseURI; } function _baseURI() internal view override returns (string memory) { return baseURL; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","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"},{"inputs":[],"name":"BOOB_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BOOOBS","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"merkleIndex","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBOOOBSPerWhiteAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBooobsPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBooobsPerPresaleMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBooobs","type":"uint256"}],"name":"mintBooob","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numBooobs","type":"uint256"},{"internalType":"uint256","name":"merkleIndex","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintBooobWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveBooobs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxPerWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxQuantityPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxQuantityPerPresaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkle","type":"bytes32"}],"name":"setWhitelistMerkle","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":"switchMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600c90805190602001906200002b929190620001ba565b506000600d556019600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff021916908315150217905550603260105560196011553480156200008357600080fd5b50604051620052a7380380620052a78339818101604052810190620000a99190620002dc565b82828160009080519060200190620000c3929190620001ba565b508060019080519060200190620000dc929190620001ba565b5050506000620000f1620001b260201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600c9080519060200190620001a8929190620001ba565b50505050620004ed565b600033905090565b828054620001c89062000412565b90600052602060002090601f016020900481019282620001ec576000855562000238565b82601f106200020757805160ff191683800117855562000238565b8280016001018555821562000238579182015b82811115620002375782518255916020019190600101906200021a565b5b5090506200024791906200024b565b5090565b5b80821115620002665760008160009055506001016200024c565b5090565b6000620002816200027b84620003a6565b6200037d565b9050828152602081018484840111156200029a57600080fd5b620002a7848285620003dc565b509392505050565b600082601f830112620002c157600080fd5b8151620002d38482602086016200026a565b91505092915050565b600080600060608486031215620002f257600080fd5b600084015167ffffffffffffffff8111156200030d57600080fd5b6200031b86828701620002af565b935050602084015167ffffffffffffffff8111156200033957600080fd5b6200034786828701620002af565b925050604084015167ffffffffffffffff8111156200036557600080fd5b6200037386828701620002af565b9150509250925092565b6000620003896200039c565b905062000397828262000448565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c457620003c3620004ad565b5b620003cf82620004dc565b9050602081019050919050565b60005b83811015620003fc578082015181840152602081019050620003df565b838111156200040c576000848401525b50505050565b600060028204905060018216806200042b57607f821691505b602082108114156200044257620004416200047e565b5b50919050565b6200045382620004dc565b810181811067ffffffffffffffff82111715620004755762000474620004ad565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614daa80620004fd6000396000f3fe6080604052600436106102255760003560e01c806361b08112116101235780639d0a1dc4116100ab578063c87b56dd1161006f578063c87b56dd146107cd578063decaee081461080a578063e76a251414610826578063e985e9c514610842578063f2fde38b1461087f57610225565b80639d0a1dc414610710578063a22cb4651461073b578063a91789e714610764578063b88d4fde1461078d578063c29ad3ff146107b657610225565b8063715018a6116100f2578063715018a61461064d5780638157c7ba14610664578063817bed751461068f5780638da5cb5b146106ba57806395d89b41146106e557610225565b806361b081121461057f57806361edf7c7146105aa5780636352211e146105d357806370a082311461061057610225565b80632f5fb5d8116101b15780634f6ccce7116101755780634f6ccce7146104ae57806353135ca0146104eb57806355f804b3146105165780635e5cac011461053f5780635fd8c7101461056857610225565b80632f5fb5d8146103dd5780632f745c591461040657806331f9c919146104435780633b6ccee71461046e57806342842e0e1461048557610225565b8063095ea7b3116101f8578063095ea7b3146102fa5780630de9b7901461032357806318160ddd1461036057806323b872dd1461038b578063290b2a0f146103b457610225565b8063011858df1461022a57806301ffc9a71461025557806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b5061023f6108a8565b60405161024c919061417f565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906136b9565b6108ae565b6040516102899190613de2565b60405180910390f35b34801561029e57600080fd5b506102a7610928565b6040516102b49190613dfd565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df919061374c565b6109ba565b6040516102f19190613d7b565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613654565b610a3f565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613775565b610b57565b6040516103579190613de2565b60405180910390f35b34801561036c57600080fd5b50610375610bdd565b604051610382919061417f565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad919061354e565b610bea565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061374c565b610c4a565b005b3480156103e957600080fd5b5061040460048036038101906103ff919061374c565b610cd0565b005b34801561041257600080fd5b5061042d60048036038101906104289190613654565b610d90565b60405161043a919061417f565b60405180910390f35b34801561044f57600080fd5b50610458610e35565b6040516104659190613de2565b60405180910390f35b34801561047a57600080fd5b50610483610e48565b005b34801561049157600080fd5b506104ac60048036038101906104a7919061354e565b610ef0565b005b3480156104ba57600080fd5b506104d560048036038101906104d0919061374c565b610f10565b6040516104e2919061417f565b60405180910390f35b3480156104f757600080fd5b50610500610fa7565b60405161050d9190613de2565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061370b565b610fba565b005b34801561054b57600080fd5b506105666004803603810190610561919061374c565b611050565b005b34801561057457600080fd5b5061057d6110d6565b005b34801561058b57600080fd5b506105946111a1565b6040516105a1919061417f565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc919061374c565b6111a7565b005b3480156105df57600080fd5b506105fa60048036038101906105f5919061374c565b61122d565b6040516106079190613d7b565b60405180910390f35b34801561061c57600080fd5b50610637600480360381019061063291906134e9565b6112df565b604051610644919061417f565b60405180910390f35b34801561065957600080fd5b50610662611397565b005b34801561067057600080fd5b506106796114d4565b604051610686919061417f565b60405180910390f35b34801561069b57600080fd5b506106a46114da565b6040516106b1919061417f565b60405180910390f35b3480156106c657600080fd5b506106cf6114e0565b6040516106dc9190613d7b565b60405180910390f35b3480156106f157600080fd5b506106fa61150a565b6040516107079190613dfd565b60405180910390f35b34801561071c57600080fd5b5061072561159c565b604051610732919061417f565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613618565b6115a7565b005b34801561077057600080fd5b5061078b60048036038101906107869190613690565b611728565b005b34801561079957600080fd5b506107b460048036038101906107af919061359d565b6117ae565b005b3480156107c257600080fd5b506107cb611810565b005b3480156107d957600080fd5b506107f460048036038101906107ef919061374c565b6118b8565b6040516108019190613dfd565b60405180910390f35b610824600480360381019061081f91906137cd565b61195f565b005b610840600480360381019061083b919061374c565b611cad565b005b34801561084e57600080fd5b5061086960048036038101906108649190613512565b611e82565b6040516108769190613de2565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a191906134e9565b611f16565b005b60105481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109215750610920826120c2565b5b9050919050565b60606000805461093790614439565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614439565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109c5826121a4565b610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90613fbf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4a8261122d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab29061407f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ada612210565b73ffffffffffffffffffffffffffffffffffffffff161480610b095750610b0881610b03612210565b611e82565b5b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613f3f565b60405180910390fd5b610b528383612218565b505050565b6000808433604051602001610b6d929190613d4f565b604051602081830303815290604052805190602001209050610bd3848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d54836122d1565b9150509392505050565b6000600880549050905090565b610bfb610bf5612210565b826122e8565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906140bf565b60405180910390fd5b610c458383836123c6565b505050565b610c52612210565b73ffffffffffffffffffffffffffffffffffffffff16610c706114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613fdf565b60405180910390fd5b80600e8190555050565b610cd8612210565b73ffffffffffffffffffffffffffffffffffffffff16610cf66114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390613fdf565b60405180910390fd5b60005b81811015610d8c576000610d61610bdd565b9050611f48811015610d7857610d773382612622565b5b508080610d849061449c565b915050610d4f565b5050565b6000610d9b836112df565b8210610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390613e1f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b610e50612210565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613fdf565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610f0b838383604051806020016040528060008152506117ae565b505050565b6000610f1a610bdd565b8210610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906140ff565b60405180910390fd5b60088281548110610f95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f60019054906101000a900460ff1681565b610fc2612210565b73ffffffffffffffffffffffffffffffffffffffff16610fe06114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90613fdf565b60405180910390fd5b80600c908051906020019061104c9291906132ae565b5050565b611058612210565b73ffffffffffffffffffffffffffffffffffffffff166110766114e0565b73ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390613fdf565b60405180910390fd5b8060108190555050565b6110de612210565b73ffffffffffffffffffffffffffffffffffffffff166110fc6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613fdf565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119d573d6000803e3d6000fd5b5050565b60115481565b6111af612210565b73ffffffffffffffffffffffffffffffffffffffff166111cd6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613fdf565b60405180910390fd5b8060118190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613f7f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613f5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139f612210565b73ffffffffffffffffffffffffffffffffffffffff166113bd6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90613fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611f4881565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151990614439565b80601f016020809104026020016040519081016040528092919081815260200182805461154590614439565b80156115925780601f1061156757610100808354040283529160200191611592565b820191906000526020600020905b81548152906001019060200180831161157557829003601f168201915b5050505050905090565b66d529ae9e86000081565b6115af612210565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613eff565b60405180910390fd5b806005600061162a612210565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116d7612210565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161171c9190613de2565b60405180910390a35050565b611730612210565b73ffffffffffffffffffffffffffffffffffffffff1661174e6114e0565b73ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613fdf565b60405180910390fd5b80600d8190555050565b6117bf6117b9612210565b836122e8565b6117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f5906140bf565b60405180910390fd5b61180a84848484612640565b50505050565b611818612210565b73ffffffffffffffffffffffffffffffffffffffff166118366114e0565b73ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613fdf565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b60606118c3826121a4565b611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f99061401f565b60405180910390fd5b600061190c61269c565b9050600081511161192c5760405180602001604052806000815250611957565b806119368461272e565b604051602001611947929190613d2b565b6040516020818303038152906040525b915050919050565b600f60019054906101000a900460ff166119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613e9f565b60405180910390fd5b600084116119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061415f565b60405180910390fd5b6119fc838383610b57565b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061411f565b60405180910390fd5b601054611a9085600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128db90919063ffffffff16565b1115611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac89061405f565b60405180910390fd5b611f48611aee85611ae0610bdd565b6128db90919063ffffffff16565b1115611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906140df565b60405180910390fd5b601154841115611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b9061413f565b60405180910390fd5b34611b8f8566d529ae9e8600006128f190919063ffffffff16565b1115611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790613e7f565b60405180910390fd5b60005b84811015611ca6576000611be5610bdd565b9050611f48811015611c9257611bfb3382612622565b611c4e6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128db90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080611c9e9061449c565b915050611bd3565b5050505050565b600f60009054906101000a900460ff16611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061409f565b60405180910390fd5b60008111611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d369061415f565b60405180910390fd5b611f48611d5c82611d4e610bdd565b6128db90919063ffffffff16565b1115611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906140df565b60405180910390fd5b600e54811115611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd99061403f565b60405180910390fd5b34611dfd8266d529ae9e8600006128f190919063ffffffff16565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613e7f565b60405180910390fd5b60005b81811015611e7e576000611e53610bdd565b9050611f48811015611e6a57611e693382612622565b5b508080611e769061449c565b915050611e41565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f1e612210565b73ffffffffffffffffffffffffffffffffffffffff16611f3c6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990613fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613e5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061218d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061219d575061219c82612907565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661228b8361122d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826122de8584612971565b1490509392505050565b60006122f3826121a4565b612332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232990613f1f565b60405180910390fd5b600061233d8361122d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123ac57508373ffffffffffffffffffffffffffffffffffffffff16612394846109ba565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bd57506123bc8185611e82565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e68261122d565b73ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613fff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613edf565b60405180910390fd5b6124b7838383612a4a565b6124c2600082612218565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125129190614345565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125699190614264565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61263c828260405180602001604052806000815250612b5e565b5050565b61264b8484846123c6565b61265784848484612bb9565b612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90613e3f565b60405180910390fd5b50505050565b6060600c80546126ab90614439565b80601f01602080910402602001604051908101604052809291908181526020018280546126d790614439565b80156127245780601f106126f957610100808354040283529160200191612724565b820191906000526020600020905b81548152906001019060200180831161270757829003601f168201915b5050505050905090565b60606000821415612776576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128d6565b600082905060005b600082146127a85780806127919061449c565b915050600a826127a191906142ba565b915061277e565b60008167ffffffffffffffff8111156127ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281c5781602001600182028036833780820191505090505b5090505b600085146128cf576001826128359190614345565b9150600a85612844919061451d565b60306128509190614264565b60f81b81838151811061288c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128c891906142ba565b9450612820565b8093505050505b919050565b600081836128e99190614264565b905092915050565b600081836128ff91906142eb565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008082905060005b8451811015612a3f5760008582815181106129be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116129ff5782816040516020016129e2929190613cff565b604051602081830303815290604052805190602001209250612a2b565b8083604051602001612a12929190613cff565b6040516020818303038152906040528051906020012092505b508080612a379061449c565b91505061297a565b508091505092915050565b612a55838383612d50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9857612a9381612d55565b612ad7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ad657612ad58382612d9e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1a57612b1581612f0b565b612b59565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b5857612b57828261304e565b5b5b505050565b612b6883836130cd565b612b756000848484612bb9565b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90613e3f565b60405180910390fd5b505050565b6000612bda8473ffffffffffffffffffffffffffffffffffffffff1661329b565b15612d43578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c03612210565b8786866040518563ffffffff1660e01b8152600401612c259493929190613d96565b602060405180830381600087803b158015612c3f57600080fd5b505af1925050508015612c7057506040513d601f19601f82011682018060405250810190612c6d91906136e2565b60015b612cf3573d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b50600081511415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290613e3f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d48565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dab846112df565b612db59190614345565b9050600060076000848152602001908152602001600020549050818114612e9a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f1f9190614345565b9050600060096000848152602001908152602001600020549050600060088381548110612f75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613032577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613059836112df565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561313d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313490613f9f565b60405180910390fd5b613146816121a4565b15613186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317d90613ebf565b60405180910390fd5b61319260008383612a4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e29190614264565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132ba90614439565b90600052602060002090601f0160209004810192826132dc5760008555613323565b82601f106132f557805160ff1916838001178555613323565b82800160010185558215613323579182015b82811115613322578251825591602001919060010190613307565b5b5090506133309190613334565b5090565b5b8082111561334d576000816000905550600101613335565b5090565b600061336461335f846141bf565b61419a565b90508281526020810184848401111561337c57600080fd5b6133878482856143f7565b509392505050565b60006133a261339d846141f0565b61419a565b9050828152602081018484840111156133ba57600080fd5b6133c58482856143f7565b509392505050565b6000813590506133dc81614d01565b92915050565b60008083601f8401126133f457600080fd5b8235905067ffffffffffffffff81111561340d57600080fd5b60208301915083602082028301111561342557600080fd5b9250929050565b60008135905061343b81614d18565b92915050565b60008135905061345081614d2f565b92915050565b60008135905061346581614d46565b92915050565b60008151905061347a81614d46565b92915050565b600082601f83011261349157600080fd5b81356134a1848260208601613351565b91505092915050565b600082601f8301126134bb57600080fd5b81356134cb84826020860161338f565b91505092915050565b6000813590506134e381614d5d565b92915050565b6000602082840312156134fb57600080fd5b6000613509848285016133cd565b91505092915050565b6000806040838503121561352557600080fd5b6000613533858286016133cd565b9250506020613544858286016133cd565b9150509250929050565b60008060006060848603121561356357600080fd5b6000613571868287016133cd565b9350506020613582868287016133cd565b9250506040613593868287016134d4565b9150509250925092565b600080600080608085870312156135b357600080fd5b60006135c1878288016133cd565b94505060206135d2878288016133cd565b93505060406135e3878288016134d4565b925050606085013567ffffffffffffffff81111561360057600080fd5b61360c87828801613480565b91505092959194509250565b6000806040838503121561362b57600080fd5b6000613639858286016133cd565b925050602061364a8582860161342c565b9150509250929050565b6000806040838503121561366757600080fd5b6000613675858286016133cd565b9250506020613686858286016134d4565b9150509250929050565b6000602082840312156136a257600080fd5b60006136b084828501613441565b91505092915050565b6000602082840312156136cb57600080fd5b60006136d984828501613456565b91505092915050565b6000602082840312156136f457600080fd5b60006137028482850161346b565b91505092915050565b60006020828403121561371d57600080fd5b600082013567ffffffffffffffff81111561373757600080fd5b613743848285016134aa565b91505092915050565b60006020828403121561375e57600080fd5b600061376c848285016134d4565b91505092915050565b60008060006040848603121561378a57600080fd5b6000613798868287016134d4565b935050602084013567ffffffffffffffff8111156137b557600080fd5b6137c1868287016133e2565b92509250509250925092565b600080600080606085870312156137e357600080fd5b60006137f1878288016134d4565b9450506020613802878288016134d4565b935050604085013567ffffffffffffffff81111561381f57600080fd5b61382b878288016133e2565b925092505092959194509250565b61384281614379565b82525050565b61385961385482614379565b6144e5565b82525050565b6138688161438b565b82525050565b61387f61387a82614397565b6144f7565b82525050565b600061389082614221565b61389a8185614237565b93506138aa818560208601614406565b6138b38161460a565b840191505092915050565b60006138c98261422c565b6138d38185614248565b93506138e3818560208601614406565b6138ec8161460a565b840191505092915050565b60006139028261422c565b61390c8185614259565b935061391c818560208601614406565b80840191505092915050565b6000613935602b83614248565b915061394082614628565b604082019050919050565b6000613958603283614248565b915061396382614677565b604082019050919050565b600061397b602683614248565b9150613986826146c6565b604082019050919050565b600061399e601883614248565b91506139a982614715565b602082019050919050565b60006139c1601383614248565b91506139cc8261473e565b602082019050919050565b60006139e4601c83614248565b91506139ef82614767565b602082019050919050565b6000613a07602483614248565b9150613a1282614790565b604082019050919050565b6000613a2a601983614248565b9150613a35826147df565b602082019050919050565b6000613a4d602c83614248565b9150613a5882614808565b604082019050919050565b6000613a70603883614248565b9150613a7b82614857565b604082019050919050565b6000613a93602a83614248565b9150613a9e826148a6565b604082019050919050565b6000613ab6602983614248565b9150613ac1826148f5565b604082019050919050565b6000613ad9602083614248565b9150613ae482614944565b602082019050919050565b6000613afc602c83614248565b9150613b078261496d565b604082019050919050565b6000613b1f602083614248565b9150613b2a826149bc565b602082019050919050565b6000613b42602983614248565b9150613b4d826149e5565b604082019050919050565b6000613b65602f83614248565b9150613b7082614a34565b604082019050919050565b6000613b88602983614248565b9150613b9382614a83565b604082019050919050565b6000613bab602683614248565b9150613bb682614ad2565b604082019050919050565b6000613bce602183614248565b9150613bd982614b21565b604082019050919050565b6000613bf1601383614248565b9150613bfc82614b70565b602082019050919050565b6000613c14603183614248565b9150613c1f82614b99565b604082019050919050565b6000613c37601e83614248565b9150613c4282614be8565b602082019050919050565b6000613c5a602c83614248565b9150613c6582614c11565b604082019050919050565b6000613c7d601183614248565b9150613c8882614c60565b602082019050919050565b6000613ca0603583614248565b9150613cab82614c89565b604082019050919050565b6000613cc3601383614248565b9150613cce82614cd8565b602082019050919050565b613ce2816143ed565b82525050565b613cf9613cf4826143ed565b614513565b82525050565b6000613d0b828561386e565b602082019150613d1b828461386e565b6020820191508190509392505050565b6000613d3782856138f7565b9150613d4382846138f7565b91508190509392505050565b6000613d5b8285613ce8565b602082019150613d6b8284613848565b6014820191508190509392505050565b6000602082019050613d906000830184613839565b92915050565b6000608082019050613dab6000830187613839565b613db86020830186613839565b613dc56040830185613cd9565b8181036060830152613dd78184613885565b905095945050505050565b6000602082019050613df7600083018461385f565b92915050565b60006020820190508181036000830152613e1781846138be565b905092915050565b60006020820190508181036000830152613e3881613928565b9050919050565b60006020820190508181036000830152613e588161394b565b9050919050565b60006020820190508181036000830152613e788161396e565b9050919050565b60006020820190508181036000830152613e9881613991565b9050919050565b60006020820190508181036000830152613eb8816139b4565b9050919050565b60006020820190508181036000830152613ed8816139d7565b9050919050565b60006020820190508181036000830152613ef8816139fa565b9050919050565b60006020820190508181036000830152613f1881613a1d565b9050919050565b60006020820190508181036000830152613f3881613a40565b9050919050565b60006020820190508181036000830152613f5881613a63565b9050919050565b60006020820190508181036000830152613f7881613a86565b9050919050565b60006020820190508181036000830152613f9881613aa9565b9050919050565b60006020820190508181036000830152613fb881613acc565b9050919050565b60006020820190508181036000830152613fd881613aef565b9050919050565b60006020820190508181036000830152613ff881613b12565b9050919050565b6000602082019050818103600083015261401881613b35565b9050919050565b6000602082019050818103600083015261403881613b58565b9050919050565b6000602082019050818103600083015261405881613b7b565b9050919050565b6000602082019050818103600083015261407881613b9e565b9050919050565b6000602082019050818103600083015261409881613bc1565b9050919050565b600060208201905081810360008301526140b881613be4565b9050919050565b600060208201905081810360008301526140d881613c07565b9050919050565b600060208201905081810360008301526140f881613c2a565b9050919050565b6000602082019050818103600083015261411881613c4d565b9050919050565b6000602082019050818103600083015261413881613c70565b9050919050565b6000602082019050818103600083015261415881613c93565b9050919050565b6000602082019050818103600083015261417881613cb6565b9050919050565b60006020820190506141946000830184613cd9565b92915050565b60006141a46141b5565b90506141b0828261446b565b919050565b6000604051905090565b600067ffffffffffffffff8211156141da576141d96145db565b5b6141e38261460a565b9050602081019050919050565b600067ffffffffffffffff82111561420b5761420a6145db565b5b6142148261460a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061426f826143ed565b915061427a836143ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142af576142ae61454e565b5b828201905092915050565b60006142c5826143ed565b91506142d0836143ed565b9250826142e0576142df61457d565b5b828204905092915050565b60006142f6826143ed565b9150614301836143ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433a5761433961454e565b5b828202905092915050565b6000614350826143ed565b915061435b836143ed565b92508282101561436e5761436d61454e565b5b828203905092915050565b6000614384826143cd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614424578082015181840152602081019050614409565b83811115614433576000848401525b50505050565b6000600282049050600182168061445157607f821691505b60208210811415614465576144646145ac565b5b50919050565b6144748261460a565b810181811067ffffffffffffffff82111715614493576144926145db565b5b80604052505050565b60006144a7826143ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144da576144d961454e565b5b600182019050919050565b60006144f082614501565b9050919050565b6000819050919050565b600061450c8261461b565b9050919050565b6000819050919050565b6000614528826143ed565b9150614533836143ed565b9250826145435761454261457d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4574682073656e74206e6f742073756666696369656e742e0000000000000000600082015250565b7f50726573616c65206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e742074686973206e756d626572206f6620626f6f6f6260008201527f7320696e20747820210000000000000000000000000000000000000000000000602082015250565b7f4d6f7265207468616e20796f757220616c6c6f7765642070726573616c65206260008201527f6f6f6f6273210000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4f6e6c79203830303820626f6f6f62732061726520617661696c61626c650000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465642021000000000000000000000000000000600082015250565b7f43616e6e6f74206d696e742074686973206e756d626572206f6620707265736160008201527f6c6520626f6f6f627320696e206f6e6520747820210000000000000000000000602082015250565b7f4d6f7265207468616e203020706c656173652e00000000000000000000000000600082015250565b614d0a81614379565b8114614d1557600080fd5b50565b614d218161438b565b8114614d2c57600080fd5b50565b614d3881614397565b8114614d4357600080fd5b50565b614d4f816143a1565b8114614d5a57600080fd5b50565b614d66816143ed565b8114614d7157600080fd5b5056fea264697066735822122037e81e892849ae059c382b47321342fefb7c78609b032d94fe79f99fd5f5f7aa64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005424f4f4f420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424f4f4f42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001268747470733a2f2f626f6f6f622e6f72672f0000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c806361b08112116101235780639d0a1dc4116100ab578063c87b56dd1161006f578063c87b56dd146107cd578063decaee081461080a578063e76a251414610826578063e985e9c514610842578063f2fde38b1461087f57610225565b80639d0a1dc414610710578063a22cb4651461073b578063a91789e714610764578063b88d4fde1461078d578063c29ad3ff146107b657610225565b8063715018a6116100f2578063715018a61461064d5780638157c7ba14610664578063817bed751461068f5780638da5cb5b146106ba57806395d89b41146106e557610225565b806361b081121461057f57806361edf7c7146105aa5780636352211e146105d357806370a082311461061057610225565b80632f5fb5d8116101b15780634f6ccce7116101755780634f6ccce7146104ae57806353135ca0146104eb57806355f804b3146105165780635e5cac011461053f5780635fd8c7101461056857610225565b80632f5fb5d8146103dd5780632f745c591461040657806331f9c919146104435780633b6ccee71461046e57806342842e0e1461048557610225565b8063095ea7b3116101f8578063095ea7b3146102fa5780630de9b7901461032357806318160ddd1461036057806323b872dd1461038b578063290b2a0f146103b457610225565b8063011858df1461022a57806301ffc9a71461025557806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b5061023f6108a8565b60405161024c919061417f565b60405180910390f35b34801561026157600080fd5b5061027c600480360381019061027791906136b9565b6108ae565b6040516102899190613de2565b60405180910390f35b34801561029e57600080fd5b506102a7610928565b6040516102b49190613dfd565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df919061374c565b6109ba565b6040516102f19190613d7b565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613654565b610a3f565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613775565b610b57565b6040516103579190613de2565b60405180910390f35b34801561036c57600080fd5b50610375610bdd565b604051610382919061417f565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad919061354e565b610bea565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061374c565b610c4a565b005b3480156103e957600080fd5b5061040460048036038101906103ff919061374c565b610cd0565b005b34801561041257600080fd5b5061042d60048036038101906104289190613654565b610d90565b60405161043a919061417f565b60405180910390f35b34801561044f57600080fd5b50610458610e35565b6040516104659190613de2565b60405180910390f35b34801561047a57600080fd5b50610483610e48565b005b34801561049157600080fd5b506104ac60048036038101906104a7919061354e565b610ef0565b005b3480156104ba57600080fd5b506104d560048036038101906104d0919061374c565b610f10565b6040516104e2919061417f565b60405180910390f35b3480156104f757600080fd5b50610500610fa7565b60405161050d9190613de2565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061370b565b610fba565b005b34801561054b57600080fd5b506105666004803603810190610561919061374c565b611050565b005b34801561057457600080fd5b5061057d6110d6565b005b34801561058b57600080fd5b506105946111a1565b6040516105a1919061417f565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc919061374c565b6111a7565b005b3480156105df57600080fd5b506105fa60048036038101906105f5919061374c565b61122d565b6040516106079190613d7b565b60405180910390f35b34801561061c57600080fd5b50610637600480360381019061063291906134e9565b6112df565b604051610644919061417f565b60405180910390f35b34801561065957600080fd5b50610662611397565b005b34801561067057600080fd5b506106796114d4565b604051610686919061417f565b60405180910390f35b34801561069b57600080fd5b506106a46114da565b6040516106b1919061417f565b60405180910390f35b3480156106c657600080fd5b506106cf6114e0565b6040516106dc9190613d7b565b60405180910390f35b3480156106f157600080fd5b506106fa61150a565b6040516107079190613dfd565b60405180910390f35b34801561071c57600080fd5b5061072561159c565b604051610732919061417f565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613618565b6115a7565b005b34801561077057600080fd5b5061078b60048036038101906107869190613690565b611728565b005b34801561079957600080fd5b506107b460048036038101906107af919061359d565b6117ae565b005b3480156107c257600080fd5b506107cb611810565b005b3480156107d957600080fd5b506107f460048036038101906107ef919061374c565b6118b8565b6040516108019190613dfd565b60405180910390f35b610824600480360381019061081f91906137cd565b61195f565b005b610840600480360381019061083b919061374c565b611cad565b005b34801561084e57600080fd5b5061086960048036038101906108649190613512565b611e82565b6040516108769190613de2565b60405180910390f35b34801561088b57600080fd5b506108a660048036038101906108a191906134e9565b611f16565b005b60105481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109215750610920826120c2565b5b9050919050565b60606000805461093790614439565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614439565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109c5826121a4565b610a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fb90613fbf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4a8261122d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab29061407f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ada612210565b73ffffffffffffffffffffffffffffffffffffffff161480610b095750610b0881610b03612210565b611e82565b5b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613f3f565b60405180910390fd5b610b528383612218565b505050565b6000808433604051602001610b6d929190613d4f565b604051602081830303815290604052805190602001209050610bd3848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600d54836122d1565b9150509392505050565b6000600880549050905090565b610bfb610bf5612210565b826122e8565b610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906140bf565b60405180910390fd5b610c458383836123c6565b505050565b610c52612210565b73ffffffffffffffffffffffffffffffffffffffff16610c706114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613fdf565b60405180910390fd5b80600e8190555050565b610cd8612210565b73ffffffffffffffffffffffffffffffffffffffff16610cf66114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4390613fdf565b60405180910390fd5b60005b81811015610d8c576000610d61610bdd565b9050611f48811015610d7857610d773382612622565b5b508080610d849061449c565b915050610d4f565b5050565b6000610d9b836112df565b8210610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390613e1f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b610e50612210565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613fdf565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610f0b838383604051806020016040528060008152506117ae565b505050565b6000610f1a610bdd565b8210610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906140ff565b60405180910390fd5b60088281548110610f95577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f60019054906101000a900460ff1681565b610fc2612210565b73ffffffffffffffffffffffffffffffffffffffff16610fe06114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90613fdf565b60405180910390fd5b80600c908051906020019061104c9291906132ae565b5050565b611058612210565b73ffffffffffffffffffffffffffffffffffffffff166110766114e0565b73ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390613fdf565b60405180910390fd5b8060108190555050565b6110de612210565b73ffffffffffffffffffffffffffffffffffffffff166110fc6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613fdf565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119d573d6000803e3d6000fd5b5050565b60115481565b6111af612210565b73ffffffffffffffffffffffffffffffffffffffff166111cd6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613fdf565b60405180910390fd5b8060118190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613f7f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613f5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139f612210565b73ffffffffffffffffffffffffffffffffffffffff166113bd6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90613fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611f4881565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461151990614439565b80601f016020809104026020016040519081016040528092919081815260200182805461154590614439565b80156115925780601f1061156757610100808354040283529160200191611592565b820191906000526020600020905b81548152906001019060200180831161157557829003601f168201915b5050505050905090565b66d529ae9e86000081565b6115af612210565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490613eff565b60405180910390fd5b806005600061162a612210565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116d7612210565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161171c9190613de2565b60405180910390a35050565b611730612210565b73ffffffffffffffffffffffffffffffffffffffff1661174e6114e0565b73ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613fdf565b60405180910390fd5b80600d8190555050565b6117bf6117b9612210565b836122e8565b6117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f5906140bf565b60405180910390fd5b61180a84848484612640565b50505050565b611818612210565b73ffffffffffffffffffffffffffffffffffffffff166118366114e0565b73ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613fdf565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b60606118c3826121a4565b611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f99061401f565b60405180910390fd5b600061190c61269c565b9050600081511161192c5760405180602001604052806000815250611957565b806119368461272e565b604051602001611947929190613d2b565b6040516020818303038152906040525b915050919050565b600f60019054906101000a900460ff166119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590613e9f565b60405180910390fd5b600084116119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061415f565b60405180910390fd5b6119fc838383610b57565b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061411f565b60405180910390fd5b601054611a9085600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128db90919063ffffffff16565b1115611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac89061405f565b60405180910390fd5b611f48611aee85611ae0610bdd565b6128db90919063ffffffff16565b1115611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b26906140df565b60405180910390fd5b601154841115611b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6b9061413f565b60405180910390fd5b34611b8f8566d529ae9e8600006128f190919063ffffffff16565b1115611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790613e7f565b60405180910390fd5b60005b84811015611ca6576000611be5610bdd565b9050611f48811015611c9257611bfb3382612622565b611c4e6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128db90919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080611c9e9061449c565b915050611bd3565b5050505050565b600f60009054906101000a900460ff16611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf39061409f565b60405180910390fd5b60008111611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d369061415f565b60405180910390fd5b611f48611d5c82611d4e610bdd565b6128db90919063ffffffff16565b1115611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906140df565b60405180910390fd5b600e54811115611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd99061403f565b60405180910390fd5b34611dfd8266d529ae9e8600006128f190919063ffffffff16565b1115611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613e7f565b60405180910390fd5b60005b81811015611e7e576000611e53610bdd565b9050611f48811015611e6a57611e693382612622565b5b508080611e769061449c565b915050611e41565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f1e612210565b73ffffffffffffffffffffffffffffffffffffffff16611f3c6114e0565b73ffffffffffffffffffffffffffffffffffffffff1614611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990613fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613e5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061218d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061219d575061219c82612907565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661228b8361122d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000826122de8584612971565b1490509392505050565b60006122f3826121a4565b612332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232990613f1f565b60405180910390fd5b600061233d8361122d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123ac57508373ffffffffffffffffffffffffffffffffffffffff16612394846109ba565b73ffffffffffffffffffffffffffffffffffffffff16145b806123bd57506123bc8185611e82565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123e68261122d565b73ffffffffffffffffffffffffffffffffffffffff161461243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613fff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613edf565b60405180910390fd5b6124b7838383612a4a565b6124c2600082612218565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125129190614345565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125699190614264565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61263c828260405180602001604052806000815250612b5e565b5050565b61264b8484846123c6565b61265784848484612bb9565b612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90613e3f565b60405180910390fd5b50505050565b6060600c80546126ab90614439565b80601f01602080910402602001604051908101604052809291908181526020018280546126d790614439565b80156127245780601f106126f957610100808354040283529160200191612724565b820191906000526020600020905b81548152906001019060200180831161270757829003601f168201915b5050505050905090565b60606000821415612776576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128d6565b600082905060005b600082146127a85780806127919061449c565b915050600a826127a191906142ba565b915061277e565b60008167ffffffffffffffff8111156127ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281c5781602001600182028036833780820191505090505b5090505b600085146128cf576001826128359190614345565b9150600a85612844919061451d565b60306128509190614264565b60f81b81838151811061288c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128c891906142ba565b9450612820565b8093505050505b919050565b600081836128e99190614264565b905092915050565b600081836128ff91906142eb565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008082905060005b8451811015612a3f5760008582815181106129be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116129ff5782816040516020016129e2929190613cff565b604051602081830303815290604052805190602001209250612a2b565b8083604051602001612a12929190613cff565b6040516020818303038152906040528051906020012092505b508080612a379061449c565b91505061297a565b508091505092915050565b612a55838383612d50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a9857612a9381612d55565b612ad7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ad657612ad58382612d9e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b1a57612b1581612f0b565b612b59565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b5857612b57828261304e565b5b5b505050565b612b6883836130cd565b612b756000848484612bb9565b612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab90613e3f565b60405180910390fd5b505050565b6000612bda8473ffffffffffffffffffffffffffffffffffffffff1661329b565b15612d43578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c03612210565b8786866040518563ffffffff1660e01b8152600401612c259493929190613d96565b602060405180830381600087803b158015612c3f57600080fd5b505af1925050508015612c7057506040513d601f19601f82011682018060405250810190612c6d91906136e2565b60015b612cf3573d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b50600081511415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290613e3f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d48565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dab846112df565b612db59190614345565b9050600060076000848152602001908152602001600020549050818114612e9a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f1f9190614345565b9050600060096000848152602001908152602001600020549050600060088381548110612f75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613032577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613059836112df565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561313d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313490613f9f565b60405180910390fd5b613146816121a4565b15613186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317d90613ebf565b60405180910390fd5b61319260008383612a4a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e29190614264565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546132ba90614439565b90600052602060002090601f0160209004810192826132dc5760008555613323565b82601f106132f557805160ff1916838001178555613323565b82800160010185558215613323579182015b82811115613322578251825591602001919060010190613307565b5b5090506133309190613334565b5090565b5b8082111561334d576000816000905550600101613335565b5090565b600061336461335f846141bf565b61419a565b90508281526020810184848401111561337c57600080fd5b6133878482856143f7565b509392505050565b60006133a261339d846141f0565b61419a565b9050828152602081018484840111156133ba57600080fd5b6133c58482856143f7565b509392505050565b6000813590506133dc81614d01565b92915050565b60008083601f8401126133f457600080fd5b8235905067ffffffffffffffff81111561340d57600080fd5b60208301915083602082028301111561342557600080fd5b9250929050565b60008135905061343b81614d18565b92915050565b60008135905061345081614d2f565b92915050565b60008135905061346581614d46565b92915050565b60008151905061347a81614d46565b92915050565b600082601f83011261349157600080fd5b81356134a1848260208601613351565b91505092915050565b600082601f8301126134bb57600080fd5b81356134cb84826020860161338f565b91505092915050565b6000813590506134e381614d5d565b92915050565b6000602082840312156134fb57600080fd5b6000613509848285016133cd565b91505092915050565b6000806040838503121561352557600080fd5b6000613533858286016133cd565b9250506020613544858286016133cd565b9150509250929050565b60008060006060848603121561356357600080fd5b6000613571868287016133cd565b9350506020613582868287016133cd565b9250506040613593868287016134d4565b9150509250925092565b600080600080608085870312156135b357600080fd5b60006135c1878288016133cd565b94505060206135d2878288016133cd565b93505060406135e3878288016134d4565b925050606085013567ffffffffffffffff81111561360057600080fd5b61360c87828801613480565b91505092959194509250565b6000806040838503121561362b57600080fd5b6000613639858286016133cd565b925050602061364a8582860161342c565b9150509250929050565b6000806040838503121561366757600080fd5b6000613675858286016133cd565b9250506020613686858286016134d4565b9150509250929050565b6000602082840312156136a257600080fd5b60006136b084828501613441565b91505092915050565b6000602082840312156136cb57600080fd5b60006136d984828501613456565b91505092915050565b6000602082840312156136f457600080fd5b60006137028482850161346b565b91505092915050565b60006020828403121561371d57600080fd5b600082013567ffffffffffffffff81111561373757600080fd5b613743848285016134aa565b91505092915050565b60006020828403121561375e57600080fd5b600061376c848285016134d4565b91505092915050565b60008060006040848603121561378a57600080fd5b6000613798868287016134d4565b935050602084013567ffffffffffffffff8111156137b557600080fd5b6137c1868287016133e2565b92509250509250925092565b600080600080606085870312156137e357600080fd5b60006137f1878288016134d4565b9450506020613802878288016134d4565b935050604085013567ffffffffffffffff81111561381f57600080fd5b61382b878288016133e2565b925092505092959194509250565b61384281614379565b82525050565b61385961385482614379565b6144e5565b82525050565b6138688161438b565b82525050565b61387f61387a82614397565b6144f7565b82525050565b600061389082614221565b61389a8185614237565b93506138aa818560208601614406565b6138b38161460a565b840191505092915050565b60006138c98261422c565b6138d38185614248565b93506138e3818560208601614406565b6138ec8161460a565b840191505092915050565b60006139028261422c565b61390c8185614259565b935061391c818560208601614406565b80840191505092915050565b6000613935602b83614248565b915061394082614628565b604082019050919050565b6000613958603283614248565b915061396382614677565b604082019050919050565b600061397b602683614248565b9150613986826146c6565b604082019050919050565b600061399e601883614248565b91506139a982614715565b602082019050919050565b60006139c1601383614248565b91506139cc8261473e565b602082019050919050565b60006139e4601c83614248565b91506139ef82614767565b602082019050919050565b6000613a07602483614248565b9150613a1282614790565b604082019050919050565b6000613a2a601983614248565b9150613a35826147df565b602082019050919050565b6000613a4d602c83614248565b9150613a5882614808565b604082019050919050565b6000613a70603883614248565b9150613a7b82614857565b604082019050919050565b6000613a93602a83614248565b9150613a9e826148a6565b604082019050919050565b6000613ab6602983614248565b9150613ac1826148f5565b604082019050919050565b6000613ad9602083614248565b9150613ae482614944565b602082019050919050565b6000613afc602c83614248565b9150613b078261496d565b604082019050919050565b6000613b1f602083614248565b9150613b2a826149bc565b602082019050919050565b6000613b42602983614248565b9150613b4d826149e5565b604082019050919050565b6000613b65602f83614248565b9150613b7082614a34565b604082019050919050565b6000613b88602983614248565b9150613b9382614a83565b604082019050919050565b6000613bab602683614248565b9150613bb682614ad2565b604082019050919050565b6000613bce602183614248565b9150613bd982614b21565b604082019050919050565b6000613bf1601383614248565b9150613bfc82614b70565b602082019050919050565b6000613c14603183614248565b9150613c1f82614b99565b604082019050919050565b6000613c37601e83614248565b9150613c4282614be8565b602082019050919050565b6000613c5a602c83614248565b9150613c6582614c11565b604082019050919050565b6000613c7d601183614248565b9150613c8882614c60565b602082019050919050565b6000613ca0603583614248565b9150613cab82614c89565b604082019050919050565b6000613cc3601383614248565b9150613cce82614cd8565b602082019050919050565b613ce2816143ed565b82525050565b613cf9613cf4826143ed565b614513565b82525050565b6000613d0b828561386e565b602082019150613d1b828461386e565b6020820191508190509392505050565b6000613d3782856138f7565b9150613d4382846138f7565b91508190509392505050565b6000613d5b8285613ce8565b602082019150613d6b8284613848565b6014820191508190509392505050565b6000602082019050613d906000830184613839565b92915050565b6000608082019050613dab6000830187613839565b613db86020830186613839565b613dc56040830185613cd9565b8181036060830152613dd78184613885565b905095945050505050565b6000602082019050613df7600083018461385f565b92915050565b60006020820190508181036000830152613e1781846138be565b905092915050565b60006020820190508181036000830152613e3881613928565b9050919050565b60006020820190508181036000830152613e588161394b565b9050919050565b60006020820190508181036000830152613e788161396e565b9050919050565b60006020820190508181036000830152613e9881613991565b9050919050565b60006020820190508181036000830152613eb8816139b4565b9050919050565b60006020820190508181036000830152613ed8816139d7565b9050919050565b60006020820190508181036000830152613ef8816139fa565b9050919050565b60006020820190508181036000830152613f1881613a1d565b9050919050565b60006020820190508181036000830152613f3881613a40565b9050919050565b60006020820190508181036000830152613f5881613a63565b9050919050565b60006020820190508181036000830152613f7881613a86565b9050919050565b60006020820190508181036000830152613f9881613aa9565b9050919050565b60006020820190508181036000830152613fb881613acc565b9050919050565b60006020820190508181036000830152613fd881613aef565b9050919050565b60006020820190508181036000830152613ff881613b12565b9050919050565b6000602082019050818103600083015261401881613b35565b9050919050565b6000602082019050818103600083015261403881613b58565b9050919050565b6000602082019050818103600083015261405881613b7b565b9050919050565b6000602082019050818103600083015261407881613b9e565b9050919050565b6000602082019050818103600083015261409881613bc1565b9050919050565b600060208201905081810360008301526140b881613be4565b9050919050565b600060208201905081810360008301526140d881613c07565b9050919050565b600060208201905081810360008301526140f881613c2a565b9050919050565b6000602082019050818103600083015261411881613c4d565b9050919050565b6000602082019050818103600083015261413881613c70565b9050919050565b6000602082019050818103600083015261415881613c93565b9050919050565b6000602082019050818103600083015261417881613cb6565b9050919050565b60006020820190506141946000830184613cd9565b92915050565b60006141a46141b5565b90506141b0828261446b565b919050565b6000604051905090565b600067ffffffffffffffff8211156141da576141d96145db565b5b6141e38261460a565b9050602081019050919050565b600067ffffffffffffffff82111561420b5761420a6145db565b5b6142148261460a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061426f826143ed565b915061427a836143ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142af576142ae61454e565b5b828201905092915050565b60006142c5826143ed565b91506142d0836143ed565b9250826142e0576142df61457d565b5b828204905092915050565b60006142f6826143ed565b9150614301836143ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433a5761433961454e565b5b828202905092915050565b6000614350826143ed565b915061435b836143ed565b92508282101561436e5761436d61454e565b5b828203905092915050565b6000614384826143cd565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614424578082015181840152602081019050614409565b83811115614433576000848401525b50505050565b6000600282049050600182168061445157607f821691505b60208210811415614465576144646145ac565b5b50919050565b6144748261460a565b810181811067ffffffffffffffff82111715614493576144926145db565b5b80604052505050565b60006144a7826143ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144da576144d961454e565b5b600182019050919050565b60006144f082614501565b9050919050565b6000819050919050565b600061450c8261461b565b9050919050565b6000819050919050565b6000614528826143ed565b9150614533836143ed565b9250826145435761454261457d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4574682073656e74206e6f742073756666696369656e742e0000000000000000600082015250565b7f50726573616c65206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e742074686973206e756d626572206f6620626f6f6f6260008201527f7320696e20747820210000000000000000000000000000000000000000000000602082015250565b7f4d6f7265207468616e20796f757220616c6c6f7765642070726573616c65206260008201527f6f6f6f6273210000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f74206163746976652e00000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4f6e6c79203830303820626f6f6f62732061726520617661696c61626c650000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f742077686974656c69737465642021000000000000000000000000000000600082015250565b7f43616e6e6f74206d696e742074686973206e756d626572206f6620707265736160008201527f6c6520626f6f6f627320696e206f6e6520747820210000000000000000000000602082015250565b7f4d6f7265207468616e203020706c656173652e00000000000000000000000000600082015250565b614d0a81614379565b8114614d1557600080fd5b50565b614d218161438b565b8114614d2c57600080fd5b50565b614d3881614397565b8114614d4357600080fd5b50565b614d4f816143a1565b8114614d5a57600080fd5b50565b614d66816143ed565b8114614d7157600080fd5b5056fea264697066735822122037e81e892849ae059c382b47321342fefb7c78609b032d94fe79f99fd5f5f7aa64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005424f4f4f420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424f4f4f42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001268747470733a2f2f626f6f6f622e6f72672f0000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): BOOOB
Arg [1] : symbol (string): BOOOB
Arg [2] : baseURI (string): https://booob.org/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 424f4f4f42000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 424f4f4f42000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [8] : 68747470733a2f2f626f6f6f622e6f72672f0000000000000000000000000000
Deployed Bytecode Sourcemap
51043:4840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52033:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42618:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31351:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30888:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54212:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43271:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32241:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55164:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54681:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42939:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51812:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54966:91;;;;;;;;;;;;;:::i;:::-;;32617:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43461:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51934:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55670:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55537:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54518:155;;;;;;;;;;;;;:::i;:::-;;52161:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55285:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29585:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29315:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50459:148;;;;;;;;;;;;;:::i;:::-;;51489:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51705:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49808:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30060:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51588:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31644:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55420:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32839:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55065:91;;;;;;;;;;;;;:::i;:::-;;30235:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53166:1038;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52455:698;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32010:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50762:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52033:44;;;;:::o;42618:237::-;42720:4;42759:35;42744:50;;;:11;:50;;;;:103;;;;42811:36;42835:11;42811:23;:36::i;:::-;42744:103;42737:110;;42618:237;;;:::o;29891:100::-;29945:13;29978:5;29971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29891:100;:::o;31351:221::-;31427:7;31455:16;31463:7;31455;:16::i;:::-;31447:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31540:15;:24;31556:7;31540:24;;;;;;;;;;;;;;;;;;;;;31533:31;;31351:221;;;:::o;30888:397::-;30969:13;30985:23;31000:7;30985:14;:23::i;:::-;30969:39;;31033:5;31027:11;;:2;:11;;;;31019:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31113:5;31097:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31122:37;31139:5;31146:12;:10;:12::i;:::-;31122:16;:37::i;:::-;31097:62;31089:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31256:21;31265:2;31269:7;31256:8;:21::i;:::-;30888:397;;;:::o;54212:261::-;54307:4;54324:13;54367:11;54380:10;54350:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54340:52;;;;;;54324:68;;54410:55;54429:11;;54410:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54442:15;;54459:5;54410:18;:55::i;:::-;54403:62;;;54212:261;;;;;:::o;43271:113::-;43332:7;43359:10;:17;;;;43352:24;;43271:113;:::o;32241:305::-;32402:41;32421:12;:10;:12::i;:::-;32435:7;32402:18;:41::i;:::-;32394:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32510:28;32520:4;32526:2;32530:7;32510:9;:28::i;:::-;32241:305;;;:::o;55164:113::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55261:8:::1;55242:16;:27;;;;55164:113:::0;:::o;54681:277::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54754:6:::1;54750:201;54770:8;54766:1;:12;54750:201;;;54800:14;54817:13;:11;:13::i;:::-;54800:30;;51526:4;54849:9;:22;54845:95;;;54892:32;54902:10;54914:9;54892;:32::i;:::-;54845:95;54750:201;54780:3;;;;;:::i;:::-;;;;54750:201;;;;54681:277:::0;:::o;42939:256::-;43036:7;43072:23;43089:5;43072:16;:23::i;:::-;43064:5;:31;43056:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43161:12;:19;43174:5;43161:19;;;;;;;;;;;;;;;:26;43181:5;43161:26;;;;;;;;;;;;43154:33;;42939:256;;;;:::o;51812:33::-;;;;;;;;;;;;;:::o;54966:91::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55036:13:::1;;;;;;;;;;;55035:14;55019:13;;:30;;;;;;;;;;;;;;;;;;54966:91::o:0;32617:151::-;32721:39;32738:4;32744:2;32748:7;32721:39;;;;;;;;;;;;:16;:39::i;:::-;32617:151;;;:::o;43461:233::-;43536:7;43572:30;:28;:30::i;:::-;43564:5;:38;43556:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43669:10;43680:5;43669:17;;;;;;;;;;;;;;;;;;;;;;;;43662:24;;43461:233;;;:::o;51934:33::-;;;;;;;;;;;;;:::o;55670:100::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55755:7:::1;55745;:17;;;;;;;;;;;;:::i;:::-;;55670:100:::0;:::o;55537:125::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55646:8:::1;55619:24;:35;;;;55537:125:::0;:::o;54518:155::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54573:15:::1;54591:21;54573:39;;54636:10;54628:28;;:37;54657:7;54628:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50099:1;54518:155::o:0;52161:40::-;;;;:::o;55285:127::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55396:8:::1;55370:23;:34;;;;55285:127:::0;:::o;29585:239::-;29657:7;29677:13;29693:7;:16;29701:7;29693:16;;;;;;;;;;;;;;;;;;;;;29677:32;;29745:1;29728:19;;:5;:19;;;;29720:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29811:5;29804:12;;;29585:239;;;:::o;29315:208::-;29387:7;29432:1;29415:19;;:5;:19;;;;29407:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29499:9;:16;29509:5;29499:16;;;;;;;;;;;;;;;;29492:23;;29315:208;;;:::o;50459:148::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50566:1:::1;50529:40;;50550:6;;;;;;;;;;;50529:40;;;;;;;;;;;;50597:1;50580:6;;:19;;;;;;;;;;;;;;;;;;50459:148::o:0;51489:41::-;51526:4;51489:41;:::o;51705:33::-;;;;:::o;49808:87::-;49854:7;49881:6;;;;;;;;;;;49874:13;;49808:87;:::o;30060:104::-;30116:13;30149:7;30142:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30060:104;:::o;51588:54::-;51625:17;51588:54;:::o;31644:295::-;31759:12;:10;:12::i;:::-;31747:24;;:8;:24;;;;31739:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31859:8;31814:18;:32;31833:12;:10;:12::i;:::-;31814:32;;;;;;;;;;;;;;;:42;31847:8;31814:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31912:8;31883:48;;31898:12;:10;:12::i;:::-;31883:48;;;31922:8;31883:48;;;;;;:::i;:::-;;;;;;;;31644:295;;:::o;55420:105::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55511:6:::1;55493:15;:24;;;;55420:105:::0;:::o;32839:285::-;32971:41;32990:12;:10;:12::i;:::-;33004:7;32971:18;:41::i;:::-;32963:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33077:39;33091:4;33097:2;33101:7;33110:5;33077:13;:39::i;:::-;32839:285;;;;:::o;55065:91::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55135:13:::1;;;;;;;;;;;55134:14;55118:13;;:30;;;;;;;;;;;;;;;;;;55065:91::o:0;30235:360::-;30308:13;30342:16;30350:7;30342;:16::i;:::-;30334:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30423:21;30447:10;:8;:10::i;:::-;30423:34;;30499:1;30481:7;30475:21;:25;:112;;;;;;;;;;;;;;;;;30540:7;30549:18;:7;:16;:18::i;:::-;30523:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30475:112;30468:119;;;30235:360;;;:::o;53166:1038::-;53294:13;;;;;;;;;;;53286:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;53362:1;53350:9;:13;53342:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;53406:39;53420:11;53433;;53406:13;:39::i;:::-;53398:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53531:24;;53486:41;53517:9;53486:14;:26;53501:10;53486:26;;;;;;;;;;;;;;;;:30;;:41;;;;:::i;:::-;:69;;53478:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;51526:4;53617:28;53635:9;53617:13;:11;:13::i;:::-;:17;;:28;;;;:::i;:::-;:42;;53609:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;53726:23;;53713:9;:36;;53705:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;53855:9;53826:25;53841:9;51625:17;53826:14;;:25;;;;:::i;:::-;:38;;53818:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;53918:6;53914:283;53934:9;53930:1;:13;53914:283;;;53965:14;53982:13;:11;:13::i;:::-;53965:30;;51526:4;54014:9;:22;54010:176;;;54057:32;54067:10;54079:9;54057;:32::i;:::-;54137:33;54168:1;54137:14;:26;54152:10;54137:26;;;;;;;;;;;;;;;;:30;;:33;;;;:::i;:::-;54108:14;:26;54123:10;54108:26;;;;;;;;;;;;;;;:62;;;;54010:176;53914:283;53945:3;;;;;:::i;:::-;;;;53914:283;;;;53166:1038;;;;:::o;52455:698::-;52525:13;;;;;;;;;;;52517:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52593:1;52581:9;:13;52573:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;51526:4;52651:28;52669:9;52651:13;:11;:13::i;:::-;:17;;:28;;;;:::i;:::-;:42;;52629:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;52783:16;;52770:9;:29;;52762:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;52893:9;52864:25;52879:9;51625:17;52864:14;;:25;;;;:::i;:::-;:38;;52856:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52948:6;52944:202;52964:9;52960:1;:13;52944:202;;;52995:14;53012:13;:11;:13::i;:::-;52995:30;;51526:4;53044:9;:22;53040:95;;;53087:32;53097:10;53109:9;53087;:32::i;:::-;53040:95;52944:202;52975:3;;;;;:::i;:::-;;;;52944:202;;;;52455:698;:::o;32010:164::-;32107:4;32131:18;:25;32150:5;32131:25;;;;;;;;;;;;;;;:35;32157:8;32131:35;;;;;;;;;;;;;;;;;;;;;;;;;32124:42;;32010:164;;;;:::o;50762:244::-;50039:12;:10;:12::i;:::-;50028:23;;:7;:5;:7::i;:::-;:23;;;50020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50871:1:::1;50851:22;;:8;:22;;;;50843:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50961:8;50932:38;;50953:6;;;;;;;;;;;50932:38;;;;;;;;;;;;50990:8;50981:6;;:17;;;;;;;;;;;;;;;;;;50762:244:::0;:::o;28959:292::-;29061:4;29100:25;29085:40;;;:11;:40;;;;:105;;;;29157:33;29142:48;;;:11;:48;;;;29085:105;:158;;;;29207:36;29231:11;29207:23;:36::i;:::-;29085:158;29078:165;;28959:292;;;:::o;34591:127::-;34656:4;34708:1;34680:30;;:7;:16;34688:7;34680:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34673:37;;34591:127;;;:::o;24354:98::-;24407:7;24434:10;24427:17;;24354:98;:::o;38468:174::-;38570:2;38543:15;:24;38559:7;38543:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38626:7;38622:2;38588:46;;38597:23;38612:7;38597:14;:23::i;:::-;38588:46;;;;;;;;;;;;38468:174;;:::o;507:190::-;632:4;685;656:25;669:5;676:4;656:12;:25::i;:::-;:33;649:40;;507:190;;;;;:::o;34885:348::-;34978:4;35003:16;35011:7;35003;:16::i;:::-;34995:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:13;35095:23;35110:7;35095:14;:23::i;:::-;35079:39;;35148:5;35137:16;;:7;:16;;;:51;;;;35181:7;35157:31;;:20;35169:7;35157:11;:20::i;:::-;:31;;;35137:51;:87;;;;35192:32;35209:5;35216:7;35192:16;:32::i;:::-;35137:87;35129:96;;;34885:348;;;;:::o;37806:544::-;37931:4;37904:31;;:23;37919:7;37904:14;:23::i;:::-;:31;;;37896:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38014:1;38000:16;;:2;:16;;;;37992:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38070:39;38091:4;38097:2;38101:7;38070:20;:39::i;:::-;38174:29;38191:1;38195:7;38174:8;:29::i;:::-;38235:1;38216:9;:15;38226:4;38216:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38264:1;38247:9;:13;38257:2;38247:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38295:2;38276:7;:16;38284:7;38276:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38334:7;38330:2;38315:27;;38324:4;38315:27;;;;;;;;;;;;37806:544;;;:::o;35575:110::-;35651:26;35661:2;35665:7;35651:26;;;;;;;;;;;;:9;:26::i;:::-;35575:110;;:::o;34006:272::-;34120:28;34130:4;34136:2;34140:7;34120:9;:28::i;:::-;34167:48;34190:4;34196:2;34200:7;34209:5;34167:22;:48::i;:::-;34159:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34006:272;;;;:::o;55778:100::-;55830:13;55863:7;55856:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55778:100;:::o;24978:723::-;25034:13;25264:1;25255:5;:10;25251:53;;;25282:10;;;;;;;;;;;;;;;;;;;;;25251:53;25314:12;25329:5;25314:20;;25345:14;25370:78;25385:1;25377:4;:9;25370:78;;25403:8;;;;;:::i;:::-;;;;25434:2;25426:10;;;;;:::i;:::-;;;25370:78;;;25458:19;25490:6;25480:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25458:39;;25508:154;25524:1;25515:5;:10;25508:154;;25552:1;25542:11;;;;;:::i;:::-;;;25619:2;25611:5;:10;;;;:::i;:::-;25598:2;:24;;;;:::i;:::-;25585:39;;25568:6;25575;25568:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;25648:2;25639:11;;;;;:::i;:::-;;;25508:154;;;25686:6;25672:21;;;;;24978:723;;;;:::o;4468:98::-;4526:7;4557:1;4553;:5;;;;:::i;:::-;4546:12;;4468:98;;;;:::o;5206:::-;5264:7;5295:1;5291;:5;;;;:::i;:::-;5284:12;;5206:98;;;;:::o;27502:157::-;27587:4;27626:25;27611:40;;;:11;:40;;;;27604:47;;27502:157;;;:::o;1059:701::-;1142:7;1162:20;1185:4;1162:27;;1205:9;1200:523;1224:5;:12;1220:1;:16;1200:523;;;1258:20;1281:5;1287:1;1281:8;;;;;;;;;;;;;;;;;;;;;;1258:31;;1324:12;1308;:28;1304:408;;1478:12;1492;1461:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1451:55;;;;;;1436:70;;1304:408;;;1668:12;1682;1651:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1641:55;;;;;;1626:70;;1304:408;1200:523;1238:3;;;;;:::i;:::-;;;;1200:523;;;;1740:12;1733:19;;;1059:701;;;;:::o;44307:555::-;44417:45;44444:4;44450:2;44454:7;44417:26;:45::i;:::-;44495:1;44479:18;;:4;:18;;;44475:187;;;44514:40;44546:7;44514:31;:40::i;:::-;44475:187;;;44584:2;44576:10;;:4;:10;;;44572:90;;44603:47;44636:4;44642:7;44603:32;:47::i;:::-;44572:90;44475:187;44690:1;44676:16;;:2;:16;;;44672:183;;;44709:45;44746:7;44709:36;:45::i;:::-;44672:183;;;44782:4;44776:10;;:2;:10;;;44772:83;;44803:40;44831:2;44835:7;44803:27;:40::i;:::-;44772:83;44672:183;44307:555;;;:::o;35912:250::-;36008:18;36014:2;36018:7;36008:5;:18::i;:::-;36045:54;36076:1;36080:2;36084:7;36093:5;36045:22;:54::i;:::-;36037:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35912:250;;;:::o;39207:843::-;39328:4;39354:15;:2;:13;;;:15::i;:::-;39350:693;;;39406:2;39390:36;;;39427:12;:10;:12::i;:::-;39441:4;39447:7;39456:5;39390:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39386:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39653:1;39636:6;:13;:18;39632:341;;;39679:60;;;;;;;;;;:::i;:::-;;;;;;;;39632:341;39923:6;39917:13;39908:6;39904:2;39900:15;39893:38;39386:602;39523:45;;;39513:55;;;:6;:55;;;;39506:62;;;;;39350:693;40027:4;40020:11;;39207:843;;;;;;;:::o;40663:93::-;;;;:::o;45585:164::-;45689:10;:17;;;;45662:15;:24;45678:7;45662:24;;;;;;;;;;;:44;;;;45717:10;45733:7;45717:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45585:164;:::o;46376:988::-;46642:22;46692:1;46667:22;46684:4;46667:16;:22::i;:::-;:26;;;;:::i;:::-;46642:51;;46704:18;46725:17;:26;46743:7;46725:26;;;;;;;;;;;;46704:47;;46872:14;46858:10;:28;46854:328;;46903:19;46925:12;:18;46938:4;46925:18;;;;;;;;;;;;;;;:34;46944:14;46925:34;;;;;;;;;;;;46903:56;;47009:11;46976:12;:18;46989:4;46976:18;;;;;;;;;;;;;;;:30;46995:10;46976:30;;;;;;;;;;;:44;;;;47126:10;47093:17;:30;47111:11;47093:30;;;;;;;;;;;:43;;;;46854:328;;47278:17;:26;47296:7;47278:26;;;;;;;;;;;47271:33;;;47322:12;:18;47335:4;47322:18;;;;;;;;;;;;;;;:34;47341:14;47322:34;;;;;;;;;;;47315:41;;;46376:988;;;;:::o;47659:1079::-;47912:22;47957:1;47937:10;:17;;;;:21;;;;:::i;:::-;47912:46;;47969:18;47990:15;:24;48006:7;47990:24;;;;;;;;;;;;47969:45;;48341:19;48363:10;48374:14;48363:26;;;;;;;;;;;;;;;;;;;;;;;;48341:48;;48427:11;48402:10;48413;48402:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48538:10;48507:15;:28;48523:11;48507:28;;;;;;;;;;;:41;;;;48679:15;:24;48695:7;48679:24;;;;;;;;;;;48672:31;;;48714:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47659:1079;;;;:::o;45163:221::-;45248:14;45265:20;45282:2;45265:16;:20::i;:::-;45248:37;;45323:7;45296:12;:16;45309:2;45296:16;;;;;;;;;;;;;;;:24;45313:6;45296:24;;;;;;;;;;;:34;;;;45370:6;45341:17;:26;45359:7;45341:26;;;;;;;;;;;:35;;;;45163:221;;;:::o;36498:382::-;36592:1;36578:16;;:2;:16;;;;36570:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36651:16;36659:7;36651;:16::i;:::-;36650:17;36642:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36713:45;36742:1;36746:2;36750:7;36713:20;:45::i;:::-;36788:1;36771:9;:13;36781:2;36771:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36819:2;36800:7;:16;36808:7;36800:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36864:7;36860:2;36839:33;;36856:1;36839:33;;;;;;;;;;;;36498:382;;:::o;16502:422::-;16562:4;16770:12;16881:7;16869:20;16861:28;;16915:1;16908:4;:8;16901:15;;;16502:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;1571:5;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;1725:5;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;1884:5;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;2176:5;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;2445:5;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:262::-;2603:6;2652:2;2640:9;2631:7;2627:23;2623:32;2620:2;;;2668:1;2665;2658:12;2620:2;2711:1;2736:53;2781:7;2772:6;2761:9;2757:22;2736:53;:::i;:::-;2726:63;;2682:117;2610:196;;;;:::o;2812:407::-;2880:6;2888;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2996:1;3021:53;3066:7;3057:6;3046:9;3042:22;3021:53;:::i;:::-;3011:63;;2967:117;3123:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3094:118;2895:324;;;;;:::o;3225:552::-;3302:6;3310;3318;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3383:1;3380;3373:12;3335:2;3426:1;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3397:117;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3681:2;3707:53;3752:7;3743:6;3732:9;3728:22;3707:53;:::i;:::-;3697:63;;3652:118;3325:452;;;;;:::o;3783:809::-;3878:6;3886;3894;3902;3951:3;3939:9;3930:7;3926:23;3922:33;3919:2;;;3968:1;3965;3958:12;3919:2;4011:1;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3982:117;4138:2;4164:53;4209:7;4200:6;4189:9;4185:22;4164:53;:::i;:::-;4154:63;;4109:118;4266:2;4292:53;4337:7;4328:6;4317:9;4313:22;4292:53;:::i;:::-;4282:63;;4237:118;4422:2;4411:9;4407:18;4394:32;4453:18;4445:6;4442:30;4439:2;;;4485:1;4482;4475:12;4439:2;4513:62;4567:7;4558:6;4547:9;4543:22;4513:62;:::i;:::-;4503:72;;4365:220;3909:683;;;;;;;:::o;4598:401::-;4663:6;4671;4720:2;4708:9;4699:7;4695:23;4691:32;4688:2;;;4736:1;4733;4726:12;4688:2;4779:1;4804:53;4849:7;4840:6;4829:9;4825:22;4804:53;:::i;:::-;4794:63;;4750:117;4906:2;4932:50;4974:7;4965:6;4954:9;4950:22;4932:50;:::i;:::-;4922:60;;4877:115;4678:321;;;;;:::o;5005:407::-;5073:6;5081;5130:2;5118:9;5109:7;5105:23;5101:32;5098:2;;;5146:1;5143;5136:12;5098:2;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;5088:324;;;;;:::o;5418:262::-;5477:6;5526:2;5514:9;5505:7;5501:23;5497:32;5494:2;;;5542:1;5539;5532:12;5494:2;5585:1;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5556:117;5484:196;;;;:::o;5686:260::-;5744:6;5793:2;5781:9;5772:7;5768:23;5764:32;5761:2;;;5809:1;5806;5799:12;5761:2;5852:1;5877:52;5921:7;5912:6;5901:9;5897:22;5877:52;:::i;:::-;5867:62;;5823:116;5751:195;;;;:::o;5952:282::-;6021:6;6070:2;6058:9;6049:7;6045:23;6041:32;6038:2;;;6086:1;6083;6076:12;6038:2;6129:1;6154:63;6209:7;6200:6;6189:9;6185:22;6154:63;:::i;:::-;6144:73;;6100:127;6028:206;;;;:::o;6240:375::-;6309:6;6358:2;6346:9;6337:7;6333:23;6329:32;6326:2;;;6374:1;6371;6364:12;6326:2;6445:1;6434:9;6430:17;6417:31;6475:18;6467:6;6464:30;6461:2;;;6507:1;6504;6497:12;6461:2;6535:63;6590:7;6581:6;6570:9;6566:22;6535:63;:::i;:::-;6525:73;;6388:220;6316:299;;;;:::o;6621:262::-;6680:6;6729:2;6717:9;6708:7;6704:23;6700:32;6697:2;;;6745:1;6742;6735:12;6697:2;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6687:196;;;;:::o;6889:570::-;6984:6;6992;7000;7049:2;7037:9;7028:7;7024:23;7020:32;7017:2;;;7065:1;7062;7055:12;7017:2;7108:1;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7079:117;7263:2;7252:9;7248:18;7235:32;7294:18;7286:6;7283:30;7280:2;;;7326:1;7323;7316:12;7280:2;7362:80;7434:7;7425:6;7414:9;7410:22;7362:80;:::i;:::-;7344:98;;;;7206:246;7007:452;;;;;:::o;7465:715::-;7569:6;7577;7585;7593;7642:2;7630:9;7621:7;7617:23;7613:32;7610:2;;;7658:1;7655;7648:12;7610:2;7701:1;7726:53;7771:7;7762:6;7751:9;7747:22;7726:53;:::i;:::-;7716:63;;7672:117;7828:2;7854:53;7899:7;7890:6;7879:9;7875:22;7854:53;:::i;:::-;7844:63;;7799:118;7984:2;7973:9;7969:18;7956:32;8015:18;8007:6;8004:30;8001:2;;;8047:1;8044;8037:12;8001:2;8083:80;8155:7;8146:6;8135:9;8131:22;8083:80;:::i;:::-;8065:98;;;;7927:246;7600:580;;;;;;;:::o;8186:118::-;8273:24;8291:5;8273:24;:::i;:::-;8268:3;8261:37;8251:53;;:::o;8310:157::-;8415:45;8435:24;8453:5;8435:24;:::i;:::-;8415:45;:::i;:::-;8410:3;8403:58;8393:74;;:::o;8473:109::-;8554:21;8569:5;8554:21;:::i;:::-;8549:3;8542:34;8532:50;;:::o;8588:157::-;8693:45;8713:24;8731:5;8713:24;:::i;:::-;8693:45;:::i;:::-;8688:3;8681:58;8671:74;;:::o;8751:360::-;8837:3;8865:38;8897:5;8865:38;:::i;:::-;8919:70;8982:6;8977:3;8919:70;:::i;:::-;8912:77;;8998:52;9043:6;9038:3;9031:4;9024:5;9020:16;8998:52;:::i;:::-;9075:29;9097:6;9075:29;:::i;:::-;9070:3;9066:39;9059:46;;8841:270;;;;;:::o;9117:364::-;9205:3;9233:39;9266:5;9233:39;:::i;:::-;9288:71;9352:6;9347:3;9288:71;:::i;:::-;9281:78;;9368:52;9413:6;9408:3;9401:4;9394:5;9390:16;9368:52;:::i;:::-;9445:29;9467:6;9445:29;:::i;:::-;9440:3;9436:39;9429:46;;9209:272;;;;;:::o;9487:377::-;9593:3;9621:39;9654:5;9621:39;:::i;:::-;9676:89;9758:6;9753:3;9676:89;:::i;:::-;9669:96;;9774:52;9819:6;9814:3;9807:4;9800:5;9796:16;9774:52;:::i;:::-;9851:6;9846:3;9842:16;9835:23;;9597:267;;;;;:::o;9870:366::-;10012:3;10033:67;10097:2;10092:3;10033:67;:::i;:::-;10026:74;;10109:93;10198:3;10109:93;:::i;:::-;10227:2;10222:3;10218:12;10211:19;;10016:220;;;:::o;10242:366::-;10384:3;10405:67;10469:2;10464:3;10405:67;:::i;:::-;10398:74;;10481:93;10570:3;10481:93;:::i;:::-;10599:2;10594:3;10590:12;10583:19;;10388:220;;;:::o;10614:366::-;10756:3;10777:67;10841:2;10836:3;10777:67;:::i;:::-;10770:74;;10853:93;10942:3;10853:93;:::i;:::-;10971:2;10966:3;10962:12;10955:19;;10760:220;;;:::o;10986:366::-;11128:3;11149:67;11213:2;11208:3;11149:67;:::i;:::-;11142:74;;11225:93;11314:3;11225:93;:::i;:::-;11343:2;11338:3;11334:12;11327:19;;11132:220;;;:::o;11358:366::-;11500:3;11521:67;11585:2;11580:3;11521:67;:::i;:::-;11514:74;;11597:93;11686:3;11597:93;:::i;:::-;11715:2;11710:3;11706:12;11699:19;;11504:220;;;:::o;11730:366::-;11872:3;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11969:93;12058:3;11969:93;:::i;:::-;12087:2;12082:3;12078:12;12071:19;;11876:220;;;:::o;12102:366::-;12244:3;12265:67;12329:2;12324:3;12265:67;:::i;:::-;12258:74;;12341:93;12430:3;12341:93;:::i;:::-;12459:2;12454:3;12450:12;12443:19;;12248:220;;;:::o;12474:366::-;12616:3;12637:67;12701:2;12696:3;12637:67;:::i;:::-;12630:74;;12713:93;12802:3;12713:93;:::i;:::-;12831:2;12826:3;12822:12;12815:19;;12620:220;;;:::o;12846:366::-;12988:3;13009:67;13073:2;13068:3;13009:67;:::i;:::-;13002:74;;13085:93;13174:3;13085:93;:::i;:::-;13203:2;13198:3;13194:12;13187:19;;12992:220;;;:::o;13218:366::-;13360:3;13381:67;13445:2;13440:3;13381:67;:::i;:::-;13374:74;;13457:93;13546:3;13457:93;:::i;:::-;13575:2;13570:3;13566:12;13559:19;;13364:220;;;:::o;13590:366::-;13732:3;13753:67;13817:2;13812:3;13753:67;:::i;:::-;13746:74;;13829:93;13918:3;13829:93;:::i;:::-;13947:2;13942:3;13938:12;13931:19;;13736:220;;;:::o;13962:366::-;14104:3;14125:67;14189:2;14184:3;14125:67;:::i;:::-;14118:74;;14201:93;14290:3;14201:93;:::i;:::-;14319:2;14314:3;14310:12;14303:19;;14108:220;;;:::o;14334:366::-;14476:3;14497:67;14561:2;14556:3;14497:67;:::i;:::-;14490:74;;14573:93;14662:3;14573:93;:::i;:::-;14691:2;14686:3;14682:12;14675:19;;14480:220;;;:::o;14706:366::-;14848:3;14869:67;14933:2;14928:3;14869:67;:::i;:::-;14862:74;;14945:93;15034:3;14945:93;:::i;:::-;15063:2;15058:3;15054:12;15047:19;;14852:220;;;:::o;15078:366::-;15220:3;15241:67;15305:2;15300:3;15241:67;:::i;:::-;15234:74;;15317:93;15406:3;15317:93;:::i;:::-;15435:2;15430:3;15426:12;15419:19;;15224:220;;;:::o;15450:366::-;15592:3;15613:67;15677:2;15672:3;15613:67;:::i;:::-;15606:74;;15689:93;15778:3;15689:93;:::i;:::-;15807:2;15802:3;15798:12;15791:19;;15596:220;;;:::o;15822:366::-;15964:3;15985:67;16049:2;16044:3;15985:67;:::i;:::-;15978:74;;16061:93;16150:3;16061:93;:::i;:::-;16179:2;16174:3;16170:12;16163:19;;15968:220;;;:::o;16194:366::-;16336:3;16357:67;16421:2;16416:3;16357:67;:::i;:::-;16350:74;;16433:93;16522:3;16433:93;:::i;:::-;16551:2;16546:3;16542:12;16535:19;;16340:220;;;:::o;16566:366::-;16708:3;16729:67;16793:2;16788:3;16729:67;:::i;:::-;16722:74;;16805:93;16894:3;16805:93;:::i;:::-;16923:2;16918:3;16914:12;16907:19;;16712:220;;;:::o;16938:366::-;17080:3;17101:67;17165:2;17160:3;17101:67;:::i;:::-;17094:74;;17177:93;17266:3;17177:93;:::i;:::-;17295:2;17290:3;17286:12;17279:19;;17084:220;;;:::o;17310:366::-;17452:3;17473:67;17537:2;17532:3;17473:67;:::i;:::-;17466:74;;17549:93;17638:3;17549:93;:::i;:::-;17667:2;17662:3;17658:12;17651:19;;17456:220;;;:::o;17682:366::-;17824:3;17845:67;17909:2;17904:3;17845:67;:::i;:::-;17838:74;;17921:93;18010:3;17921:93;:::i;:::-;18039:2;18034:3;18030:12;18023:19;;17828:220;;;:::o;18054:366::-;18196:3;18217:67;18281:2;18276:3;18217:67;:::i;:::-;18210:74;;18293:93;18382:3;18293:93;:::i;:::-;18411:2;18406:3;18402:12;18395:19;;18200:220;;;:::o;18426:366::-;18568:3;18589:67;18653:2;18648:3;18589:67;:::i;:::-;18582:74;;18665:93;18754:3;18665:93;:::i;:::-;18783:2;18778:3;18774:12;18767:19;;18572:220;;;:::o;18798:366::-;18940:3;18961:67;19025:2;19020:3;18961:67;:::i;:::-;18954:74;;19037:93;19126:3;19037:93;:::i;:::-;19155:2;19150:3;19146:12;19139:19;;18944:220;;;:::o;19170:366::-;19312:3;19333:67;19397:2;19392:3;19333:67;:::i;:::-;19326:74;;19409:93;19498:3;19409:93;:::i;:::-;19527:2;19522:3;19518:12;19511:19;;19316:220;;;:::o;19542:366::-;19684:3;19705:67;19769:2;19764:3;19705:67;:::i;:::-;19698:74;;19781:93;19870:3;19781:93;:::i;:::-;19899:2;19894:3;19890:12;19883:19;;19688:220;;;:::o;19914:118::-;20001:24;20019:5;20001:24;:::i;:::-;19996:3;19989:37;19979:53;;:::o;20038:157::-;20143:45;20163:24;20181:5;20163:24;:::i;:::-;20143:45;:::i;:::-;20138:3;20131:58;20121:74;;:::o;20201:397::-;20341:3;20356:75;20427:3;20418:6;20356:75;:::i;:::-;20456:2;20451:3;20447:12;20440:19;;20469:75;20540:3;20531:6;20469:75;:::i;:::-;20569:2;20564:3;20560:12;20553:19;;20589:3;20582:10;;20345:253;;;;;:::o;20604:435::-;20784:3;20806:95;20897:3;20888:6;20806:95;:::i;:::-;20799:102;;20918:95;21009:3;21000:6;20918:95;:::i;:::-;20911:102;;21030:3;21023:10;;20788:251;;;;;:::o;21045:397::-;21185:3;21200:75;21271:3;21262:6;21200:75;:::i;:::-;21300:2;21295:3;21291:12;21284:19;;21313:75;21384:3;21375:6;21313:75;:::i;:::-;21413:2;21408:3;21404:12;21397:19;;21433:3;21426:10;;21189:253;;;;;:::o;21448:222::-;21541:4;21579:2;21568:9;21564:18;21556:26;;21592:71;21660:1;21649:9;21645:17;21636:6;21592:71;:::i;:::-;21546:124;;;;:::o;21676:640::-;21871:4;21909:3;21898:9;21894:19;21886:27;;21923:71;21991:1;21980:9;21976:17;21967:6;21923:71;:::i;:::-;22004:72;22072:2;22061:9;22057:18;22048:6;22004:72;:::i;:::-;22086;22154:2;22143:9;22139:18;22130:6;22086:72;:::i;:::-;22205:9;22199:4;22195:20;22190:2;22179:9;22175:18;22168:48;22233:76;22304:4;22295:6;22233:76;:::i;:::-;22225:84;;21876:440;;;;;;;:::o;22322:210::-;22409:4;22447:2;22436:9;22432:18;22424:26;;22460:65;22522:1;22511:9;22507:17;22498:6;22460:65;:::i;:::-;22414:118;;;;:::o;22538:313::-;22651:4;22689:2;22678:9;22674:18;22666:26;;22738:9;22732:4;22728:20;22724:1;22713:9;22709:17;22702:47;22766:78;22839:4;22830:6;22766:78;:::i;:::-;22758:86;;22656:195;;;;:::o;22857:419::-;23023:4;23061:2;23050:9;23046:18;23038:26;;23110:9;23104:4;23100:20;23096:1;23085:9;23081:17;23074:47;23138:131;23264:4;23138:131;:::i;:::-;23130:139;;23028:248;;;:::o;23282:419::-;23448:4;23486:2;23475:9;23471:18;23463:26;;23535:9;23529:4;23525:20;23521:1;23510:9;23506:17;23499:47;23563:131;23689:4;23563:131;:::i;:::-;23555:139;;23453:248;;;:::o;23707:419::-;23873:4;23911:2;23900:9;23896:18;23888:26;;23960:9;23954:4;23950:20;23946:1;23935:9;23931:17;23924:47;23988:131;24114:4;23988:131;:::i;:::-;23980:139;;23878:248;;;:::o;24132:419::-;24298:4;24336:2;24325:9;24321:18;24313:26;;24385:9;24379:4;24375:20;24371:1;24360:9;24356:17;24349:47;24413:131;24539:4;24413:131;:::i;:::-;24405:139;;24303:248;;;:::o;24557:419::-;24723:4;24761:2;24750:9;24746:18;24738:26;;24810:9;24804:4;24800:20;24796:1;24785:9;24781:17;24774:47;24838:131;24964:4;24838:131;:::i;:::-;24830:139;;24728:248;;;:::o;24982:419::-;25148:4;25186:2;25175:9;25171:18;25163:26;;25235:9;25229:4;25225:20;25221:1;25210:9;25206:17;25199:47;25263:131;25389:4;25263:131;:::i;:::-;25255:139;;25153:248;;;:::o;25407:419::-;25573:4;25611:2;25600:9;25596:18;25588:26;;25660:9;25654:4;25650:20;25646:1;25635:9;25631:17;25624:47;25688:131;25814:4;25688:131;:::i;:::-;25680:139;;25578:248;;;:::o;25832:419::-;25998:4;26036:2;26025:9;26021:18;26013:26;;26085:9;26079:4;26075:20;26071:1;26060:9;26056:17;26049:47;26113:131;26239:4;26113:131;:::i;:::-;26105:139;;26003:248;;;:::o;26257:419::-;26423:4;26461:2;26450:9;26446:18;26438:26;;26510:9;26504:4;26500:20;26496:1;26485:9;26481:17;26474:47;26538:131;26664:4;26538:131;:::i;:::-;26530:139;;26428:248;;;:::o;26682:419::-;26848:4;26886:2;26875:9;26871:18;26863:26;;26935:9;26929:4;26925:20;26921:1;26910:9;26906:17;26899:47;26963:131;27089:4;26963:131;:::i;:::-;26955:139;;26853:248;;;:::o;27107:419::-;27273:4;27311:2;27300:9;27296:18;27288:26;;27360:9;27354:4;27350:20;27346:1;27335:9;27331:17;27324:47;27388:131;27514:4;27388:131;:::i;:::-;27380:139;;27278:248;;;:::o;27532:419::-;27698:4;27736:2;27725:9;27721:18;27713:26;;27785:9;27779:4;27775:20;27771:1;27760:9;27756:17;27749:47;27813:131;27939:4;27813:131;:::i;:::-;27805:139;;27703:248;;;:::o;27957:419::-;28123:4;28161:2;28150:9;28146:18;28138:26;;28210:9;28204:4;28200:20;28196:1;28185:9;28181:17;28174:47;28238:131;28364:4;28238:131;:::i;:::-;28230:139;;28128:248;;;:::o;28382:419::-;28548:4;28586:2;28575:9;28571:18;28563:26;;28635:9;28629:4;28625:20;28621:1;28610:9;28606:17;28599:47;28663:131;28789:4;28663:131;:::i;:::-;28655:139;;28553:248;;;:::o;28807:419::-;28973:4;29011:2;29000:9;28996:18;28988:26;;29060:9;29054:4;29050:20;29046:1;29035:9;29031:17;29024:47;29088:131;29214:4;29088:131;:::i;:::-;29080:139;;28978:248;;;:::o;29232:419::-;29398:4;29436:2;29425:9;29421:18;29413:26;;29485:9;29479:4;29475:20;29471:1;29460:9;29456:17;29449:47;29513:131;29639:4;29513:131;:::i;:::-;29505:139;;29403:248;;;:::o;29657:419::-;29823:4;29861:2;29850:9;29846:18;29838:26;;29910:9;29904:4;29900:20;29896:1;29885:9;29881:17;29874:47;29938:131;30064:4;29938:131;:::i;:::-;29930:139;;29828:248;;;:::o;30082:419::-;30248:4;30286:2;30275:9;30271:18;30263:26;;30335:9;30329:4;30325:20;30321:1;30310:9;30306:17;30299:47;30363:131;30489:4;30363:131;:::i;:::-;30355:139;;30253:248;;;:::o;30507:419::-;30673:4;30711:2;30700:9;30696:18;30688:26;;30760:9;30754:4;30750:20;30746:1;30735:9;30731:17;30724:47;30788:131;30914:4;30788:131;:::i;:::-;30780:139;;30678:248;;;:::o;30932:419::-;31098:4;31136:2;31125:9;31121:18;31113:26;;31185:9;31179:4;31175:20;31171:1;31160:9;31156:17;31149:47;31213:131;31339:4;31213:131;:::i;:::-;31205:139;;31103:248;;;:::o;31357:419::-;31523:4;31561:2;31550:9;31546:18;31538:26;;31610:9;31604:4;31600:20;31596:1;31585:9;31581:17;31574:47;31638:131;31764:4;31638:131;:::i;:::-;31630:139;;31528:248;;;:::o;31782:419::-;31948:4;31986:2;31975:9;31971:18;31963:26;;32035:9;32029:4;32025:20;32021:1;32010:9;32006:17;31999:47;32063:131;32189:4;32063:131;:::i;:::-;32055:139;;31953:248;;;:::o;32207:419::-;32373:4;32411:2;32400:9;32396:18;32388:26;;32460:9;32454:4;32450:20;32446:1;32435:9;32431:17;32424:47;32488:131;32614:4;32488:131;:::i;:::-;32480:139;;32378:248;;;:::o;32632:419::-;32798:4;32836:2;32825:9;32821:18;32813:26;;32885:9;32879:4;32875:20;32871:1;32860:9;32856:17;32849:47;32913:131;33039:4;32913:131;:::i;:::-;32905:139;;32803:248;;;:::o;33057:419::-;33223:4;33261:2;33250:9;33246:18;33238:26;;33310:9;33304:4;33300:20;33296:1;33285:9;33281:17;33274:47;33338:131;33464:4;33338:131;:::i;:::-;33330:139;;33228:248;;;:::o;33482:419::-;33648:4;33686:2;33675:9;33671:18;33663:26;;33735:9;33729:4;33725:20;33721:1;33710:9;33706:17;33699:47;33763:131;33889:4;33763:131;:::i;:::-;33755:139;;33653:248;;;:::o;33907:419::-;34073:4;34111:2;34100:9;34096:18;34088:26;;34160:9;34154:4;34150:20;34146:1;34135:9;34131:17;34124:47;34188:131;34314:4;34188:131;:::i;:::-;34180:139;;34078:248;;;:::o;34332:222::-;34425:4;34463:2;34452:9;34448:18;34440:26;;34476:71;34544:1;34533:9;34529:17;34520:6;34476:71;:::i;:::-;34430:124;;;;:::o;34560:129::-;34594:6;34621:20;;:::i;:::-;34611:30;;34650:33;34678:4;34670:6;34650:33;:::i;:::-;34601:88;;;:::o;34695:75::-;34728:6;34761:2;34755:9;34745:19;;34735:35;:::o;34776:307::-;34837:4;34927:18;34919:6;34916:30;34913:2;;;34949:18;;:::i;:::-;34913:2;34987:29;35009:6;34987:29;:::i;:::-;34979:37;;35071:4;35065;35061:15;35053:23;;34842:241;;;:::o;35089:308::-;35151:4;35241:18;35233:6;35230:30;35227:2;;;35263:18;;:::i;:::-;35227:2;35301:29;35323:6;35301:29;:::i;:::-;35293:37;;35385:4;35379;35375:15;35367:23;;35156:241;;;:::o;35403:98::-;35454:6;35488:5;35482:12;35472:22;;35461:40;;;:::o;35507:99::-;35559:6;35593:5;35587:12;35577:22;;35566:40;;;:::o;35612:168::-;35695:11;35729:6;35724:3;35717:19;35769:4;35764:3;35760:14;35745:29;;35707:73;;;;:::o;35786:169::-;35870:11;35904:6;35899:3;35892:19;35944:4;35939:3;35935:14;35920:29;;35882:73;;;;:::o;35961:148::-;36063:11;36100:3;36085:18;;36075:34;;;;:::o;36115:305::-;36155:3;36174:20;36192:1;36174:20;:::i;:::-;36169:25;;36208:20;36226:1;36208:20;:::i;:::-;36203:25;;36362:1;36294:66;36290:74;36287:1;36284:81;36281:2;;;36368:18;;:::i;:::-;36281:2;36412:1;36409;36405:9;36398:16;;36159:261;;;;:::o;36426:185::-;36466:1;36483:20;36501:1;36483:20;:::i;:::-;36478:25;;36517:20;36535:1;36517:20;:::i;:::-;36512:25;;36556:1;36546:2;;36561:18;;:::i;:::-;36546:2;36603:1;36600;36596:9;36591:14;;36468:143;;;;:::o;36617:348::-;36657:7;36680:20;36698:1;36680:20;:::i;:::-;36675:25;;36714:20;36732:1;36714:20;:::i;:::-;36709:25;;36902:1;36834:66;36830:74;36827:1;36824:81;36819:1;36812:9;36805:17;36801:105;36798:2;;;36909:18;;:::i;:::-;36798:2;36957:1;36954;36950:9;36939:20;;36665:300;;;;:::o;36971:191::-;37011:4;37031:20;37049:1;37031:20;:::i;:::-;37026:25;;37065:20;37083:1;37065:20;:::i;:::-;37060:25;;37104:1;37101;37098:8;37095:2;;;37109:18;;:::i;:::-;37095:2;37154:1;37151;37147:9;37139:17;;37016:146;;;;:::o;37168:96::-;37205:7;37234:24;37252:5;37234:24;:::i;:::-;37223:35;;37213:51;;;:::o;37270:90::-;37304:7;37347:5;37340:13;37333:21;37322:32;;37312:48;;;:::o;37366:77::-;37403:7;37432:5;37421:16;;37411:32;;;:::o;37449:149::-;37485:7;37525:66;37518:5;37514:78;37503:89;;37493:105;;;:::o;37604:126::-;37641:7;37681:42;37674:5;37670:54;37659:65;;37649:81;;;:::o;37736:77::-;37773:7;37802:5;37791:16;;37781:32;;;:::o;37819:154::-;37903:6;37898:3;37893;37880:30;37965:1;37956:6;37951:3;37947:16;37940:27;37870:103;;;:::o;37979:307::-;38047:1;38057:113;38071:6;38068:1;38065:13;38057:113;;;38156:1;38151:3;38147:11;38141:18;38137:1;38132:3;38128:11;38121:39;38093:2;38090:1;38086:10;38081:15;;38057:113;;;38188:6;38185:1;38182:13;38179:2;;;38268:1;38259:6;38254:3;38250:16;38243:27;38179:2;38028:258;;;;:::o;38292:320::-;38336:6;38373:1;38367:4;38363:12;38353:22;;38420:1;38414:4;38410:12;38441:18;38431:2;;38497:4;38489:6;38485:17;38475:27;;38431:2;38559;38551:6;38548:14;38528:18;38525:38;38522:2;;;38578:18;;:::i;:::-;38522:2;38343:269;;;;:::o;38618:281::-;38701:27;38723:4;38701:27;:::i;:::-;38693:6;38689:40;38831:6;38819:10;38816:22;38795:18;38783:10;38780:34;38777:62;38774:2;;;38842:18;;:::i;:::-;38774:2;38882:10;38878:2;38871:22;38661:238;;;:::o;38905:233::-;38944:3;38967:24;38985:5;38967:24;:::i;:::-;38958:33;;39013:66;39006:5;39003:77;39000:2;;;39083:18;;:::i;:::-;39000:2;39130:1;39123:5;39119:13;39112:20;;38948:190;;;:::o;39144:100::-;39183:7;39212:26;39232:5;39212:26;:::i;:::-;39201:37;;39191:53;;;:::o;39250:79::-;39289:7;39318:5;39307:16;;39297:32;;;:::o;39335:94::-;39374:7;39403:20;39417:5;39403:20;:::i;:::-;39392:31;;39382:47;;;:::o;39435:79::-;39474:7;39503:5;39492:16;;39482:32;;;:::o;39520:176::-;39552:1;39569:20;39587:1;39569:20;:::i;:::-;39564:25;;39603:20;39621:1;39603:20;:::i;:::-;39598:25;;39642:1;39632:2;;39647:18;;:::i;:::-;39632:2;39688:1;39685;39681:9;39676:14;;39554:142;;;;:::o;39702:180::-;39750:77;39747:1;39740:88;39847:4;39844:1;39837:15;39871:4;39868:1;39861:15;39888:180;39936:77;39933:1;39926:88;40033:4;40030:1;40023:15;40057:4;40054:1;40047:15;40074:180;40122:77;40119:1;40112:88;40219:4;40216:1;40209:15;40243:4;40240:1;40233:15;40260:180;40308:77;40305:1;40298:88;40405:4;40402:1;40395:15;40429:4;40426:1;40419:15;40446:102;40487:6;40538:2;40534:7;40529:2;40522:5;40518:14;40514:28;40504:38;;40494:54;;;:::o;40554:94::-;40587:8;40635:5;40631:2;40627:14;40606:35;;40596:52;;;:::o;40654:230::-;40794:34;40790:1;40782:6;40778:14;40771:58;40863:13;40858:2;40850:6;40846:15;40839:38;40760:124;:::o;40890:237::-;41030:34;41026:1;41018:6;41014:14;41007:58;41099:20;41094:2;41086:6;41082:15;41075:45;40996:131;:::o;41133:225::-;41273:34;41269:1;41261:6;41257:14;41250:58;41342:8;41337:2;41329:6;41325:15;41318:33;41239:119;:::o;41364:174::-;41504:26;41500:1;41492:6;41488:14;41481:50;41470:68;:::o;41544:169::-;41684:21;41680:1;41672:6;41668:14;41661:45;41650:63;:::o;41719:178::-;41859:30;41855:1;41847:6;41843:14;41836:54;41825:72;:::o;41903:223::-;42043:34;42039:1;42031:6;42027:14;42020:58;42112:6;42107:2;42099:6;42095:15;42088:31;42009:117;:::o;42132:175::-;42272:27;42268:1;42260:6;42256:14;42249:51;42238:69;:::o;42313:231::-;42453:34;42449:1;42441:6;42437:14;42430:58;42522:14;42517:2;42509:6;42505:15;42498:39;42419:125;:::o;42550:243::-;42690:34;42686:1;42678:6;42674:14;42667:58;42759:26;42754:2;42746:6;42742:15;42735:51;42656:137;:::o;42799:229::-;42939:34;42935:1;42927:6;42923:14;42916:58;43008:12;43003:2;42995:6;42991:15;42984:37;42905:123;:::o;43034:228::-;43174:34;43170:1;43162:6;43158:14;43151:58;43243:11;43238:2;43230:6;43226:15;43219:36;43140:122;:::o;43268:182::-;43408:34;43404:1;43396:6;43392:14;43385:58;43374:76;:::o;43456:231::-;43596:34;43592:1;43584:6;43580:14;43573:58;43665:14;43660:2;43652:6;43648:15;43641:39;43562:125;:::o;43693:182::-;43833:34;43829:1;43821:6;43817:14;43810:58;43799:76;:::o;43881:228::-;44021:34;44017:1;44009:6;44005:14;43998:58;44090:11;44085:2;44077:6;44073:15;44066:36;43987:122;:::o;44115:234::-;44255:34;44251:1;44243:6;44239:14;44232:58;44324:17;44319:2;44311:6;44307:15;44300:42;44221:128;:::o;44355:228::-;44495:34;44491:1;44483:6;44479:14;44472:58;44564:11;44559:2;44551:6;44547:15;44540:36;44461:122;:::o;44589:225::-;44729:34;44725:1;44717:6;44713:14;44706:58;44798:8;44793:2;44785:6;44781:15;44774:33;44695:119;:::o;44820:220::-;44960:34;44956:1;44948:6;44944:14;44937:58;45029:3;45024:2;45016:6;45012:15;45005:28;44926:114;:::o;45046:169::-;45186:21;45182:1;45174:6;45170:14;45163:45;45152:63;:::o;45221:236::-;45361:34;45357:1;45349:6;45345:14;45338:58;45430:19;45425:2;45417:6;45413:15;45406:44;45327:130;:::o;45463:180::-;45603:32;45599:1;45591:6;45587:14;45580:56;45569:74;:::o;45649:231::-;45789:34;45785:1;45777:6;45773:14;45766:58;45858:14;45853:2;45845:6;45841:15;45834:39;45755:125;:::o;45886:167::-;46026:19;46022:1;46014:6;46010:14;46003:43;45992:61;:::o;46059:240::-;46199:34;46195:1;46187:6;46183:14;46176:58;46268:23;46263:2;46255:6;46251:15;46244:48;46165:134;:::o;46305:169::-;46445:21;46441:1;46433:6;46429:14;46422:45;46411:63;:::o;46480:122::-;46553:24;46571:5;46553:24;:::i;:::-;46546:5;46543:35;46533:2;;46592:1;46589;46582:12;46533:2;46523:79;:::o;46608:116::-;46678:21;46693:5;46678:21;:::i;:::-;46671:5;46668:32;46658:2;;46714:1;46711;46704:12;46658:2;46648:76;:::o;46730:122::-;46803:24;46821:5;46803:24;:::i;:::-;46796:5;46793:35;46783:2;;46842:1;46839;46832:12;46783:2;46773:79;:::o;46858:120::-;46930:23;46947:5;46930:23;:::i;:::-;46923:5;46920:34;46910:2;;46968:1;46965;46958:12;46910:2;46900:78;:::o;46984:122::-;47057:24;47075:5;47057:24;:::i;:::-;47050:5;47047:35;47037:2;;47096:1;47093;47086:12;47037:2;47027:79;:::o
Swarm Source
ipfs://37e81e892849ae059c382b47321342fefb7c78609b032d94fe79f99fd5f5f7aa
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.