ERC-721
Overview
Max Total Supply
239 PP
Holders
35
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PerkyPineapples
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-27 */ /** *Submitted for verification at Etherscan.io on 2022-01-24 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: amongus.sol /* ============================================== COOLAMONGUS.CLUB ============================================== */ pragma solidity ^0.8.0; /** * @title among us * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract PerkyPineapples is ERC721, Ownable { bool public saleIsActive = false; uint256 public price = 0.025 ether; uint public maxPerTx = 10; uint public maxFreeMintPerWallet = 20; uint public amountAvailableFreeMint = 200; uint public maxSupply = 5000; address proxyRegistryAddress ; mapping(address => uint) public addressFreeMinted; string public _hiddenURI = "ipfs://QmRkNnfQExTwer7vL1PNuRszzshpUWjRb7AerWQt1Ef82Q/hidden.json"; string public _baseURIextended = ""; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; constructor() ERC721("PerkyPineapples", "PP") { for (uint256 i = 0; i < 10; i++){ gift(msg.sender); } } function totalSupply() public view returns (uint256 supply) { return _tokenSupply.current(); } function _baseURI() internal view virtual override returns (string memory) { return _baseURIextended; } function isApprovedForAll(address owner, address operator) public view override returns (bool) { ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } function mint(uint numberOfTokens) external payable { require(saleIsActive, "Sale is inactive."); require(numberOfTokens <= maxPerTx, "You can only mint 10 at a time."); require(_tokenSupply.current() + numberOfTokens <= maxSupply, "Purchase would exceed max supply of tokens"); if (_tokenSupply.current() + numberOfTokens > amountAvailableFreeMint) { require((price * numberOfTokens) <= msg.value, "Don't send under (in ETH)."); } else { require(msg.value == 0, "Don't send ether for the free mint."); require(addressFreeMinted[msg.sender] < maxFreeMintPerWallet, "You can only adopt 20 free CAU per wallet. Wait for the paid adoption."); } addressFreeMinted[msg.sender] += numberOfTokens; for(uint i = 0; i < numberOfTokens; i++) { uint256 _tokenId = _tokenSupply.current() + 1; _safeMint(msg.sender, _tokenId); _tokenSupply.increment(); } } function gift(address _to) public onlyOwner { uint256 _tokenId = _tokenSupply.current() + 1; _safeMint(_to, _tokenId); _tokenSupply.increment(); } function withdraw() public onlyOwner { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } 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, Strings.toString(tokenId), ".json")) : _hiddenURI; } function setSaleIsActive(bool newState) public onlyOwner { saleIsActive = newState; } function setPrice(uint newPrice) public onlyOwner { price = newPrice; } function setMaxPerTx(uint _maxPerTx) external onlyOwner() { maxPerTx = _maxPerTx; } function setMaxFreeMintPerWallet(uint _maxFreeMint) public onlyOwner() { maxFreeMintPerWallet = _maxFreeMint; } function setAmountAvailableFreeMint(uint _freeMint) public onlyOwner() { amountAvailableFreeMint = _freeMint; } function setMaxSupply(uint _maxSupply) public onlyOwner() { maxSupply = _maxSupply; } // rinkeby: 0xf57b2c51ded3a29e6891aba85459d600256cf317 // mainnet: 0xa5409ec958c83c3f309868babaca7c86dcb077c1 function setProxyRegistryAddress(address proxyAddress) external onlyOwner { proxyRegistryAddress = proxyAddress; } function setHiddenUri(string memory hiddenURI) public onlyOwner() { _hiddenURI = hiddenURI; } function setBaseURI(string memory baseURI_) external onlyOwner() { _baseURIextended = baseURI_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseURIextended","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hiddenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountAvailableFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":"maxFreeMintPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeMint","type":"uint256"}],"name":"setAmountAvailableFreeMint","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":"string","name":"hiddenURI","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMint","type":"uint256"}],"name":"setMaxFreeMintPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setSaleIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600660146101000a81548160ff0219169083151502179055506658d15e17628000600755600a600855601460095560c8600a55611388600b55604051806080016040528060418152602001620052c160419139600e9080519060200190620000709291906200085b565b5060405180602001604052806000815250600f9080519060200190620000989291906200085b565b50348015620000a657600080fd5b506040518060400160405280600f81526020017f5065726b7950696e656170706c657300000000000000000000000000000000008152506040518060400160405280600281526020017f505000000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012b9291906200085b565b508060019080519060200190620001449291906200085b565b505050620001676200015b620001a260201b60201c565b620001aa60201b60201c565b60005b600a8110156200019b5762000185336200027060201b60201c565b8080620001929062000c8f565b9150506200016a565b5062000e35565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000280620001a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a66200035560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f69062000b0d565b60405180910390fd5b600060016200031a60106200037f60201b62001dc61760201c565b62000326919062000b5c565b90506200033a82826200038d60201b60201c565b620003516010620003b360201b62001dd41760201c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b620003af828260405180602001604052806000815250620003c960201b60201c565b5050565b6001816000016000828254019250508190555050565b620003db83836200043760201b60201c565b620003f060008484846200061d60201b60201c565b62000432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004299062000aa7565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a19062000aeb565b60405180910390fd5b620004bb81620007d760201b60201c565b15620004fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f59062000ac9565b60405180910390fd5b62000512600083836200084360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000564919062000b5c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200064b8473ffffffffffffffffffffffffffffffffffffffff166200084860201b62001dea1760201c565b15620007ca578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200067d620001a260201b60201c565b8786866040518563ffffffff1660e01b8152600401620006a1949392919062000a53565b602060405180830381600087803b158015620006bc57600080fd5b505af1925050508015620006f057506040513d601f19601f82011682018060405250810190620006ed919062000922565b60015b62000779573d806000811462000723576040519150601f19603f3d011682016040523d82523d6000602084013e62000728565b606091505b5060008151141562000771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007689062000aa7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007cf565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620008699062000c59565b90600052602060002090601f0160209004810192826200088d5760008555620008d9565b82601f10620008a857805160ff1916838001178555620008d9565b82800160010185558215620008d9579182015b82811115620008d8578251825591602001919060010190620008bb565b5b509050620008e89190620008ec565b5090565b5b8082111562000907576000816000905550600101620008ed565b5090565b6000815190506200091c8162000e1b565b92915050565b6000602082840312156200093b576200093a62000d3b565b5b60006200094b848285016200090b565b91505092915050565b6200095f8162000bb9565b82525050565b6000620009728262000b2f565b6200097e818562000b3a565b93506200099081856020860162000c23565b6200099b8162000d40565b840191505092915050565b6000620009b560328362000b4b565b9150620009c28262000d51565b604082019050919050565b6000620009dc601c8362000b4b565b9150620009e98262000da0565b602082019050919050565b600062000a0360208362000b4b565b915062000a108262000dc9565b602082019050919050565b600062000a2a60208362000b4b565b915062000a378262000df2565b602082019050919050565b62000a4d8162000c19565b82525050565b600060808201905062000a6a600083018762000954565b62000a79602083018662000954565b62000a88604083018562000a42565b818103606083015262000a9c818462000965565b905095945050505050565b6000602082019050818103600083015262000ac281620009a6565b9050919050565b6000602082019050818103600083015262000ae481620009cd565b9050919050565b6000602082019050818103600083015262000b0681620009f4565b9050919050565b6000602082019050818103600083015262000b288162000a1b565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000b698262000c19565b915062000b768362000c19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000bae5762000bad62000cdd565b5b828201905092915050565b600062000bc68262000bf9565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c4357808201518184015260208101905062000c26565b8381111562000c53576000848401525b50505050565b6000600282049050600182168062000c7257607f821691505b6020821081141562000c895762000c8862000d0c565b5b50919050565b600062000c9c8262000c19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000cd25762000cd162000cdd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000e268162000bcd565b811462000e3257600080fd5b50565b61447c8062000e456000396000f3fe6080604052600436106102255760003560e01c80638da5cb5b11610123578063c6f6f216116100ab578063e985e9c51161006f578063e985e9c5146107ce578063eb8d24441461080b578063f2fde38b14610836578063f77b1edd1461085f578063f968adbe1461088857610225565b8063c6f6f216146106eb578063c87b56dd14610714578063cbfc4bce14610751578063d26ea6c01461077a578063d5abeb01146107a357610225565b8063a0712d68116100f2578063a0712d6814610615578063a22cb46514610631578063b2e3ef2c1461065a578063b88d4fde14610697578063c012079a146106c057610225565b80638da5cb5b1461056b57806391b7f5ed1461059657806395d89b41146105bf578063a035b1fe146105ea57610225565b80632a6e0827116101b15780636352211e116101755780636352211e146104865780636f8b44b0146104c357806370a08231146104ec578063715018a614610529578063845bb3bb1461054057610225565b80632a6e0827146103c95780633ccfd60b146103f25780633f41fb231461040957806342842e0e1461043457806355f804b31461045d57610225565b80630928fc22116101f85780630928fc22146102f8578063095ea7b3146103235780631067fcc71461034c57806318160ddd1461037557806323b872dd146103a057610225565b806301ffc9a71461022a57806302c889891461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fb8565b6108b3565b60405161025e919061359b565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190612f8b565b610995565b005b34801561029c57600080fd5b506102a5610a2e565b6040516102b291906135b6565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613088565b610ac0565b6040516102ef9190613534565b60405180910390f35b34801561030457600080fd5b5061030d610b45565b60405161031a91906135b6565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190612f4b565b610bd3565b005b34801561035857600080fd5b50610373600480360381019061036e919061303f565b610ceb565b005b34801561038157600080fd5b5061038a610d81565b60405161039791906138b8565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612e35565b610d92565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613088565b610df2565b005b3480156103fe57600080fd5b50610407610e78565b005b34801561041557600080fd5b5061041e610fa3565b60405161042b91906135b6565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612e35565b611031565b005b34801561046957600080fd5b50610484600480360381019061047f919061303f565b611051565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613088565b6110e7565b6040516104ba9190613534565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613088565b611199565b005b3480156104f857600080fd5b50610513600480360381019061050e9190612dc8565b61121f565b60405161052091906138b8565b60405180910390f35b34801561053557600080fd5b5061053e6112d7565b005b34801561054c57600080fd5b5061055561135f565b60405161056291906138b8565b60405180910390f35b34801561057757600080fd5b50610580611365565b60405161058d9190613534565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613088565b61138f565b005b3480156105cb57600080fd5b506105d4611415565b6040516105e191906135b6565b60405180910390f35b3480156105f657600080fd5b506105ff6114a7565b60405161060c91906138b8565b60405180910390f35b61062f600480360381019061062a9190613088565b6114ad565b005b34801561063d57600080fd5b5061065860048036038101906106539190612f0b565b61177b565b005b34801561066657600080fd5b50610681600480360381019061067c9190612dc8565b611791565b60405161068e91906138b8565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190612e88565b6117a9565b005b3480156106cc57600080fd5b506106d561180b565b6040516106e291906138b8565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613088565b611811565b005b34801561072057600080fd5b5061073b60048036038101906107369190613088565b611897565b60405161074891906135b6565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190612dc8565b6119b9565b005b34801561078657600080fd5b506107a1600480360381019061079c9190612dc8565b611a67565b005b3480156107af57600080fd5b506107b8611b27565b6040516107c591906138b8565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612df5565b611b2d565b604051610802919061359b565b60405180910390f35b34801561081757600080fd5b50610820611c2f565b60405161082d919061359b565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190612dc8565b611c42565b005b34801561086b57600080fd5b5061088660048036038101906108819190613088565b611d3a565b005b34801561089457600080fd5b5061089d611dc0565b6040516108aa91906138b8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098e575061098d82611dfd565b5b9050919050565b61099d611e67565b73ffffffffffffffffffffffffffffffffffffffff166109bb611365565b73ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906137f8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b606060008054610a3d90613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990613b85565b8015610ab65780601f10610a8b57610100808354040283529160200191610ab6565b820191906000526020600020905b815481529060010190602001808311610a9957829003601f168201915b5050505050905090565b6000610acb82611e6f565b610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906137d8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610b5290613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e90613b85565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b505050505081565b6000610bde826110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613858565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c6e611e67565b73ffffffffffffffffffffffffffffffffffffffff161480610c9d5750610c9c81610c97611e67565b611b2d565b5b610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd3906136f8565b60405180910390fd5b610ce68383611edb565b505050565b610cf3611e67565b73ffffffffffffffffffffffffffffffffffffffff16610d11611365565b73ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906137f8565b60405180910390fd5b80600e9080519060200190610d7d929190612bc7565b5050565b6000610d8d6010611dc6565b905090565b610da3610d9d611e67565b82611f94565b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990613878565b60405180910390fd5b610ded838383612072565b505050565b610dfa611e67565b73ffffffffffffffffffffffffffffffffffffffff16610e18611365565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906137f8565b60405180910390fd5b80600a8190555050565b610e80611e67565b73ffffffffffffffffffffffffffffffffffffffff16610e9e611365565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb906137f8565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f1a9061351f565b60006040518083038185875af1925050503d8060008114610f57576040519150601f19603f3d011682016040523d82523d6000602084013e610f5c565b606091505b5050905080610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906136b8565b60405180910390fd5b50565b600e8054610fb090613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90613b85565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b505050505081565b61104c838383604051806020016040528060008152506117a9565b505050565b611059611e67565b73ffffffffffffffffffffffffffffffffffffffff16611077611365565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906137f8565b60405180910390fd5b80600f90805190602001906110e3929190612bc7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613738565b60405180910390fd5b80915050919050565b6111a1611e67565b73ffffffffffffffffffffffffffffffffffffffff166111bf611365565b73ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906137f8565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790613718565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112df611e67565b73ffffffffffffffffffffffffffffffffffffffff166112fd611365565b73ffffffffffffffffffffffffffffffffffffffff1614611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a906137f8565b60405180910390fd5b61135d60006122ce565b565b60095481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611397611e67565b73ffffffffffffffffffffffffffffffffffffffff166113b5611365565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611402906137f8565b60405180910390fd5b8060078190555050565b60606001805461142490613b85565b80601f016020809104026020016040519081016040528092919081815260200182805461145090613b85565b801561149d5780601f106114725761010080835404028352916020019161149d565b820191906000526020600020905b81548152906001019060200180831161148057829003601f168201915b5050505050905090565b60075481565b600660149054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613898565b60405180910390fd5b600854811115611541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611538906137b8565b60405180910390fd5b600b548161154f6010611dc6565b61155991906139a8565b111561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613758565b60405180910390fd5b600a54816115a86010611dc6565b6115b291906139a8565b111561160d5734816007546115c79190613a2f565b1115611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613798565b60405180910390fd5b6116d4565b60003414611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790613658565b60405180910390fd5b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca906135d8565b60405180910390fd5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461172391906139a8565b9250508190555060005b8181101561177757600060016117436010611dc6565b61174d91906139a8565b90506117593382612394565b6117636010611dd4565b50808061176f90613be8565b91505061172d565b5050565b61178d611786611e67565b83836123b2565b5050565b600d6020528060005260406000206000915090505481565b6117ba6117b4611e67565b83611f94565b6117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613878565b60405180910390fd5b6118058484848461251f565b50505050565b600a5481565b611819611e67565b73ffffffffffffffffffffffffffffffffffffffff16611837611365565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611884906137f8565b60405180910390fd5b8060088190555050565b60606118a282611e6f565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613838565b60405180910390fd5b60006118eb61257b565b9050600081511161198657600e805461190390613b85565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90613b85565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b50505050506119b1565b806119908461260d565b6040516020016119a19291906134f0565b6040516020818303038152906040525b915050919050565b6119c1611e67565b73ffffffffffffffffffffffffffffffffffffffff166119df611365565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906137f8565b60405180910390fd5b60006001611a436010611dc6565b611a4d91906139a8565b9050611a598282612394565b611a636010611dd4565b5050565b611a6f611e67565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611365565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada906137f8565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611ba59190613534565b60206040518083038186803b158015611bbd57600080fd5b505afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190613012565b73ffffffffffffffffffffffffffffffffffffffff161415611c1b576001915050611c29565b611c25848461276e565b9150505b92915050565b600660149054906101000a900460ff1681565b611c4a611e67565b73ffffffffffffffffffffffffffffffffffffffff16611c68611365565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906137f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613618565b60405180910390fd5b611d37816122ce565b50565b611d42611e67565b73ffffffffffffffffffffffffffffffffffffffff16611d60611365565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad906137f8565b60405180910390fd5b8060098190555050565b60085481565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f4e836110e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f9f82611e6f565b611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd5906136d8565b60405180910390fd5b6000611fe9836110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061205857508373ffffffffffffffffffffffffffffffffffffffff1661204084610ac0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061206957506120688185611b2d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612092826110e7565b73ffffffffffffffffffffffffffffffffffffffff16146120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90613818565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613678565b60405180910390fd5b612163838383612802565b61216e600082611edb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121be9190613a89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221591906139a8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123ae828260405180602001604052806000815250612807565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890613698565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612512919061359b565b60405180910390a3505050565b61252a848484612072565b61253684848484612862565b612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c906135f8565b60405180910390fd5b50505050565b6060600f805461258a90613b85565b80601f01602080910402602001604051908101604052809291908181526020018280546125b690613b85565b80156126035780601f106125d857610100808354040283529160200191612603565b820191906000526020600020905b8154815290600101906020018083116125e657829003601f168201915b5050505050905090565b60606000821415612655576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612769565b600082905060005b6000821461268757808061267090613be8565b915050600a8261268091906139fe565b915061265d565b60008167ffffffffffffffff8111156126a3576126a2613d1e565b5b6040519080825280601f01601f1916602001820160405280156126d55781602001600182028036833780820191505090505b5090505b60008514612762576001826126ee9190613a89565b9150600a856126fd9190613c31565b603061270991906139a8565b60f81b81838151811061271f5761271e613cef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275b91906139fe565b94506126d9565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b61281183836129f9565b61281e6000848484612862565b61285d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612854906135f8565b60405180910390fd5b505050565b60006128838473ffffffffffffffffffffffffffffffffffffffff16611dea565b156129ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ac611e67565b8786866040518563ffffffff1660e01b81526004016128ce949392919061354f565b602060405180830381600087803b1580156128e857600080fd5b505af192505050801561291957506040513d601f19601f820116820180604052508101906129169190612fe5565b60015b61299c573d8060008114612949576040519150601f19603f3d011682016040523d82523d6000602084013e61294e565b606091505b50600081511415612994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298b906135f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129f1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090613778565b60405180910390fd5b612a7281611e6f565b15612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa990613638565b60405180910390fd5b612abe60008383612802565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e91906139a8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bd390613b85565b90600052602060002090601f016020900481019282612bf55760008555612c3c565b82601f10612c0e57805160ff1916838001178555612c3c565b82800160010185558215612c3c579182015b82811115612c3b578251825591602001919060010190612c20565b5b509050612c499190612c4d565b5090565b5b80821115612c66576000816000905550600101612c4e565b5090565b6000612c7d612c78846138f8565b6138d3565b905082815260208101848484011115612c9957612c98613d52565b5b612ca4848285613b43565b509392505050565b6000612cbf612cba84613929565b6138d3565b905082815260208101848484011115612cdb57612cda613d52565b5b612ce6848285613b43565b509392505050565b600081359050612cfd816143d3565b92915050565b600081359050612d12816143ea565b92915050565b600081359050612d2781614401565b92915050565b600081519050612d3c81614401565b92915050565b600082601f830112612d5757612d56613d4d565b5b8135612d67848260208601612c6a565b91505092915050565b600081519050612d7f81614418565b92915050565b600082601f830112612d9a57612d99613d4d565b5b8135612daa848260208601612cac565b91505092915050565b600081359050612dc28161442f565b92915050565b600060208284031215612dde57612ddd613d5c565b5b6000612dec84828501612cee565b91505092915050565b60008060408385031215612e0c57612e0b613d5c565b5b6000612e1a85828601612cee565b9250506020612e2b85828601612cee565b9150509250929050565b600080600060608486031215612e4e57612e4d613d5c565b5b6000612e5c86828701612cee565b9350506020612e6d86828701612cee565b9250506040612e7e86828701612db3565b9150509250925092565b60008060008060808587031215612ea257612ea1613d5c565b5b6000612eb087828801612cee565b9450506020612ec187828801612cee565b9350506040612ed287828801612db3565b925050606085013567ffffffffffffffff811115612ef357612ef2613d57565b5b612eff87828801612d42565b91505092959194509250565b60008060408385031215612f2257612f21613d5c565b5b6000612f3085828601612cee565b9250506020612f4185828601612d03565b9150509250929050565b60008060408385031215612f6257612f61613d5c565b5b6000612f7085828601612cee565b9250506020612f8185828601612db3565b9150509250929050565b600060208284031215612fa157612fa0613d5c565b5b6000612faf84828501612d03565b91505092915050565b600060208284031215612fce57612fcd613d5c565b5b6000612fdc84828501612d18565b91505092915050565b600060208284031215612ffb57612ffa613d5c565b5b600061300984828501612d2d565b91505092915050565b60006020828403121561302857613027613d5c565b5b600061303684828501612d70565b91505092915050565b60006020828403121561305557613054613d5c565b5b600082013567ffffffffffffffff81111561307357613072613d57565b5b61307f84828501612d85565b91505092915050565b60006020828403121561309e5761309d613d5c565b5b60006130ac84828501612db3565b91505092915050565b6130be81613abd565b82525050565b6130cd81613acf565b82525050565b60006130de8261395a565b6130e88185613970565b93506130f8818560208601613b52565b61310181613d61565b840191505092915050565b600061311782613965565b613121818561398c565b9350613131818560208601613b52565b61313a81613d61565b840191505092915050565b600061315082613965565b61315a818561399d565b935061316a818560208601613b52565b80840191505092915050565b600061318360468361398c565b915061318e82613d72565b606082019050919050565b60006131a660328361398c565b91506131b182613de7565b604082019050919050565b60006131c960268361398c565b91506131d482613e36565b604082019050919050565b60006131ec601c8361398c565b91506131f782613e85565b602082019050919050565b600061320f60238361398c565b915061321a82613eae565b604082019050919050565b600061323260248361398c565b915061323d82613efd565b604082019050919050565b600061325560198361398c565b915061326082613f4c565b602082019050919050565b6000613278603a8361398c565b915061328382613f75565b604082019050919050565b600061329b602c8361398c565b91506132a682613fc4565b604082019050919050565b60006132be60388361398c565b91506132c982614013565b604082019050919050565b60006132e1602a8361398c565b91506132ec82614062565b604082019050919050565b600061330460298361398c565b915061330f826140b1565b604082019050919050565b6000613327602a8361398c565b915061333282614100565b604082019050919050565b600061334a60208361398c565b91506133558261414f565b602082019050919050565b600061336d601a8361398c565b915061337882614178565b602082019050919050565b6000613390601f8361398c565b915061339b826141a1565b602082019050919050565b60006133b3602c8361398c565b91506133be826141ca565b604082019050919050565b60006133d660058361399d565b91506133e182614219565b600582019050919050565b60006133f960208361398c565b915061340482614242565b602082019050919050565b600061341c60298361398c565b91506134278261426b565b604082019050919050565b600061343f602f8361398c565b915061344a826142ba565b604082019050919050565b600061346260218361398c565b915061346d82614309565b604082019050919050565b6000613485600083613981565b915061349082614358565b600082019050919050565b60006134a860318361398c565b91506134b38261435b565b604082019050919050565b60006134cb60118361398c565b91506134d6826143aa565b602082019050919050565b6134ea81613b39565b82525050565b60006134fc8285613145565b91506135088284613145565b9150613513826133c9565b91508190509392505050565b600061352a82613478565b9150819050919050565b600060208201905061354960008301846130b5565b92915050565b600060808201905061356460008301876130b5565b61357160208301866130b5565b61357e60408301856134e1565b818103606083015261359081846130d3565b905095945050505050565b60006020820190506135b060008301846130c4565b92915050565b600060208201905081810360008301526135d0818461310c565b905092915050565b600060208201905081810360008301526135f181613176565b9050919050565b6000602082019050818103600083015261361181613199565b9050919050565b60006020820190508181036000830152613631816131bc565b9050919050565b60006020820190508181036000830152613651816131df565b9050919050565b6000602082019050818103600083015261367181613202565b9050919050565b6000602082019050818103600083015261369181613225565b9050919050565b600060208201905081810360008301526136b181613248565b9050919050565b600060208201905081810360008301526136d18161326b565b9050919050565b600060208201905081810360008301526136f18161328e565b9050919050565b60006020820190508181036000830152613711816132b1565b9050919050565b60006020820190508181036000830152613731816132d4565b9050919050565b60006020820190508181036000830152613751816132f7565b9050919050565b600060208201905081810360008301526137718161331a565b9050919050565b600060208201905081810360008301526137918161333d565b9050919050565b600060208201905081810360008301526137b181613360565b9050919050565b600060208201905081810360008301526137d181613383565b9050919050565b600060208201905081810360008301526137f1816133a6565b9050919050565b60006020820190508181036000830152613811816133ec565b9050919050565b600060208201905081810360008301526138318161340f565b9050919050565b6000602082019050818103600083015261385181613432565b9050919050565b6000602082019050818103600083015261387181613455565b9050919050565b600060208201905081810360008301526138918161349b565b9050919050565b600060208201905081810360008301526138b1816134be565b9050919050565b60006020820190506138cd60008301846134e1565b92915050565b60006138dd6138ee565b90506138e98282613bb7565b919050565b6000604051905090565b600067ffffffffffffffff82111561391357613912613d1e565b5b61391c82613d61565b9050602081019050919050565b600067ffffffffffffffff82111561394457613943613d1e565b5b61394d82613d61565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139b382613b39565b91506139be83613b39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139f3576139f2613c62565b5b828201905092915050565b6000613a0982613b39565b9150613a1483613b39565b925082613a2457613a23613c91565b5b828204905092915050565b6000613a3a82613b39565b9150613a4583613b39565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7e57613a7d613c62565b5b828202905092915050565b6000613a9482613b39565b9150613a9f83613b39565b925082821015613ab257613ab1613c62565b5b828203905092915050565b6000613ac882613b19565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b1282613abd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b70578082015181840152602081019050613b55565b83811115613b7f576000848401525b50505050565b60006002820490506001821680613b9d57607f821691505b60208210811415613bb157613bb0613cc0565b5b50919050565b613bc082613d61565b810181811067ffffffffffffffff82111715613bdf57613bde613d1e565b5b80604052505050565b6000613bf382613b39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2657613c25613c62565b5b600182019050919050565b6000613c3c82613b39565b9150613c4783613b39565b925082613c5757613c56613c91565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206f6e6c792061646f7074203230206672656520434155207060008201527f65722077616c6c65742e205761697420666f722074686520706169642061646f60208201527f7074696f6e2e0000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f446f6e27742073656e6420657468657220666f72207468652066726565206d6960008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f446f6e27742073656e6420756e6465722028696e20455448292e000000000000600082015250565b7f596f752063616e206f6e6c79206d696e7420313020617420612074696d652e00600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f53616c6520697320696e6163746976652e000000000000000000000000000000600082015250565b6143dc81613abd565b81146143e757600080fd5b50565b6143f381613acf565b81146143fe57600080fd5b50565b61440a81613adb565b811461441557600080fd5b50565b61442181613b07565b811461442c57600080fd5b50565b61443881613b39565b811461444357600080fd5b5056fea2646970667358221220ce9a3d114649710fdb4b6a682927036c32ab0b9efaf8c7fcfb97a4af382a660464736f6c63430008070033697066733a2f2f516d526b4e6e665145785477657237764c31504e7552737a7a73687055576a5262374165725751743145663832512f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102255760003560e01c80638da5cb5b11610123578063c6f6f216116100ab578063e985e9c51161006f578063e985e9c5146107ce578063eb8d24441461080b578063f2fde38b14610836578063f77b1edd1461085f578063f968adbe1461088857610225565b8063c6f6f216146106eb578063c87b56dd14610714578063cbfc4bce14610751578063d26ea6c01461077a578063d5abeb01146107a357610225565b8063a0712d68116100f2578063a0712d6814610615578063a22cb46514610631578063b2e3ef2c1461065a578063b88d4fde14610697578063c012079a146106c057610225565b80638da5cb5b1461056b57806391b7f5ed1461059657806395d89b41146105bf578063a035b1fe146105ea57610225565b80632a6e0827116101b15780636352211e116101755780636352211e146104865780636f8b44b0146104c357806370a08231146104ec578063715018a614610529578063845bb3bb1461054057610225565b80632a6e0827146103c95780633ccfd60b146103f25780633f41fb231461040957806342842e0e1461043457806355f804b31461045d57610225565b80630928fc22116101f85780630928fc22146102f8578063095ea7b3146103235780631067fcc71461034c57806318160ddd1461037557806323b872dd146103a057610225565b806301ffc9a71461022a57806302c889891461026757806306fdde0314610290578063081812fc146102bb575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612fb8565b6108b3565b60405161025e919061359b565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190612f8b565b610995565b005b34801561029c57600080fd5b506102a5610a2e565b6040516102b291906135b6565b60405180910390f35b3480156102c757600080fd5b506102e260048036038101906102dd9190613088565b610ac0565b6040516102ef9190613534565b60405180910390f35b34801561030457600080fd5b5061030d610b45565b60405161031a91906135b6565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190612f4b565b610bd3565b005b34801561035857600080fd5b50610373600480360381019061036e919061303f565b610ceb565b005b34801561038157600080fd5b5061038a610d81565b60405161039791906138b8565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190612e35565b610d92565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613088565b610df2565b005b3480156103fe57600080fd5b50610407610e78565b005b34801561041557600080fd5b5061041e610fa3565b60405161042b91906135b6565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612e35565b611031565b005b34801561046957600080fd5b50610484600480360381019061047f919061303f565b611051565b005b34801561049257600080fd5b506104ad60048036038101906104a89190613088565b6110e7565b6040516104ba9190613534565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613088565b611199565b005b3480156104f857600080fd5b50610513600480360381019061050e9190612dc8565b61121f565b60405161052091906138b8565b60405180910390f35b34801561053557600080fd5b5061053e6112d7565b005b34801561054c57600080fd5b5061055561135f565b60405161056291906138b8565b60405180910390f35b34801561057757600080fd5b50610580611365565b60405161058d9190613534565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190613088565b61138f565b005b3480156105cb57600080fd5b506105d4611415565b6040516105e191906135b6565b60405180910390f35b3480156105f657600080fd5b506105ff6114a7565b60405161060c91906138b8565b60405180910390f35b61062f600480360381019061062a9190613088565b6114ad565b005b34801561063d57600080fd5b5061065860048036038101906106539190612f0b565b61177b565b005b34801561066657600080fd5b50610681600480360381019061067c9190612dc8565b611791565b60405161068e91906138b8565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190612e88565b6117a9565b005b3480156106cc57600080fd5b506106d561180b565b6040516106e291906138b8565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613088565b611811565b005b34801561072057600080fd5b5061073b60048036038101906107369190613088565b611897565b60405161074891906135b6565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190612dc8565b6119b9565b005b34801561078657600080fd5b506107a1600480360381019061079c9190612dc8565b611a67565b005b3480156107af57600080fd5b506107b8611b27565b6040516107c591906138b8565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612df5565b611b2d565b604051610802919061359b565b60405180910390f35b34801561081757600080fd5b50610820611c2f565b60405161082d919061359b565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190612dc8565b611c42565b005b34801561086b57600080fd5b5061088660048036038101906108819190613088565b611d3a565b005b34801561089457600080fd5b5061089d611dc0565b6040516108aa91906138b8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098e575061098d82611dfd565b5b9050919050565b61099d611e67565b73ffffffffffffffffffffffffffffffffffffffff166109bb611365565b73ffffffffffffffffffffffffffffffffffffffff1614610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906137f8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b606060008054610a3d90613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990613b85565b8015610ab65780601f10610a8b57610100808354040283529160200191610ab6565b820191906000526020600020905b815481529060010190602001808311610a9957829003601f168201915b5050505050905090565b6000610acb82611e6f565b610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906137d8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610b5290613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7e90613b85565b8015610bcb5780601f10610ba057610100808354040283529160200191610bcb565b820191906000526020600020905b815481529060010190602001808311610bae57829003601f168201915b505050505081565b6000610bde826110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613858565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c6e611e67565b73ffffffffffffffffffffffffffffffffffffffff161480610c9d5750610c9c81610c97611e67565b611b2d565b5b610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd3906136f8565b60405180910390fd5b610ce68383611edb565b505050565b610cf3611e67565b73ffffffffffffffffffffffffffffffffffffffff16610d11611365565b73ffffffffffffffffffffffffffffffffffffffff1614610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906137f8565b60405180910390fd5b80600e9080519060200190610d7d929190612bc7565b5050565b6000610d8d6010611dc6565b905090565b610da3610d9d611e67565b82611f94565b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990613878565b60405180910390fd5b610ded838383612072565b505050565b610dfa611e67565b73ffffffffffffffffffffffffffffffffffffffff16610e18611365565b73ffffffffffffffffffffffffffffffffffffffff1614610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906137f8565b60405180910390fd5b80600a8190555050565b610e80611e67565b73ffffffffffffffffffffffffffffffffffffffff16610e9e611365565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb906137f8565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f1a9061351f565b60006040518083038185875af1925050503d8060008114610f57576040519150601f19603f3d011682016040523d82523d6000602084013e610f5c565b606091505b5050905080610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906136b8565b60405180910390fd5b50565b600e8054610fb090613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc90613b85565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b505050505081565b61104c838383604051806020016040528060008152506117a9565b505050565b611059611e67565b73ffffffffffffffffffffffffffffffffffffffff16611077611365565b73ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c4906137f8565b60405180910390fd5b80600f90805190602001906110e3929190612bc7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613738565b60405180910390fd5b80915050919050565b6111a1611e67565b73ffffffffffffffffffffffffffffffffffffffff166111bf611365565b73ffffffffffffffffffffffffffffffffffffffff1614611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906137f8565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790613718565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112df611e67565b73ffffffffffffffffffffffffffffffffffffffff166112fd611365565b73ffffffffffffffffffffffffffffffffffffffff1614611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a906137f8565b60405180910390fd5b61135d60006122ce565b565b60095481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611397611e67565b73ffffffffffffffffffffffffffffffffffffffff166113b5611365565b73ffffffffffffffffffffffffffffffffffffffff161461140b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611402906137f8565b60405180910390fd5b8060078190555050565b60606001805461142490613b85565b80601f016020809104026020016040519081016040528092919081815260200182805461145090613b85565b801561149d5780601f106114725761010080835404028352916020019161149d565b820191906000526020600020905b81548152906001019060200180831161148057829003601f168201915b5050505050905090565b60075481565b600660149054906101000a900460ff166114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613898565b60405180910390fd5b600854811115611541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611538906137b8565b60405180910390fd5b600b548161154f6010611dc6565b61155991906139a8565b111561159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190613758565b60405180910390fd5b600a54816115a86010611dc6565b6115b291906139a8565b111561160d5734816007546115c79190613a2f565b1115611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613798565b60405180910390fd5b6116d4565b60003414611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790613658565b60405180910390fd5b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca906135d8565b60405180910390fd5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461172391906139a8565b9250508190555060005b8181101561177757600060016117436010611dc6565b61174d91906139a8565b90506117593382612394565b6117636010611dd4565b50808061176f90613be8565b91505061172d565b5050565b61178d611786611e67565b83836123b2565b5050565b600d6020528060005260406000206000915090505481565b6117ba6117b4611e67565b83611f94565b6117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613878565b60405180910390fd5b6118058484848461251f565b50505050565b600a5481565b611819611e67565b73ffffffffffffffffffffffffffffffffffffffff16611837611365565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611884906137f8565b60405180910390fd5b8060088190555050565b60606118a282611e6f565b6118e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d890613838565b60405180910390fd5b60006118eb61257b565b9050600081511161198657600e805461190390613b85565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90613b85565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b50505050506119b1565b806119908461260d565b6040516020016119a19291906134f0565b6040516020818303038152906040525b915050919050565b6119c1611e67565b73ffffffffffffffffffffffffffffffffffffffff166119df611365565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906137f8565b60405180910390fd5b60006001611a436010611dc6565b611a4d91906139a8565b9050611a598282612394565b611a636010611dd4565b5050565b611a6f611e67565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611365565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada906137f8565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611ba59190613534565b60206040518083038186803b158015611bbd57600080fd5b505afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf59190613012565b73ffffffffffffffffffffffffffffffffffffffff161415611c1b576001915050611c29565b611c25848461276e565b9150505b92915050565b600660149054906101000a900460ff1681565b611c4a611e67565b73ffffffffffffffffffffffffffffffffffffffff16611c68611365565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906137f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613618565b60405180910390fd5b611d37816122ce565b50565b611d42611e67565b73ffffffffffffffffffffffffffffffffffffffff16611d60611365565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad906137f8565b60405180910390fd5b8060098190555050565b60085481565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f4e836110e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f9f82611e6f565b611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd5906136d8565b60405180910390fd5b6000611fe9836110e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061205857508373ffffffffffffffffffffffffffffffffffffffff1661204084610ac0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061206957506120688185611b2d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612092826110e7565b73ffffffffffffffffffffffffffffffffffffffff16146120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90613818565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613678565b60405180910390fd5b612163838383612802565b61216e600082611edb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121be9190613a89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221591906139a8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123ae828260405180602001604052806000815250612807565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890613698565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612512919061359b565b60405180910390a3505050565b61252a848484612072565b61253684848484612862565b612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c906135f8565b60405180910390fd5b50505050565b6060600f805461258a90613b85565b80601f01602080910402602001604051908101604052809291908181526020018280546125b690613b85565b80156126035780601f106125d857610100808354040283529160200191612603565b820191906000526020600020905b8154815290600101906020018083116125e657829003601f168201915b5050505050905090565b60606000821415612655576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612769565b600082905060005b6000821461268757808061267090613be8565b915050600a8261268091906139fe565b915061265d565b60008167ffffffffffffffff8111156126a3576126a2613d1e565b5b6040519080825280601f01601f1916602001820160405280156126d55781602001600182028036833780820191505090505b5090505b60008514612762576001826126ee9190613a89565b9150600a856126fd9190613c31565b603061270991906139a8565b60f81b81838151811061271f5761271e613cef565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275b91906139fe565b94506126d9565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b61281183836129f9565b61281e6000848484612862565b61285d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612854906135f8565b60405180910390fd5b505050565b60006128838473ffffffffffffffffffffffffffffffffffffffff16611dea565b156129ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ac611e67565b8786866040518563ffffffff1660e01b81526004016128ce949392919061354f565b602060405180830381600087803b1580156128e857600080fd5b505af192505050801561291957506040513d601f19601f820116820180604052508101906129169190612fe5565b60015b61299c573d8060008114612949576040519150601f19603f3d011682016040523d82523d6000602084013e61294e565b606091505b50600081511415612994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298b906135f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129f1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090613778565b60405180910390fd5b612a7281611e6f565b15612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa990613638565b60405180910390fd5b612abe60008383612802565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b0e91906139a8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bd390613b85565b90600052602060002090601f016020900481019282612bf55760008555612c3c565b82601f10612c0e57805160ff1916838001178555612c3c565b82800160010185558215612c3c579182015b82811115612c3b578251825591602001919060010190612c20565b5b509050612c499190612c4d565b5090565b5b80821115612c66576000816000905550600101612c4e565b5090565b6000612c7d612c78846138f8565b6138d3565b905082815260208101848484011115612c9957612c98613d52565b5b612ca4848285613b43565b509392505050565b6000612cbf612cba84613929565b6138d3565b905082815260208101848484011115612cdb57612cda613d52565b5b612ce6848285613b43565b509392505050565b600081359050612cfd816143d3565b92915050565b600081359050612d12816143ea565b92915050565b600081359050612d2781614401565b92915050565b600081519050612d3c81614401565b92915050565b600082601f830112612d5757612d56613d4d565b5b8135612d67848260208601612c6a565b91505092915050565b600081519050612d7f81614418565b92915050565b600082601f830112612d9a57612d99613d4d565b5b8135612daa848260208601612cac565b91505092915050565b600081359050612dc28161442f565b92915050565b600060208284031215612dde57612ddd613d5c565b5b6000612dec84828501612cee565b91505092915050565b60008060408385031215612e0c57612e0b613d5c565b5b6000612e1a85828601612cee565b9250506020612e2b85828601612cee565b9150509250929050565b600080600060608486031215612e4e57612e4d613d5c565b5b6000612e5c86828701612cee565b9350506020612e6d86828701612cee565b9250506040612e7e86828701612db3565b9150509250925092565b60008060008060808587031215612ea257612ea1613d5c565b5b6000612eb087828801612cee565b9450506020612ec187828801612cee565b9350506040612ed287828801612db3565b925050606085013567ffffffffffffffff811115612ef357612ef2613d57565b5b612eff87828801612d42565b91505092959194509250565b60008060408385031215612f2257612f21613d5c565b5b6000612f3085828601612cee565b9250506020612f4185828601612d03565b9150509250929050565b60008060408385031215612f6257612f61613d5c565b5b6000612f7085828601612cee565b9250506020612f8185828601612db3565b9150509250929050565b600060208284031215612fa157612fa0613d5c565b5b6000612faf84828501612d03565b91505092915050565b600060208284031215612fce57612fcd613d5c565b5b6000612fdc84828501612d18565b91505092915050565b600060208284031215612ffb57612ffa613d5c565b5b600061300984828501612d2d565b91505092915050565b60006020828403121561302857613027613d5c565b5b600061303684828501612d70565b91505092915050565b60006020828403121561305557613054613d5c565b5b600082013567ffffffffffffffff81111561307357613072613d57565b5b61307f84828501612d85565b91505092915050565b60006020828403121561309e5761309d613d5c565b5b60006130ac84828501612db3565b91505092915050565b6130be81613abd565b82525050565b6130cd81613acf565b82525050565b60006130de8261395a565b6130e88185613970565b93506130f8818560208601613b52565b61310181613d61565b840191505092915050565b600061311782613965565b613121818561398c565b9350613131818560208601613b52565b61313a81613d61565b840191505092915050565b600061315082613965565b61315a818561399d565b935061316a818560208601613b52565b80840191505092915050565b600061318360468361398c565b915061318e82613d72565b606082019050919050565b60006131a660328361398c565b91506131b182613de7565b604082019050919050565b60006131c960268361398c565b91506131d482613e36565b604082019050919050565b60006131ec601c8361398c565b91506131f782613e85565b602082019050919050565b600061320f60238361398c565b915061321a82613eae565b604082019050919050565b600061323260248361398c565b915061323d82613efd565b604082019050919050565b600061325560198361398c565b915061326082613f4c565b602082019050919050565b6000613278603a8361398c565b915061328382613f75565b604082019050919050565b600061329b602c8361398c565b91506132a682613fc4565b604082019050919050565b60006132be60388361398c565b91506132c982614013565b604082019050919050565b60006132e1602a8361398c565b91506132ec82614062565b604082019050919050565b600061330460298361398c565b915061330f826140b1565b604082019050919050565b6000613327602a8361398c565b915061333282614100565b604082019050919050565b600061334a60208361398c565b91506133558261414f565b602082019050919050565b600061336d601a8361398c565b915061337882614178565b602082019050919050565b6000613390601f8361398c565b915061339b826141a1565b602082019050919050565b60006133b3602c8361398c565b91506133be826141ca565b604082019050919050565b60006133d660058361399d565b91506133e182614219565b600582019050919050565b60006133f960208361398c565b915061340482614242565b602082019050919050565b600061341c60298361398c565b91506134278261426b565b604082019050919050565b600061343f602f8361398c565b915061344a826142ba565b604082019050919050565b600061346260218361398c565b915061346d82614309565b604082019050919050565b6000613485600083613981565b915061349082614358565b600082019050919050565b60006134a860318361398c565b91506134b38261435b565b604082019050919050565b60006134cb60118361398c565b91506134d6826143aa565b602082019050919050565b6134ea81613b39565b82525050565b60006134fc8285613145565b91506135088284613145565b9150613513826133c9565b91508190509392505050565b600061352a82613478565b9150819050919050565b600060208201905061354960008301846130b5565b92915050565b600060808201905061356460008301876130b5565b61357160208301866130b5565b61357e60408301856134e1565b818103606083015261359081846130d3565b905095945050505050565b60006020820190506135b060008301846130c4565b92915050565b600060208201905081810360008301526135d0818461310c565b905092915050565b600060208201905081810360008301526135f181613176565b9050919050565b6000602082019050818103600083015261361181613199565b9050919050565b60006020820190508181036000830152613631816131bc565b9050919050565b60006020820190508181036000830152613651816131df565b9050919050565b6000602082019050818103600083015261367181613202565b9050919050565b6000602082019050818103600083015261369181613225565b9050919050565b600060208201905081810360008301526136b181613248565b9050919050565b600060208201905081810360008301526136d18161326b565b9050919050565b600060208201905081810360008301526136f18161328e565b9050919050565b60006020820190508181036000830152613711816132b1565b9050919050565b60006020820190508181036000830152613731816132d4565b9050919050565b60006020820190508181036000830152613751816132f7565b9050919050565b600060208201905081810360008301526137718161331a565b9050919050565b600060208201905081810360008301526137918161333d565b9050919050565b600060208201905081810360008301526137b181613360565b9050919050565b600060208201905081810360008301526137d181613383565b9050919050565b600060208201905081810360008301526137f1816133a6565b9050919050565b60006020820190508181036000830152613811816133ec565b9050919050565b600060208201905081810360008301526138318161340f565b9050919050565b6000602082019050818103600083015261385181613432565b9050919050565b6000602082019050818103600083015261387181613455565b9050919050565b600060208201905081810360008301526138918161349b565b9050919050565b600060208201905081810360008301526138b1816134be565b9050919050565b60006020820190506138cd60008301846134e1565b92915050565b60006138dd6138ee565b90506138e98282613bb7565b919050565b6000604051905090565b600067ffffffffffffffff82111561391357613912613d1e565b5b61391c82613d61565b9050602081019050919050565b600067ffffffffffffffff82111561394457613943613d1e565b5b61394d82613d61565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139b382613b39565b91506139be83613b39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139f3576139f2613c62565b5b828201905092915050565b6000613a0982613b39565b9150613a1483613b39565b925082613a2457613a23613c91565b5b828204905092915050565b6000613a3a82613b39565b9150613a4583613b39565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7e57613a7d613c62565b5b828202905092915050565b6000613a9482613b39565b9150613a9f83613b39565b925082821015613ab257613ab1613c62565b5b828203905092915050565b6000613ac882613b19565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613b1282613abd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b70578082015181840152602081019050613b55565b83811115613b7f576000848401525b50505050565b60006002820490506001821680613b9d57607f821691505b60208210811415613bb157613bb0613cc0565b5b50919050565b613bc082613d61565b810181811067ffffffffffffffff82111715613bdf57613bde613d1e565b5b80604052505050565b6000613bf382613b39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c2657613c25613c62565b5b600182019050919050565b6000613c3c82613b39565b9150613c4783613b39565b925082613c5757613c56613c91565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f752063616e206f6e6c792061646f7074203230206672656520434155207060008201527f65722077616c6c65742e205761697420666f722074686520706169642061646f60208201527f7074696f6e2e0000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f446f6e27742073656e6420657468657220666f72207468652066726565206d6960008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f446f6e27742073656e6420756e6465722028696e20455448292e000000000000600082015250565b7f596f752063616e206f6e6c79206d696e7420313020617420612074696d652e00600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f53616c6520697320696e6163746976652e000000000000000000000000000000600082015250565b6143dc81613abd565b81146143e757600080fd5b50565b6143f381613acf565b81146143fe57600080fd5b50565b61440a81613adb565b811461441557600080fd5b50565b61442181613b07565b811461442c57600080fd5b50565b61443881613b39565b811461444357600080fd5b5056fea2646970667358221220ce9a3d114649710fdb4b6a682927036c32ab0b9efaf8c7fcfb97a4af382a660464736f6c63430008070033
Deployed Bytecode Sourcemap
38484:4367:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25311:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41688:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26256:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27815:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38954:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27338:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42622:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39234:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28565:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42126:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41043:250;;;;;;;;;;;;;:::i;:::-;;38853:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28975:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42737:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25950:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42259:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25680:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6299:103;;;;;;;;;;;;;:::i;:::-;;38645:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5648:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41795:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38578:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39865:983;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28108:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38797:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29231:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38686:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41888:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41301:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40857:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42486:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38731:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39475:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38537:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6557:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41993:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38616:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25311:305;25413:4;25465:25;25450:40;;;:11;:40;;;;:105;;;;25522:33;25507:48;;;:11;:48;;;;25450:105;:158;;;;25572:36;25596:11;25572:23;:36::i;:::-;25450:158;25430:178;;25311:305;;;:::o;41688:99::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41771:8:::1;41756:12;;:23;;;;;;;;;;;;;;;;;;41688:99:::0;:::o;26256:100::-;26310:13;26343:5;26336:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26256:100;:::o;27815:221::-;27891:7;27919:16;27927:7;27919;:16::i;:::-;27911:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28004:15;:24;28020:7;28004:24;;;;;;;;;;;;;;;;;;;;;27997:31;;27815:221;;;:::o;38954:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27338:411::-;27419:13;27435:23;27450:7;27435:14;:23::i;:::-;27419:39;;27483:5;27477:11;;:2;:11;;;;27469:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27577:5;27561:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27586:37;27603:5;27610:12;:10;:12::i;:::-;27586:16;:37::i;:::-;27561:62;27539:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27720:21;27729:2;27733:7;27720:8;:21::i;:::-;27408:341;27338:411;;:::o;42622:107::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42712:9:::1;42699:10;:22;;;;;;;;;;;;:::i;:::-;;42622:107:::0;:::o;39234:108::-;39278:14;39312:22;:12;:20;:22::i;:::-;39305:29;;39234:108;:::o;28565:339::-;28760:41;28779:12;:10;:12::i;:::-;28793:7;28760:18;:41::i;:::-;28752:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28868:28;28878:4;28884:2;28888:7;28868:9;:28::i;:::-;28565:339;;;:::o;42126:125::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42234:9:::1;42208:23;:35;;;;42126:125:::0;:::o;41043:250::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41092:12:::1;41110:10;:15;;41133:21;41110:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41091:68;;;41192:7;41170:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;41080:213;41043:250::o:0;38853:94::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28975:185::-;29113:39;29130:4;29136:2;29140:7;29113:39;;;;;;;;;;;;:16;:39::i;:::-;28975:185;;;:::o;42737:111::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42832:8:::1;42813:16;:27;;;;;;;;;;;;:::i;:::-;;42737:111:::0;:::o;25950:239::-;26022:7;26042:13;26058:7;:16;26066:7;26058:16;;;;;;;;;;;;;;;;;;;;;26042:32;;26110:1;26093:19;;:5;:19;;;;26085:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26176:5;26169:12;;;25950:239;;;:::o;42259:99::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42340:10:::1;42328:9;:22;;;;42259:99:::0;:::o;25680:208::-;25752:7;25797:1;25780:19;;:5;:19;;;;25772:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25864:9;:16;25874:5;25864:16;;;;;;;;;;;;;;;;25857:23;;25680:208;;;:::o;6299:103::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6364:30:::1;6391:1;6364:18;:30::i;:::-;6299:103::o:0;38645:37::-;;;;:::o;5648:87::-;5694:7;5721:6;;;;;;;;;;;5714:13;;5648:87;:::o;41795:85::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41864:8:::1;41856:5;:16;;;;41795:85:::0;:::o;26425:104::-;26481:13;26514:7;26507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26425:104;:::o;38578:34::-;;;;:::o;39865:983::-;39936:12;;;;;;;;;;;39928:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;40007:8;;39989:14;:26;;39981:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40113:9;;40095:14;40070:22;:12;:20;:22::i;:::-;:39;;;;:::i;:::-;:52;;40062:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;40236:23;;40219:14;40194:22;:12;:20;:22::i;:::-;:39;;;;:::i;:::-;:65;40190:395;;;40312:9;40293:14;40285:5;;:22;;;;:::i;:::-;40284:37;;40276:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40190:395;;;40397:1;40384:9;:14;40376:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40484:20;;40452:17;:29;40470:10;40452:29;;;;;;;;;;;;;;;;:52;40444:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;40190:395;40626:14;40593:17;:29;40611:10;40593:29;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;40655:6;40651:190;40671:14;40667:1;:18;40651:190;;;40699:16;40743:1;40718:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40699:45;;40759:31;40769:10;40781:8;40759:9;:31::i;:::-;40805:24;:12;:22;:24::i;:::-;40692:149;40687:3;;;;;:::i;:::-;;;;40651:190;;;;39865:983;:::o;28108:155::-;28203:52;28222:12;:10;:12::i;:::-;28236:8;28246;28203:18;:52::i;:::-;28108:155;;:::o;38797:49::-;;;;;;;;;;;;;;;;;:::o;29231:328::-;29406:41;29425:12;:10;:12::i;:::-;29439:7;29406:18;:41::i;:::-;29398:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29512:39;29526:4;29532:2;29536:7;29545:5;29512:13;:39::i;:::-;29231:328;;;;:::o;38686:41::-;;;;:::o;41888:97::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41968:9:::1;41957:8;:20;;;;41888:97:::0;:::o;41301:379::-;41374:13;41408:16;41416:7;41408;:16::i;:::-;41400:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41489:21;41513:10;:8;:10::i;:::-;41489:34;;41565:1;41547:7;41541:21;:25;:131;;41662:10;41541:131;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41603:7;41612:25;41629:7;41612:16;:25::i;:::-;41586:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41541:131;41534:138;;;41301:379;;;:::o;40857:178::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40912:16:::1;40956:1;40931:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40912:45;;40968:24;40978:3;40983:8;40968:9;:24::i;:::-;41003;:12;:22;:24::i;:::-;40901:134;40857:178:::0;:::o;42486:128::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42594:12:::1;42571:20;;:35;;;;;;;;;;;;;;;;;;42486:128:::0;:::o;38731:28::-;;;;:::o;39475:382::-;39600:4;39622:27;39666:20;;;;;;;;;;;39622:65;;39743:8;39702:49;;39710:13;:21;;;39732:5;39710:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39702:49;;;39698:93;;;39775:4;39768:11;;;;;39698:93;39810:39;39833:5;39840:8;39810:22;:39::i;:::-;39803:46;;;39475:382;;;;;:::o;38537:32::-;;;;;;;;;;;;;:::o;6557:201::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6666:1:::1;6646:22;;:8;:22;;;;6638:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6722:28;6741:8;6722:18;:28::i;:::-;6557:201:::0;:::o;41993:125::-;5879:12;:10;:12::i;:::-;5868:23;;:7;:5;:7::i;:::-;:23;;;5860:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42098:12:::1;42075:20;:35;;;;41993:125:::0;:::o;38616:25::-;;;;:::o;976:114::-;1041:7;1068;:14;;;1061:21;;976:114;;;:::o;1098:127::-;1205:1;1187:7;:14;;;:19;;;;;;;;;;;1098:127;:::o;7936:387::-;7996:4;8204:12;8271:7;8259:20;8251:28;;8314:1;8307:4;:8;8300:15;;;7936:387;;;:::o;18080:157::-;18165:4;18204:25;18189:40;;;:11;:40;;;;18182:47;;18080:157;;;:::o;4372:98::-;4425:7;4452:10;4445:17;;4372:98;:::o;31069:127::-;31134:4;31186:1;31158:30;;:7;:16;31166:7;31158:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31151:37;;31069:127;;;:::o;35051:174::-;35153:2;35126:15;:24;35142:7;35126:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35209:7;35205:2;35171:46;;35180:23;35195:7;35180:14;:23::i;:::-;35171:46;;;;;;;;;;;;35051:174;;:::o;31363:348::-;31456:4;31481:16;31489:7;31481;:16::i;:::-;31473:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31557:13;31573:23;31588:7;31573:14;:23::i;:::-;31557:39;;31626:5;31615:16;;:7;:16;;;:51;;;;31659:7;31635:31;;:20;31647:7;31635:11;:20::i;:::-;:31;;;31615:51;:87;;;;31670:32;31687:5;31694:7;31670:16;:32::i;:::-;31615:87;31607:96;;;31363:348;;;;:::o;34355:578::-;34514:4;34487:31;;:23;34502:7;34487:14;:23::i;:::-;:31;;;34479:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34597:1;34583:16;;:2;:16;;;;34575:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34653:39;34674:4;34680:2;34684:7;34653:20;:39::i;:::-;34757:29;34774:1;34778:7;34757:8;:29::i;:::-;34818:1;34799:9;:15;34809:4;34799:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34847:1;34830:9;:13;34840:2;34830:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34878:2;34859:7;:16;34867:7;34859:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34917:7;34913:2;34898:27;;34907:4;34898:27;;;;;;;;;;;;34355:578;;;:::o;6918:191::-;6992:16;7011:6;;;;;;;;;;;6992:25;;7037:8;7028:6;;:17;;;;;;;;;;;;;;;;;;7092:8;7061:40;;7082:8;7061:40;;;;;;;;;;;;6981:128;6918:191;:::o;32053:110::-;32129:26;32139:2;32143:7;32129:26;;;;;;;;;;;;:9;:26::i;:::-;32053:110;;:::o;35367:315::-;35522:8;35513:17;;:5;:17;;;;35505:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35609:8;35571:18;:25;35590:5;35571:25;;;;;;;;;;;;;;;:35;35597:8;35571:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35655:8;35633:41;;35648:5;35633:41;;;35665:8;35633:41;;;;;;:::i;:::-;;;;;;;;35367:315;;;:::o;30441:::-;30598:28;30608:4;30614:2;30618:7;30598:9;:28::i;:::-;30645:48;30668:4;30674:2;30678:7;30687:5;30645:22;:48::i;:::-;30637:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30441:315;;;;:::o;39350:117::-;39410:13;39443:16;39436:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39350:117;:::o;1934:723::-;1990:13;2220:1;2211:5;:10;2207:53;;;2238:10;;;;;;;;;;;;;;;;;;;;;2207:53;2270:12;2285:5;2270:20;;2301:14;2326:78;2341:1;2333:4;:9;2326:78;;2359:8;;;;;:::i;:::-;;;;2390:2;2382:10;;;;;:::i;:::-;;;2326:78;;;2414:19;2446:6;2436:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2414:39;;2464:154;2480:1;2471:5;:10;2464:154;;2508:1;2498:11;;;;;:::i;:::-;;;2575:2;2567:5;:10;;;;:::i;:::-;2554:2;:24;;;;:::i;:::-;2541:39;;2524:6;2531;2524:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2604:2;2595:11;;;;;:::i;:::-;;;2464:154;;;2642:6;2628:21;;;;;1934:723;;;;:::o;28334:164::-;28431:4;28455:18;:25;28474:5;28455:25;;;;;;;;;;;;;;;:35;28481:8;28455:35;;;;;;;;;;;;;;;;;;;;;;;;;28448:42;;28334:164;;;;:::o;37618:126::-;;;;:::o;32390:321::-;32520:18;32526:2;32530:7;32520:5;:18::i;:::-;32571:54;32602:1;32606:2;32610:7;32619:5;32571:22;:54::i;:::-;32549:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32390:321;;;:::o;36247:799::-;36402:4;36423:15;:2;:13;;;:15::i;:::-;36419:620;;;36475:2;36459:36;;;36496:12;:10;:12::i;:::-;36510:4;36516:7;36525:5;36459:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36455:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36718:1;36701:6;:13;:18;36697:272;;;36744:60;;;;;;;;;;:::i;:::-;;;;;;;;36697:272;36919:6;36913:13;36904:6;36900:2;36896:15;36889:38;36455:529;36592:41;;;36582:51;;;:6;:51;;;;36575:58;;;;;36419:620;37023:4;37016:11;;36247:799;;;;;;;:::o;33047:382::-;33141:1;33127:16;;:2;:16;;;;33119:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33200:16;33208:7;33200;:16::i;:::-;33199:17;33191:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33262:45;33291:1;33295:2;33299:7;33262:20;:45::i;:::-;33337:1;33320:9;:13;33330:2;33320:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33368:2;33349:7;:16;33357:7;33349:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33413:7;33409:2;33388:33;;33405:1;33388:33;;;;;;;;;;;;33047:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1772:201::-;1858:5;1889:6;1883:13;1874:22;;1905:62;1961:5;1905:62;:::i;:::-;1772:201;;;;:::o;1993:340::-;2049:5;2098:3;2091:4;2083:6;2079:17;2075:27;2065:122;;2106:79;;:::i;:::-;2065:122;2223:6;2210:20;2248:79;2323:3;2315:6;2308:4;2300:6;2296:17;2248:79;:::i;:::-;2239:88;;2055:278;1993:340;;;;:::o;2339:139::-;2385:5;2423:6;2410:20;2401:29;;2439:33;2466:5;2439:33;:::i;:::-;2339:139;;;;:::o;2484:329::-;2543:6;2592:2;2580:9;2571:7;2567:23;2563:32;2560:119;;;2598:79;;:::i;:::-;2560:119;2718:1;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2689:117;2484:329;;;;:::o;2819:474::-;2887:6;2895;2944:2;2932:9;2923:7;2919:23;2915:32;2912:119;;;2950:79;;:::i;:::-;2912:119;3070:1;3095:53;3140:7;3131:6;3120:9;3116:22;3095:53;:::i;:::-;3085:63;;3041:117;3197:2;3223:53;3268:7;3259:6;3248:9;3244:22;3223:53;:::i;:::-;3213:63;;3168:118;2819:474;;;;;:::o;3299:619::-;3376:6;3384;3392;3441:2;3429:9;3420:7;3416:23;3412:32;3409:119;;;3447:79;;:::i;:::-;3409:119;3567:1;3592:53;3637:7;3628:6;3617:9;3613:22;3592:53;:::i;:::-;3582:63;;3538:117;3694:2;3720:53;3765:7;3756:6;3745:9;3741:22;3720:53;:::i;:::-;3710:63;;3665:118;3822:2;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3793:118;3299:619;;;;;:::o;3924:943::-;4019:6;4027;4035;4043;4092:3;4080:9;4071:7;4067:23;4063:33;4060:120;;;4099:79;;:::i;:::-;4060:120;4219:1;4244:53;4289:7;4280:6;4269:9;4265:22;4244:53;:::i;:::-;4234:63;;4190:117;4346:2;4372:53;4417:7;4408:6;4397:9;4393:22;4372:53;:::i;:::-;4362:63;;4317:118;4474:2;4500:53;4545:7;4536:6;4525:9;4521:22;4500:53;:::i;:::-;4490:63;;4445:118;4630:2;4619:9;4615:18;4602:32;4661:18;4653:6;4650:30;4647:117;;;4683:79;;:::i;:::-;4647:117;4788:62;4842:7;4833:6;4822:9;4818:22;4788:62;:::i;:::-;4778:72;;4573:287;3924:943;;;;;;;:::o;4873:468::-;4938:6;4946;4995:2;4983:9;4974:7;4970:23;4966:32;4963:119;;;5001:79;;:::i;:::-;4963:119;5121:1;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5092:117;5248:2;5274:50;5316:7;5307:6;5296:9;5292:22;5274:50;:::i;:::-;5264:60;;5219:115;4873:468;;;;;:::o;5347:474::-;5415:6;5423;5472:2;5460:9;5451:7;5447:23;5443:32;5440:119;;;5478:79;;:::i;:::-;5440:119;5598:1;5623:53;5668:7;5659:6;5648:9;5644:22;5623:53;:::i;:::-;5613:63;;5569:117;5725:2;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5696:118;5347:474;;;;;:::o;5827:323::-;5883:6;5932:2;5920:9;5911:7;5907:23;5903:32;5900:119;;;5938:79;;:::i;:::-;5900:119;6058:1;6083:50;6125:7;6116:6;6105:9;6101:22;6083:50;:::i;:::-;6073:60;;6029:114;5827:323;;;;:::o;6156:327::-;6214:6;6263:2;6251:9;6242:7;6238:23;6234:32;6231:119;;;6269:79;;:::i;:::-;6231:119;6389:1;6414:52;6458:7;6449:6;6438:9;6434:22;6414:52;:::i;:::-;6404:62;;6360:116;6156:327;;;;:::o;6489:349::-;6558:6;6607:2;6595:9;6586:7;6582:23;6578:32;6575:119;;;6613:79;;:::i;:::-;6575:119;6733:1;6758:63;6813:7;6804:6;6793:9;6789:22;6758:63;:::i;:::-;6748:73;;6704:127;6489:349;;;;:::o;6844:409::-;6943:6;6992:2;6980:9;6971:7;6967:23;6963:32;6960:119;;;6998:79;;:::i;:::-;6960:119;7118:1;7143:93;7228:7;7219:6;7208:9;7204:22;7143:93;:::i;:::-;7133:103;;7089:157;6844:409;;;;:::o;7259:509::-;7328:6;7377:2;7365:9;7356:7;7352:23;7348:32;7345:119;;;7383:79;;:::i;:::-;7345:119;7531:1;7520:9;7516:17;7503:31;7561:18;7553:6;7550:30;7547:117;;;7583:79;;:::i;:::-;7547:117;7688:63;7743:7;7734:6;7723:9;7719:22;7688:63;:::i;:::-;7678:73;;7474:287;7259:509;;;;:::o;7774:329::-;7833:6;7882:2;7870:9;7861:7;7857:23;7853:32;7850:119;;;7888:79;;:::i;:::-;7850:119;8008:1;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7979:117;7774:329;;;;:::o;8109:118::-;8196:24;8214:5;8196:24;:::i;:::-;8191:3;8184:37;8109:118;;:::o;8233:109::-;8314:21;8329:5;8314:21;:::i;:::-;8309:3;8302:34;8233:109;;:::o;8348:360::-;8434:3;8462:38;8494:5;8462:38;:::i;:::-;8516:70;8579:6;8574:3;8516:70;:::i;:::-;8509:77;;8595:52;8640:6;8635:3;8628:4;8621:5;8617:16;8595:52;:::i;:::-;8672:29;8694:6;8672:29;:::i;:::-;8667:3;8663:39;8656:46;;8438:270;8348:360;;;;:::o;8714:364::-;8802:3;8830:39;8863:5;8830:39;:::i;:::-;8885:71;8949:6;8944:3;8885:71;:::i;:::-;8878:78;;8965:52;9010:6;9005:3;8998:4;8991:5;8987:16;8965:52;:::i;:::-;9042:29;9064:6;9042:29;:::i;:::-;9037:3;9033:39;9026:46;;8806:272;8714:364;;;;:::o;9084:377::-;9190:3;9218:39;9251:5;9218:39;:::i;:::-;9273:89;9355:6;9350:3;9273:89;:::i;:::-;9266:96;;9371:52;9416:6;9411:3;9404:4;9397:5;9393:16;9371:52;:::i;:::-;9448:6;9443:3;9439:16;9432:23;;9194:267;9084:377;;;;:::o;9467:366::-;9609:3;9630:67;9694:2;9689:3;9630:67;:::i;:::-;9623:74;;9706:93;9795:3;9706:93;:::i;:::-;9824:2;9819:3;9815:12;9808:19;;9467:366;;;:::o;9839:::-;9981:3;10002:67;10066:2;10061:3;10002:67;:::i;:::-;9995:74;;10078:93;10167:3;10078:93;:::i;:::-;10196:2;10191:3;10187:12;10180:19;;9839:366;;;:::o;10211:::-;10353:3;10374:67;10438:2;10433:3;10374:67;:::i;:::-;10367:74;;10450:93;10539:3;10450:93;:::i;:::-;10568:2;10563:3;10559:12;10552:19;;10211:366;;;:::o;10583:::-;10725:3;10746:67;10810:2;10805:3;10746:67;:::i;:::-;10739:74;;10822:93;10911:3;10822:93;:::i;:::-;10940:2;10935:3;10931:12;10924:19;;10583:366;;;:::o;10955:::-;11097:3;11118:67;11182:2;11177:3;11118:67;:::i;:::-;11111:74;;11194:93;11283:3;11194:93;:::i;:::-;11312:2;11307:3;11303:12;11296:19;;10955:366;;;:::o;11327:::-;11469:3;11490:67;11554:2;11549:3;11490:67;:::i;:::-;11483:74;;11566:93;11655:3;11566:93;:::i;:::-;11684:2;11679:3;11675:12;11668:19;;11327:366;;;:::o;11699:::-;11841:3;11862:67;11926:2;11921:3;11862:67;:::i;:::-;11855:74;;11938:93;12027:3;11938:93;:::i;:::-;12056:2;12051:3;12047:12;12040:19;;11699:366;;;:::o;12071:::-;12213:3;12234:67;12298:2;12293:3;12234:67;:::i;:::-;12227:74;;12310:93;12399:3;12310:93;:::i;:::-;12428:2;12423:3;12419:12;12412:19;;12071:366;;;:::o;12443:::-;12585:3;12606:67;12670:2;12665:3;12606:67;:::i;:::-;12599:74;;12682:93;12771:3;12682:93;:::i;:::-;12800:2;12795:3;12791:12;12784:19;;12443:366;;;:::o;12815:::-;12957:3;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13054:93;13143:3;13054:93;:::i;:::-;13172:2;13167:3;13163:12;13156:19;;12815:366;;;:::o;13187:::-;13329:3;13350:67;13414:2;13409:3;13350:67;:::i;:::-;13343:74;;13426:93;13515:3;13426:93;:::i;:::-;13544:2;13539:3;13535:12;13528:19;;13187:366;;;:::o;13559:::-;13701:3;13722:67;13786:2;13781:3;13722:67;:::i;:::-;13715:74;;13798:93;13887:3;13798:93;:::i;:::-;13916:2;13911:3;13907:12;13900:19;;13559:366;;;:::o;13931:::-;14073:3;14094:67;14158:2;14153:3;14094:67;:::i;:::-;14087:74;;14170:93;14259:3;14170:93;:::i;:::-;14288:2;14283:3;14279:12;14272:19;;13931:366;;;:::o;14303:::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:::-;14817:3;14838:67;14902:2;14897:3;14838:67;:::i;:::-;14831:74;;14914:93;15003:3;14914:93;:::i;:::-;15032:2;15027:3;15023:12;15016:19;;14675:366;;;:::o;15047:::-;15189:3;15210:67;15274:2;15269:3;15210:67;:::i;:::-;15203:74;;15286:93;15375:3;15286:93;:::i;:::-;15404:2;15399:3;15395:12;15388:19;;15047:366;;;:::o;15419:::-;15561:3;15582:67;15646:2;15641:3;15582:67;:::i;:::-;15575:74;;15658:93;15747:3;15658:93;:::i;:::-;15776:2;15771:3;15767:12;15760:19;;15419:366;;;:::o;15791:400::-;15951:3;15972:84;16054:1;16049:3;15972:84;:::i;:::-;15965:91;;16065:93;16154:3;16065:93;:::i;:::-;16183:1;16178:3;16174:11;16167:18;;15791:400;;;:::o;16197:366::-;16339:3;16360:67;16424:2;16419:3;16360:67;:::i;:::-;16353:74;;16436:93;16525:3;16436:93;:::i;:::-;16554:2;16549:3;16545:12;16538:19;;16197:366;;;:::o;16569:::-;16711:3;16732:67;16796:2;16791:3;16732:67;:::i;:::-;16725:74;;16808:93;16897:3;16808:93;:::i;:::-;16926:2;16921:3;16917:12;16910:19;;16569:366;;;:::o;16941:::-;17083:3;17104:67;17168:2;17163:3;17104:67;:::i;:::-;17097:74;;17180:93;17269:3;17180:93;:::i;:::-;17298:2;17293:3;17289:12;17282:19;;16941:366;;;:::o;17313:::-;17455:3;17476:67;17540:2;17535:3;17476:67;:::i;:::-;17469:74;;17552:93;17641:3;17552:93;:::i;:::-;17670:2;17665:3;17661:12;17654:19;;17313:366;;;:::o;17685:398::-;17844:3;17865:83;17946:1;17941:3;17865:83;:::i;:::-;17858:90;;17957:93;18046:3;17957:93;:::i;:::-;18075:1;18070:3;18066:11;18059:18;;17685:398;;;:::o;18089:366::-;18231:3;18252:67;18316:2;18311:3;18252:67;:::i;:::-;18245:74;;18328:93;18417:3;18328:93;:::i;:::-;18446:2;18441:3;18437:12;18430:19;;18089:366;;;:::o;18461:::-;18603:3;18624:67;18688:2;18683:3;18624:67;:::i;:::-;18617:74;;18700:93;18789:3;18700:93;:::i;:::-;18818:2;18813:3;18809:12;18802:19;;18461:366;;;:::o;18833:118::-;18920:24;18938:5;18920:24;:::i;:::-;18915:3;18908:37;18833:118;;:::o;18957:701::-;19238:3;19260:95;19351:3;19342:6;19260:95;:::i;:::-;19253:102;;19372:95;19463:3;19454:6;19372:95;:::i;:::-;19365:102;;19484:148;19628:3;19484:148;:::i;:::-;19477:155;;19649:3;19642:10;;18957:701;;;;;:::o;19664:379::-;19848:3;19870:147;20013:3;19870:147;:::i;:::-;19863:154;;20034:3;20027:10;;19664:379;;;:::o;20049:222::-;20142:4;20180:2;20169:9;20165:18;20157:26;;20193:71;20261:1;20250:9;20246:17;20237:6;20193:71;:::i;:::-;20049:222;;;;:::o;20277:640::-;20472:4;20510:3;20499:9;20495:19;20487:27;;20524:71;20592:1;20581:9;20577:17;20568:6;20524:71;:::i;:::-;20605:72;20673:2;20662:9;20658:18;20649:6;20605:72;:::i;:::-;20687;20755:2;20744:9;20740:18;20731:6;20687:72;:::i;:::-;20806:9;20800:4;20796:20;20791:2;20780:9;20776:18;20769:48;20834:76;20905:4;20896:6;20834:76;:::i;:::-;20826:84;;20277:640;;;;;;;:::o;20923:210::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21061:65;21123:1;21112:9;21108:17;21099:6;21061:65;:::i;:::-;20923:210;;;;:::o;21139:313::-;21252:4;21290:2;21279:9;21275:18;21267:26;;21339:9;21333:4;21329:20;21325:1;21314:9;21310:17;21303:47;21367:78;21440:4;21431:6;21367:78;:::i;:::-;21359:86;;21139:313;;;;:::o;21458:419::-;21624:4;21662:2;21651:9;21647:18;21639:26;;21711:9;21705:4;21701:20;21697:1;21686:9;21682:17;21675:47;21739:131;21865:4;21739:131;:::i;:::-;21731:139;;21458:419;;;:::o;21883:::-;22049:4;22087:2;22076:9;22072:18;22064:26;;22136:9;22130:4;22126:20;22122:1;22111:9;22107:17;22100:47;22164:131;22290:4;22164:131;:::i;:::-;22156:139;;21883:419;;;:::o;22308:::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22561:9;22555:4;22551:20;22547:1;22536:9;22532:17;22525:47;22589:131;22715:4;22589:131;:::i;:::-;22581:139;;22308:419;;;:::o;22733:::-;22899:4;22937:2;22926:9;22922:18;22914:26;;22986:9;22980:4;22976:20;22972:1;22961:9;22957:17;22950:47;23014:131;23140:4;23014:131;:::i;:::-;23006:139;;22733:419;;;:::o;23158:::-;23324:4;23362:2;23351:9;23347:18;23339:26;;23411:9;23405:4;23401:20;23397:1;23386:9;23382:17;23375:47;23439:131;23565:4;23439:131;:::i;:::-;23431:139;;23158:419;;;:::o;23583:::-;23749:4;23787:2;23776:9;23772:18;23764:26;;23836:9;23830:4;23826:20;23822:1;23811:9;23807:17;23800:47;23864:131;23990:4;23864:131;:::i;:::-;23856:139;;23583:419;;;:::o;24008:::-;24174:4;24212:2;24201:9;24197:18;24189:26;;24261:9;24255:4;24251:20;24247:1;24236:9;24232:17;24225:47;24289:131;24415:4;24289:131;:::i;:::-;24281:139;;24008:419;;;:::o;24433:::-;24599:4;24637:2;24626:9;24622:18;24614:26;;24686:9;24680:4;24676:20;24672:1;24661:9;24657:17;24650:47;24714:131;24840:4;24714:131;:::i;:::-;24706:139;;24433:419;;;:::o;24858:::-;25024:4;25062:2;25051:9;25047:18;25039:26;;25111:9;25105:4;25101:20;25097:1;25086:9;25082:17;25075:47;25139:131;25265:4;25139:131;:::i;:::-;25131:139;;24858:419;;;:::o;25283:::-;25449:4;25487:2;25476:9;25472:18;25464:26;;25536:9;25530:4;25526:20;25522:1;25511:9;25507:17;25500:47;25564:131;25690:4;25564:131;:::i;:::-;25556:139;;25283:419;;;:::o;25708:::-;25874:4;25912:2;25901:9;25897:18;25889:26;;25961:9;25955:4;25951:20;25947:1;25936:9;25932:17;25925:47;25989:131;26115:4;25989:131;:::i;:::-;25981:139;;25708:419;;;:::o;26133:::-;26299:4;26337:2;26326:9;26322:18;26314:26;;26386:9;26380:4;26376:20;26372:1;26361:9;26357:17;26350:47;26414:131;26540:4;26414:131;:::i;:::-;26406:139;;26133:419;;;:::o;26558:::-;26724:4;26762:2;26751:9;26747:18;26739:26;;26811:9;26805:4;26801:20;26797:1;26786:9;26782:17;26775:47;26839:131;26965:4;26839:131;:::i;:::-;26831:139;;26558:419;;;:::o;26983:::-;27149:4;27187:2;27176:9;27172:18;27164:26;;27236:9;27230:4;27226:20;27222:1;27211:9;27207:17;27200:47;27264:131;27390:4;27264:131;:::i;:::-;27256:139;;26983:419;;;:::o;27408:::-;27574:4;27612:2;27601:9;27597:18;27589:26;;27661:9;27655:4;27651:20;27647:1;27636:9;27632:17;27625:47;27689:131;27815:4;27689:131;:::i;:::-;27681:139;;27408:419;;;:::o;27833:::-;27999:4;28037:2;28026:9;28022:18;28014:26;;28086:9;28080:4;28076:20;28072:1;28061:9;28057:17;28050:47;28114:131;28240:4;28114:131;:::i;:::-;28106:139;;27833:419;;;:::o;28258:::-;28424:4;28462:2;28451:9;28447:18;28439:26;;28511:9;28505:4;28501:20;28497:1;28486:9;28482:17;28475:47;28539:131;28665:4;28539:131;:::i;:::-;28531:139;;28258:419;;;:::o;28683:::-;28849:4;28887:2;28876:9;28872:18;28864:26;;28936:9;28930:4;28926:20;28922:1;28911:9;28907:17;28900:47;28964:131;29090:4;28964:131;:::i;:::-;28956:139;;28683:419;;;:::o;29108:::-;29274:4;29312:2;29301:9;29297:18;29289:26;;29361:9;29355:4;29351:20;29347:1;29336:9;29332:17;29325:47;29389:131;29515:4;29389:131;:::i;:::-;29381:139;;29108:419;;;:::o;29533:::-;29699:4;29737:2;29726:9;29722:18;29714:26;;29786:9;29780:4;29776:20;29772:1;29761:9;29757:17;29750:47;29814:131;29940:4;29814:131;:::i;:::-;29806:139;;29533:419;;;:::o;29958:::-;30124:4;30162:2;30151:9;30147:18;30139:26;;30211:9;30205:4;30201:20;30197:1;30186:9;30182:17;30175:47;30239:131;30365:4;30239:131;:::i;:::-;30231:139;;29958:419;;;:::o;30383:::-;30549:4;30587:2;30576:9;30572:18;30564:26;;30636:9;30630:4;30626:20;30622:1;30611:9;30607:17;30600:47;30664:131;30790:4;30664:131;:::i;:::-;30656:139;;30383:419;;;:::o;30808:::-;30974:4;31012:2;31001:9;30997:18;30989:26;;31061:9;31055:4;31051:20;31047:1;31036:9;31032:17;31025:47;31089:131;31215:4;31089:131;:::i;:::-;31081:139;;30808:419;;;:::o;31233:222::-;31326:4;31364:2;31353:9;31349:18;31341:26;;31377:71;31445:1;31434:9;31430:17;31421:6;31377:71;:::i;:::-;31233:222;;;;:::o;31461:129::-;31495:6;31522:20;;:::i;:::-;31512:30;;31551:33;31579:4;31571:6;31551:33;:::i;:::-;31461:129;;;:::o;31596:75::-;31629:6;31662:2;31656:9;31646:19;;31596:75;:::o;31677:307::-;31738:4;31828:18;31820:6;31817:30;31814:56;;;31850:18;;:::i;:::-;31814:56;31888:29;31910:6;31888:29;:::i;:::-;31880:37;;31972:4;31966;31962:15;31954:23;;31677:307;;;:::o;31990:308::-;32052:4;32142:18;32134:6;32131:30;32128:56;;;32164:18;;:::i;:::-;32128:56;32202:29;32224:6;32202:29;:::i;:::-;32194:37;;32286:4;32280;32276:15;32268:23;;31990:308;;;:::o;32304:98::-;32355:6;32389:5;32383:12;32373:22;;32304:98;;;:::o;32408:99::-;32460:6;32494:5;32488:12;32478:22;;32408:99;;;:::o;32513:168::-;32596:11;32630:6;32625:3;32618:19;32670:4;32665:3;32661:14;32646:29;;32513:168;;;;:::o;32687:147::-;32788:11;32825:3;32810:18;;32687:147;;;;:::o;32840:169::-;32924:11;32958:6;32953:3;32946:19;32998:4;32993:3;32989:14;32974:29;;32840:169;;;;:::o;33015:148::-;33117:11;33154:3;33139:18;;33015:148;;;;:::o;33169:305::-;33209:3;33228:20;33246:1;33228:20;:::i;:::-;33223:25;;33262:20;33280:1;33262:20;:::i;:::-;33257:25;;33416:1;33348:66;33344:74;33341:1;33338:81;33335:107;;;33422:18;;:::i;:::-;33335:107;33466:1;33463;33459:9;33452:16;;33169:305;;;;:::o;33480:185::-;33520:1;33537:20;33555:1;33537:20;:::i;:::-;33532:25;;33571:20;33589:1;33571:20;:::i;:::-;33566:25;;33610:1;33600:35;;33615:18;;:::i;:::-;33600:35;33657:1;33654;33650:9;33645:14;;33480:185;;;;:::o;33671:348::-;33711:7;33734:20;33752:1;33734:20;:::i;:::-;33729:25;;33768:20;33786:1;33768:20;:::i;:::-;33763:25;;33956:1;33888:66;33884:74;33881:1;33878:81;33873:1;33866:9;33859:17;33855:105;33852:131;;;33963:18;;:::i;:::-;33852:131;34011:1;34008;34004:9;33993:20;;33671:348;;;;:::o;34025:191::-;34065:4;34085:20;34103:1;34085:20;:::i;:::-;34080:25;;34119:20;34137:1;34119:20;:::i;:::-;34114:25;;34158:1;34155;34152:8;34149:34;;;34163:18;;:::i;:::-;34149:34;34208:1;34205;34201:9;34193:17;;34025:191;;;;:::o;34222:96::-;34259:7;34288:24;34306:5;34288:24;:::i;:::-;34277:35;;34222:96;;;:::o;34324:90::-;34358:7;34401:5;34394:13;34387:21;34376:32;;34324:90;;;:::o;34420:149::-;34456:7;34496:66;34489:5;34485:78;34474:89;;34420:149;;;:::o;34575:125::-;34641:7;34670:24;34688:5;34670:24;:::i;:::-;34659:35;;34575:125;;;:::o;34706:126::-;34743:7;34783:42;34776:5;34772:54;34761:65;;34706:126;;;:::o;34838:77::-;34875:7;34904:5;34893:16;;34838:77;;;:::o;34921:154::-;35005:6;35000:3;34995;34982:30;35067:1;35058:6;35053:3;35049:16;35042:27;34921:154;;;:::o;35081:307::-;35149:1;35159:113;35173:6;35170:1;35167:13;35159:113;;;35258:1;35253:3;35249:11;35243:18;35239:1;35234:3;35230:11;35223:39;35195:2;35192:1;35188:10;35183:15;;35159:113;;;35290:6;35287:1;35284:13;35281:101;;;35370:1;35361:6;35356:3;35352:16;35345:27;35281:101;35130:258;35081:307;;;:::o;35394:320::-;35438:6;35475:1;35469:4;35465:12;35455:22;;35522:1;35516:4;35512:12;35543:18;35533:81;;35599:4;35591:6;35587:17;35577:27;;35533:81;35661:2;35653:6;35650:14;35630:18;35627:38;35624:84;;;35680:18;;:::i;:::-;35624:84;35445:269;35394:320;;;:::o;35720:281::-;35803:27;35825:4;35803:27;:::i;:::-;35795:6;35791:40;35933:6;35921:10;35918:22;35897:18;35885:10;35882:34;35879:62;35876:88;;;35944:18;;:::i;:::-;35876:88;35984:10;35980:2;35973:22;35763:238;35720:281;;:::o;36007:233::-;36046:3;36069:24;36087:5;36069:24;:::i;:::-;36060:33;;36115:66;36108:5;36105:77;36102:103;;;36185:18;;:::i;:::-;36102:103;36232:1;36225:5;36221:13;36214:20;;36007:233;;;:::o;36246:176::-;36278:1;36295:20;36313:1;36295:20;:::i;:::-;36290:25;;36329:20;36347:1;36329:20;:::i;:::-;36324:25;;36368:1;36358:35;;36373:18;;:::i;:::-;36358:35;36414:1;36411;36407:9;36402:14;;36246:176;;;;:::o;36428:180::-;36476:77;36473:1;36466:88;36573:4;36570:1;36563:15;36597:4;36594:1;36587:15;36614:180;36662:77;36659:1;36652:88;36759:4;36756:1;36749:15;36783:4;36780:1;36773:15;36800:180;36848:77;36845:1;36838:88;36945:4;36942:1;36935:15;36969:4;36966:1;36959:15;36986:180;37034:77;37031:1;37024:88;37131:4;37128:1;37121:15;37155:4;37152:1;37145:15;37172:180;37220:77;37217:1;37210:88;37317:4;37314:1;37307:15;37341:4;37338:1;37331:15;37358:117;37467:1;37464;37457:12;37481:117;37590:1;37587;37580:12;37604:117;37713:1;37710;37703:12;37727:117;37836:1;37833;37826:12;37850:102;37891:6;37942:2;37938:7;37933:2;37926:5;37922:14;37918:28;37908:38;;37850:102;;;:::o;37958:294::-;38098:34;38094:1;38086:6;38082:14;38075:58;38167:34;38162:2;38154:6;38150:15;38143:59;38236:8;38231:2;38223:6;38219:15;38212:33;37958:294;:::o;38258:237::-;38398:34;38394:1;38386:6;38382:14;38375:58;38467:20;38462:2;38454:6;38450:15;38443:45;38258:237;:::o;38501:225::-;38641:34;38637:1;38629:6;38625:14;38618:58;38710:8;38705:2;38697:6;38693:15;38686:33;38501:225;:::o;38732:178::-;38872:30;38868:1;38860:6;38856:14;38849:54;38732:178;:::o;38916:222::-;39056:34;39052:1;39044:6;39040:14;39033:58;39125:5;39120:2;39112:6;39108:15;39101:30;38916:222;:::o;39144:223::-;39284:34;39280:1;39272:6;39268:14;39261:58;39353:6;39348:2;39340:6;39336:15;39329:31;39144:223;:::o;39373:175::-;39513:27;39509:1;39501:6;39497:14;39490:51;39373:175;:::o;39554:245::-;39694:34;39690:1;39682:6;39678:14;39671:58;39763:28;39758:2;39750:6;39746:15;39739:53;39554:245;:::o;39805:231::-;39945:34;39941:1;39933:6;39929:14;39922:58;40014:14;40009:2;40001:6;39997:15;39990:39;39805:231;:::o;40042:243::-;40182:34;40178:1;40170:6;40166:14;40159:58;40251:26;40246:2;40238:6;40234:15;40227:51;40042:243;:::o;40291:229::-;40431:34;40427:1;40419:6;40415:14;40408:58;40500:12;40495:2;40487:6;40483:15;40476:37;40291:229;:::o;40526:228::-;40666:34;40662:1;40654:6;40650:14;40643:58;40735:11;40730:2;40722:6;40718:15;40711:36;40526:228;:::o;40760:229::-;40900:34;40896:1;40888:6;40884:14;40877:58;40969:12;40964:2;40956:6;40952:15;40945:37;40760:229;:::o;40995:182::-;41135:34;41131:1;41123:6;41119:14;41112:58;40995:182;:::o;41183:176::-;41323:28;41319:1;41311:6;41307:14;41300:52;41183:176;:::o;41365:181::-;41505:33;41501:1;41493:6;41489:14;41482:57;41365:181;:::o;41552:231::-;41692:34;41688:1;41680:6;41676:14;41669:58;41761:14;41756:2;41748:6;41744:15;41737:39;41552:231;:::o;41789:155::-;41929:7;41925:1;41917:6;41913:14;41906:31;41789:155;:::o;41950:182::-;42090:34;42086:1;42078:6;42074:14;42067:58;41950:182;:::o;42138:228::-;42278:34;42274:1;42266:6;42262:14;42255:58;42347:11;42342:2;42334:6;42330:15;42323:36;42138:228;:::o;42372:234::-;42512:34;42508:1;42500:6;42496:14;42489:58;42581:17;42576:2;42568:6;42564:15;42557:42;42372:234;:::o;42612:220::-;42752:34;42748:1;42740:6;42736:14;42729:58;42821:3;42816:2;42808:6;42804:15;42797:28;42612:220;:::o;42838:114::-;;:::o;42958:236::-;43098:34;43094:1;43086:6;43082:14;43075:58;43167:19;43162:2;43154:6;43150:15;43143:44;42958:236;:::o;43200:167::-;43340:19;43336:1;43328:6;43324:14;43317:43;43200:167;:::o;43373:122::-;43446:24;43464:5;43446:24;:::i;:::-;43439:5;43436:35;43426:63;;43485:1;43482;43475:12;43426:63;43373:122;:::o;43501:116::-;43571:21;43586:5;43571:21;:::i;:::-;43564:5;43561:32;43551:60;;43607:1;43604;43597:12;43551:60;43501:116;:::o;43623:120::-;43695:23;43712:5;43695:23;:::i;:::-;43688:5;43685:34;43675:62;;43733:1;43730;43723:12;43675:62;43623:120;:::o;43749:180::-;43851:53;43898:5;43851:53;:::i;:::-;43844:5;43841:64;43831:92;;43919:1;43916;43909:12;43831:92;43749:180;:::o;43935:122::-;44008:24;44026:5;44008:24;:::i;:::-;44001:5;43998:35;43988:63;;44047:1;44044;44037:12;43988:63;43935:122;:::o
Swarm Source
ipfs://ce9a3d114649710fdb4b6a682927036c32ab0b9efaf8c7fcfb97a4af382a6604
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.