ERC-721
Overview
Max Total Supply
995 GateKeeper
Holders
187
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 GateKeeperLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AlphaKingdom
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-29 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @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); /** * @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/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/AlphaKingdom.sol pragma solidity ^0.8.0; contract AlphaKingdom is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; struct SaleConfig { uint64 publicPrice; bool paused; } SaleConfig public saleConfig; mapping(address => uint256) public teamList; constructor( uint256 maxBatchSize_, uint256 maxPerAddressDuringMint_ ) ERC721A("Alpha Kingdom", "GateKeeper", maxBatchSize_, 4444) { maxPerAddressDuringMint = maxPerAddressDuringMint_; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function teamMint() external callerIsUser { require(teamList[msg.sender] > 0, "not eligible for teamList mint"); require(totalSupply() + 3 <= collectionSize, "reached max supply"); teamList[msg.sender]-- ; _safeMint(msg.sender, 3); } function publicSaleMint(uint256 quantity) external payable callerIsUser { SaleConfig memory config = saleConfig; bool state = config.paused; uint256 publicPrice = uint256(config.publicPrice); require( isPublicSaleOn(publicPrice, state), "public sale has not begun yet" ); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); require(totalSupply() + quantity <= collectionSize, "reached max supply"); _safeMint(msg.sender, quantity); refundIfOver(publicPrice * quantity); } function refundIfOver(uint256 price) private { require(msg.value >= price, "Need to send more ETH."); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function SetupSaleInfo( uint64 publicPriceWei, bool state ) external onlyOwner { saleConfig = SaleConfig( publicPriceWei, state ); } function isPublicSaleOn( uint256 publicPriceWei, bool state ) internal view returns (bool) { return publicPriceWei != 0 && !state; } function seedteamList(address[] memory addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { teamList[addresses[i]] = 1; } } // For marketing etc. function devMint(uint256 quantity) external onlyOwner { require( quantity % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"maxPerAddressDuringMint_","type":"uint256"}],"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":[{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"bool","name":"state","type":"bool"}],"name":"SetupSaleInfo","outputs":[],"stateMutability":"nonpayable","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":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"saleConfig","outputs":[{"internalType":"uint64","name":"publicPrice","type":"uint64"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"seedteamList","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":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"teamList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600060015560006008553480156200001b57600080fd5b5060405162005a8d38038062005a8d83398181016040528101906200004191906200034e565b6040518060400160405280600d81526020017f416c706861204b696e67646f6d000000000000000000000000000000000000008152506040518060400160405280600a81526020017f476174654b6565706572000000000000000000000000000000000000000000008152508361115c620000d1620000c5620001bb60201b60201c565b620001c360201b60201c565b6000811162000117576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010e9062000405565b60405180910390fd5b600082116200015d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015490620003e3565b60405180910390fd5b83600290805190602001906200017592919062000287565b5082600390805190602001906200018e92919062000287565b508160a0818152505080608081815250505050505060016009819055508060c08181525050505062000564565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002959062000442565b90600052602060002090601f016020900481019282620002b9576000855562000305565b82601f10620002d457805160ff191683800117855562000305565b8280016001018555821562000305579182015b8281111562000304578251825591602001919060010190620002e7565b5b50905062000314919062000318565b5090565b5b808211156200033357600081600090555060010162000319565b5090565b60008151905062000348816200054a565b92915050565b60008060408385031215620003685762000367620004a7565b5b6000620003788582860162000337565b92505060206200038b8582860162000337565b9150509250929050565b6000620003a460278362000427565b9150620003b182620004ac565b604082019050919050565b6000620003cb602e8362000427565b9150620003d882620004fb565b604082019050919050565b60006020820190508181036000830152620003fe8162000395565b9050919050565b600060208201905081810360008301526200042081620003bc565b9050919050565b600082825260208201905092915050565b6000819050919050565b600060028204905060018216806200045b57607f821691505b6020821081141562000472576200047162000478565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005558162000438565b81146200056157600080fd5b50565b60805160a05160c0516154ba620005d36000396000818161135f01526118bc015260008181610ed401528181610f4201528181610f7f0152818161291801528181612941015261318501526000818161193201528181611b170152818161268201526126b601526154ba6000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063b3ab66b0116100a0578063d7224ba01161006f578063d7224ba0146106ed578063dc33e68114610718578063e985e9c514610755578063eddc080d14610792578063f2fde38b146107bb576101ee565b8063b3ab66b014610654578063b88d4fde14610670578063ba7a86b814610699578063c87b56dd146106b0576101ee565b80639231ab2a116100dc5780639231ab2a146105ac57806395d89b41146105e9578063a22cb46514610614578063ac4460021461063d576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b1461055557806390aa0b0f14610580576101ee565b8063375a069a116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b8063375a069a1461037b57806342842e0e146103a45780634a62c3a7146103cd5780634b26699b146103f6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d20fb60146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613a91565b6107e4565b60405161022791906141f4565b60405180910390f35b34801561023c57600080fd5b5061024561092e565b604051610252919061420f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613b38565b6109c0565b60405161028f919061418d565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a08565b610a45565b005b3480156102cd57600080fd5b506102d6610b5e565b6040516102e3919061464c565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906138f2565b610b68565b005b34801561032157600080fd5b5061033c60048036038101906103379190613b38565b610b78565b005b34801561034a57600080fd5b5061036560048036038101906103609190613a08565b610c56565b604051610372919061464c565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b38565b610e54565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906138f2565b610fbb565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a48565b610fdb565b005b34801561040257600080fd5b5061041d60048036038101906104189190613885565b6110d9565b60405161042a919061464c565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b38565b6110f1565b604051610467919061464c565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613aeb565b611144565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613b38565b6111d6565b6040516104cd919061418d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613885565b6111ec565b60405161050a919061464c565b60405180910390f35b34801561051f57600080fd5b506105286112d5565b005b34801561053657600080fd5b5061053f61135d565b60405161054c919061464c565b60405180910390f35b34801561056157600080fd5b5061056a611381565b604051610577919061418d565b60405180910390f35b34801561058c57600080fd5b506105956113aa565b6040516105a3929190614667565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613b38565b6113dd565b6040516105e09190614631565b60405180910390f35b3480156105f557600080fd5b506105fe6113f5565b60405161060b919061420f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906139c8565b611487565b005b34801561064957600080fd5b50610652611608565b005b61066e60048036038101906106699190613b38565b611789565b005b34801561067c57600080fd5b5061069760048036038101906106929190613945565b6119c9565b005b3480156106a557600080fd5b506106ae611a25565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613b38565b611bed565b6040516106e4919061420f565b60405180910390f35b3480156106f957600080fd5b50610702611c94565b60405161070f919061464c565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613885565b611c9a565b60405161074c919061464c565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906138b2565b611cac565b60405161078991906141f4565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613b65565b611d40565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613885565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610927575061092682611f2d565b5b9050919050565b60606002805461093d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610969906149ff565b80156109b65780601f1061098b576101008083540402835291602001916109b6565b820191906000526020600020905b81548152906001019060200180831161099957829003601f168201915b5050505050905090565b60006109cb82611f97565b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906145f1565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a50826111d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890614491565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae0611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0f5750610b0e81610b09611fa5565b611cac565b5b610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614331565b60405180910390fd5b610b59838383611fad565b505050565b6000600154905090565b610b7383838361205f565b505050565b610b80611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610b9e611381565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb906143f1565b60405180910390fd5b60026009541415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906145b1565b60405180910390fd5b6002600981905550610c4b81612618565b600160098190555050565b6000610c61836111ec565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990614231565b60405180910390fd5b6000610cac610b5e565b905060008060005b83811015610e12576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfe5786841415610def578195505050505050610e4e565b8380610dfa90614a62565b9450505b508080610e0a90614a62565b915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614571565b60405180910390fd5b92915050565b610e5c611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610e7a611381565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906143f1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000082610efe9190614aab565b14610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590614291565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000082610f6c91906147fc565b905060005b81811015610fb657610fa3337f00000000000000000000000000000000000000000000000000000000000000006128a6565b8080610fae90614a62565b915050610f71565b505050565b610fd6838383604051806020016040528060008152506119c9565b505050565b610fe3611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611001611381565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906143f1565b60405180910390fd5b60005b81518110156110d5576001600b600084848151811061107c5761107b614b69565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110cd90614a62565b91505061105a565b5050565b600b6020528060005260406000206000915090505481565b60006110fb610b5e565b821061113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906142b1565b60405180910390fd5b819050919050565b61114c611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661116a611381565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906143f1565b60405180910390fd5b8181600c91906111d19291906135c6565b505050565b60006111e1826128c4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490614371565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112dd611fa5565b73ffffffffffffffffffffffffffffffffffffffff166112fb611381565b73ffffffffffffffffffffffffffffffffffffffff1614611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906143f1565b60405180910390fd5b61135b6000612ac7565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6113e561364c565b6113ee826128c4565b9050919050565b606060038054611404906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906149ff565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b61148f611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614431565b60405180910390fd5b806007600061150a611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b7611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc91906141f4565b60405180910390a35050565b611610611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661162e611381565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906143f1565b60405180910390fd5b600260095414156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906145b1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516116f890614178565b60006040518083038185875af1925050503d8060008114611735576040519150601f19603f3d011682016040523d82523d6000602084013e61173a565b606091505b505090508061177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906144b1565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614311565b60405180910390fd5b6000600a6040518060400160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090506000816020015190506000826000015167ffffffffffffffff16905061187b8183612b8b565b6118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614471565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000846118e533611c9a565b6118ef91906147a6565b1115611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614551565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008461195a610b5e565b61196491906147a6565b11156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90614391565b60405180910390fd5b6119af33856128a6565b6119c384826119be919061482d565b612ba3565b50505050565b6119d484848461205f565b6119e084848484612c44565b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144d1565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614311565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c906143d1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006003611b40610b5e565b611b4a91906147a6565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614391565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdb906149d5565b9190505550611beb3360036128a6565b565b6060611bf882611f97565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614411565b60405180910390fd5b6000611c41612ddb565b90506000815111611c615760405180602001604052806000815250611c8c565b80611c6b84612e6d565b604051602001611c7c929190614154565b6040516020818303038152906040525b915050919050565b60085481565b6000611ca582612fce565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611d66611381565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906143f1565b60405180910390fd5b60405180604001604052808367ffffffffffffffff168152602001821515815250600a60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff0219169083151502179055509050505050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611381565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614251565b60405180910390fd5b611f2a81612ac7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826128c4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d5846109c0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611cac565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614451565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142d1565b60405180910390fd5b61223a85858560016130b7565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b89190614887565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614760565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461246291906147a6565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261086868660016130bd565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614351565b60405180910390fd5b60006001838361267291906147a6565b61267c91906148bb565b905060017f00000000000000000000000000000000000000000000000000000000000000006126ab91906148bb565b8111156126e25760017f00000000000000000000000000000000000000000000000000000000000000006126df91906148bb565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614591565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826128c4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a62565b915050612730565b5060018161289b91906147a6565b600881905550505050565b6128c08282604051806020016040528060008152506130c3565b5050565b6128cc61364c565b6128d582611f97565b612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614271565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129785760017f00000000000000000000000000000000000000000000000000000000000000008461296b91906148bb565b61297591906147a6565b90505b60008390505b818110612a86576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a7257809350505050612ac2565b508080612a7e906149d5565b91505061297e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906145d1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808314158015612b9b575081155b905092915050565b80341015612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906144f1565b60405180910390fd5b80341115612c41573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612c1491906148bb565b9081150290604051600060405180830381858888f19350505050158015612c3f573d6000803e3d6000fd5b505b50565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166135a3565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e611fa5565b8786866040518563ffffffff1660e01b8152600401612cb094939291906141a8565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf89190613abe565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906144d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b6060600c8054612dea906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612e16906149ff565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed090614a62565b915050600a82612ee091906147fc565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f02614b98565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e91906148bb565b9150600a85612f5d9190614aab565b6030612f6991906147a6565b60f81b818381518110612f7f57612f7e614b69565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906147fc565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613036906142f1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614531565b60405180910390fd5b61314381611f97565b15613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90614511565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614611565b60405180910390fd5b6131f360008583866130b7565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f09190614760565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133179190614760565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135266000888488612c44565b613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c906144d1565b60405180910390fd5b818061357090614a62565b925050808061357e90614a62565b9150506134b5565b508060018190555061359b60008785886130bd565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135d2906149ff565b90600052602060002090601f0160209004810192826135f4576000855561363b565b82601f1061360d57803560ff191683800117855561363b565b8280016001018555821561363b579182015b8281111561363a57823582559160200191906001019061361f565b5b5090506136489190613686565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561369f576000816000905550600101613687565b5090565b60006136b66136b1846146b5565b614690565b905080838252602082019050828560208602820111156136d9576136d8614bd1565b5b60005b8581101561370957816136ef8882613755565b8452602084019350602083019250506001810190506136dc565b5050509392505050565b6000613726613721846146e1565b614690565b90508281526020810184848401111561374257613741614bd6565b5b61374d848285614993565b509392505050565b60008135905061376481615411565b92915050565b600082601f83011261377f5761377e614bcc565b5b813561378f8482602086016136a3565b91505092915050565b6000813590506137a781615428565b92915050565b6000813590506137bc8161543f565b92915050565b6000815190506137d18161543f565b92915050565b600082601f8301126137ec576137eb614bcc565b5b81356137fc848260208601613713565b91505092915050565b60008083601f84011261381b5761381a614bcc565b5b8235905067ffffffffffffffff81111561383857613837614bc7565b5b60208301915083600182028301111561385457613853614bd1565b5b9250929050565b60008135905061386a81615456565b92915050565b60008135905061387f8161546d565b92915050565b60006020828403121561389b5761389a614be0565b5b60006138a984828501613755565b91505092915050565b600080604083850312156138c9576138c8614be0565b5b60006138d785828601613755565b92505060206138e885828601613755565b9150509250929050565b60008060006060848603121561390b5761390a614be0565b5b600061391986828701613755565b935050602061392a86828701613755565b925050604061393b8682870161385b565b9150509250925092565b6000806000806080858703121561395f5761395e614be0565b5b600061396d87828801613755565b945050602061397e87828801613755565b935050604061398f8782880161385b565b925050606085013567ffffffffffffffff8111156139b0576139af614bdb565b5b6139bc878288016137d7565b91505092959194509250565b600080604083850312156139df576139de614be0565b5b60006139ed85828601613755565b92505060206139fe85828601613798565b9150509250929050565b60008060408385031215613a1f57613a1e614be0565b5b6000613a2d85828601613755565b9250506020613a3e8582860161385b565b9150509250929050565b600060208284031215613a5e57613a5d614be0565b5b600082013567ffffffffffffffff811115613a7c57613a7b614bdb565b5b613a888482850161376a565b91505092915050565b600060208284031215613aa757613aa6614be0565b5b6000613ab5848285016137ad565b91505092915050565b600060208284031215613ad457613ad3614be0565b5b6000613ae2848285016137c2565b91505092915050565b60008060208385031215613b0257613b01614be0565b5b600083013567ffffffffffffffff811115613b2057613b1f614bdb565b5b613b2c85828601613805565b92509250509250929050565b600060208284031215613b4e57613b4d614be0565b5b6000613b5c8482850161385b565b91505092915050565b60008060408385031215613b7c57613b7b614be0565b5b6000613b8a85828601613870565b9250506020613b9b85828601613798565b9150509250929050565b613bae816148ef565b82525050565b613bbd816148ef565b82525050565b613bcc81614901565b82525050565b6000613bdd82614712565b613be78185614728565b9350613bf78185602086016149a2565b613c0081614be5565b840191505092915050565b6000613c168261471d565b613c208185614744565b9350613c308185602086016149a2565b613c3981614be5565b840191505092915050565b6000613c4f8261471d565b613c598185614755565b9350613c698185602086016149a2565b80840191505092915050565b6000613c82602283614744565b9150613c8d82614bf6565b604082019050919050565b6000613ca5602683614744565b9150613cb082614c45565b604082019050919050565b6000613cc8602a83614744565b9150613cd382614c94565b604082019050919050565b6000613ceb602c83614744565b9150613cf682614ce3565b604082019050919050565b6000613d0e602383614744565b9150613d1982614d32565b604082019050919050565b6000613d31602583614744565b9150613d3c82614d81565b604082019050919050565b6000613d54603183614744565b9150613d5f82614dd0565b604082019050919050565b6000613d77601e83614744565b9150613d8282614e1f565b602082019050919050565b6000613d9a603983614744565b9150613da582614e48565b604082019050919050565b6000613dbd601883614744565b9150613dc882614e97565b602082019050919050565b6000613de0602b83614744565b9150613deb82614ec0565b604082019050919050565b6000613e03601283614744565b9150613e0e82614f0f565b602082019050919050565b6000613e26602683614744565b9150613e3182614f38565b604082019050919050565b6000613e49601e83614744565b9150613e5482614f87565b602082019050919050565b6000613e6c602083614744565b9150613e7782614fb0565b602082019050919050565b6000613e8f602f83614744565b9150613e9a82614fd9565b604082019050919050565b6000613eb2601a83614744565b9150613ebd82615028565b602082019050919050565b6000613ed5603283614744565b9150613ee082615051565b604082019050919050565b6000613ef8601d83614744565b9150613f03826150a0565b602082019050919050565b6000613f1b602283614744565b9150613f26826150c9565b604082019050919050565b6000613f3e600083614739565b9150613f4982615118565b600082019050919050565b6000613f61601083614744565b9150613f6c8261511b565b602082019050919050565b6000613f84603383614744565b9150613f8f82615144565b604082019050919050565b6000613fa7601683614744565b9150613fb282615193565b602082019050919050565b6000613fca601d83614744565b9150613fd5826151bc565b602082019050919050565b6000613fed602183614744565b9150613ff8826151e5565b604082019050919050565b6000614010601683614744565b915061401b82615234565b602082019050919050565b6000614033602e83614744565b915061403e8261525d565b604082019050919050565b6000614056602683614744565b9150614061826152ac565b604082019050919050565b6000614079601f83614744565b9150614084826152fb565b602082019050919050565b600061409c602f83614744565b91506140a782615324565b604082019050919050565b60006140bf602d83614744565b91506140ca82615373565b604082019050919050565b60006140e2602283614744565b91506140ed826153c2565b604082019050919050565b60408201600082015161410e6000850182613ba5565b5060208201516141216020850182614136565b50505050565b61413081614975565b82525050565b61413f8161497f565b82525050565b61414e8161497f565b82525050565b60006141608285613c44565b915061416c8284613c44565b91508190509392505050565b600061418382613f31565b9150819050919050565b60006020820190506141a26000830184613bb4565b92915050565b60006080820190506141bd6000830187613bb4565b6141ca6020830186613bb4565b6141d76040830185614127565b81810360608301526141e98184613bd2565b905095945050505050565b60006020820190506142096000830184613bc3565b92915050565b600060208201905081810360008301526142298184613c0b565b905092915050565b6000602082019050818103600083015261424a81613c75565b9050919050565b6000602082019050818103600083015261426a81613c98565b9050919050565b6000602082019050818103600083015261428a81613cbb565b9050919050565b600060208201905081810360008301526142aa81613cde565b9050919050565b600060208201905081810360008301526142ca81613d01565b9050919050565b600060208201905081810360008301526142ea81613d24565b9050919050565b6000602082019050818103600083015261430a81613d47565b9050919050565b6000602082019050818103600083015261432a81613d6a565b9050919050565b6000602082019050818103600083015261434a81613d8d565b9050919050565b6000602082019050818103600083015261436a81613db0565b9050919050565b6000602082019050818103600083015261438a81613dd3565b9050919050565b600060208201905081810360008301526143aa81613df6565b9050919050565b600060208201905081810360008301526143ca81613e19565b9050919050565b600060208201905081810360008301526143ea81613e3c565b9050919050565b6000602082019050818103600083015261440a81613e5f565b9050919050565b6000602082019050818103600083015261442a81613e82565b9050919050565b6000602082019050818103600083015261444a81613ea5565b9050919050565b6000602082019050818103600083015261446a81613ec8565b9050919050565b6000602082019050818103600083015261448a81613eeb565b9050919050565b600060208201905081810360008301526144aa81613f0e565b9050919050565b600060208201905081810360008301526144ca81613f54565b9050919050565b600060208201905081810360008301526144ea81613f77565b9050919050565b6000602082019050818103600083015261450a81613f9a565b9050919050565b6000602082019050818103600083015261452a81613fbd565b9050919050565b6000602082019050818103600083015261454a81613fe0565b9050919050565b6000602082019050818103600083015261456a81614003565b9050919050565b6000602082019050818103600083015261458a81614026565b9050919050565b600060208201905081810360008301526145aa81614049565b9050919050565b600060208201905081810360008301526145ca8161406c565b9050919050565b600060208201905081810360008301526145ea8161408f565b9050919050565b6000602082019050818103600083015261460a816140b2565b9050919050565b6000602082019050818103600083015261462a816140d5565b9050919050565b600060408201905061464660008301846140f8565b92915050565b60006020820190506146616000830184614127565b92915050565b600060408201905061467c6000830185614145565b6146896020830184613bc3565b9392505050565b600061469a6146ab565b90506146a68282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d0576146cf614b98565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146fc576146fb614b98565b5b61470582614be5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061476b82614939565b915061477683614939565b9250826fffffffffffffffffffffffffffffffff0382111561479b5761479a614adc565b5b828201905092915050565b60006147b182614975565b91506147bc83614975565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614adc565b5b828201905092915050565b600061480782614975565b915061481283614975565b92508261482257614821614b0b565b5b828204905092915050565b600061483882614975565b915061484383614975565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614adc565b5b828202905092915050565b600061489282614939565b915061489d83614939565b9250828210156148b0576148af614adc565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614adc565b5b828203905092915050565b60006148fa82614955565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149c05780820151818401526020810190506149a5565b838111156149cf576000848401525b50505050565b60006149e082614975565b915060008214156149f4576149f3614adc565b5b600182039050919050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614be5565b810181811067ffffffffffffffff82111715614a5957614a58614b98565b5b80604052505050565b6000614a6d82614975565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab682614975565b9150614ac183614975565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656c696769626c6520666f72207465616d4c697374206d696e740000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61541a816148ef565b811461542557600080fd5b50565b61543181614901565b811461543c57600080fd5b50565b6154488161490d565b811461545357600080fd5b50565b61545f81614975565b811461546a57600080fd5b50565b6154768161497f565b811461548157600080fd5b5056fea2646970667358221220948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063b3ab66b0116100a0578063d7224ba01161006f578063d7224ba0146106ed578063dc33e68114610718578063e985e9c514610755578063eddc080d14610792578063f2fde38b146107bb576101ee565b8063b3ab66b014610654578063b88d4fde14610670578063ba7a86b814610699578063c87b56dd146106b0576101ee565b80639231ab2a116100dc5780639231ab2a146105ac57806395d89b41146105e9578063a22cb46514610614578063ac4460021461063d576101ee565b8063715018a6146105135780638bc35c2f1461052a5780638da5cb5b1461055557806390aa0b0f14610580576101ee565b8063375a069a116101855780634f6ccce7116101545780634f6ccce71461043357806355f804b3146104705780636352211e1461049957806370a08231146104d6576101ee565b8063375a069a1461037b57806342842e0e146103a45780634a62c3a7146103cd5780634b26699b146103f6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632d20fb60146103155780632f745c591461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613a91565b6107e4565b60405161022791906141f4565b60405180910390f35b34801561023c57600080fd5b5061024561092e565b604051610252919061420f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613b38565b6109c0565b60405161028f919061418d565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a08565b610a45565b005b3480156102cd57600080fd5b506102d6610b5e565b6040516102e3919061464c565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906138f2565b610b68565b005b34801561032157600080fd5b5061033c60048036038101906103379190613b38565b610b78565b005b34801561034a57600080fd5b5061036560048036038101906103609190613a08565b610c56565b604051610372919061464c565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613b38565b610e54565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906138f2565b610fbb565b005b3480156103d957600080fd5b506103f460048036038101906103ef9190613a48565b610fdb565b005b34801561040257600080fd5b5061041d60048036038101906104189190613885565b6110d9565b60405161042a919061464c565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190613b38565b6110f1565b604051610467919061464c565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613aeb565b611144565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190613b38565b6111d6565b6040516104cd919061418d565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613885565b6111ec565b60405161050a919061464c565b60405180910390f35b34801561051f57600080fd5b506105286112d5565b005b34801561053657600080fd5b5061053f61135d565b60405161054c919061464c565b60405180910390f35b34801561056157600080fd5b5061056a611381565b604051610577919061418d565b60405180910390f35b34801561058c57600080fd5b506105956113aa565b6040516105a3929190614667565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613b38565b6113dd565b6040516105e09190614631565b60405180910390f35b3480156105f557600080fd5b506105fe6113f5565b60405161060b919061420f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906139c8565b611487565b005b34801561064957600080fd5b50610652611608565b005b61066e60048036038101906106699190613b38565b611789565b005b34801561067c57600080fd5b5061069760048036038101906106929190613945565b6119c9565b005b3480156106a557600080fd5b506106ae611a25565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613b38565b611bed565b6040516106e4919061420f565b60405180910390f35b3480156106f957600080fd5b50610702611c94565b60405161070f919061464c565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190613885565b611c9a565b60405161074c919061464c565b60405180910390f35b34801561076157600080fd5b5061077c600480360381019061077791906138b2565b611cac565b60405161078991906141f4565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613b65565b611d40565b005b3480156107c757600080fd5b506107e260048036038101906107dd9190613885565b611e35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108af57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061091757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610927575061092682611f2d565b5b9050919050565b60606002805461093d906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610969906149ff565b80156109b65780601f1061098b576101008083540402835291602001916109b6565b820191906000526020600020905b81548152906001019060200180831161099957829003601f168201915b5050505050905090565b60006109cb82611f97565b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906145f1565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a50826111d6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890614491565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae0611fa5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0f5750610b0e81610b09611fa5565b611cac565b5b610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590614331565b60405180910390fd5b610b59838383611fad565b505050565b6000600154905090565b610b7383838361205f565b505050565b610b80611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610b9e611381565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb906143f1565b60405180910390fd5b60026009541415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906145b1565b60405180910390fd5b6002600981905550610c4b81612618565b600160098190555050565b6000610c61836111ec565b8210610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990614231565b60405180910390fd5b6000610cac610b5e565b905060008060005b83811015610e12576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610da657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dfe5786841415610def578195505050505050610e4e565b8380610dfa90614a62565b9450505b508080610e0a90614a62565b915050610cb4565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590614571565b60405180910390fd5b92915050565b610e5c611fa5565b73ffffffffffffffffffffffffffffffffffffffff16610e7a611381565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906143f1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a82610efe9190614aab565b14610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590614291565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a82610f6c91906147fc565b905060005b81811015610fb657610fa3337f000000000000000000000000000000000000000000000000000000000000000a6128a6565b8080610fae90614a62565b915050610f71565b505050565b610fd6838383604051806020016040528060008152506119c9565b505050565b610fe3611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611001611381565b73ffffffffffffffffffffffffffffffffffffffff1614611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e906143f1565b60405180910390fd5b60005b81518110156110d5576001600b600084848151811061107c5761107b614b69565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110cd90614a62565b91505061105a565b5050565b600b6020528060005260406000206000915090505481565b60006110fb610b5e565b821061113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906142b1565b60405180910390fd5b819050919050565b61114c611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661116a611381565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b7906143f1565b60405180910390fd5b8181600c91906111d19291906135c6565b505050565b60006111e1826128c4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490614371565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112dd611fa5565b73ffffffffffffffffffffffffffffffffffffffff166112fb611381565b73ffffffffffffffffffffffffffffffffffffffff1614611351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611348906143f1565b60405180910390fd5b61135b6000612ac7565b565b7f000000000000000000000000000000000000000000000000000000000000002881565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a8060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900460ff16905082565b6113e561364c565b6113ee826128c4565b9050919050565b606060038054611404906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611430906149ff565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b5050505050905090565b61148f611fa5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614431565b60405180910390fd5b806007600061150a611fa5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b7611fa5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc91906141f4565b60405180910390a35050565b611610611fa5565b73ffffffffffffffffffffffffffffffffffffffff1661162e611381565b73ffffffffffffffffffffffffffffffffffffffff1614611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b906143f1565b60405180910390fd5b600260095414156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c1906145b1565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516116f890614178565b60006040518083038185875af1925050503d8060008114611735576040519150601f19603f3d011682016040523d82523d6000602084013e61173a565b606091505b505090508061177e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611775906144b1565b60405180910390fd5b506001600981905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90614311565b60405180910390fd5b6000600a6040518060400160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900460ff16151515158152505090506000816020015190506000826000015167ffffffffffffffff16905061187b8183612b8b565b6118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190614471565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000028846118e533611c9a565b6118ef91906147a6565b1115611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614551565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c8461195a610b5e565b61196491906147a6565b11156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90614391565b60405180910390fd5b6119af33856128a6565b6119c384826119be919061482d565b612ba3565b50505050565b6119d484848461205f565b6119e084848484612c44565b611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906144d1565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614311565b60405180910390fd5b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c906143d1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000115c6003611b40610b5e565b611b4a91906147a6565b1115611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290614391565b60405180910390fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdb906149d5565b9190505550611beb3360036128a6565b565b6060611bf882611f97565b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614411565b60405180910390fd5b6000611c41612ddb565b90506000815111611c615760405180602001604052806000815250611c8c565b80611c6b84612e6d565b604051602001611c7c929190614154565b6040516020818303038152906040525b915050919050565b60085481565b6000611ca582612fce565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611d66611381565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db3906143f1565b60405180910390fd5b60405180604001604052808367ffffffffffffffff168152602001821515815250600a60008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548160ff0219169083151502179055509050505050565b611e3d611fa5565b73ffffffffffffffffffffffffffffffffffffffff16611e5b611381565b73ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906143f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614251565b60405180910390fd5b611f2a81612ac7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061206a826128c4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612091611fa5565b73ffffffffffffffffffffffffffffffffffffffff1614806120ed57506120b6611fa5565b73ffffffffffffffffffffffffffffffffffffffff166120d5846109c0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061210957506121088260000151612103611fa5565b611cac565b5b90508061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290614451565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b4906143b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142d1565b60405180910390fd5b61223a85858560016130b7565b61224a6000848460000151611fad565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166122b89190614887565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661235c9190614760565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461246291906147a6565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125a8576124d881611f97565b156125a7576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461261086868660016130bd565b505050505050565b6000600854905060008211612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614351565b60405180910390fd5b60006001838361267291906147a6565b61267c91906148bb565b905060017f000000000000000000000000000000000000000000000000000000000000115c6126ab91906148bb565b8111156126e25760017f000000000000000000000000000000000000000000000000000000000000115c6126df91906148bb565b90505b6126eb81611f97565b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614591565b60405180910390fd5b60008290505b81811161288d57600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287a5760006127ad826128c4565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061288590614a62565b915050612730565b5060018161289b91906147a6565b600881905550505050565b6128c08282604051806020016040528060008152506130c3565b5050565b6128cc61364c565b6128d582611f97565b612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614271565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106129785760017f000000000000000000000000000000000000000000000000000000000000000a8461296b91906148bb565b61297591906147a6565b90505b60008390505b818110612a86576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a7257809350505050612ac2565b508080612a7e906149d5565b91505061297e565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906145d1565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808314158015612b9b575081155b905092915050565b80341015612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906144f1565b60405180910390fd5b80341115612c41573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612c1491906148bb565b9081150290604051600060405180830381858888f19350505050158015612c3f573d6000803e3d6000fd5b505b50565b6000612c658473ffffffffffffffffffffffffffffffffffffffff166135a3565b15612dce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c8e611fa5565b8786866040518563ffffffff1660e01b8152600401612cb094939291906141a8565b602060405180830381600087803b158015612cca57600080fd5b505af1925050508015612cfb57506040513d601f19601f82011682018060405250810190612cf89190613abe565b60015b612d7e573d8060008114612d2b576040519150601f19603f3d011682016040523d82523d6000602084013e612d30565b606091505b50600081511415612d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6d906144d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612dd3565b600190505b949350505050565b6060600c8054612dea906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612e16906149ff565b8015612e635780601f10612e3857610100808354040283529160200191612e63565b820191906000526020600020905b815481529060010190602001808311612e4657829003601f168201915b5050505050905090565b60606000821415612eb5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fc9565b600082905060005b60008214612ee7578080612ed090614a62565b915050600a82612ee091906147fc565b9150612ebd565b60008167ffffffffffffffff811115612f0357612f02614b98565b5b6040519080825280601f01601f191660200182016040528015612f355781602001600182028036833780820191505090505b5090505b60008514612fc257600182612f4e91906148bb565b9150600a85612f5d9190614aab565b6030612f6991906147a6565b60f81b818381518110612f7f57612f7e614b69565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fbb91906147fc565b9450612f39565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561303f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613036906142f1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561313a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313190614531565b60405180910390fd5b61314381611f97565b15613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90614511565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8311156131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614611565b60405180910390fd5b6131f360008583866130b7565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132f09190614760565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133179190614760565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561358657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135266000888488612c44565b613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c906144d1565b60405180910390fd5b818061357090614a62565b925050808061357e90614a62565b9150506134b5565b508060018190555061359b60008785886130bd565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135d2906149ff565b90600052602060002090601f0160209004810192826135f4576000855561363b565b82601f1061360d57803560ff191683800117855561363b565b8280016001018555821561363b579182015b8281111561363a57823582559160200191906001019061361f565b5b5090506136489190613686565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561369f576000816000905550600101613687565b5090565b60006136b66136b1846146b5565b614690565b905080838252602082019050828560208602820111156136d9576136d8614bd1565b5b60005b8581101561370957816136ef8882613755565b8452602084019350602083019250506001810190506136dc565b5050509392505050565b6000613726613721846146e1565b614690565b90508281526020810184848401111561374257613741614bd6565b5b61374d848285614993565b509392505050565b60008135905061376481615411565b92915050565b600082601f83011261377f5761377e614bcc565b5b813561378f8482602086016136a3565b91505092915050565b6000813590506137a781615428565b92915050565b6000813590506137bc8161543f565b92915050565b6000815190506137d18161543f565b92915050565b600082601f8301126137ec576137eb614bcc565b5b81356137fc848260208601613713565b91505092915050565b60008083601f84011261381b5761381a614bcc565b5b8235905067ffffffffffffffff81111561383857613837614bc7565b5b60208301915083600182028301111561385457613853614bd1565b5b9250929050565b60008135905061386a81615456565b92915050565b60008135905061387f8161546d565b92915050565b60006020828403121561389b5761389a614be0565b5b60006138a984828501613755565b91505092915050565b600080604083850312156138c9576138c8614be0565b5b60006138d785828601613755565b92505060206138e885828601613755565b9150509250929050565b60008060006060848603121561390b5761390a614be0565b5b600061391986828701613755565b935050602061392a86828701613755565b925050604061393b8682870161385b565b9150509250925092565b6000806000806080858703121561395f5761395e614be0565b5b600061396d87828801613755565b945050602061397e87828801613755565b935050604061398f8782880161385b565b925050606085013567ffffffffffffffff8111156139b0576139af614bdb565b5b6139bc878288016137d7565b91505092959194509250565b600080604083850312156139df576139de614be0565b5b60006139ed85828601613755565b92505060206139fe85828601613798565b9150509250929050565b60008060408385031215613a1f57613a1e614be0565b5b6000613a2d85828601613755565b9250506020613a3e8582860161385b565b9150509250929050565b600060208284031215613a5e57613a5d614be0565b5b600082013567ffffffffffffffff811115613a7c57613a7b614bdb565b5b613a888482850161376a565b91505092915050565b600060208284031215613aa757613aa6614be0565b5b6000613ab5848285016137ad565b91505092915050565b600060208284031215613ad457613ad3614be0565b5b6000613ae2848285016137c2565b91505092915050565b60008060208385031215613b0257613b01614be0565b5b600083013567ffffffffffffffff811115613b2057613b1f614bdb565b5b613b2c85828601613805565b92509250509250929050565b600060208284031215613b4e57613b4d614be0565b5b6000613b5c8482850161385b565b91505092915050565b60008060408385031215613b7c57613b7b614be0565b5b6000613b8a85828601613870565b9250506020613b9b85828601613798565b9150509250929050565b613bae816148ef565b82525050565b613bbd816148ef565b82525050565b613bcc81614901565b82525050565b6000613bdd82614712565b613be78185614728565b9350613bf78185602086016149a2565b613c0081614be5565b840191505092915050565b6000613c168261471d565b613c208185614744565b9350613c308185602086016149a2565b613c3981614be5565b840191505092915050565b6000613c4f8261471d565b613c598185614755565b9350613c698185602086016149a2565b80840191505092915050565b6000613c82602283614744565b9150613c8d82614bf6565b604082019050919050565b6000613ca5602683614744565b9150613cb082614c45565b604082019050919050565b6000613cc8602a83614744565b9150613cd382614c94565b604082019050919050565b6000613ceb602c83614744565b9150613cf682614ce3565b604082019050919050565b6000613d0e602383614744565b9150613d1982614d32565b604082019050919050565b6000613d31602583614744565b9150613d3c82614d81565b604082019050919050565b6000613d54603183614744565b9150613d5f82614dd0565b604082019050919050565b6000613d77601e83614744565b9150613d8282614e1f565b602082019050919050565b6000613d9a603983614744565b9150613da582614e48565b604082019050919050565b6000613dbd601883614744565b9150613dc882614e97565b602082019050919050565b6000613de0602b83614744565b9150613deb82614ec0565b604082019050919050565b6000613e03601283614744565b9150613e0e82614f0f565b602082019050919050565b6000613e26602683614744565b9150613e3182614f38565b604082019050919050565b6000613e49601e83614744565b9150613e5482614f87565b602082019050919050565b6000613e6c602083614744565b9150613e7782614fb0565b602082019050919050565b6000613e8f602f83614744565b9150613e9a82614fd9565b604082019050919050565b6000613eb2601a83614744565b9150613ebd82615028565b602082019050919050565b6000613ed5603283614744565b9150613ee082615051565b604082019050919050565b6000613ef8601d83614744565b9150613f03826150a0565b602082019050919050565b6000613f1b602283614744565b9150613f26826150c9565b604082019050919050565b6000613f3e600083614739565b9150613f4982615118565b600082019050919050565b6000613f61601083614744565b9150613f6c8261511b565b602082019050919050565b6000613f84603383614744565b9150613f8f82615144565b604082019050919050565b6000613fa7601683614744565b9150613fb282615193565b602082019050919050565b6000613fca601d83614744565b9150613fd5826151bc565b602082019050919050565b6000613fed602183614744565b9150613ff8826151e5565b604082019050919050565b6000614010601683614744565b915061401b82615234565b602082019050919050565b6000614033602e83614744565b915061403e8261525d565b604082019050919050565b6000614056602683614744565b9150614061826152ac565b604082019050919050565b6000614079601f83614744565b9150614084826152fb565b602082019050919050565b600061409c602f83614744565b91506140a782615324565b604082019050919050565b60006140bf602d83614744565b91506140ca82615373565b604082019050919050565b60006140e2602283614744565b91506140ed826153c2565b604082019050919050565b60408201600082015161410e6000850182613ba5565b5060208201516141216020850182614136565b50505050565b61413081614975565b82525050565b61413f8161497f565b82525050565b61414e8161497f565b82525050565b60006141608285613c44565b915061416c8284613c44565b91508190509392505050565b600061418382613f31565b9150819050919050565b60006020820190506141a26000830184613bb4565b92915050565b60006080820190506141bd6000830187613bb4565b6141ca6020830186613bb4565b6141d76040830185614127565b81810360608301526141e98184613bd2565b905095945050505050565b60006020820190506142096000830184613bc3565b92915050565b600060208201905081810360008301526142298184613c0b565b905092915050565b6000602082019050818103600083015261424a81613c75565b9050919050565b6000602082019050818103600083015261426a81613c98565b9050919050565b6000602082019050818103600083015261428a81613cbb565b9050919050565b600060208201905081810360008301526142aa81613cde565b9050919050565b600060208201905081810360008301526142ca81613d01565b9050919050565b600060208201905081810360008301526142ea81613d24565b9050919050565b6000602082019050818103600083015261430a81613d47565b9050919050565b6000602082019050818103600083015261432a81613d6a565b9050919050565b6000602082019050818103600083015261434a81613d8d565b9050919050565b6000602082019050818103600083015261436a81613db0565b9050919050565b6000602082019050818103600083015261438a81613dd3565b9050919050565b600060208201905081810360008301526143aa81613df6565b9050919050565b600060208201905081810360008301526143ca81613e19565b9050919050565b600060208201905081810360008301526143ea81613e3c565b9050919050565b6000602082019050818103600083015261440a81613e5f565b9050919050565b6000602082019050818103600083015261442a81613e82565b9050919050565b6000602082019050818103600083015261444a81613ea5565b9050919050565b6000602082019050818103600083015261446a81613ec8565b9050919050565b6000602082019050818103600083015261448a81613eeb565b9050919050565b600060208201905081810360008301526144aa81613f0e565b9050919050565b600060208201905081810360008301526144ca81613f54565b9050919050565b600060208201905081810360008301526144ea81613f77565b9050919050565b6000602082019050818103600083015261450a81613f9a565b9050919050565b6000602082019050818103600083015261452a81613fbd565b9050919050565b6000602082019050818103600083015261454a81613fe0565b9050919050565b6000602082019050818103600083015261456a81614003565b9050919050565b6000602082019050818103600083015261458a81614026565b9050919050565b600060208201905081810360008301526145aa81614049565b9050919050565b600060208201905081810360008301526145ca8161406c565b9050919050565b600060208201905081810360008301526145ea8161408f565b9050919050565b6000602082019050818103600083015261460a816140b2565b9050919050565b6000602082019050818103600083015261462a816140d5565b9050919050565b600060408201905061464660008301846140f8565b92915050565b60006020820190506146616000830184614127565b92915050565b600060408201905061467c6000830185614145565b6146896020830184613bc3565b9392505050565b600061469a6146ab565b90506146a68282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146d0576146cf614b98565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146fc576146fb614b98565b5b61470582614be5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061476b82614939565b915061477683614939565b9250826fffffffffffffffffffffffffffffffff0382111561479b5761479a614adc565b5b828201905092915050565b60006147b182614975565b91506147bc83614975565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f1576147f0614adc565b5b828201905092915050565b600061480782614975565b915061481283614975565b92508261482257614821614b0b565b5b828204905092915050565b600061483882614975565b915061484383614975565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561487c5761487b614adc565b5b828202905092915050565b600061489282614939565b915061489d83614939565b9250828210156148b0576148af614adc565b5b828203905092915050565b60006148c682614975565b91506148d183614975565b9250828210156148e4576148e3614adc565b5b828203905092915050565b60006148fa82614955565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156149c05780820151818401526020810190506149a5565b838111156149cf576000848401525b50505050565b60006149e082614975565b915060008214156149f4576149f3614adc565b5b600182039050919050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614be5565b810181811067ffffffffffffffff82111715614a5957614a58614b98565b5b80604052505050565b6000614a6d82614975565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab682614975565b9150614ac183614975565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656c696769626c6520666f72207465616d4c697374206d696e740000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61541a816148ef565b811461542557600080fd5b50565b61543181614901565b811461543c57600080fd5b50565b6154488161490d565b811461545357600080fd5b50565b61545f81614975565b811461546a57600080fd5b50565b6154768161497f565b811461548157600080fd5b5056fea2646970667358221220948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000028
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : maxPerAddressDuringMint_ (uint256): 40
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000028
Deployed Bytecode Sourcemap
42711:3454:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27801:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31052:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30615:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26362:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31902:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45778:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26993:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44985:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32107:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44770:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42940:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26525:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45485:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29350:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28227:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41816:103;;;;;;;;;;;;;:::i;:::-;;42777:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41165:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42905:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;46015:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29682:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31320:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45591:181;;;;;;;;;;;;;:::i;:::-;;43582:621;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32327:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43320:256;;;;;;;;;;;;;:::i;:::-;;29843:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36742:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45902:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31657:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44419:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42074:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27801:370;27928:4;27973:25;27958:40;;;:11;:40;;;;:99;;;;28024:33;28009:48;;;:11;:48;;;;27958:99;:160;;;;28083:35;28068:50;;;:11;:50;;;;27958:160;:207;;;;28129:36;28153:11;28129:23;:36::i;:::-;27958:207;27944:221;;27801:370;;;:::o;29527:94::-;29581:13;29610:5;29603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29527:94;:::o;31052:204::-;31120:7;31144:16;31152:7;31144;:16::i;:::-;31136:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31226:15;:24;31242:7;31226:24;;;;;;;;;;;;;;;;;;;;;31219:31;;31052:204;;;:::o;30615:379::-;30684:13;30700:24;30716:7;30700:15;:24::i;:::-;30684:40;;30745:5;30739:11;;:2;:11;;;;30731:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30830:5;30814:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30839:37;30856:5;30863:12;:10;:12::i;:::-;30839:16;:37::i;:::-;30814:62;30798:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30960:28;30969:2;30973:7;30982:5;30960:8;:28::i;:::-;30677:317;30615:379;;:::o;26362:94::-;26415:7;26438:12;;26431:19;;26362:94;:::o;31902:142::-;32010:28;32020:4;32026:2;32030:7;32010:9;:28::i;:::-;31902:142;;;:::o;45778:118::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;45862:28:::2;45881:8;45862:18;:28::i;:::-;22162:1:::1;23116:7;:22;;;;45778:118:::0;:::o;26993:744::-;27102:7;27137:16;27147:5;27137:9;:16::i;:::-;27129:5;:24;27121:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:22;27224:13;:11;:13::i;:::-;27199:38;;27244:19;27274:25;27324:9;27319:350;27343:14;27339:1;:18;27319:350;;;27373:31;27407:11;:14;27419:1;27407:14;;;;;;;;;;;27373:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27460:1;27434:28;;:9;:14;;;:28;;;27430:89;;27495:9;:14;;;27475:34;;27430:89;27552:5;27531:26;;:17;:26;;;27527:135;;;27589:5;27574:11;:20;27570:59;;;27616:1;27609:8;;;;;;;;;27570:59;27639:13;;;;;:::i;:::-;;;;27527:135;27364:305;27359:3;;;;;:::i;:::-;;;;27319:350;;;;27675:56;;;;;;;;;;:::i;:::-;;;;;;;;26993:744;;;;;:::o;44985:321::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45089:1:::1;45073:12;45062:8;:23;;;;:::i;:::-;:28;45046:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45159:17;45190:12;45179:8;:23;;;;:::i;:::-;45159:43;;45214:9;45209:92;45233:9;45229:1;:13;45209:92;;;45258:35;45268:10;45280:12;45258:9;:35::i;:::-;45244:3;;;;;:::i;:::-;;;;45209:92;;;;45039:267;44985:321:::0;:::o;32107:157::-;32219:39;32236:4;32242:2;32246:7;32219:39;;;;;;;;;;;;:16;:39::i;:::-;32107:157;;;:::o;44770:184::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:9:::1;44859:90;44883:9;:16;44879:1;:20;44859:90;;;44940:1;44915:8;:22;44924:9;44934:1;44924:12;;;;;;;;:::i;:::-;;;;;;;;44915:22;;;;;;;;;;;;;;;:26;;;;44901:3;;;;;:::i;:::-;;;;44859:90;;;;44770:184:::0;:::o;42940:43::-;;;;;;;;;;;;;;;;;:::o;26525:177::-;26592:7;26624:13;:11;:13::i;:::-;26616:5;:21;26608:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26691:5;26684:12;;26525:177;;;:::o;45485:100::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45572:7:::1;;45556:13;:23;;;;;;;:::i;:::-;;45485:100:::0;;:::o;29350:118::-;29414:7;29437:20;29449:7;29437:11;:20::i;:::-;:25;;;29430:32;;29350:118;;;:::o;28227:211::-;28291:7;28332:1;28315:19;;:5;:19;;;;28307:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28404:12;:19;28417:5;28404:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28396:36;;28389:43;;28227:211;;;:::o;41816:103::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41881:30:::1;41908:1;41881:18;:30::i;:::-;41816:103::o:0;42777:48::-;;;:::o;41165:87::-;41211:7;41238:6;;;;;;;;;;;41231:13;;41165:87;:::o;42905:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46015:147::-;46096:21;;:::i;:::-;46136:20;46148:7;46136:11;:20::i;:::-;46129:27;;46015:147;;;:::o;29682:98::-;29738:13;29767:7;29760:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29682:98;:::o;31320:274::-;31423:12;:10;:12::i;:::-;31411:24;;:8;:24;;;;31403:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:8;31475:18;:32;31494:12;:10;:12::i;:::-;31475:32;;;;;;;;;;;;;;;:42;31508:8;31475:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31569:8;31540:48;;31555:12;:10;:12::i;:::-;31540:48;;;31579:8;31540:48;;;;;;:::i;:::-;;;;;;;;31320:274;;:::o;45591:181::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1:::1;22804:7;;:19;;22796:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22206:1;22937:7;:18;;;;45656:12:::2;45674:10;:15;;45697:21;45674:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45655:68;;;45738:7;45730:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45648:124;22162:1:::1;23116:7;:22;;;;45591:181::o:0;43582:621::-;43255:10;43242:23;;:9;:23;;;43234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43679:24:::1;43706:10;43679:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;43723:10;43736:6;:13;;;43723:26;;43756:19;43786:6;:18;;;43778:27;;43756:49;;43830:34;43845:11;43858:5;43830:14;:34::i;:::-;43814:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43973:23;43961:8;43934:24;43947:10;43934:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43918:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;44079:14;44067:8;44051:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;44043:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44123:31;44133:10;44145:8;44123:9;:31::i;:::-;44161:36;44188:8;44174:11;:22;;;;:::i;:::-;44161:12;:36::i;:::-;43672:531;;;43582:621:::0;:::o;32327:311::-;32464:28;32474:4;32480:2;32484:7;32464:9;:28::i;:::-;32515:48;32538:4;32544:2;32548:7;32557:5;32515:22;:48::i;:::-;32499:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:311;;;;:::o;43320:256::-;43255:10;43242:23;;:9;:23;;;43234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43400:1:::1;43377:8;:20;43386:10;43377:20;;;;;;;;;;;;;;;;:24;43369:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43472:14;43467:1;43451:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;43443:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43516:8;:20;43525:10;43516:20;;;;;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;;43546:24;43556:10;43568:1;43546:9;:24::i;:::-;43320:256::o:0;29843:394::-;29941:13;29982:16;29990:7;29982;:16::i;:::-;29966:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;30072:21;30096:10;:8;:10::i;:::-;30072:34;;30151:1;30133:7;30127:21;:25;:104;;;;;;;;;;;;;;;;;30188:7;30197:18;:7;:16;:18::i;:::-;30171:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30127:104;30113:118;;;29843:394;;;:::o;36742:43::-;;;;:::o;45902:107::-;45960:7;45983:20;45997:5;45983:13;:20::i;:::-;45976:27;;45902:107;;;:::o;31657:186::-;31779:4;31802:18;:25;31821:5;31802:25;;;;;;;;;;;;;;;:35;31828:8;31802:35;;;;;;;;;;;;;;;;;;;;;;;;;31795:42;;31657:186;;;;:::o;44419:172::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44531:54:::1;;;;;;;;44550:14;44531:54;;;;;;44573:5;44531:54;;;;::::0;44518:10:::1;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44419:172:::0;;:::o;42074:201::-;41396:12;:10;:12::i;:::-;41385:23;;:7;:5;:7::i;:::-;:23;;;41377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42183:1:::1;42163:22;;:8;:22;;;;42155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42239:28;42258:8;42239:18;:28::i;:::-;42074:201:::0;:::o;13475:157::-;13560:4;13599:25;13584:40;;;:11;:40;;;;13577:47;;13475:157;;;:::o;32877:105::-;32934:4;32964:12;;32954:7;:22;32947:29;;32877:105;;;:::o;23832:98::-;23885:7;23912:10;23905:17;;23832:98;:::o;36564:172::-;36688:2;36661:15;:24;36677:7;36661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36722:7;36718:2;36702:28;;36711:5;36702:28;;;;;;;;;;;;36564:172;;;:::o;34929:1529::-;35026:35;35064:20;35076:7;35064:11;:20::i;:::-;35026:58;;35093:22;35135:13;:18;;;35119:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;35188:12;:10;:12::i;:::-;35164:36;;:20;35176:7;35164:11;:20::i;:::-;:36;;;35119:81;:142;;;;35211:50;35228:13;:18;;;35248:12;:10;:12::i;:::-;35211:16;:50::i;:::-;35119:142;35093:169;;35287:17;35271:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35419:4;35397:26;;:13;:18;;;:26;;;35381:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35508:1;35494:16;;:2;:16;;;;35486:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35561:43;35583:4;35589:2;35593:7;35602:1;35561:21;:43::i;:::-;35661:49;35678:1;35682:7;35691:13;:18;;;35661:8;:49::i;:::-;35749:1;35719:12;:18;35732:4;35719:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35785:1;35757:12;:16;35770:2;35757:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35816:43;;;;;;;;35831:2;35816:43;;;;;;35842:15;35816:43;;;;;35793:11;:20;35805:7;35793:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36087:19;36119:1;36109:7;:11;;;;:::i;:::-;36087:33;;36172:1;36131:43;;:11;:24;36143:11;36131:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36127:236;;;36189:20;36197:11;36189:7;:20::i;:::-;36185:171;;;36249:97;;;;;;;;36276:13;:18;;;36249:97;;;;;;36307:13;:28;;;36249:97;;;;;36222:11;:24;36234:11;36222:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36185:171;36127:236;36395:7;36391:2;36376:27;;36385:4;36376:27;;;;;;;;;;;;36410:42;36431:4;36437:2;36441:7;36450:1;36410:20;:42::i;:::-;35019:1439;;;34929:1529;;;:::o;36890:846::-;36952:25;36980:24;;36952:52;;37030:1;37019:8;:12;37011:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37067:16;37117:1;37106:8;37086:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;37067:51;;37157:1;37140:14;:18;;;;:::i;:::-;37129:8;:29;37125:81;;;37197:1;37180:14;:18;;;;:::i;:::-;37169:29;;37125:81;37321:17;37329:8;37321:7;:17::i;:::-;37313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37393:9;37405:17;37393:29;;37388:297;37429:8;37424:1;:13;37388:297;;37488:1;37457:33;;:11;:14;37469:1;37457:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;37453:225;;;37503:31;37537:14;37549:1;37537:11;:14::i;:::-;37503:48;;37579:89;;;;;;;;37606:9;:14;;;37579:89;;;;;;37633:9;:24;;;37579:89;;;;;37562:11;:14;37574:1;37562:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37492:186;37453:225;37439:3;;;;;:::i;:::-;;;;37388:297;;;;37729:1;37718:8;:12;;;;:::i;:::-;37691:24;:39;;;;36945:791;;36890:846;:::o;32988:98::-;33053:27;33063:2;33067:8;33053:27;;;;;;;;;;;;:9;:27::i;:::-;32988:98;;:::o;28690:606::-;28766:21;;:::i;:::-;28807:16;28815:7;28807;:16::i;:::-;28799:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:26;28927:12;28916:7;:23;28912:93;;28996:1;28981:12;28971:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28950:47;;28912:93;29018:12;29033:7;29018:22;;29013:212;29050:18;29042:4;:26;29013:212;;29087:31;29121:11;:17;29133:4;29121:17;;;;;;;;;;;29087:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29177:1;29151:28;;:9;:14;;;:28;;;29147:71;;29199:9;29192:16;;;;;;;29147:71;29078:147;29070:6;;;;;:::i;:::-;;;;29013:212;;;;29233:57;;;;;;;;;;:::i;:::-;;;;;;;;28690:606;;;;:::o;42435:191::-;42509:16;42528:6;;;;;;;;;;;42509:25;;42554:8;42545:6;;:17;;;;;;;;;;;;;;;;;;42609:8;42578:40;;42599:8;42578:40;;;;;;;;;;;;42498:128;42435:191;:::o;44597:167::-;44695:4;44740:1;44722:14;:19;;:36;;;;;44753:5;44752:6;44722:36;44708:50;;44597:167;;;;:::o;44209:204::-;44282:5;44269:9;:18;;44261:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44337:5;44325:9;:17;44321:87;;;44361:10;44353:28;;:47;44394:5;44382:9;:17;;;;:::i;:::-;44353:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44321:87;44209:204;:::o;38279:690::-;38416:4;38433:15;:2;:13;;;:15::i;:::-;38429:535;;;38488:2;38472:36;;;38509:12;:10;:12::i;:::-;38523:4;38529:7;38538:5;38472:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38459:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38720:1;38703:6;:13;:18;38699:215;;;38736:61;;;;;;;;;;:::i;:::-;;;;;;;;38699:215;38882:6;38876:13;38867:6;38863:2;38859:15;38852:38;38459:464;38604:45;;;38594:55;;;:6;:55;;;;38587:62;;;;;38429:535;38952:4;38945:11;;38279:690;;;;;;;:::o;45371:108::-;45431:13;45460;45453:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45371:108;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;28444:240::-;28505:7;28554:1;28537:19;;:5;:19;;;;28521:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28645:12;:19;28658:5;28645:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28637:41;;28630:48;;28444:240;;;:::o;39431:141::-;;;;;:::o;39958:140::-;;;;;:::o;33425:1272::-;33530:20;33553:12;;33530:35;;33594:1;33580:16;;:2;:16;;;;33572:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33771:21;33779:12;33771:7;:21::i;:::-;33770:22;33762:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33853:12;33841:8;:24;;33833:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33913:61;33943:1;33947:2;33951:12;33965:8;33913:21;:61::i;:::-;33983:30;34016:12;:16;34029:2;34016:16;;;;;;;;;;;;;;;33983:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34058:119;;;;;;;;34108:8;34078:11;:19;;;:39;;;;:::i;:::-;34058:119;;;;;;34161:8;34126:11;:24;;;:44;;;;:::i;:::-;34058:119;;;;;34039:12;:16;34052:2;34039:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34212:43;;;;;;;;34227:2;34212:43;;;;;;34238:15;34212:43;;;;;34184:11;:25;34196:12;34184:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34264:20;34287:12;34264:35;;34313:9;34308:281;34332:8;34328:1;:12;34308:281;;;34386:12;34382:2;34361:38;;34378:1;34361:38;;;;;;;;;;;;34426:59;34457:1;34461:2;34465:12;34479:5;34426:22;:59::i;:::-;34408:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34567:14;;;;;:::i;:::-;;;;34342:3;;;;;:::i;:::-;;;;34308:281;;;;34612:12;34597;:27;;;;34631:60;34660:1;34664:2;34668:12;34682:8;34631:20;:60::i;:::-;33523:1174;;;33425:1272;;;:::o;3392:326::-;3452:4;3709:1;3687:7;:19;;;:23;3680:30;;3392:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:137::-;1890:5;1928:6;1915:20;1906:29;;1944:32;1970:5;1944:32;:::i;:::-;1845:137;;;;:::o;1988:141::-;2044:5;2075:6;2069:13;2060:22;;2091:32;2117:5;2091:32;:::i;:::-;1988:141;;;;:::o;2148:338::-;2203:5;2252:3;2245:4;2237:6;2233:17;2229:27;2219:122;;2260:79;;:::i;:::-;2219:122;2377:6;2364:20;2402:78;2476:3;2468:6;2461:4;2453:6;2449:17;2402:78;:::i;:::-;2393:87;;2209:277;2148:338;;;;:::o;2506:553::-;2564:8;2574:6;2624:3;2617:4;2609:6;2605:17;2601:27;2591:122;;2632:79;;:::i;:::-;2591:122;2745:6;2732:20;2722:30;;2775:18;2767:6;2764:30;2761:117;;;2797:79;;:::i;:::-;2761:117;2911:4;2903:6;2899:17;2887:29;;2965:3;2957:4;2949:6;2945:17;2935:8;2931:32;2928:41;2925:128;;;2972:79;;:::i;:::-;2925:128;2506:553;;;;;:::o;3065:139::-;3111:5;3149:6;3136:20;3127:29;;3165:33;3192:5;3165:33;:::i;:::-;3065:139;;;;:::o;3210:137::-;3255:5;3293:6;3280:20;3271:29;;3309:32;3335:5;3309:32;:::i;:::-;3210:137;;;;:::o;3353:329::-;3412:6;3461:2;3449:9;3440:7;3436:23;3432:32;3429:119;;;3467:79;;:::i;:::-;3429:119;3587:1;3612:53;3657:7;3648:6;3637:9;3633:22;3612:53;:::i;:::-;3602:63;;3558:117;3353:329;;;;:::o;3688:474::-;3756:6;3764;3813:2;3801:9;3792:7;3788:23;3784:32;3781:119;;;3819:79;;:::i;:::-;3781:119;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;4066:2;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4037:118;3688:474;;;;;:::o;4168:619::-;4245:6;4253;4261;4310:2;4298:9;4289:7;4285:23;4281:32;4278:119;;;4316:79;;:::i;:::-;4278:119;4436:1;4461:53;4506:7;4497:6;4486:9;4482:22;4461:53;:::i;:::-;4451:63;;4407:117;4563:2;4589:53;4634:7;4625:6;4614:9;4610:22;4589:53;:::i;:::-;4579:63;;4534:118;4691:2;4717:53;4762:7;4753:6;4742:9;4738:22;4717:53;:::i;:::-;4707:63;;4662:118;4168:619;;;;;:::o;4793:943::-;4888:6;4896;4904;4912;4961:3;4949:9;4940:7;4936:23;4932:33;4929:120;;;4968:79;;:::i;:::-;4929:120;5088:1;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5059:117;5215:2;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5186:118;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;5499:2;5488:9;5484:18;5471:32;5530:18;5522:6;5519:30;5516:117;;;5552:79;;:::i;:::-;5516:117;5657:62;5711:7;5702:6;5691:9;5687:22;5657:62;:::i;:::-;5647:72;;5442:287;4793:943;;;;;;;:::o;5742:468::-;5807:6;5815;5864:2;5852:9;5843:7;5839:23;5835:32;5832:119;;;5870:79;;:::i;:::-;5832:119;5990:1;6015:53;6060:7;6051:6;6040:9;6036:22;6015:53;:::i;:::-;6005:63;;5961:117;6117:2;6143:50;6185:7;6176:6;6165:9;6161:22;6143:50;:::i;:::-;6133:60;;6088:115;5742:468;;;;;:::o;6216:474::-;6284:6;6292;6341:2;6329:9;6320:7;6316:23;6312:32;6309:119;;;6347:79;;:::i;:::-;6309:119;6467:1;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6438:117;6594:2;6620:53;6665:7;6656:6;6645:9;6641:22;6620:53;:::i;:::-;6610:63;;6565:118;6216:474;;;;;:::o;6696:539::-;6780:6;6829:2;6817:9;6808:7;6804:23;6800:32;6797:119;;;6835:79;;:::i;:::-;6797:119;6983:1;6972:9;6968:17;6955:31;7013:18;7005:6;7002:30;6999:117;;;7035:79;;:::i;:::-;6999:117;7140:78;7210:7;7201:6;7190:9;7186:22;7140:78;:::i;:::-;7130:88;;6926:302;6696:539;;;;:::o;7241:327::-;7299:6;7348:2;7336:9;7327:7;7323:23;7319:32;7316:119;;;7354:79;;:::i;:::-;7316:119;7474:1;7499:52;7543:7;7534:6;7523:9;7519:22;7499:52;:::i;:::-;7489:62;;7445:116;7241:327;;;;:::o;7574:349::-;7643:6;7692:2;7680:9;7671:7;7667:23;7663:32;7660:119;;;7698:79;;:::i;:::-;7660:119;7818:1;7843:63;7898:7;7889:6;7878:9;7874:22;7843:63;:::i;:::-;7833:73;;7789:127;7574:349;;;;:::o;7929:529::-;8000:6;8008;8057:2;8045:9;8036:7;8032:23;8028:32;8025:119;;;8063:79;;:::i;:::-;8025:119;8211:1;8200:9;8196:17;8183:31;8241:18;8233:6;8230:30;8227:117;;;8263:79;;:::i;:::-;8227:117;8376:65;8433:7;8424:6;8413:9;8409:22;8376:65;:::i;:::-;8358:83;;;;8154:297;7929:529;;;;;:::o;8464:329::-;8523:6;8572:2;8560:9;8551:7;8547:23;8543:32;8540:119;;;8578:79;;:::i;:::-;8540:119;8698:1;8723:53;8768:7;8759:6;8748:9;8744:22;8723:53;:::i;:::-;8713:63;;8669:117;8464:329;;;;:::o;8799:466::-;8863:6;8871;8920:2;8908:9;8899:7;8895:23;8891:32;8888:119;;;8926:79;;:::i;:::-;8888:119;9046:1;9071:52;9115:7;9106:6;9095:9;9091:22;9071:52;:::i;:::-;9061:62;;9017:116;9172:2;9198:50;9240:7;9231:6;9220:9;9216:22;9198:50;:::i;:::-;9188:60;;9143:115;8799:466;;;;;:::o;9271:108::-;9348:24;9366:5;9348:24;:::i;:::-;9343:3;9336:37;9271:108;;:::o;9385:118::-;9472:24;9490:5;9472:24;:::i;:::-;9467:3;9460:37;9385:118;;:::o;9509:109::-;9590:21;9605:5;9590:21;:::i;:::-;9585:3;9578:34;9509:109;;:::o;9624:360::-;9710:3;9738:38;9770:5;9738:38;:::i;:::-;9792:70;9855:6;9850:3;9792:70;:::i;:::-;9785:77;;9871:52;9916:6;9911:3;9904:4;9897:5;9893:16;9871:52;:::i;:::-;9948:29;9970:6;9948:29;:::i;:::-;9943:3;9939:39;9932:46;;9714:270;9624:360;;;;:::o;9990:364::-;10078:3;10106:39;10139:5;10106:39;:::i;:::-;10161:71;10225:6;10220:3;10161:71;:::i;:::-;10154:78;;10241:52;10286:6;10281:3;10274:4;10267:5;10263:16;10241:52;:::i;:::-;10318:29;10340:6;10318:29;:::i;:::-;10313:3;10309:39;10302:46;;10082:272;9990:364;;;;:::o;10360:377::-;10466:3;10494:39;10527:5;10494:39;:::i;:::-;10549:89;10631:6;10626:3;10549:89;:::i;:::-;10542:96;;10647:52;10692:6;10687:3;10680:4;10673:5;10669:16;10647:52;:::i;:::-;10724:6;10719:3;10715:16;10708:23;;10470:267;10360:377;;;;:::o;10743:366::-;10885:3;10906:67;10970:2;10965:3;10906:67;:::i;:::-;10899:74;;10982:93;11071:3;10982:93;:::i;:::-;11100:2;11095:3;11091:12;11084:19;;10743:366;;;:::o;11115:::-;11257:3;11278:67;11342:2;11337:3;11278:67;:::i;:::-;11271:74;;11354:93;11443:3;11354:93;:::i;:::-;11472:2;11467:3;11463:12;11456:19;;11115:366;;;:::o;11487:::-;11629:3;11650:67;11714:2;11709:3;11650:67;:::i;:::-;11643:74;;11726:93;11815:3;11726:93;:::i;:::-;11844:2;11839:3;11835:12;11828:19;;11487:366;;;:::o;11859:::-;12001:3;12022:67;12086:2;12081:3;12022:67;:::i;:::-;12015:74;;12098:93;12187:3;12098:93;:::i;:::-;12216:2;12211:3;12207:12;12200:19;;11859:366;;;:::o;12231:::-;12373:3;12394:67;12458:2;12453:3;12394:67;:::i;:::-;12387:74;;12470:93;12559:3;12470:93;:::i;:::-;12588:2;12583:3;12579:12;12572:19;;12231:366;;;:::o;12603:::-;12745:3;12766:67;12830:2;12825:3;12766:67;:::i;:::-;12759:74;;12842:93;12931:3;12842:93;:::i;:::-;12960:2;12955:3;12951:12;12944:19;;12603:366;;;:::o;12975:::-;13117:3;13138:67;13202:2;13197:3;13138:67;:::i;:::-;13131:74;;13214:93;13303:3;13214:93;:::i;:::-;13332:2;13327:3;13323:12;13316:19;;12975:366;;;:::o;13347:::-;13489:3;13510:67;13574:2;13569:3;13510:67;:::i;:::-;13503:74;;13586:93;13675:3;13586:93;:::i;:::-;13704:2;13699:3;13695:12;13688:19;;13347:366;;;:::o;13719:::-;13861:3;13882:67;13946:2;13941:3;13882:67;:::i;:::-;13875:74;;13958:93;14047:3;13958:93;:::i;:::-;14076:2;14071:3;14067:12;14060:19;;13719:366;;;:::o;14091:::-;14233:3;14254:67;14318:2;14313:3;14254:67;:::i;:::-;14247:74;;14330:93;14419:3;14330:93;:::i;:::-;14448:2;14443:3;14439:12;14432:19;;14091:366;;;:::o;14463:::-;14605:3;14626:67;14690:2;14685:3;14626:67;:::i;:::-;14619:74;;14702:93;14791:3;14702:93;:::i;:::-;14820:2;14815:3;14811:12;14804:19;;14463:366;;;:::o;14835:::-;14977:3;14998:67;15062:2;15057:3;14998:67;:::i;:::-;14991:74;;15074:93;15163:3;15074:93;:::i;:::-;15192:2;15187:3;15183:12;15176:19;;14835:366;;;:::o;15207:::-;15349:3;15370:67;15434:2;15429:3;15370:67;:::i;:::-;15363:74;;15446:93;15535:3;15446:93;:::i;:::-;15564:2;15559:3;15555:12;15548:19;;15207:366;;;:::o;15579:::-;15721:3;15742:67;15806:2;15801:3;15742:67;:::i;:::-;15735:74;;15818:93;15907:3;15818:93;:::i;:::-;15936:2;15931:3;15927:12;15920:19;;15579:366;;;:::o;15951:::-;16093:3;16114:67;16178:2;16173:3;16114:67;:::i;:::-;16107:74;;16190:93;16279:3;16190:93;:::i;:::-;16308:2;16303:3;16299:12;16292:19;;15951:366;;;:::o;16323:::-;16465:3;16486:67;16550:2;16545:3;16486:67;:::i;:::-;16479:74;;16562:93;16651:3;16562:93;:::i;:::-;16680:2;16675:3;16671:12;16664:19;;16323:366;;;:::o;16695:::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16695:366;;;:::o;17067:::-;17209:3;17230:67;17294:2;17289:3;17230:67;:::i;:::-;17223:74;;17306:93;17395:3;17306:93;:::i;:::-;17424:2;17419:3;17415:12;17408:19;;17067:366;;;:::o;17439:::-;17581:3;17602:67;17666:2;17661:3;17602:67;:::i;:::-;17595:74;;17678:93;17767:3;17678:93;:::i;:::-;17796:2;17791:3;17787:12;17780:19;;17439:366;;;:::o;17811:::-;17953:3;17974:67;18038:2;18033:3;17974:67;:::i;:::-;17967:74;;18050:93;18139:3;18050:93;:::i;:::-;18168:2;18163:3;18159:12;18152:19;;17811:366;;;:::o;18183:398::-;18342:3;18363:83;18444:1;18439:3;18363:83;:::i;:::-;18356:90;;18455:93;18544:3;18455:93;:::i;:::-;18573:1;18568:3;18564:11;18557:18;;18183:398;;;:::o;18587:366::-;18729:3;18750:67;18814:2;18809:3;18750:67;:::i;:::-;18743:74;;18826:93;18915:3;18826:93;:::i;:::-;18944:2;18939:3;18935:12;18928:19;;18587:366;;;:::o;18959:::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:::-;19473:3;19494:67;19558:2;19553:3;19494:67;:::i;:::-;19487:74;;19570:93;19659:3;19570:93;:::i;:::-;19688:2;19683:3;19679:12;19672:19;;19331:366;;;:::o;19703:::-;19845:3;19866:67;19930:2;19925:3;19866:67;:::i;:::-;19859:74;;19942:93;20031:3;19942:93;:::i;:::-;20060:2;20055:3;20051:12;20044:19;;19703:366;;;:::o;20075:::-;20217:3;20238:67;20302:2;20297:3;20238:67;:::i;:::-;20231:74;;20314:93;20403:3;20314:93;:::i;:::-;20432:2;20427:3;20423:12;20416:19;;20075:366;;;:::o;20447:::-;20589:3;20610:67;20674:2;20669:3;20610:67;:::i;:::-;20603:74;;20686:93;20775:3;20686:93;:::i;:::-;20804:2;20799:3;20795:12;20788:19;;20447:366;;;:::o;20819:::-;20961:3;20982:67;21046:2;21041:3;20982:67;:::i;:::-;20975:74;;21058:93;21147:3;21058:93;:::i;:::-;21176:2;21171:3;21167:12;21160:19;;20819:366;;;:::o;21191:::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:::-;21705:3;21726:67;21790:2;21785:3;21726:67;:::i;:::-;21719:74;;21802:93;21891:3;21802:93;:::i;:::-;21920:2;21915:3;21911:12;21904:19;;21563:366;;;:::o;21935:::-;22077:3;22098:67;22162:2;22157:3;22098:67;:::i;:::-;22091:74;;22174:93;22263:3;22174:93;:::i;:::-;22292:2;22287:3;22283:12;22276:19;;21935:366;;;:::o;22307:::-;22449:3;22470:67;22534:2;22529:3;22470:67;:::i;:::-;22463:74;;22546:93;22635:3;22546:93;:::i;:::-;22664:2;22659:3;22655:12;22648:19;;22307:366;;;:::o;22679:::-;22821:3;22842:67;22906:2;22901:3;22842:67;:::i;:::-;22835:74;;22918:93;23007:3;22918:93;:::i;:::-;23036:2;23031:3;23027:12;23020:19;;22679:366;;;:::o;23121:527::-;23280:4;23275:3;23271:14;23367:4;23360:5;23356:16;23350:23;23386:63;23443:4;23438:3;23434:14;23420:12;23386:63;:::i;:::-;23295:164;23551:4;23544:5;23540:16;23534:23;23570:61;23625:4;23620:3;23616:14;23602:12;23570:61;:::i;:::-;23469:172;23249:399;23121:527;;:::o;23654:118::-;23741:24;23759:5;23741:24;:::i;:::-;23736:3;23729:37;23654:118;;:::o;23778:105::-;23853:23;23870:5;23853:23;:::i;:::-;23848:3;23841:36;23778:105;;:::o;23889:115::-;23974:23;23991:5;23974:23;:::i;:::-;23969:3;23962:36;23889:115;;:::o;24010:435::-;24190:3;24212:95;24303:3;24294:6;24212:95;:::i;:::-;24205:102;;24324:95;24415:3;24406:6;24324:95;:::i;:::-;24317:102;;24436:3;24429:10;;24010:435;;;;;:::o;24451:379::-;24635:3;24657:147;24800:3;24657:147;:::i;:::-;24650:154;;24821:3;24814:10;;24451:379;;;:::o;24836:222::-;24929:4;24967:2;24956:9;24952:18;24944:26;;24980:71;25048:1;25037:9;25033:17;25024:6;24980:71;:::i;:::-;24836:222;;;;:::o;25064:640::-;25259:4;25297:3;25286:9;25282:19;25274:27;;25311:71;25379:1;25368:9;25364:17;25355:6;25311:71;:::i;:::-;25392:72;25460:2;25449:9;25445:18;25436:6;25392:72;:::i;:::-;25474;25542:2;25531:9;25527:18;25518:6;25474:72;:::i;:::-;25593:9;25587:4;25583:20;25578:2;25567:9;25563:18;25556:48;25621:76;25692:4;25683:6;25621:76;:::i;:::-;25613:84;;25064:640;;;;;;;:::o;25710:210::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25848:65;25910:1;25899:9;25895:17;25886:6;25848:65;:::i;:::-;25710:210;;;;:::o;25926:313::-;26039:4;26077:2;26066:9;26062:18;26054:26;;26126:9;26120:4;26116:20;26112:1;26101:9;26097:17;26090:47;26154:78;26227:4;26218:6;26154:78;:::i;:::-;26146:86;;25926:313;;;;:::o;26245:419::-;26411:4;26449:2;26438:9;26434:18;26426:26;;26498:9;26492:4;26488:20;26484:1;26473:9;26469:17;26462:47;26526:131;26652:4;26526:131;:::i;:::-;26518:139;;26245:419;;;:::o;26670:::-;26836:4;26874:2;26863:9;26859:18;26851:26;;26923:9;26917:4;26913:20;26909:1;26898:9;26894:17;26887:47;26951:131;27077:4;26951:131;:::i;:::-;26943:139;;26670:419;;;:::o;27095:::-;27261:4;27299:2;27288:9;27284:18;27276:26;;27348:9;27342:4;27338:20;27334:1;27323:9;27319:17;27312:47;27376:131;27502:4;27376:131;:::i;:::-;27368:139;;27095:419;;;:::o;27520:::-;27686:4;27724:2;27713:9;27709:18;27701:26;;27773:9;27767:4;27763:20;27759:1;27748:9;27744:17;27737:47;27801:131;27927:4;27801:131;:::i;:::-;27793:139;;27520:419;;;:::o;27945:::-;28111:4;28149:2;28138:9;28134:18;28126:26;;28198:9;28192:4;28188:20;28184:1;28173:9;28169:17;28162:47;28226:131;28352:4;28226:131;:::i;:::-;28218:139;;27945:419;;;:::o;28370:::-;28536:4;28574:2;28563:9;28559:18;28551:26;;28623:9;28617:4;28613:20;28609:1;28598:9;28594:17;28587:47;28651:131;28777:4;28651:131;:::i;:::-;28643:139;;28370:419;;;:::o;28795:::-;28961:4;28999:2;28988:9;28984:18;28976:26;;29048:9;29042:4;29038:20;29034:1;29023:9;29019:17;29012:47;29076:131;29202:4;29076:131;:::i;:::-;29068:139;;28795:419;;;:::o;29220:::-;29386:4;29424:2;29413:9;29409:18;29401:26;;29473:9;29467:4;29463:20;29459:1;29448:9;29444:17;29437:47;29501:131;29627:4;29501:131;:::i;:::-;29493:139;;29220:419;;;:::o;29645:::-;29811:4;29849:2;29838:9;29834:18;29826:26;;29898:9;29892:4;29888:20;29884:1;29873:9;29869:17;29862:47;29926:131;30052:4;29926:131;:::i;:::-;29918:139;;29645:419;;;:::o;30070:::-;30236:4;30274:2;30263:9;30259:18;30251:26;;30323:9;30317:4;30313:20;30309:1;30298:9;30294:17;30287:47;30351:131;30477:4;30351:131;:::i;:::-;30343:139;;30070:419;;;:::o;30495:::-;30661:4;30699:2;30688:9;30684:18;30676:26;;30748:9;30742:4;30738:20;30734:1;30723:9;30719:17;30712:47;30776:131;30902:4;30776:131;:::i;:::-;30768:139;;30495:419;;;:::o;30920:::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31173:9;31167:4;31163:20;31159:1;31148:9;31144:17;31137:47;31201:131;31327:4;31201:131;:::i;:::-;31193:139;;30920:419;;;:::o;31345:::-;31511:4;31549:2;31538:9;31534:18;31526:26;;31598:9;31592:4;31588:20;31584:1;31573:9;31569:17;31562:47;31626:131;31752:4;31626:131;:::i;:::-;31618:139;;31345:419;;;:::o;31770:::-;31936:4;31974:2;31963:9;31959:18;31951:26;;32023:9;32017:4;32013:20;32009:1;31998:9;31994:17;31987:47;32051:131;32177:4;32051:131;:::i;:::-;32043:139;;31770:419;;;:::o;32195:::-;32361:4;32399:2;32388:9;32384:18;32376:26;;32448:9;32442:4;32438:20;32434:1;32423:9;32419:17;32412:47;32476:131;32602:4;32476:131;:::i;:::-;32468:139;;32195:419;;;:::o;32620:::-;32786:4;32824:2;32813:9;32809:18;32801:26;;32873:9;32867:4;32863:20;32859:1;32848:9;32844:17;32837:47;32901:131;33027:4;32901:131;:::i;:::-;32893:139;;32620:419;;;:::o;33045:::-;33211:4;33249:2;33238:9;33234:18;33226:26;;33298:9;33292:4;33288:20;33284:1;33273:9;33269:17;33262:47;33326:131;33452:4;33326:131;:::i;:::-;33318:139;;33045:419;;;:::o;33470:::-;33636:4;33674:2;33663:9;33659:18;33651:26;;33723:9;33717:4;33713:20;33709:1;33698:9;33694:17;33687:47;33751:131;33877:4;33751:131;:::i;:::-;33743:139;;33470:419;;;:::o;33895:::-;34061:4;34099:2;34088:9;34084:18;34076:26;;34148:9;34142:4;34138:20;34134:1;34123:9;34119:17;34112:47;34176:131;34302:4;34176:131;:::i;:::-;34168:139;;33895:419;;;:::o;34320:::-;34486:4;34524:2;34513:9;34509:18;34501:26;;34573:9;34567:4;34563:20;34559:1;34548:9;34544:17;34537:47;34601:131;34727:4;34601:131;:::i;:::-;34593:139;;34320:419;;;:::o;34745:::-;34911:4;34949:2;34938:9;34934:18;34926:26;;34998:9;34992:4;34988:20;34984:1;34973:9;34969:17;34962:47;35026:131;35152:4;35026:131;:::i;:::-;35018:139;;34745:419;;;:::o;35170:::-;35336:4;35374:2;35363:9;35359:18;35351:26;;35423:9;35417:4;35413:20;35409:1;35398:9;35394:17;35387:47;35451:131;35577:4;35451:131;:::i;:::-;35443:139;;35170:419;;;:::o;35595:::-;35761:4;35799:2;35788:9;35784:18;35776:26;;35848:9;35842:4;35838:20;35834:1;35823:9;35819:17;35812:47;35876:131;36002:4;35876:131;:::i;:::-;35868:139;;35595:419;;;:::o;36020:::-;36186:4;36224:2;36213:9;36209:18;36201:26;;36273:9;36267:4;36263:20;36259:1;36248:9;36244:17;36237:47;36301:131;36427:4;36301:131;:::i;:::-;36293:139;;36020:419;;;:::o;36445:::-;36611:4;36649:2;36638:9;36634:18;36626:26;;36698:9;36692:4;36688:20;36684:1;36673:9;36669:17;36662:47;36726:131;36852:4;36726:131;:::i;:::-;36718:139;;36445:419;;;:::o;36870:::-;37036:4;37074:2;37063:9;37059:18;37051:26;;37123:9;37117:4;37113:20;37109:1;37098:9;37094:17;37087:47;37151:131;37277:4;37151:131;:::i;:::-;37143:139;;36870:419;;;:::o;37295:::-;37461:4;37499:2;37488:9;37484:18;37476:26;;37548:9;37542:4;37538:20;37534:1;37523:9;37519:17;37512:47;37576:131;37702:4;37576:131;:::i;:::-;37568:139;;37295:419;;;:::o;37720:::-;37886:4;37924:2;37913:9;37909:18;37901:26;;37973:9;37967:4;37963:20;37959:1;37948:9;37944:17;37937:47;38001:131;38127:4;38001:131;:::i;:::-;37993:139;;37720:419;;;:::o;38145:::-;38311:4;38349:2;38338:9;38334:18;38326:26;;38398:9;38392:4;38388:20;38384:1;38373:9;38369:17;38362:47;38426:131;38552:4;38426:131;:::i;:::-;38418:139;;38145:419;;;:::o;38570:::-;38736:4;38774:2;38763:9;38759:18;38751:26;;38823:9;38817:4;38813:20;38809:1;38798:9;38794:17;38787:47;38851:131;38977:4;38851:131;:::i;:::-;38843:139;;38570:419;;;:::o;38995:::-;39161:4;39199:2;39188:9;39184:18;39176:26;;39248:9;39242:4;39238:20;39234:1;39223:9;39219:17;39212:47;39276:131;39402:4;39276:131;:::i;:::-;39268:139;;38995:419;;;:::o;39420:::-;39586:4;39624:2;39613:9;39609:18;39601:26;;39673:9;39667:4;39663:20;39659:1;39648:9;39644:17;39637:47;39701:131;39827:4;39701:131;:::i;:::-;39693:139;;39420:419;;;:::o;39845:346::-;40000:4;40038:2;40027:9;40023:18;40015:26;;40051:133;40181:1;40170:9;40166:17;40157:6;40051:133;:::i;:::-;39845:346;;;;:::o;40197:222::-;40290:4;40328:2;40317:9;40313:18;40305:26;;40341:71;40409:1;40398:9;40394:17;40385:6;40341:71;:::i;:::-;40197:222;;;;:::o;40425:316::-;40538:4;40576:2;40565:9;40561:18;40553:26;;40589:69;40655:1;40644:9;40640:17;40631:6;40589:69;:::i;:::-;40668:66;40730:2;40719:9;40715:18;40706:6;40668:66;:::i;:::-;40425:316;;;;;:::o;40747:129::-;40781:6;40808:20;;:::i;:::-;40798:30;;40837:33;40865:4;40857:6;40837:33;:::i;:::-;40747:129;;;:::o;40882:75::-;40915:6;40948:2;40942:9;40932:19;;40882:75;:::o;40963:311::-;41040:4;41130:18;41122:6;41119:30;41116:56;;;41152:18;;:::i;:::-;41116:56;41202:4;41194:6;41190:17;41182:25;;41262:4;41256;41252:15;41244:23;;40963:311;;;:::o;41280:307::-;41341:4;41431:18;41423:6;41420:30;41417:56;;;41453:18;;:::i;:::-;41417:56;41491:29;41513:6;41491:29;:::i;:::-;41483:37;;41575:4;41569;41565:15;41557:23;;41280:307;;;:::o;41593:98::-;41644:6;41678:5;41672:12;41662:22;;41593:98;;;:::o;41697:99::-;41749:6;41783:5;41777:12;41767:22;;41697:99;;;:::o;41802:168::-;41885:11;41919:6;41914:3;41907:19;41959:4;41954:3;41950:14;41935:29;;41802:168;;;;:::o;41976:147::-;42077:11;42114:3;42099:18;;41976:147;;;;:::o;42129:169::-;42213:11;42247:6;42242:3;42235:19;42287:4;42282:3;42278:14;42263:29;;42129:169;;;;:::o;42304:148::-;42406:11;42443:3;42428:18;;42304:148;;;;:::o;42458:273::-;42498:3;42517:20;42535:1;42517:20;:::i;:::-;42512:25;;42551:20;42569:1;42551:20;:::i;:::-;42546:25;;42673:1;42637:34;42633:42;42630:1;42627:49;42624:75;;;42679:18;;:::i;:::-;42624:75;42723:1;42720;42716:9;42709:16;;42458:273;;;;:::o;42737:305::-;42777:3;42796:20;42814:1;42796:20;:::i;:::-;42791:25;;42830:20;42848:1;42830:20;:::i;:::-;42825:25;;42984:1;42916:66;42912:74;42909:1;42906:81;42903:107;;;42990:18;;:::i;:::-;42903:107;43034:1;43031;43027:9;43020:16;;42737:305;;;;:::o;43048:185::-;43088:1;43105:20;43123:1;43105:20;:::i;:::-;43100:25;;43139:20;43157:1;43139:20;:::i;:::-;43134:25;;43178:1;43168:35;;43183:18;;:::i;:::-;43168:35;43225:1;43222;43218:9;43213:14;;43048:185;;;;:::o;43239:348::-;43279:7;43302:20;43320:1;43302:20;:::i;:::-;43297:25;;43336:20;43354:1;43336:20;:::i;:::-;43331:25;;43524:1;43456:66;43452:74;43449:1;43446:81;43441:1;43434:9;43427:17;43423:105;43420:131;;;43531:18;;:::i;:::-;43420:131;43579:1;43576;43572:9;43561:20;;43239:348;;;;:::o;43593:191::-;43633:4;43653:20;43671:1;43653:20;:::i;:::-;43648:25;;43687:20;43705:1;43687:20;:::i;:::-;43682:25;;43726:1;43723;43720:8;43717:34;;;43731:18;;:::i;:::-;43717:34;43776:1;43773;43769:9;43761:17;;43593:191;;;;:::o;43790:::-;43830:4;43850:20;43868:1;43850:20;:::i;:::-;43845:25;;43884:20;43902:1;43884:20;:::i;:::-;43879:25;;43923:1;43920;43917:8;43914:34;;;43928:18;;:::i;:::-;43914:34;43973:1;43970;43966:9;43958:17;;43790:191;;;;:::o;43987:96::-;44024:7;44053:24;44071:5;44053:24;:::i;:::-;44042:35;;43987:96;;;:::o;44089:90::-;44123:7;44166:5;44159:13;44152:21;44141:32;;44089:90;;;:::o;44185:149::-;44221:7;44261:66;44254:5;44250:78;44239:89;;44185:149;;;:::o;44340:118::-;44377:7;44417:34;44410:5;44406:46;44395:57;;44340:118;;;:::o;44464:126::-;44501:7;44541:42;44534:5;44530:54;44519:65;;44464:126;;;:::o;44596:77::-;44633:7;44662:5;44651:16;;44596:77;;;:::o;44679:101::-;44715:7;44755:18;44748:5;44744:30;44733:41;;44679:101;;;:::o;44786:154::-;44870:6;44865:3;44860;44847:30;44932:1;44923:6;44918:3;44914:16;44907:27;44786:154;;;:::o;44946:307::-;45014:1;45024:113;45038:6;45035:1;45032:13;45024:113;;;45123:1;45118:3;45114:11;45108:18;45104:1;45099:3;45095:11;45088:39;45060:2;45057:1;45053:10;45048:15;;45024:113;;;45155:6;45152:1;45149:13;45146:101;;;45235:1;45226:6;45221:3;45217:16;45210:27;45146:101;44995:258;44946:307;;;:::o;45259:171::-;45298:3;45321:24;45339:5;45321:24;:::i;:::-;45312:33;;45367:4;45360:5;45357:15;45354:41;;;45375:18;;:::i;:::-;45354:41;45422:1;45415:5;45411:13;45404:20;;45259:171;;;:::o;45436:320::-;45480:6;45517:1;45511:4;45507:12;45497:22;;45564:1;45558:4;45554:12;45585:18;45575:81;;45641:4;45633:6;45629:17;45619:27;;45575:81;45703:2;45695:6;45692:14;45672:18;45669:38;45666:84;;;45722:18;;:::i;:::-;45666:84;45487:269;45436:320;;;:::o;45762:281::-;45845:27;45867:4;45845:27;:::i;:::-;45837:6;45833:40;45975:6;45963:10;45960:22;45939:18;45927:10;45924:34;45921:62;45918:88;;;45986:18;;:::i;:::-;45918:88;46026:10;46022:2;46015:22;45805:238;45762:281;;:::o;46049:233::-;46088:3;46111:24;46129:5;46111:24;:::i;:::-;46102:33;;46157:66;46150:5;46147:77;46144:103;;;46227:18;;:::i;:::-;46144:103;46274:1;46267:5;46263:13;46256:20;;46049:233;;;:::o;46288:176::-;46320:1;46337:20;46355:1;46337:20;:::i;:::-;46332:25;;46371:20;46389:1;46371:20;:::i;:::-;46366:25;;46410:1;46400:35;;46415:18;;:::i;:::-;46400:35;46456:1;46453;46449:9;46444:14;;46288:176;;;;:::o;46470:180::-;46518:77;46515:1;46508:88;46615:4;46612:1;46605:15;46639:4;46636:1;46629:15;46656:180;46704:77;46701:1;46694:88;46801:4;46798:1;46791:15;46825:4;46822:1;46815:15;46842:180;46890:77;46887:1;46880:88;46987:4;46984:1;46977:15;47011:4;47008:1;47001:15;47028:180;47076:77;47073:1;47066:88;47173:4;47170:1;47163:15;47197:4;47194:1;47187:15;47214:180;47262:77;47259:1;47252:88;47359:4;47356:1;47349:15;47383:4;47380:1;47373:15;47400:117;47509:1;47506;47499:12;47523:117;47632:1;47629;47622:12;47646:117;47755:1;47752;47745:12;47769:117;47878:1;47875;47868:12;47892:117;48001:1;47998;47991:12;48015:117;48124:1;48121;48114:12;48138:102;48179:6;48230:2;48226:7;48221:2;48214:5;48210:14;48206:28;48196:38;;48138:102;;;:::o;48246:221::-;48386:34;48382:1;48374:6;48370:14;48363:58;48455:4;48450:2;48442:6;48438:15;48431:29;48246:221;:::o;48473:225::-;48613:34;48609:1;48601:6;48597:14;48590:58;48682:8;48677:2;48669:6;48665:15;48658:33;48473:225;:::o;48704:229::-;48844:34;48840:1;48832:6;48828:14;48821:58;48913:12;48908:2;48900:6;48896:15;48889:37;48704:229;:::o;48939:231::-;49079:34;49075:1;49067:6;49063:14;49056:58;49148:14;49143:2;49135:6;49131:15;49124:39;48939:231;:::o;49176:222::-;49316:34;49312:1;49304:6;49300:14;49293:58;49385:5;49380:2;49372:6;49368:15;49361:30;49176:222;:::o;49404:224::-;49544:34;49540:1;49532:6;49528:14;49521:58;49613:7;49608:2;49600:6;49596:15;49589:32;49404:224;:::o;49634:236::-;49774:34;49770:1;49762:6;49758:14;49751:58;49843:19;49838:2;49830:6;49826:15;49819:44;49634:236;:::o;49876:180::-;50016:32;50012:1;50004:6;50000:14;49993:56;49876:180;:::o;50062:244::-;50202:34;50198:1;50190:6;50186:14;50179:58;50271:27;50266:2;50258:6;50254:15;50247:52;50062:244;:::o;50312:174::-;50452:26;50448:1;50440:6;50436:14;50429:50;50312:174;:::o;50492:230::-;50632:34;50628:1;50620:6;50616:14;50609:58;50701:13;50696:2;50688:6;50684:15;50677:38;50492:230;:::o;50728:168::-;50868:20;50864:1;50856:6;50852:14;50845:44;50728:168;:::o;50902:225::-;51042:34;51038:1;51030:6;51026:14;51019:58;51111:8;51106:2;51098:6;51094:15;51087:33;50902:225;:::o;51133:180::-;51273:32;51269:1;51261:6;51257:14;51250:56;51133:180;:::o;51319:182::-;51459:34;51455:1;51447:6;51443:14;51436:58;51319:182;:::o;51507:234::-;51647:34;51643:1;51635:6;51631:14;51624:58;51716:17;51711:2;51703:6;51699:15;51692:42;51507:234;:::o;51747:176::-;51887:28;51883:1;51875:6;51871:14;51864:52;51747:176;:::o;51929:237::-;52069:34;52065:1;52057:6;52053:14;52046:58;52138:20;52133:2;52125:6;52121:15;52114:45;51929:237;:::o;52172:179::-;52312:31;52308:1;52300:6;52296:14;52289:55;52172:179;:::o;52357:221::-;52497:34;52493:1;52485:6;52481:14;52474:58;52566:4;52561:2;52553:6;52549:15;52542:29;52357:221;:::o;52584:114::-;;:::o;52704:166::-;52844:18;52840:1;52832:6;52828:14;52821:42;52704:166;:::o;52876:238::-;53016:34;53012:1;53004:6;53000:14;52993:58;53085:21;53080:2;53072:6;53068:15;53061:46;52876:238;:::o;53120:172::-;53260:24;53256:1;53248:6;53244:14;53237:48;53120:172;:::o;53298:179::-;53438:31;53434:1;53426:6;53422:14;53415:55;53298:179;:::o;53483:220::-;53623:34;53619:1;53611:6;53607:14;53600:58;53692:3;53687:2;53679:6;53675:15;53668:28;53483:220;:::o;53709:172::-;53849:24;53845:1;53837:6;53833:14;53826:48;53709:172;:::o;53887:233::-;54027:34;54023:1;54015:6;54011:14;54004:58;54096:16;54091:2;54083:6;54079:15;54072:41;53887:233;:::o;54126:225::-;54266:34;54262:1;54254:6;54250:14;54243:58;54335:8;54330:2;54322:6;54318:15;54311:33;54126:225;:::o;54357:181::-;54497:33;54493:1;54485:6;54481:14;54474:57;54357:181;:::o;54544:234::-;54684:34;54680:1;54672:6;54668:14;54661:58;54753:17;54748:2;54740:6;54736:15;54729:42;54544:234;:::o;54784:232::-;54924:34;54920:1;54912:6;54908:14;54901:58;54993:15;54988:2;54980:6;54976:15;54969:40;54784:232;:::o;55022:221::-;55162:34;55158:1;55150:6;55146:14;55139:58;55231:4;55226:2;55218:6;55214:15;55207:29;55022:221;:::o;55249:122::-;55322:24;55340:5;55322:24;:::i;:::-;55315:5;55312:35;55302:63;;55361:1;55358;55351:12;55302:63;55249:122;:::o;55377:116::-;55447:21;55462:5;55447:21;:::i;:::-;55440:5;55437:32;55427:60;;55483:1;55480;55473:12;55427:60;55377:116;:::o;55499:120::-;55571:23;55588:5;55571:23;:::i;:::-;55564:5;55561:34;55551:62;;55609:1;55606;55599:12;55551:62;55499:120;:::o;55625:122::-;55698:24;55716:5;55698:24;:::i;:::-;55691:5;55688:35;55678:63;;55737:1;55734;55727:12;55678:63;55625:122;:::o;55753:120::-;55825:23;55842:5;55825:23;:::i;:::-;55818:5;55815:34;55805:62;;55863:1;55860;55853:12;55805:62;55753:120;:::o
Swarm Source
ipfs://948405d2dc1329ff01085dd2380be0b140c493f9e15bf773c0974232e95197d6
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.