Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 142 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer From | 23229862 | 161 days ago | IN | 0 ETH | 0.00007138 | ||||
| Set Approval For... | 19210777 | 723 days ago | IN | 0 ETH | 0.0009259 | ||||
| Set Approval For... | 19156317 | 730 days ago | IN | 0 ETH | 0.00045092 | ||||
| Set Approval For... | 19156317 | 730 days ago | IN | 0 ETH | 0.00044939 | ||||
| Set Approval For... | 19088843 | 740 days ago | IN | 0 ETH | 0.00040522 | ||||
| Set Approval For... | 16372445 | 1121 days ago | IN | 0 ETH | 0.00122654 | ||||
| Safe Transfer Fr... | 15434268 | 1254 days ago | IN | 0 ETH | 0.00088261 | ||||
| Safe Transfer Fr... | 15434265 | 1254 days ago | IN | 0 ETH | 0.0013044 | ||||
| Set Approval For... | 15270970 | 1280 days ago | IN | 0 ETH | 0.00163018 | ||||
| Set Approval For... | 15245599 | 1284 days ago | IN | 0 ETH | 0.00036072 | ||||
| Set Approval For... | 15184687 | 1294 days ago | IN | 0 ETH | 0.00055042 | ||||
| Set Approval For... | 15097322 | 1307 days ago | IN | 0 ETH | 0.00253274 | ||||
| Set Approval For... | 15094557 | 1308 days ago | IN | 0 ETH | 0.00063876 | ||||
| Set Approval For... | 15091142 | 1308 days ago | IN | 0 ETH | 0.00120206 | ||||
| Set Approval For... | 15061320 | 1313 days ago | IN | 0 ETH | 0.00050323 | ||||
| Withdraw | 15045311 | 1315 days ago | IN | 0 ETH | 0.00271439 | ||||
| Set Approval For... | 15042035 | 1316 days ago | IN | 0 ETH | 0.00116372 | ||||
| Set Approval For... | 15042031 | 1316 days ago | IN | 0 ETH | 0.00141218 | ||||
| Set Approval For... | 15009804 | 1322 days ago | IN | 0 ETH | 0.00078806 | ||||
| Set Approval For... | 15009802 | 1322 days ago | IN | 0 ETH | 0.00111884 | ||||
| Set Approval For... | 15008607 | 1322 days ago | IN | 0 ETH | 0.00275974 | ||||
| Private Sale Min... | 15007760 | 1322 days ago | IN | 0.17 ETH | 0.00310636 | ||||
| Private Sale Min... | 15007750 | 1322 days ago | IN | 0.17 ETH | 0.00499525 | ||||
| Set Approval For... | 15001311 | 1324 days ago | IN | 0 ETH | 0.00123521 | ||||
| Set Approval For... | 14995447 | 1325 days ago | IN | 0 ETH | 0.00103952 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PandaQ
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-05-30
*/
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: PandaQ.sol
pragma solidity >=0.8.2;
contract PandaQ is ERC721, Ownable {
using Strings for uint256;
//amount of tokens that have been minted so far, in total and in presale
uint256 private numberOfTotalTokens;
//declares the maximum amount of tokens that can be minted, total and in presale
uint256 private maxTotalTokens;
//initial part of the URI for the metadata
string private _currentBaseURI = "https://www.pandaq.io/metadata/";
//marks the timestamp of when the respective sales open
uint256 internal revealTime;
uint256 private reservedMints_;
uint256 private maxReservedMints = 100;
uint256 private privateSaleMints_;
uint256 private maxPrivateSaleMints = 1000;
//if breeding is open or not
bool private breeding;
//stores how many breeds each nft has done
mapping(uint256 => uint256) private breedsPerToken;
uint256 private maxBreeds = 5;
uint256 private mintCostPresale = 0.2 ether;
uint256 private mintCostPrivateSale = 0.17 ether;
uint256 private mintCostPublicSale = 0.25 ether;
uint256 private breedCost_ = 1 ether;
//amount of mints that each address has executed
mapping(address => uint256) public mintsPerAddress;
//current state os sale
enum State {
NoSale,
Presale,
PublicSale,
PrivateSale
}
State public saleState;
//defines the uri for when the NFTs have not been yet revealed
string public unrevealedURI;
//tokens that have been created from breeding
uint256 private tokensBreeded;
//declaring initial values for variables
constructor() ERC721("PandaQ", "PQ") {
maxTotalTokens = 8888;
unrevealedURI = "https://www.pandaq.io/unrevealed/";
}
//in case somebody accidentaly sends funds or transaction to contract
receive() external payable {}
fallback() external payable {
revert();
}
//visualize baseURI
function _baseURI() internal view virtual override returns (string memory) {
return _currentBaseURI;
}
//change baseURI in case needed for IPFS
function changeBaseURI(string memory baseURI_) public onlyOwner {
_currentBaseURI = baseURI_;
}
function changeUnrevealedURI(string memory unrevealedURI_)
public
onlyOwner
{
unrevealedURI = unrevealedURI_;
}
//gets the tokenID of NFT to be minted
function tokenId() internal view returns (uint256) {
uint256 currentId = numberOfTotalTokens;
bool exists = true;
while (exists) {
currentId += 1;
exists = _exists(currentId);
}
return currentId;
}
function switchToPresale() public onlyOwner {
require(saleState != State.Presale, "Sale is LIVE!");
saleState = State.Presale;
}
function switchToPublicSale() public onlyOwner {
require(saleState != State.PublicSale, "Sale is LIVE!");
saleState = State.PublicSale;
}
function switchToPrivateSale() public onlyOwner {
require(saleState != State.PrivateSale, "Sale is LIVE!");
saleState = State.PrivateSale;
}
//mint a @param number of NFTs in presale
function presaleMint(uint256 number) public payable {
require(saleState == State.Presale, "Pre-Sale in not opened yet!");
require(
numberOfTotalTokens + number <=
maxTotalTokens - (maxReservedMints - reservedMints_),
"Not enough NFTs left for minting..."
);
require(
msg.value >= mintCost() * number,
"You don't have enough Ethereum to mint this amount of NFTs"
);
for (uint256 i = 0; i < number; i++) {
uint256 tid = tokenId();
_safeMint(msg.sender, tid);
mintsPerAddress[msg.sender] += 1;
numberOfTotalTokens += 1;
}
}
//mint a @param number of NFTs in public sale
function publicSaleMint(uint256 number) public payable {
require(saleState == State.PublicSale, "Sale in not opened yet!");
require(
numberOfTotalTokens + number <=
maxTotalTokens - (maxReservedMints - reservedMints_),
"Not enough NFTs left for minting..."
);
require(
msg.value >= mintCost() * number,
"You don't have enough Ethereum to mint this amount of NFTs"
);
for (uint256 i = 0; i < number; i++) {
uint256 tid = tokenId();
_safeMint(msg.sender, tid);
mintsPerAddress[msg.sender] += 1;
numberOfTotalTokens += 1;
}
}
//mint a @param number of NFTs in private sale
function privateSaleMint(uint256 number) public payable {
require(saleState == State.PrivateSale, "Sale in not open!");
require(
numberOfTotalTokens + number <=
maxTotalTokens - (maxReservedMints - reservedMints_) &&
privateSaleMints_ + number <= maxPrivateSaleMints,
"Not enough NFTs left for minting..."
);
require(
msg.value >= mintCost() * number,
"You don't have enough Ethereum to mint this amount of NFTs"
);
for (uint256 i = 0; i < number; i++) {
uint256 tid = tokenId();
_safeMint(msg.sender, tid);
mintsPerAddress[msg.sender] += 1;
numberOfTotalTokens += 1;
privateSaleMints_ += 1;
}
}
//reserved NFTs for creator
function reservedMint(uint256 number, address recipient) public onlyOwner {
require(
reservedMints_ + number <= maxReservedMints,
"Not enough Reserved NFTs left for minting..."
);
for (uint256 i = 0; i < number; i++) {
uint256 tid = tokenId();
_safeMint(recipient, tid);
mintsPerAddress[recipient] += 1;
numberOfTotalTokens += 1;
reservedMints_ += 1;
}
}
function tokenURI(uint256 tokenId_)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId_),
"ERC721Metadata: URI query for nonexistent token"
);
//check to see that 24 hours have passed since beginning of publicsale launch
if (revealTime == 0) {
return
string(
abi.encodePacked(
unrevealedURI,
tokenId_.toString(),
".json"
)
);
} else {
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(
abi.encodePacked(baseURI, tokenId_.toString(), ".json")
)
: "";
}
}
//burn the tokens that have not been sold yet
function burnTokens() public onlyOwner {
maxTotalTokens =
numberOfTotalTokens +
(maxReservedMints - reservedMints_);
}
//se the current account balance
function accountBalance() public view onlyOwner returns (uint256) {
return address(this).balance;
}
//retrieve funds
function withdraw(address recipient, uint256 amount) public onlyOwner {
require(amount <= address(this).balance, "Incorrect amount");
_withdraw(payable(recipient), amount);
}
//send the percentage of funds to a shareholder´s wallet
function _withdraw(address payable account, uint256 amount) internal {
(bool sent, ) = account.call{value: amount}("");
require(sent, "Failed to send Ether");
}
//see the total amount of tokens that have been minted
function totalSupply() public view returns (uint256) {
return numberOfTotalTokens + tokensBreeded;
}
//to reveal the nfts
function reveal() public onlyOwner {
require(
revealTime == 0,
"Can only reveal when current state is unrevealed!"
);
revealTime = block.timestamp;
}
//shows total amount of tokens that could be minted
function maxTokens() public view returns (uint256) {
return maxTotalTokens;
}
function breed(uint256 tokenIdParent1, uint256 tokenIdParent2)
public
payable
{
require(breeding, "Breeding is currently not Open!");
require(
msg.sender == ownerOf(tokenIdParent1) &&
msg.sender == ownerOf(tokenIdParent2),
"Not the owner of this Token!"
);
require(msg.value >= breedCost(), "Insufficient Eth sent to breed!");
require(
breedsPerToken[tokenIdParent1] < maxBreeds &&
breedsPerToken[tokenIdParent2] < maxBreeds,
"Token has reached max breeds!"
);
_safeMint(msg.sender, maxTotalTokens + tokensBreeded + 1);
breedsPerToken[tokenIdParent1] += 1;
breedsPerToken[tokenIdParent2] += 1;
tokensBreeded += 1;
}
function toggleBreeding() public onlyOwner {
breeding = !breeding;
}
function breedIsOpen() public view returns (bool) {
return breeding;
}
function changeMaxBreeds(uint256 newBreeds) public onlyOwner {
maxBreeds = newBreeds;
}
function breedCost() public view returns (uint256) {
return breedCost_;
}
function changeBreedCost(uint256 newCost) public onlyOwner {
breedCost_ = newCost;
}
function mintCost() public view returns (uint256) {
if (saleState == State.NoSale || saleState == State.Presale) {
return mintCostPresale;
} else if (saleState == State.PrivateSale) {
return mintCostPrivateSale;
} else {
return mintCostPublicSale;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"accountBalance","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":"tokenIdParent1","type":"uint256"},{"internalType":"uint256","name":"tokenIdParent2","type":"uint256"}],"name":"breed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"breedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"breedIsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"changeBreedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBreeds","type":"uint256"}],"name":"changeMaxBreeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unrevealedURI_","type":"string"}],"name":"changeUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintsPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"privateSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"reservedMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum PandaQ.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"switchToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchToPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleBreeding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526040518060400160405280601f81526020017f68747470733a2f2f7777772e70616e6461712e696f2f6d657461646174612f0081525060099080519060200190620000519291906200026f565b506064600c556103e8600e5560056011556702c68af0bb14000060125567025bf6196bd100006013556703782dace9d90000601455670de0b6b3a76400006015553480156200009f57600080fd5b506040518060400160405280600681526020017f50616e64615100000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f50510000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001249291906200026f565b5080600190805190602001906200013d9291906200026f565b5050506200016062000154620001a160201b60201c565b620001a960201b60201c565b6122b86008819055506040518060600160405280602181526020016200582560219139601890805190602001906200019a9291906200026f565b5062000384565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027d906200031f565b90600052602060002090601f016020900481019282620002a15760008555620002ed565b82601f10620002bc57805160ff1916838001178555620002ed565b82800160010185558215620002ed579182015b82811115620002ec578251825591602001919060010190620002cf565b5b509050620002fc919062000300565b5090565b5b808211156200031b57600081600090555060010162000301565b5090565b600060028204905060018216806200033857607f821691505b602082108114156200034f576200034e62000355565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61549180620003946000396000f3fe60806040526004361061024a5760003560e01c80639295ae3f11610139578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c514610803578063eab4178214610840578063f2fde38b14610857578063f3169b8614610880578063f3fef3a314610897578063ff984994146108c057610251565b8063c87b56dd14610738578063c9b298f114610775578063d9ecad7b14610791578063dd78de7c146107ad578063e8315742146107d857610251565b8063b3ab66b0116100fd578063b3ab66b014610676578063b88d4fde14610692578063bdb4b848146106bb578063c4bd27f0146106e6578063c4d8b9df1461070f57610251565b80639295ae3f146105b757806395d89b41146105e0578063a22cb4651461060b578063a475b5dd14610634578063b0a1c1c41461064b57610251565b806339a0c6f9116101c75780636352211e1161018b5780636352211e146104d05780637035bf181461050d57806370a0823114610538578063715018a6146105755780638da5cb5b1461058c57610251565b806339a0c6f91461041157806342842e0e1461043a5780634895221b1461046357806354559a901461047a578063603f4d52146104a557610251565b806318160ddd1161020e57806318160ddd1461033b57806318df64031461036657806323b872dd1461038f5780633023eba6146103b8578063346f0d48146103f557610251565b806301ffc9a71461025657806306fdde031461029357806308003f78146102be578063081812fc146102d5578063095ea7b31461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bdf565b6108d7565b60405161028a91906143ab565b60405180910390f35b34801561029f57600080fd5b506102a86109b9565b6040516102b591906143e1565b60405180910390f35b3480156102ca57600080fd5b506102d3610a4b565b005b3480156102e157600080fd5b506102fc60048036038101906102f79190613c72565b610aec565b6040516103099190614344565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613ba3565b610b71565b005b34801561034757600080fd5b50610350610c89565b60405161035d91906147c3565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613c9b565b610ca0565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613a9d565b610e33565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613a38565b610e93565b6040516103ec91906147c3565b60405180910390f35b61040f600480360381019061040a9190613c72565b610eab565b005b34801561041d57600080fd5b5061043860048036038101906104339190613c31565b61110c565b005b34801561044657600080fd5b50610461600480360381019061045c9190613a9d565b6111a2565b005b34801561046f57600080fd5b506104786111c2565b005b34801561048657600080fd5b5061048f611353565b60405161049c91906147c3565b60405180910390f35b3480156104b157600080fd5b506104ba61135d565b6040516104c791906143c6565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613c72565b611370565b6040516105049190614344565b60405180910390f35b34801561051957600080fd5b50610522611422565b60405161052f91906143e1565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613a38565b6114b0565b60405161056c91906147c3565b60405180910390f35b34801561058157600080fd5b5061058a611568565b005b34801561059857600080fd5b506105a16115f0565b6040516105ae9190614344565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613c72565b61161a565b005b3480156105ec57600080fd5b506105f56116a0565b60405161060291906143e1565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613b67565b611732565b005b34801561064057600080fd5b50610649611748565b005b34801561065757600080fd5b50610660611812565b60405161066d91906147c3565b60405180910390f35b610690600480360381019061068b9190613c72565b611896565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613aec565b611ac3565b005b3480156106c757600080fd5b506106d0611b25565b6040516106dd91906147c3565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613c72565b611cdc565b005b34801561071b57600080fd5b5061073660048036038101906107319190613c31565b611d62565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613c72565b611df8565b60405161076c91906143e1565b60405180910390f35b61078f600480360381019061078a9190613c72565b611edd565b005b6107ab60048036038101906107a69190613cd7565b61210a565b005b3480156107b957600080fd5b506107c2612368565b6040516107cf91906143ab565b60405180910390f35b3480156107e457600080fd5b506107ed61237f565b6040516107fa91906147c3565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613a61565b612389565b60405161083791906143ab565b60405180910390f35b34801561084c57600080fd5b5061085561241d565b005b34801561086357600080fd5b5061087e60048036038101906108799190613a38565b6125af565b005b34801561088c57600080fd5b506108956126a7565b005b3480156108a357600080fd5b506108be60048036038101906108b99190613ba3565b61274f565b005b3480156108cc57600080fd5b506108d561281c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b257506109b1826129ae565b5b9050919050565b6060600080546109c890614ab8565b80601f01602080910402602001604051908101604052809291908181526020018280546109f490614ab8565b8015610a415780601f10610a1657610100808354040283529160200191610a41565b820191906000526020600020905b815481529060010190602001808311610a2457829003601f168201915b5050505050905090565b610a53612a18565b73ffffffffffffffffffffffffffffffffffffffff16610a716115f0565b73ffffffffffffffffffffffffffffffffffffffff1614610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90614683565b60405180910390fd5b600b54600c54610ad791906149a9565b600754610ae491906148c8565b600881905550565b6000610af782612a20565b610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90614663565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7c82611370565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490614723565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c0c612a18565b73ffffffffffffffffffffffffffffffffffffffff161480610c3b5750610c3a81610c35612a18565b612389565b5b610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190614583565b60405180910390fd5b610c848383612a8c565b505050565b6000601954600754610c9b91906148c8565b905090565b610ca8612a18565b73ffffffffffffffffffffffffffffffffffffffff16610cc66115f0565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614683565b60405180910390fd5b600c5482600b54610d2d91906148c8565b1115610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590614603565b60405180910390fd5b60005b82811015610e2e576000610d83612b45565b9050610d8f8382612b81565b6001601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ddf91906148c8565b92505081905550600160076000828254610df991906148c8565b925050819055506001600b6000828254610e1391906148c8565b92505081905550508080610e2690614b1b565b915050610d71565b505050565b610e44610e3e612a18565b82612b9f565b610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90614763565b60405180910390fd5b610e8e838383612c7d565b505050565b60166020528060005260406000206000915090505481565b600380811115610ee4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115610f2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390614403565b60405180910390fd5b600b54600c54610f7c91906149a9565b600854610f8991906149a9565b81600754610f9791906148c8565b11158015610fb45750600e5481600d54610fb191906148c8565b11155b610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906146e3565b60405180910390fd5b80610ffc611b25565b611006919061494f565b341015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906144a3565b60405180910390fd5b60005b8181101561110857600061105d612b45565b90506110693382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110b991906148c8565b925050819055506001600760008282546110d391906148c8565b925050819055506001600d60008282546110ed91906148c8565b9250508190555050808061110090614b1b565b91505061104b565b5050565b611114612a18565b73ffffffffffffffffffffffffffffffffffffffff166111326115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614683565b60405180910390fd5b806009908051906020019061119e92919061385c565b5050565b6111bd83838360405180602001604052806000815250611ac3565b505050565b6111ca612a18565b73ffffffffffffffffffffffffffffffffffffffff166111e86115f0565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590614683565b60405180910390fd5b600380811115611277577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff1660038111156112bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906145c3565b60405180910390fd5b6003601760006101000a81548160ff0219169083600381111561134c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b6000601554905090565b601760009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090614623565b60405180910390fd5b80915050919050565b6018805461142f90614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461145b90614ab8565b80156114a85780601f1061147d576101008083540402835291602001916114a8565b820191906000526020600020905b81548152906001019060200180831161148b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611518906145e3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611570612a18565b73ffffffffffffffffffffffffffffffffffffffff1661158e6115f0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614683565b60405180910390fd5b6115ee6000612ee4565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611622612a18565b73ffffffffffffffffffffffffffffffffffffffff166116406115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614683565b60405180910390fd5b8060158190555050565b6060600180546116af90614ab8565b80601f01602080910402602001604051908101604052809291908181526020018280546116db90614ab8565b80156117285780601f106116fd57610100808354040283529160200191611728565b820191906000526020600020905b81548152906001019060200180831161170b57829003601f168201915b5050505050905090565b61174461173d612a18565b8383612faa565b5050565b611750612a18565b73ffffffffffffffffffffffffffffffffffffffff1661176e6115f0565b73ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614683565b60405180910390fd5b6000600a5414611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906145a3565b60405180910390fd5b42600a81905550565b600061181c612a18565b73ffffffffffffffffffffffffffffffffffffffff1661183a6115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790614683565b60405180910390fd5b47905090565b600260038111156118d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611918577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614743565b60405180910390fd5b600b54600c5461196891906149a9565b60085461197591906149a9565b8160075461198391906148c8565b11156119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb906146e3565b60405180910390fd5b806119cd611b25565b6119d7919061494f565b341015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906144a3565b60405180910390fd5b60005b81811015611abf576000611a2e612b45565b9050611a3a3382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8a91906148c8565b92505081905550600160076000828254611aa491906148c8565b92505081905550508080611ab790614b1b565b915050611a1c565b5050565b611ad4611ace612a18565b83612b9f565b611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614763565b60405180910390fd5b611b1f84848484613117565b50505050565b6000806003811115611b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611ba8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480611c33575060016003811115611be9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611c31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b15611c42576012549050611cd9565b600380811115611c7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611cc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cd3576013549050611cd9565b60145490505b90565b611ce4612a18565b73ffffffffffffffffffffffffffffffffffffffff16611d026115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90614683565b60405180910390fd5b8060118190555050565b611d6a612a18565b73ffffffffffffffffffffffffffffffffffffffff16611d886115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614683565b60405180910390fd5b8060189080519060200190611df492919061385c565b5050565b6060611e0382612a20565b611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e39906146c3565b60405180910390fd5b6000600a541415611e7f576018611e5883613173565b604051602001611e69929190614300565b6040516020818303038152906040529050611ed8565b6000611e89613320565b90506000815111611ea95760405180602001604052806000815250611ed4565b80611eb384613173565b604051602001611ec49291906142d1565b6040516020818303038152906040525b9150505b919050565b60016003811115611f17577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611f5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614703565b60405180910390fd5b600b54600c54611faf91906149a9565b600854611fbc91906149a9565b81600754611fca91906148c8565b111561200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906146e3565b60405180910390fd5b80612014611b25565b61201e919061494f565b341015612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612057906144a3565b60405180910390fd5b60005b81811015612106576000612075612b45565b90506120813382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d191906148c8565b925050819055506001600760008282546120eb91906148c8565b925050819055505080806120fe90614b1b565b915050612063565b5050565b600f60009054906101000a900460ff16612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090614563565b60405180910390fd5b61216282611370565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156121cf57506121a081611370565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61220e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612205906144c3565b60405180910390fd5b612216611353565b341015612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90614783565b60405180910390fd5b601154601060008481526020019081526020016000205410801561229057506011546010600083815260200190815260200160002054105b6122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c6906146a3565b60405180910390fd5b6122f43360016019546008546122e591906148c8565b6122ef91906148c8565b612b81565b600160106000848152602001908152602001600020600082825461231891906148c8565b92505081905550600160106000838152602001908152602001600020600082825461234391906148c8565b9250508190555060016019600082825461235d91906148c8565b925050819055505050565b6000600f60009054906101000a900460ff16905090565b6000600854905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612425612a18565b73ffffffffffffffffffffffffffffffffffffffff166124436115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614683565b60405180910390fd5b600160038111156124d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff16600381111561251b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561255c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612553906145c3565b60405180910390fd5b6001601760006101000a81548160ff021916908360038111156125a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b6125b7612a18565b73ffffffffffffffffffffffffffffffffffffffff166125d56115f0565b73ffffffffffffffffffffffffffffffffffffffff161461262b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262290614683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290614443565b60405180910390fd5b6126a481612ee4565b50565b6126af612a18565b73ffffffffffffffffffffffffffffffffffffffff166126cd6115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614683565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b612757612a18565b73ffffffffffffffffffffffffffffffffffffffff166127756115f0565b73ffffffffffffffffffffffffffffffffffffffff16146127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290614683565b60405180910390fd5b4781111561280e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612805906147a3565b60405180910390fd5b61281882826133b2565b5050565b612824612a18565b73ffffffffffffffffffffffffffffffffffffffff166128426115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90614683565b60405180910390fd5b600260038111156128d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff16600381111561291a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561295b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612952906145c3565b60405180910390fd5b6002601760006101000a81548160ff021916908360038111156129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612aff83611370565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060075490506000600190505b8015612b7957600182612b6791906148c8565b9150612b7282612a20565b9050612b54565b819250505090565b612b9b828260405180602001604052806000815250613463565b5050565b6000612baa82612a20565b612be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be090614543565b60405180910390fd5b6000612bf483611370565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c365750612c358185612389565b5b80612c7457508373ffffffffffffffffffffffffffffffffffffffff16612c5c84610aec565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c9d82611370565b73ffffffffffffffffffffffffffffffffffffffff1614612cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cea90614463565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90614503565b60405180910390fd5b612d6e8383836134be565b612d79600082612a8c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc991906149a9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e2091906148c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612edf8383836134c3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301090614523565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161310a91906143ab565b60405180910390a3505050565b613122848484612c7d565b61312e848484846134c8565b61316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316490614423565b60405180910390fd5b50505050565b606060008214156131bb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061331b565b600082905060005b600082146131ed5780806131d690614b1b565b915050600a826131e6919061491e565b91506131c3565b60008167ffffffffffffffff81111561322f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132615781602001600182028036833780820191505090505b5090505b600085146133145760018261327a91906149a9565b9150600a856132899190614b64565b603061329591906148c8565b60f81b8183815181106132d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561330d919061491e565b9450613265565b8093505050505b919050565b60606009805461332f90614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461335b90614ab8565b80156133a85780601f1061337d576101008083540402835291602001916133a8565b820191906000526020600020905b81548152906001019060200180831161338b57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516133d89061432f565b60006040518083038185875af1925050503d8060008114613415576040519150601f19603f3d011682016040523d82523d6000602084013e61341a565b606091505b505090508061345e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613455906144e3565b60405180910390fd5b505050565b61346d838361365f565b61347a60008484846134c8565b6134b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b090614423565b60405180910390fd5b505050565b505050565b505050565b60006134e98473ffffffffffffffffffffffffffffffffffffffff16613839565b15613652578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613512612a18565b8786866040518563ffffffff1660e01b8152600401613534949392919061435f565b602060405180830381600087803b15801561354e57600080fd5b505af192505050801561357f57506040513d601f19601f8201168201806040525081019061357c9190613c08565b60015b613602573d80600081146135af576040519150601f19603f3d011682016040523d82523d6000602084013e6135b4565b606091505b506000815114156135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f190614423565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613657565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c690614643565b60405180910390fd5b6136d881612a20565b15613718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370f90614483565b60405180910390fd5b613724600083836134be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377491906148c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613835600083836134c3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461386890614ab8565b90600052602060002090601f01602090048101928261388a57600085556138d1565b82601f106138a357805160ff19168380011785556138d1565b828001600101855582156138d1579182015b828111156138d05782518255916020019190600101906138b5565b5b5090506138de91906138e2565b5090565b5b808211156138fb5760008160009055506001016138e3565b5090565b600061391261390d84614803565b6147de565b90508281526020810184848401111561392a57600080fd5b613935848285614a76565b509392505050565b600061395061394b84614834565b6147de565b90508281526020810184848401111561396857600080fd5b613973848285614a76565b509392505050565b60008135905061398a816153ff565b92915050565b60008135905061399f81615416565b92915050565b6000813590506139b48161542d565b92915050565b6000815190506139c98161542d565b92915050565b600082601f8301126139e057600080fd5b81356139f08482602086016138ff565b91505092915050565b600082601f830112613a0a57600080fd5b8135613a1a84826020860161393d565b91505092915050565b600081359050613a3281615444565b92915050565b600060208284031215613a4a57600080fd5b6000613a588482850161397b565b91505092915050565b60008060408385031215613a7457600080fd5b6000613a828582860161397b565b9250506020613a938582860161397b565b9150509250929050565b600080600060608486031215613ab257600080fd5b6000613ac08682870161397b565b9350506020613ad18682870161397b565b9250506040613ae286828701613a23565b9150509250925092565b60008060008060808587031215613b0257600080fd5b6000613b108782880161397b565b9450506020613b218782880161397b565b9350506040613b3287828801613a23565b925050606085013567ffffffffffffffff811115613b4f57600080fd5b613b5b878288016139cf565b91505092959194509250565b60008060408385031215613b7a57600080fd5b6000613b888582860161397b565b9250506020613b9985828601613990565b9150509250929050565b60008060408385031215613bb657600080fd5b6000613bc48582860161397b565b9250506020613bd585828601613a23565b9150509250929050565b600060208284031215613bf157600080fd5b6000613bff848285016139a5565b91505092915050565b600060208284031215613c1a57600080fd5b6000613c28848285016139ba565b91505092915050565b600060208284031215613c4357600080fd5b600082013567ffffffffffffffff811115613c5d57600080fd5b613c69848285016139f9565b91505092915050565b600060208284031215613c8457600080fd5b6000613c9284828501613a23565b91505092915050565b60008060408385031215613cae57600080fd5b6000613cbc85828601613a23565b9250506020613ccd8582860161397b565b9150509250929050565b60008060408385031215613cea57600080fd5b6000613cf885828601613a23565b9250506020613d0985828601613a23565b9150509250929050565b613d1c816149dd565b82525050565b613d2b816149ef565b82525050565b6000613d3c8261487a565b613d468185614890565b9350613d56818560208601614a85565b613d5f81614c80565b840191505092915050565b613d7381614a64565b82525050565b6000613d8482614885565b613d8e81856148ac565b9350613d9e818560208601614a85565b613da781614c80565b840191505092915050565b6000613dbd82614885565b613dc781856148bd565b9350613dd7818560208601614a85565b80840191505092915050565b60008154613df081614ab8565b613dfa81866148bd565b94506001821660008114613e155760018114613e2657613e59565b60ff19831686528186019350613e59565b613e2f85614865565b60005b83811015613e5157815481890152600182019150602081019050613e32565b838801955050505b50505092915050565b6000613e6f6011836148ac565b9150613e7a82614c91565b602082019050919050565b6000613e926032836148ac565b9150613e9d82614cba565b604082019050919050565b6000613eb56026836148ac565b9150613ec082614d09565b604082019050919050565b6000613ed86025836148ac565b9150613ee382614d58565b604082019050919050565b6000613efb601c836148ac565b9150613f0682614da7565b602082019050919050565b6000613f1e603a836148ac565b9150613f2982614dd0565b604082019050919050565b6000613f41601c836148ac565b9150613f4c82614e1f565b602082019050919050565b6000613f646014836148ac565b9150613f6f82614e48565b602082019050919050565b6000613f876024836148ac565b9150613f9282614e71565b604082019050919050565b6000613faa6019836148ac565b9150613fb582614ec0565b602082019050919050565b6000613fcd602c836148ac565b9150613fd882614ee9565b604082019050919050565b6000613ff0601f836148ac565b9150613ffb82614f38565b602082019050919050565b60006140136038836148ac565b915061401e82614f61565b604082019050919050565b60006140366031836148ac565b915061404182614fb0565b604082019050919050565b6000614059600d836148ac565b915061406482614fff565b602082019050919050565b600061407c602a836148ac565b915061408782615028565b604082019050919050565b600061409f602c836148ac565b91506140aa82615077565b604082019050919050565b60006140c26029836148ac565b91506140cd826150c6565b604082019050919050565b60006140e56020836148ac565b91506140f082615115565b602082019050919050565b6000614108602c836148ac565b91506141138261513e565b604082019050919050565b600061412b6005836148bd565b91506141368261518d565b600582019050919050565b600061414e6020836148ac565b9150614159826151b6565b602082019050919050565b6000614171601d836148ac565b915061417c826151df565b602082019050919050565b6000614194602f836148ac565b915061419f82615208565b604082019050919050565b60006141b76023836148ac565b91506141c282615257565b604082019050919050565b60006141da601b836148ac565b91506141e5826152a6565b602082019050919050565b60006141fd6021836148ac565b9150614208826152cf565b604082019050919050565b60006142206017836148ac565b915061422b8261531e565b602082019050919050565b60006142436000836148a1565b915061424e82615347565b600082019050919050565b60006142666031836148ac565b91506142718261534a565b604082019050919050565b6000614289601f836148ac565b915061429482615399565b602082019050919050565b60006142ac6010836148ac565b91506142b7826153c2565b602082019050919050565b6142cb81614a5a565b82525050565b60006142dd8285613db2565b91506142e98284613db2565b91506142f48261411e565b91508190509392505050565b600061430c8285613de3565b91506143188284613db2565b91506143238261411e565b91508190509392505050565b600061433a82614236565b9150819050919050565b60006020820190506143596000830184613d13565b92915050565b60006080820190506143746000830187613d13565b6143816020830186613d13565b61438e60408301856142c2565b81810360608301526143a08184613d31565b905095945050505050565b60006020820190506143c06000830184613d22565b92915050565b60006020820190506143db6000830184613d6a565b92915050565b600060208201905081810360008301526143fb8184613d79565b905092915050565b6000602082019050818103600083015261441c81613e62565b9050919050565b6000602082019050818103600083015261443c81613e85565b9050919050565b6000602082019050818103600083015261445c81613ea8565b9050919050565b6000602082019050818103600083015261447c81613ecb565b9050919050565b6000602082019050818103600083015261449c81613eee565b9050919050565b600060208201905081810360008301526144bc81613f11565b9050919050565b600060208201905081810360008301526144dc81613f34565b9050919050565b600060208201905081810360008301526144fc81613f57565b9050919050565b6000602082019050818103600083015261451c81613f7a565b9050919050565b6000602082019050818103600083015261453c81613f9d565b9050919050565b6000602082019050818103600083015261455c81613fc0565b9050919050565b6000602082019050818103600083015261457c81613fe3565b9050919050565b6000602082019050818103600083015261459c81614006565b9050919050565b600060208201905081810360008301526145bc81614029565b9050919050565b600060208201905081810360008301526145dc8161404c565b9050919050565b600060208201905081810360008301526145fc8161406f565b9050919050565b6000602082019050818103600083015261461c81614092565b9050919050565b6000602082019050818103600083015261463c816140b5565b9050919050565b6000602082019050818103600083015261465c816140d8565b9050919050565b6000602082019050818103600083015261467c816140fb565b9050919050565b6000602082019050818103600083015261469c81614141565b9050919050565b600060208201905081810360008301526146bc81614164565b9050919050565b600060208201905081810360008301526146dc81614187565b9050919050565b600060208201905081810360008301526146fc816141aa565b9050919050565b6000602082019050818103600083015261471c816141cd565b9050919050565b6000602082019050818103600083015261473c816141f0565b9050919050565b6000602082019050818103600083015261475c81614213565b9050919050565b6000602082019050818103600083015261477c81614259565b9050919050565b6000602082019050818103600083015261479c8161427c565b9050919050565b600060208201905081810360008301526147bc8161429f565b9050919050565b60006020820190506147d860008301846142c2565b92915050565b60006147e86147f9565b90506147f48282614aea565b919050565b6000604051905090565b600067ffffffffffffffff82111561481e5761481d614c51565b5b61482782614c80565b9050602081019050919050565b600067ffffffffffffffff82111561484f5761484e614c51565b5b61485882614c80565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148d382614a5a565b91506148de83614a5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561491357614912614b95565b5b828201905092915050565b600061492982614a5a565b915061493483614a5a565b92508261494457614943614bc4565b5b828204905092915050565b600061495a82614a5a565b915061496583614a5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499e5761499d614b95565b5b828202905092915050565b60006149b482614a5a565b91506149bf83614a5a565b9250828210156149d2576149d1614b95565b5b828203905092915050565b60006149e882614a3a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614a35826153eb565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614a6f82614a27565b9050919050565b82818337600083830152505050565b60005b83811015614aa3578082015181840152602081019050614a88565b83811115614ab2576000848401525b50505050565b60006002820490506001821680614ad057607f821691505b60208210811415614ae457614ae3614c22565b5b50919050565b614af382614c80565b810181811067ffffffffffffffff82111715614b1257614b11614c51565b5b80604052505050565b6000614b2682614a5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b5957614b58614b95565b5b600182019050919050565b6000614b6f82614a5a565b9150614b7a83614a5a565b925082614b8a57614b89614bc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53616c6520696e206e6f74206f70656e21000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520646f6e2774206861766520656e6f75676820457468657265756d207460008201527f6f206d696e74207468697320616d6f756e74206f66204e465473000000000000602082015250565b7f4e6f7420746865206f776e6572206f66207468697320546f6b656e2100000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4272656564696e672069732063757272656e746c79206e6f74204f70656e2100600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c792072657665616c207768656e2063757272656e742073746160008201527f746520697320756e72657665616c656421000000000000000000000000000000602082015250565b7f53616c65206973204c4956452100000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768205265736572766564204e465473206c65667420666f60008201527f72206d696e74696e672e2e2e0000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e206861732072656163686564206d61782062726565647321000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204e465473206c65667420666f72206d696e74696e6760008201527f2e2e2e0000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d53616c6520696e206e6f74206f70656e656420796574210000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e65642079657421000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e74204574682073656e7420746f2062726565642100600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b600481106153fc576153fb614bf3565b5b50565b615408816149dd565b811461541357600080fd5b50565b61541f816149ef565b811461542a57600080fd5b50565b615436816149fb565b811461544157600080fd5b50565b61544d81614a5a565b811461545857600080fd5b5056fea26469706673582212204d1bc6a09115dea95fd0118fc3549799442e6f5cbb949427d744bbc625ddd79664736f6c6343000802003368747470733a2f2f7777772e70616e6461712e696f2f756e72657665616c65642f
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80639295ae3f11610139578063c87b56dd116100b6578063e985e9c51161007a578063e985e9c514610803578063eab4178214610840578063f2fde38b14610857578063f3169b8614610880578063f3fef3a314610897578063ff984994146108c057610251565b8063c87b56dd14610738578063c9b298f114610775578063d9ecad7b14610791578063dd78de7c146107ad578063e8315742146107d857610251565b8063b3ab66b0116100fd578063b3ab66b014610676578063b88d4fde14610692578063bdb4b848146106bb578063c4bd27f0146106e6578063c4d8b9df1461070f57610251565b80639295ae3f146105b757806395d89b41146105e0578063a22cb4651461060b578063a475b5dd14610634578063b0a1c1c41461064b57610251565b806339a0c6f9116101c75780636352211e1161018b5780636352211e146104d05780637035bf181461050d57806370a0823114610538578063715018a6146105755780638da5cb5b1461058c57610251565b806339a0c6f91461041157806342842e0e1461043a5780634895221b1461046357806354559a901461047a578063603f4d52146104a557610251565b806318160ddd1161020e57806318160ddd1461033b57806318df64031461036657806323b872dd1461038f5780633023eba6146103b8578063346f0d48146103f557610251565b806301ffc9a71461025657806306fdde031461029357806308003f78146102be578063081812fc146102d5578063095ea7b31461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190613bdf565b6108d7565b60405161028a91906143ab565b60405180910390f35b34801561029f57600080fd5b506102a86109b9565b6040516102b591906143e1565b60405180910390f35b3480156102ca57600080fd5b506102d3610a4b565b005b3480156102e157600080fd5b506102fc60048036038101906102f79190613c72565b610aec565b6040516103099190614344565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613ba3565b610b71565b005b34801561034757600080fd5b50610350610c89565b60405161035d91906147c3565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613c9b565b610ca0565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613a9d565b610e33565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613a38565b610e93565b6040516103ec91906147c3565b60405180910390f35b61040f600480360381019061040a9190613c72565b610eab565b005b34801561041d57600080fd5b5061043860048036038101906104339190613c31565b61110c565b005b34801561044657600080fd5b50610461600480360381019061045c9190613a9d565b6111a2565b005b34801561046f57600080fd5b506104786111c2565b005b34801561048657600080fd5b5061048f611353565b60405161049c91906147c3565b60405180910390f35b3480156104b157600080fd5b506104ba61135d565b6040516104c791906143c6565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613c72565b611370565b6040516105049190614344565b60405180910390f35b34801561051957600080fd5b50610522611422565b60405161052f91906143e1565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613a38565b6114b0565b60405161056c91906147c3565b60405180910390f35b34801561058157600080fd5b5061058a611568565b005b34801561059857600080fd5b506105a16115f0565b6040516105ae9190614344565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613c72565b61161a565b005b3480156105ec57600080fd5b506105f56116a0565b60405161060291906143e1565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613b67565b611732565b005b34801561064057600080fd5b50610649611748565b005b34801561065757600080fd5b50610660611812565b60405161066d91906147c3565b60405180910390f35b610690600480360381019061068b9190613c72565b611896565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613aec565b611ac3565b005b3480156106c757600080fd5b506106d0611b25565b6040516106dd91906147c3565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613c72565b611cdc565b005b34801561071b57600080fd5b5061073660048036038101906107319190613c31565b611d62565b005b34801561074457600080fd5b5061075f600480360381019061075a9190613c72565b611df8565b60405161076c91906143e1565b60405180910390f35b61078f600480360381019061078a9190613c72565b611edd565b005b6107ab60048036038101906107a69190613cd7565b61210a565b005b3480156107b957600080fd5b506107c2612368565b6040516107cf91906143ab565b60405180910390f35b3480156107e457600080fd5b506107ed61237f565b6040516107fa91906147c3565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613a61565b612389565b60405161083791906143ab565b60405180910390f35b34801561084c57600080fd5b5061085561241d565b005b34801561086357600080fd5b5061087e60048036038101906108799190613a38565b6125af565b005b34801561088c57600080fd5b506108956126a7565b005b3480156108a357600080fd5b506108be60048036038101906108b99190613ba3565b61274f565b005b3480156108cc57600080fd5b506108d561281c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b257506109b1826129ae565b5b9050919050565b6060600080546109c890614ab8565b80601f01602080910402602001604051908101604052809291908181526020018280546109f490614ab8565b8015610a415780601f10610a1657610100808354040283529160200191610a41565b820191906000526020600020905b815481529060010190602001808311610a2457829003601f168201915b5050505050905090565b610a53612a18565b73ffffffffffffffffffffffffffffffffffffffff16610a716115f0565b73ffffffffffffffffffffffffffffffffffffffff1614610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe90614683565b60405180910390fd5b600b54600c54610ad791906149a9565b600754610ae491906148c8565b600881905550565b6000610af782612a20565b610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90614663565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7c82611370565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be490614723565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c0c612a18565b73ffffffffffffffffffffffffffffffffffffffff161480610c3b5750610c3a81610c35612a18565b612389565b5b610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190614583565b60405180910390fd5b610c848383612a8c565b505050565b6000601954600754610c9b91906148c8565b905090565b610ca8612a18565b73ffffffffffffffffffffffffffffffffffffffff16610cc66115f0565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390614683565b60405180910390fd5b600c5482600b54610d2d91906148c8565b1115610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590614603565b60405180910390fd5b60005b82811015610e2e576000610d83612b45565b9050610d8f8382612b81565b6001601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ddf91906148c8565b92505081905550600160076000828254610df991906148c8565b925050819055506001600b6000828254610e1391906148c8565b92505081905550508080610e2690614b1b565b915050610d71565b505050565b610e44610e3e612a18565b82612b9f565b610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90614763565b60405180910390fd5b610e8e838383612c7d565b505050565b60166020528060005260406000206000915090505481565b600380811115610ee4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115610f2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390614403565b60405180910390fd5b600b54600c54610f7c91906149a9565b600854610f8991906149a9565b81600754610f9791906148c8565b11158015610fb45750600e5481600d54610fb191906148c8565b11155b610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea906146e3565b60405180910390fd5b80610ffc611b25565b611006919061494f565b341015611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f906144a3565b60405180910390fd5b60005b8181101561110857600061105d612b45565b90506110693382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110b991906148c8565b925050819055506001600760008282546110d391906148c8565b925050819055506001600d60008282546110ed91906148c8565b9250508190555050808061110090614b1b565b91505061104b565b5050565b611114612a18565b73ffffffffffffffffffffffffffffffffffffffff166111326115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614683565b60405180910390fd5b806009908051906020019061119e92919061385c565b5050565b6111bd83838360405180602001604052806000815250611ac3565b505050565b6111ca612a18565b73ffffffffffffffffffffffffffffffffffffffff166111e86115f0565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590614683565b60405180910390fd5b600380811115611277577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff1660038111156112bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906145c3565b60405180910390fd5b6003601760006101000a81548160ff0219169083600381111561134c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b6000601554905090565b601760009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090614623565b60405180910390fd5b80915050919050565b6018805461142f90614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461145b90614ab8565b80156114a85780601f1061147d576101008083540402835291602001916114a8565b820191906000526020600020905b81548152906001019060200180831161148b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611518906145e3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611570612a18565b73ffffffffffffffffffffffffffffffffffffffff1661158e6115f0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90614683565b60405180910390fd5b6115ee6000612ee4565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611622612a18565b73ffffffffffffffffffffffffffffffffffffffff166116406115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614683565b60405180910390fd5b8060158190555050565b6060600180546116af90614ab8565b80601f01602080910402602001604051908101604052809291908181526020018280546116db90614ab8565b80156117285780601f106116fd57610100808354040283529160200191611728565b820191906000526020600020905b81548152906001019060200180831161170b57829003601f168201915b5050505050905090565b61174461173d612a18565b8383612faa565b5050565b611750612a18565b73ffffffffffffffffffffffffffffffffffffffff1661176e6115f0565b73ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90614683565b60405180910390fd5b6000600a5414611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906145a3565b60405180910390fd5b42600a81905550565b600061181c612a18565b73ffffffffffffffffffffffffffffffffffffffff1661183a6115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790614683565b60405180910390fd5b47905090565b600260038111156118d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611918577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614743565b60405180910390fd5b600b54600c5461196891906149a9565b60085461197591906149a9565b8160075461198391906148c8565b11156119c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bb906146e3565b60405180910390fd5b806119cd611b25565b6119d7919061494f565b341015611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a10906144a3565b60405180910390fd5b60005b81811015611abf576000611a2e612b45565b9050611a3a3382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8a91906148c8565b92505081905550600160076000828254611aa491906148c8565b92505081905550508080611ab790614b1b565b915050611a1c565b5050565b611ad4611ace612a18565b83612b9f565b611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614763565b60405180910390fd5b611b1f84848484613117565b50505050565b6000806003811115611b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611ba8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1480611c33575060016003811115611be9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611c31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b145b15611c42576012549050611cd9565b600380811115611c7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611cc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cd3576013549050611cd9565b60145490505b90565b611ce4612a18565b73ffffffffffffffffffffffffffffffffffffffff16611d026115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90614683565b60405180910390fd5b8060118190555050565b611d6a612a18565b73ffffffffffffffffffffffffffffffffffffffff16611d886115f0565b73ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614683565b60405180910390fd5b8060189080519060200190611df492919061385c565b5050565b6060611e0382612a20565b611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e39906146c3565b60405180910390fd5b6000600a541415611e7f576018611e5883613173565b604051602001611e69929190614300565b6040516020818303038152906040529050611ed8565b6000611e89613320565b90506000815111611ea95760405180602001604052806000815250611ed4565b80611eb384613173565b604051602001611ec49291906142d1565b6040516020818303038152906040525b9150505b919050565b60016003811115611f17577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff166003811115611f5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614703565b60405180910390fd5b600b54600c54611faf91906149a9565b600854611fbc91906149a9565b81600754611fca91906148c8565b111561200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906146e3565b60405180910390fd5b80612014611b25565b61201e919061494f565b341015612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612057906144a3565b60405180910390fd5b60005b81811015612106576000612075612b45565b90506120813382612b81565b6001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120d191906148c8565b925050819055506001600760008282546120eb91906148c8565b925050819055505080806120fe90614b1b565b915050612063565b5050565b600f60009054906101000a900460ff16612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215090614563565b60405180910390fd5b61216282611370565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156121cf57506121a081611370565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61220e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612205906144c3565b60405180910390fd5b612216611353565b341015612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90614783565b60405180910390fd5b601154601060008481526020019081526020016000205410801561229057506011546010600083815260200190815260200160002054105b6122cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c6906146a3565b60405180910390fd5b6122f43360016019546008546122e591906148c8565b6122ef91906148c8565b612b81565b600160106000848152602001908152602001600020600082825461231891906148c8565b92505081905550600160106000838152602001908152602001600020600082825461234391906148c8565b9250508190555060016019600082825461235d91906148c8565b925050819055505050565b6000600f60009054906101000a900460ff16905090565b6000600854905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612425612a18565b73ffffffffffffffffffffffffffffffffffffffff166124436115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614683565b60405180910390fd5b600160038111156124d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff16600381111561251b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561255c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612553906145c3565b60405180910390fd5b6001601760006101000a81548160ff021916908360038111156125a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b6125b7612a18565b73ffffffffffffffffffffffffffffffffffffffff166125d56115f0565b73ffffffffffffffffffffffffffffffffffffffff161461262b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262290614683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269290614443565b60405180910390fd5b6126a481612ee4565b50565b6126af612a18565b73ffffffffffffffffffffffffffffffffffffffff166126cd6115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614683565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b612757612a18565b73ffffffffffffffffffffffffffffffffffffffff166127756115f0565b73ffffffffffffffffffffffffffffffffffffffff16146127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290614683565b60405180910390fd5b4781111561280e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612805906147a3565b60405180910390fd5b61281882826133b2565b5050565b612824612a18565b73ffffffffffffffffffffffffffffffffffffffff166128426115f0565b73ffffffffffffffffffffffffffffffffffffffff1614612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90614683565b60405180910390fd5b600260038111156128d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601760009054906101000a900460ff16600381111561291a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561295b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612952906145c3565b60405180910390fd5b6002601760006101000a81548160ff021916908360038111156129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612aff83611370565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060075490506000600190505b8015612b7957600182612b6791906148c8565b9150612b7282612a20565b9050612b54565b819250505090565b612b9b828260405180602001604052806000815250613463565b5050565b6000612baa82612a20565b612be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be090614543565b60405180910390fd5b6000612bf483611370565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c365750612c358185612389565b5b80612c7457508373ffffffffffffffffffffffffffffffffffffffff16612c5c84610aec565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c9d82611370565b73ffffffffffffffffffffffffffffffffffffffff1614612cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cea90614463565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90614503565b60405180910390fd5b612d6e8383836134be565b612d79600082612a8c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc991906149a9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e2091906148c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612edf8383836134c3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301090614523565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161310a91906143ab565b60405180910390a3505050565b613122848484612c7d565b61312e848484846134c8565b61316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316490614423565b60405180910390fd5b50505050565b606060008214156131bb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061331b565b600082905060005b600082146131ed5780806131d690614b1b565b915050600a826131e6919061491e565b91506131c3565b60008167ffffffffffffffff81111561322f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132615781602001600182028036833780820191505090505b5090505b600085146133145760018261327a91906149a9565b9150600a856132899190614b64565b603061329591906148c8565b60f81b8183815181106132d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561330d919061491e565b9450613265565b8093505050505b919050565b60606009805461332f90614ab8565b80601f016020809104026020016040519081016040528092919081815260200182805461335b90614ab8565b80156133a85780601f1061337d576101008083540402835291602001916133a8565b820191906000526020600020905b81548152906001019060200180831161338b57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516133d89061432f565b60006040518083038185875af1925050503d8060008114613415576040519150601f19603f3d011682016040523d82523d6000602084013e61341a565b606091505b505090508061345e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613455906144e3565b60405180910390fd5b505050565b61346d838361365f565b61347a60008484846134c8565b6134b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b090614423565b60405180910390fd5b505050565b505050565b505050565b60006134e98473ffffffffffffffffffffffffffffffffffffffff16613839565b15613652578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613512612a18565b8786866040518563ffffffff1660e01b8152600401613534949392919061435f565b602060405180830381600087803b15801561354e57600080fd5b505af192505050801561357f57506040513d601f19601f8201168201806040525081019061357c9190613c08565b60015b613602573d80600081146135af576040519150601f19603f3d011682016040523d82523d6000602084013e6135b4565b606091505b506000815114156135fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f190614423565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613657565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c690614643565b60405180910390fd5b6136d881612a20565b15613718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370f90614483565b60405180910390fd5b613724600083836134be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461377491906148c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613835600083836134c3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461386890614ab8565b90600052602060002090601f01602090048101928261388a57600085556138d1565b82601f106138a357805160ff19168380011785556138d1565b828001600101855582156138d1579182015b828111156138d05782518255916020019190600101906138b5565b5b5090506138de91906138e2565b5090565b5b808211156138fb5760008160009055506001016138e3565b5090565b600061391261390d84614803565b6147de565b90508281526020810184848401111561392a57600080fd5b613935848285614a76565b509392505050565b600061395061394b84614834565b6147de565b90508281526020810184848401111561396857600080fd5b613973848285614a76565b509392505050565b60008135905061398a816153ff565b92915050565b60008135905061399f81615416565b92915050565b6000813590506139b48161542d565b92915050565b6000815190506139c98161542d565b92915050565b600082601f8301126139e057600080fd5b81356139f08482602086016138ff565b91505092915050565b600082601f830112613a0a57600080fd5b8135613a1a84826020860161393d565b91505092915050565b600081359050613a3281615444565b92915050565b600060208284031215613a4a57600080fd5b6000613a588482850161397b565b91505092915050565b60008060408385031215613a7457600080fd5b6000613a828582860161397b565b9250506020613a938582860161397b565b9150509250929050565b600080600060608486031215613ab257600080fd5b6000613ac08682870161397b565b9350506020613ad18682870161397b565b9250506040613ae286828701613a23565b9150509250925092565b60008060008060808587031215613b0257600080fd5b6000613b108782880161397b565b9450506020613b218782880161397b565b9350506040613b3287828801613a23565b925050606085013567ffffffffffffffff811115613b4f57600080fd5b613b5b878288016139cf565b91505092959194509250565b60008060408385031215613b7a57600080fd5b6000613b888582860161397b565b9250506020613b9985828601613990565b9150509250929050565b60008060408385031215613bb657600080fd5b6000613bc48582860161397b565b9250506020613bd585828601613a23565b9150509250929050565b600060208284031215613bf157600080fd5b6000613bff848285016139a5565b91505092915050565b600060208284031215613c1a57600080fd5b6000613c28848285016139ba565b91505092915050565b600060208284031215613c4357600080fd5b600082013567ffffffffffffffff811115613c5d57600080fd5b613c69848285016139f9565b91505092915050565b600060208284031215613c8457600080fd5b6000613c9284828501613a23565b91505092915050565b60008060408385031215613cae57600080fd5b6000613cbc85828601613a23565b9250506020613ccd8582860161397b565b9150509250929050565b60008060408385031215613cea57600080fd5b6000613cf885828601613a23565b9250506020613d0985828601613a23565b9150509250929050565b613d1c816149dd565b82525050565b613d2b816149ef565b82525050565b6000613d3c8261487a565b613d468185614890565b9350613d56818560208601614a85565b613d5f81614c80565b840191505092915050565b613d7381614a64565b82525050565b6000613d8482614885565b613d8e81856148ac565b9350613d9e818560208601614a85565b613da781614c80565b840191505092915050565b6000613dbd82614885565b613dc781856148bd565b9350613dd7818560208601614a85565b80840191505092915050565b60008154613df081614ab8565b613dfa81866148bd565b94506001821660008114613e155760018114613e2657613e59565b60ff19831686528186019350613e59565b613e2f85614865565b60005b83811015613e5157815481890152600182019150602081019050613e32565b838801955050505b50505092915050565b6000613e6f6011836148ac565b9150613e7a82614c91565b602082019050919050565b6000613e926032836148ac565b9150613e9d82614cba565b604082019050919050565b6000613eb56026836148ac565b9150613ec082614d09565b604082019050919050565b6000613ed86025836148ac565b9150613ee382614d58565b604082019050919050565b6000613efb601c836148ac565b9150613f0682614da7565b602082019050919050565b6000613f1e603a836148ac565b9150613f2982614dd0565b604082019050919050565b6000613f41601c836148ac565b9150613f4c82614e1f565b602082019050919050565b6000613f646014836148ac565b9150613f6f82614e48565b602082019050919050565b6000613f876024836148ac565b9150613f9282614e71565b604082019050919050565b6000613faa6019836148ac565b9150613fb582614ec0565b602082019050919050565b6000613fcd602c836148ac565b9150613fd882614ee9565b604082019050919050565b6000613ff0601f836148ac565b9150613ffb82614f38565b602082019050919050565b60006140136038836148ac565b915061401e82614f61565b604082019050919050565b60006140366031836148ac565b915061404182614fb0565b604082019050919050565b6000614059600d836148ac565b915061406482614fff565b602082019050919050565b600061407c602a836148ac565b915061408782615028565b604082019050919050565b600061409f602c836148ac565b91506140aa82615077565b604082019050919050565b60006140c26029836148ac565b91506140cd826150c6565b604082019050919050565b60006140e56020836148ac565b91506140f082615115565b602082019050919050565b6000614108602c836148ac565b91506141138261513e565b604082019050919050565b600061412b6005836148bd565b91506141368261518d565b600582019050919050565b600061414e6020836148ac565b9150614159826151b6565b602082019050919050565b6000614171601d836148ac565b915061417c826151df565b602082019050919050565b6000614194602f836148ac565b915061419f82615208565b604082019050919050565b60006141b76023836148ac565b91506141c282615257565b604082019050919050565b60006141da601b836148ac565b91506141e5826152a6565b602082019050919050565b60006141fd6021836148ac565b9150614208826152cf565b604082019050919050565b60006142206017836148ac565b915061422b8261531e565b602082019050919050565b60006142436000836148a1565b915061424e82615347565b600082019050919050565b60006142666031836148ac565b91506142718261534a565b604082019050919050565b6000614289601f836148ac565b915061429482615399565b602082019050919050565b60006142ac6010836148ac565b91506142b7826153c2565b602082019050919050565b6142cb81614a5a565b82525050565b60006142dd8285613db2565b91506142e98284613db2565b91506142f48261411e565b91508190509392505050565b600061430c8285613de3565b91506143188284613db2565b91506143238261411e565b91508190509392505050565b600061433a82614236565b9150819050919050565b60006020820190506143596000830184613d13565b92915050565b60006080820190506143746000830187613d13565b6143816020830186613d13565b61438e60408301856142c2565b81810360608301526143a08184613d31565b905095945050505050565b60006020820190506143c06000830184613d22565b92915050565b60006020820190506143db6000830184613d6a565b92915050565b600060208201905081810360008301526143fb8184613d79565b905092915050565b6000602082019050818103600083015261441c81613e62565b9050919050565b6000602082019050818103600083015261443c81613e85565b9050919050565b6000602082019050818103600083015261445c81613ea8565b9050919050565b6000602082019050818103600083015261447c81613ecb565b9050919050565b6000602082019050818103600083015261449c81613eee565b9050919050565b600060208201905081810360008301526144bc81613f11565b9050919050565b600060208201905081810360008301526144dc81613f34565b9050919050565b600060208201905081810360008301526144fc81613f57565b9050919050565b6000602082019050818103600083015261451c81613f7a565b9050919050565b6000602082019050818103600083015261453c81613f9d565b9050919050565b6000602082019050818103600083015261455c81613fc0565b9050919050565b6000602082019050818103600083015261457c81613fe3565b9050919050565b6000602082019050818103600083015261459c81614006565b9050919050565b600060208201905081810360008301526145bc81614029565b9050919050565b600060208201905081810360008301526145dc8161404c565b9050919050565b600060208201905081810360008301526145fc8161406f565b9050919050565b6000602082019050818103600083015261461c81614092565b9050919050565b6000602082019050818103600083015261463c816140b5565b9050919050565b6000602082019050818103600083015261465c816140d8565b9050919050565b6000602082019050818103600083015261467c816140fb565b9050919050565b6000602082019050818103600083015261469c81614141565b9050919050565b600060208201905081810360008301526146bc81614164565b9050919050565b600060208201905081810360008301526146dc81614187565b9050919050565b600060208201905081810360008301526146fc816141aa565b9050919050565b6000602082019050818103600083015261471c816141cd565b9050919050565b6000602082019050818103600083015261473c816141f0565b9050919050565b6000602082019050818103600083015261475c81614213565b9050919050565b6000602082019050818103600083015261477c81614259565b9050919050565b6000602082019050818103600083015261479c8161427c565b9050919050565b600060208201905081810360008301526147bc8161429f565b9050919050565b60006020820190506147d860008301846142c2565b92915050565b60006147e86147f9565b90506147f48282614aea565b919050565b6000604051905090565b600067ffffffffffffffff82111561481e5761481d614c51565b5b61482782614c80565b9050602081019050919050565b600067ffffffffffffffff82111561484f5761484e614c51565b5b61485882614c80565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006148d382614a5a565b91506148de83614a5a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561491357614912614b95565b5b828201905092915050565b600061492982614a5a565b915061493483614a5a565b92508261494457614943614bc4565b5b828204905092915050565b600061495a82614a5a565b915061496583614a5a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499e5761499d614b95565b5b828202905092915050565b60006149b482614a5a565b91506149bf83614a5a565b9250828210156149d2576149d1614b95565b5b828203905092915050565b60006149e882614a3a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050614a35826153eb565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614a6f82614a27565b9050919050565b82818337600083830152505050565b60005b83811015614aa3578082015181840152602081019050614a88565b83811115614ab2576000848401525b50505050565b60006002820490506001821680614ad057607f821691505b60208210811415614ae457614ae3614c22565b5b50919050565b614af382614c80565b810181811067ffffffffffffffff82111715614b1257614b11614c51565b5b80604052505050565b6000614b2682614a5a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b5957614b58614b95565b5b600182019050919050565b6000614b6f82614a5a565b9150614b7a83614a5a565b925082614b8a57614b89614bc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f53616c6520696e206e6f74206f70656e21000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f7520646f6e2774206861766520656e6f75676820457468657265756d207460008201527f6f206d696e74207468697320616d6f756e74206f66204e465473000000000000602082015250565b7f4e6f7420746865206f776e6572206f66207468697320546f6b656e2100000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4272656564696e672069732063757272656e746c79206e6f74204f70656e2100600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f43616e206f6e6c792072657665616c207768656e2063757272656e742073746160008201527f746520697320756e72657665616c656421000000000000000000000000000000602082015250565b7f53616c65206973204c4956452100000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768205265736572766564204e465473206c65667420666f60008201527f72206d696e74696e672e2e2e0000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e206861732072656163686564206d61782062726565647321000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204e465473206c65667420666f72206d696e74696e6760008201527f2e2e2e0000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652d53616c6520696e206e6f74206f70656e656420796574210000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c6520696e206e6f74206f70656e65642079657421000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e74204574682073656e7420746f2062726565642100600082015250565b7f496e636f727265637420616d6f756e7400000000000000000000000000000000600082015250565b600481106153fc576153fb614bf3565b5b50565b615408816149dd565b811461541357600080fd5b50565b61541f816149ef565b811461542a57600080fd5b50565b615436816149fb565b811461544157600080fd5b50565b61544d81614a5a565b811461545857600080fd5b5056fea26469706673582212204d1bc6a09115dea95fd0118fc3549799442e6f5cbb949427d744bbc625ddd79664736f6c63430008020033
Deployed Bytecode Sourcemap
37321:10265:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39271:8;;;24147:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25092:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44544:158;;;;;;;;;;;;;:::i;:::-;;26652:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26175:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45412:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43047:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27402:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38509:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42188:818;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39490:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27812:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40421:165;;;;;;;;;;;;;:::i;:::-;;47051:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38701:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24786:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38800:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47146:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25261:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26945:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45560:207;;;;;;;;;;;;;:::i;:::-;;44748:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41413:715;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28068:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47252:331;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46942:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39607:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43543:942;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40641:713;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45931:821;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46850:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45832:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27171:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40090:153;;;;;;;;;;;;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46760:82;;;;;;;;;;;;;:::i;:::-;;44891:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40251:162;;;;;;;;;;;;;:::i;:::-;;24147:305;24249:4;24301:25;24286:40;;;:11;:40;;;;:105;;;;24358:33;24343:48;;;:11;:48;;;;24286:105;:158;;;;24408:36;24432:11;24408:23;:36::i;:::-;24286:158;24266:178;;24147:305;;;:::o;25092:100::-;25146:13;25179:5;25172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25092:100;:::o;44544:158::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44679:14:::1;;44660:16;;:33;;;;:::i;:::-;44624:19;;:70;;;;:::i;:::-;44594:14;:100;;;;44544:158::o:0;26652:221::-;26728:7;26756:16;26764:7;26756;:16::i;:::-;26748:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26841:15;:24;26857:7;26841:24;;;;;;;;;;;;;;;;;;;;;26834:31;;26652:221;;;:::o;26175:411::-;26256:13;26272:23;26287:7;26272:14;:23::i;:::-;26256:39;;26320:5;26314:11;;:2;:11;;;;26306:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26414:5;26398:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26423:37;26440:5;26447:12;:10;:12::i;:::-;26423:16;:37::i;:::-;26398:62;26376:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:21;26566:2;26570:7;26557:8;:21::i;:::-;26175:411;;;:::o;45412:114::-;45456:7;45505:13;;45483:19;;:35;;;;:::i;:::-;45476:42;;45412:114;:::o;43047:488::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43181:16:::1;;43171:6;43154:14;;:23;;;;:::i;:::-;:43;;43132:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;43287:9;43282:246;43306:6;43302:1;:10;43282:246;;;43334:11;43348:9;:7;:9::i;:::-;43334:23;;43372:25;43382:9;43393:3;43372:9;:25::i;:::-;43442:1;43412:15;:26;43428:9;43412:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;43481:1;43458:19;;:24;;;;;;;:::i;:::-;;;;;;;;43515:1;43497:14;;:19;;;;;;;:::i;:::-;;;;;;;;43282:246;43314:3;;;;;:::i;:::-;;;;43282:246;;;;43047:488:::0;;:::o;27402:339::-;27597:41;27616:12;:10;:12::i;:::-;27630:7;27597:18;:41::i;:::-;27589:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:28;27715:4;27721:2;27725:7;27705:9;:28::i;:::-;27402:339;;;:::o;38509:50::-;;;;;;;;;;;;;;;;;:::o;42188:818::-;42276:17;42263:30;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;42255:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:14;;42415:16;;:33;;;;:::i;:::-;42397:14;;:52;;;;:::i;:::-;42370:6;42348:19;;:28;;;;:::i;:::-;:101;;:171;;;;;42500:19;;42490:6;42470:17;;:26;;;;:::i;:::-;:49;;42348:171;42326:256;;;;;;;;;;;;:::i;:::-;;;;;;;;;42643:6;42630:10;:8;:10::i;:::-;:19;;;;:::i;:::-;42617:9;:32;;42595:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42753:9;42748:251;42772:6;42768:1;:10;42748:251;;;42800:11;42814:9;:7;:9::i;:::-;42800:23;;42838:26;42848:10;42860:3;42838:9;:26::i;:::-;42910:1;42879:15;:27;42895:10;42879:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;42949:1;42926:19;;:24;;;;;;;:::i;:::-;;;;;;;;42986:1;42965:17;;:22;;;;;;;:::i;:::-;;;;;;;;42748:251;42780:3;;;;;:::i;:::-;;;;42748:251;;;;42188:818;:::o;39490:109::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39583:8:::1;39565:15;:26;;;;;;;;;;;;:::i;:::-;;39490:109:::0;:::o;27812:185::-;27950:39;27967:4;27973:2;27977:7;27950:39;;;;;;;;;;;;:16;:39::i;:::-;27812:185;;;:::o;40421:165::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40501:17:::1;40488:30:::0;::::1;;;;;;;;;;;;;;;:9;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;40480:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40561:17;40549:9;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40421:165::o:0;47051:87::-;47093:7;47120:10;;47113:17;;47051:87;:::o;38701:22::-;;;;;;;;;;;;;:::o;24786:239::-;24858:7;24878:13;24894:7;:16;24902:7;24894:16;;;;;;;;;;;;;;;;;;;;;24878:32;;24946:1;24929:19;;:5;:19;;;;24921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25012:5;25005:12;;;24786:239;;;:::o;38800:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24516:208::-;24588:7;24633:1;24616:19;;:5;:19;;;;24608:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24700:9;:16;24710:5;24700:16;;;;;;;;;;;;;;;;24693:23;;24516:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;47146:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47229:7:::1;47216:10;:20;;;;47146:98:::0;:::o;25261:104::-;25317:13;25350:7;25343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:104;:::o;26945:155::-;27040:52;27059:12;:10;:12::i;:::-;27073:8;27083;27040:18;:52::i;:::-;26945:155;;:::o;45560:207::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45642:1:::1;45628:10;;:15;45606:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45744:15;45731:10;:28;;;;45560:207::o:0;44748:113::-;44805:7;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44832:21:::1;44825:28;;44748:113:::0;:::o;41413:715::-;41500:16;41487:29;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;41479:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41663:14;;41644:16;;:33;;;;:::i;:::-;41626:14;;:52;;;;:::i;:::-;41599:6;41577:19;;:28;;;;:::i;:::-;:101;;41555:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;41802:6;41789:10;:8;:10::i;:::-;:19;;;;:::i;:::-;41776:9;:32;;41754:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41912:9;41907:214;41931:6;41927:1;:10;41907:214;;;41959:11;41973:9;:7;:9::i;:::-;41959:23;;41997:26;42007:10;42019:3;41997:9;:26::i;:::-;42069:1;42038:15;:27;42054:10;42038:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;42108:1;42085:19;;:24;;;;;;;:::i;:::-;;;;;;;;41907:214;41939:3;;;;;:::i;:::-;;;;41907:214;;;;41413:715;:::o;28068:328::-;28243:41;28262:12;:10;:12::i;:::-;28276:7;28243:18;:41::i;:::-;28235:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28349:39;28363:4;28369:2;28373:7;28382:5;28349:13;:39::i;:::-;28068:328;;;;:::o;47252:331::-;47293:7;47330:12;47317:25;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;:55;;;;47359:13;47346:26;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;47317:55;47313:263;;;47396:15;;47389:22;;;;47313:263;47446:17;47433:30;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;47429:147;;;47487:19;;47480:26;;;;47429:147;47546:18;;47539:25;;47252:331;;:::o;46942:101::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47026:9:::1;47014;:21;;;;46942:101:::0;:::o;39607:148::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39733:14:::1;39717:13;:30;;;;;;;;;;;;:::i;:::-;;39607:148:::0;:::o;43543:942::-;43662:13;43715:17;43723:8;43715:7;:17::i;:::-;43693:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;43925:1;43911:10;;:15;43907:571;;;44039:13;44079:19;:8;:17;:19::i;:::-;43996:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43943:231;;;;43907:571;44207:21;44231:10;:8;:10::i;:::-;44207:34;;44304:1;44286:7;44280:21;:25;:186;;;;;;;;;;;;;;;;;44379:7;44388:19;:8;:17;:19::i;:::-;44362:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44280:186;44256:210;;;43543:942;;;;:::o;40641:713::-;40725:13;40712:26;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;40704:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40889:14;;40870:16;;:33;;;;:::i;:::-;40852:14;;:52;;;;:::i;:::-;40825:6;40803:19;;:28;;;;:::i;:::-;:101;;40781:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;41028:6;41015:10;:8;:10::i;:::-;:19;;;;:::i;:::-;41002:9;:32;;40980:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41138:9;41133:214;41157:6;41153:1;:10;41133:214;;;41185:11;41199:9;:7;:9::i;:::-;41185:23;;41223:26;41233:10;41245:3;41223:9;:26::i;:::-;41295:1;41264:15;:27;41280:10;41264:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;41334:1;41311:19;;:24;;;;;;;:::i;:::-;;;;;;;;41133:214;41165:3;;;;;:::i;:::-;;;;41133:214;;;;40641:713;:::o;45931:821::-;46051:8;;;;;;;;;;;46043:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46142:23;46150:14;46142:7;:23::i;:::-;46128:37;;:10;:37;;;:95;;;;;46200:23;46208:14;46200:7;:23::i;:::-;46186:37;;:10;:37;;;46128:95;46106:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;46311:11;:9;:11::i;:::-;46298:9;:24;;46290:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46424:9;;46391:14;:30;46406:14;46391:30;;;;;;;;;;;;:42;:105;;;;;46487:9;;46454:14;:30;46469:14;46454:30;;;;;;;;;;;;:42;46391:105;46369:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;46566:57;46576:10;46621:1;46605:13;;46588:14;;:30;;;;:::i;:::-;:34;;;;:::i;:::-;46566:9;:57::i;:::-;46668:1;46634:14;:30;46649:14;46634:30;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;46714:1;46680:14;:30;46695:14;46680:30;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;46743:1;46726:13;;:18;;;;;;;:::i;:::-;;;;;;;;45931:821;;:::o;46850:84::-;46894:4;46918:8;;;;;;;;;;;46911:15;;46850:84;:::o;45832:91::-;45874:7;45901:14;;45894:21;;45832:91;:::o;27171:164::-;27268:4;27292:18;:25;27311:5;27292:25;;;;;;;;;;;;;;;:35;27318:8;27292:35;;;;;;;;;;;;;;;;;;;;;;;;;27285:42;;27171:164;;;;:::o;40090:153::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40166:13:::1;40153:26;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;40145:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;40222:13;40210:9;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40090:153::o:0;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;46760:82::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46826:8:::1;;;;;;;;;;;46825:9;46814:8;;:20;;;;;;;;;;;;;;;;;;46760:82::o:0;44891:199::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44990:21:::1;44980:6;:31;;44972:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45045:37;45063:9;45075:6;45045:9;:37::i;:::-;44891:199:::0;;:::o;40251:162::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40330:16:::1;40317:29;;;;;;;;;;;;;;;;:9;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40309:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40389:16;40377:9;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40251:162::o:0;16886:157::-;16971:4;17010:25;16995:40;;;:11;:40;;;;16988:47;;16886:157;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;29906:127::-;29971:4;30023:1;29995:30;;:7;:16;30003:7;29995:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29988:37;;29906:127;;;:::o;34052:174::-;34154:2;34127:15;:24;34143:7;34127:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34210:7;34206:2;34172:46;;34181:23;34196:7;34181:14;:23::i;:::-;34172:46;;;;;;;;;;;;34052:174;;:::o;39807:275::-;39849:7;39869:17;39889:19;;39869:39;;39919:11;39933:4;39919:18;;39948:98;39955:6;39948:98;;;39991:1;39978:14;;;;;:::i;:::-;;;40016:18;40024:9;40016:7;:18::i;:::-;40007:27;;39948:98;;;40065:9;40058:16;;;;39807:275;:::o;30890:110::-;30966:26;30976:2;30980:7;30966:26;;;;;;;;;;;;:9;:26::i;:::-;30890:110;;:::o;30200:348::-;30293:4;30318:16;30326:7;30318;:16::i;:::-;30310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30394:13;30410:23;30425:7;30410:14;:23::i;:::-;30394:39;;30463:5;30452:16;;:7;:16;;;:52;;;;30472:32;30489:5;30496:7;30472:16;:32::i;:::-;30452:52;:87;;;;30532:7;30508:31;;:20;30520:7;30508:11;:20::i;:::-;:31;;;30452:87;30444:96;;;30200:348;;;;:::o;33309:625::-;33468:4;33441:31;;:23;33456:7;33441:14;:23::i;:::-;:31;;;33433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33547:1;33533:16;;:2;:16;;;;33525:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33603:39;33624:4;33630:2;33634:7;33603:20;:39::i;:::-;33707:29;33724:1;33728:7;33707:8;:29::i;:::-;33768:1;33749:9;:15;33759:4;33749:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33797:1;33780:9;:13;33790:2;33780:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33828:2;33809:7;:16;33817:7;33809:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33867:7;33863:2;33848:27;;33857:4;33848:27;;;;;;;;;;;;33888:38;33908:4;33914:2;33918:7;33888:19;:38::i;:::-;33309:625;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5349:191;;:::o;34368:315::-;34523:8;34514:17;;:5;:17;;;;34506:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34610:8;34572:18;:25;34591:5;34572:25;;;;;;;;;;;;;;;:35;34598:8;34572:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34656:8;34634:41;;34649:5;34634:41;;;34666:8;34634:41;;;;;;:::i;:::-;;;;;;;;34368:315;;;:::o;29278:::-;29435:28;29445:4;29451:2;29455:7;29435:9;:28::i;:::-;29482:48;29505:4;29511:2;29515:7;29524:5;29482:22;:48::i;:::-;29474:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29278:315;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;39320:116::-;39380:13;39413:15;39406:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39320:116;:::o;45161:183::-;45242:9;45257:7;:12;;45277:6;45257:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45241:47;;;45307:4;45299:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45161:183;;;:::o;31227:321::-;31357:18;31363:2;31367:7;31357:5;:18::i;:::-;31408:54;31439:1;31443:2;31447:7;31456:5;31408:22;:54::i;:::-;31386:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31227:321;;;:::o;36619:126::-;;;;:::o;37130:125::-;;;;:::o;35248:799::-;35403:4;35424:15;:2;:13;;;:15::i;:::-;35420:620;;;35476:2;35460:36;;;35497:12;:10;:12::i;:::-;35511:4;35517:7;35526:5;35460:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35456:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35719:1;35702:6;:13;:18;35698:272;;;35745:60;;;;;;;;;;:::i;:::-;;;;;;;;35698:272;35920:6;35914:13;35905:6;35901:2;35897:15;35890:38;35456:529;35593:41;;;35583:51;;;:6;:51;;;;35576:58;;;;;35420:620;36024:4;36017:11;;35248:799;;;;;;;:::o;31884:439::-;31978:1;31964:16;;:2;:16;;;;31956:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32037:16;32045:7;32037;:16::i;:::-;32036:17;32028:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32099:45;32128:1;32132:2;32136:7;32099:20;:45::i;:::-;32174:1;32157:9;:13;32167:2;32157:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32205:2;32186:7;:16;32194:7;32186:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32250:7;32246:2;32225:33;;32242:1;32225:33;;;;;;;;;;;;32271:44;32299:1;32303:2;32307:7;32271:19;:44::i;:::-;31884:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:407::-;;;6211:2;6199:9;6190:7;6186:23;6182:32;6179:2;;;6227:1;6224;6217:12;6179:2;6270:1;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6241:117;6397:2;6423:53;6468:7;6459:6;6448:9;6444:22;6423:53;:::i;:::-;6413:63;;6368:118;6169:324;;;;;:::o;6499:407::-;;;6624:2;6612:9;6603:7;6599:23;6595:32;6592:2;;;6640:1;6637;6630:12;6592:2;6683:1;6708:53;6753:7;6744:6;6733:9;6729:22;6708:53;:::i;:::-;6698:63;;6654:117;6810:2;6836:53;6881:7;6872:6;6861:9;6857:22;6836:53;:::i;:::-;6826:63;;6781:118;6582:324;;;;;:::o;6912:118::-;6999:24;7017:5;6999:24;:::i;:::-;6994:3;6987:37;6977:53;;:::o;7036:109::-;7117:21;7132:5;7117:21;:::i;:::-;7112:3;7105:34;7095:50;;:::o;7151:360::-;;7265:38;7297:5;7265:38;:::i;:::-;7319:70;7382:6;7377:3;7319:70;:::i;:::-;7312:77;;7398:52;7443:6;7438:3;7431:4;7424:5;7420:16;7398:52;:::i;:::-;7475:29;7497:6;7475:29;:::i;:::-;7470:3;7466:39;7459:46;;7241:270;;;;;:::o;7517:147::-;7612:45;7651:5;7612:45;:::i;:::-;7607:3;7600:58;7590:74;;:::o;7670:364::-;;7786:39;7819:5;7786:39;:::i;:::-;7841:71;7905:6;7900:3;7841:71;:::i;:::-;7834:78;;7921:52;7966:6;7961:3;7954:4;7947:5;7943:16;7921:52;:::i;:::-;7998:29;8020:6;7998:29;:::i;:::-;7993:3;7989:39;7982:46;;7762:272;;;;;:::o;8040:377::-;;8174:39;8207:5;8174:39;:::i;:::-;8229:89;8311:6;8306:3;8229:89;:::i;:::-;8222:96;;8327:52;8372:6;8367:3;8360:4;8353:5;8349:16;8327:52;:::i;:::-;8404:6;8399:3;8395:16;8388:23;;8150:267;;;;;:::o;8447:845::-;;8587:5;8581:12;8616:36;8642:9;8616:36;:::i;:::-;8668:89;8750:6;8745:3;8668:89;:::i;:::-;8661:96;;8788:1;8777:9;8773:17;8804:1;8799:137;;;;8950:1;8945:341;;;;8766:520;;8799:137;8883:4;8879:9;8868;8864:25;8859:3;8852:38;8919:6;8914:3;8910:16;8903:23;;8799:137;;8945:341;9012:38;9044:5;9012:38;:::i;:::-;9072:1;9086:154;9100:6;9097:1;9094:13;9086:154;;;9174:7;9168:14;9164:1;9159:3;9155:11;9148:35;9224:1;9215:7;9211:15;9200:26;;9122:4;9119:1;9115:12;9110:17;;9086:154;;;9269:6;9264:3;9260:16;9253:23;;8952:334;;8766:520;;8554:738;;;;;;:::o;9298:366::-;;9461:67;9525:2;9520:3;9461:67;:::i;:::-;9454:74;;9537:93;9626:3;9537:93;:::i;:::-;9655:2;9650:3;9646:12;9639:19;;9444:220;;;:::o;9670:366::-;;9833:67;9897:2;9892:3;9833:67;:::i;:::-;9826:74;;9909:93;9998:3;9909:93;:::i;:::-;10027:2;10022:3;10018:12;10011:19;;9816:220;;;:::o;10042:366::-;;10205:67;10269:2;10264:3;10205:67;:::i;:::-;10198:74;;10281:93;10370:3;10281:93;:::i;:::-;10399:2;10394:3;10390:12;10383:19;;10188:220;;;:::o;10414:366::-;;10577:67;10641:2;10636:3;10577:67;:::i;:::-;10570:74;;10653:93;10742:3;10653:93;:::i;:::-;10771:2;10766:3;10762:12;10755:19;;10560:220;;;:::o;10786:366::-;;10949:67;11013:2;11008:3;10949:67;:::i;:::-;10942:74;;11025:93;11114:3;11025:93;:::i;:::-;11143:2;11138:3;11134:12;11127:19;;10932:220;;;:::o;11158:366::-;;11321:67;11385:2;11380:3;11321:67;:::i;:::-;11314:74;;11397:93;11486:3;11397:93;:::i;:::-;11515:2;11510:3;11506:12;11499:19;;11304:220;;;:::o;11530:366::-;;11693:67;11757:2;11752:3;11693:67;:::i;:::-;11686:74;;11769:93;11858:3;11769:93;:::i;:::-;11887:2;11882:3;11878:12;11871:19;;11676:220;;;:::o;11902:366::-;;12065:67;12129:2;12124:3;12065:67;:::i;:::-;12058:74;;12141:93;12230:3;12141:93;:::i;:::-;12259:2;12254:3;12250:12;12243:19;;12048:220;;;:::o;12274:366::-;;12437:67;12501:2;12496:3;12437:67;:::i;:::-;12430:74;;12513:93;12602:3;12513:93;:::i;:::-;12631:2;12626:3;12622:12;12615:19;;12420:220;;;:::o;12646:366::-;;12809:67;12873:2;12868:3;12809:67;:::i;:::-;12802:74;;12885:93;12974:3;12885:93;:::i;:::-;13003:2;12998:3;12994:12;12987:19;;12792:220;;;:::o;13018:366::-;;13181:67;13245:2;13240:3;13181:67;:::i;:::-;13174:74;;13257:93;13346:3;13257:93;:::i;:::-;13375:2;13370:3;13366:12;13359:19;;13164:220;;;:::o;13390:366::-;;13553:67;13617:2;13612:3;13553:67;:::i;:::-;13546:74;;13629:93;13718:3;13629:93;:::i;:::-;13747:2;13742:3;13738:12;13731:19;;13536:220;;;:::o;13762:366::-;;13925:67;13989:2;13984:3;13925:67;:::i;:::-;13918:74;;14001:93;14090:3;14001:93;:::i;:::-;14119:2;14114:3;14110:12;14103:19;;13908:220;;;:::o;14134:366::-;;14297:67;14361:2;14356:3;14297:67;:::i;:::-;14290:74;;14373:93;14462:3;14373:93;:::i;:::-;14491:2;14486:3;14482:12;14475:19;;14280:220;;;:::o;14506:366::-;;14669:67;14733:2;14728:3;14669:67;:::i;:::-;14662:74;;14745:93;14834:3;14745:93;:::i;:::-;14863:2;14858:3;14854:12;14847:19;;14652:220;;;:::o;14878:366::-;;15041:67;15105:2;15100:3;15041:67;:::i;:::-;15034:74;;15117:93;15206:3;15117:93;:::i;:::-;15235:2;15230:3;15226:12;15219:19;;15024:220;;;:::o;15250:366::-;;15413:67;15477:2;15472:3;15413:67;:::i;:::-;15406:74;;15489:93;15578:3;15489:93;:::i;:::-;15607:2;15602:3;15598:12;15591:19;;15396:220;;;:::o;15622:366::-;;15785:67;15849:2;15844:3;15785:67;:::i;:::-;15778:74;;15861:93;15950:3;15861:93;:::i;:::-;15979:2;15974:3;15970:12;15963:19;;15768:220;;;:::o;15994:366::-;;16157:67;16221:2;16216:3;16157:67;:::i;:::-;16150:74;;16233:93;16322:3;16233:93;:::i;:::-;16351:2;16346:3;16342:12;16335:19;;16140:220;;;:::o;16366:366::-;;16529:67;16593:2;16588:3;16529:67;:::i;:::-;16522:74;;16605:93;16694:3;16605:93;:::i;:::-;16723:2;16718:3;16714:12;16707:19;;16512:220;;;:::o;16738:400::-;;16919:84;17001:1;16996:3;16919:84;:::i;:::-;16912:91;;17012:93;17101:3;17012:93;:::i;:::-;17130:1;17125:3;17121:11;17114:18;;16902:236;;;:::o;17144:366::-;;17307:67;17371:2;17366:3;17307:67;:::i;:::-;17300:74;;17383:93;17472:3;17383:93;:::i;:::-;17501:2;17496:3;17492:12;17485:19;;17290:220;;;:::o;17516:366::-;;17679:67;17743:2;17738:3;17679:67;:::i;:::-;17672:74;;17755:93;17844:3;17755:93;:::i;:::-;17873:2;17868:3;17864:12;17857:19;;17662:220;;;:::o;17888:366::-;;18051:67;18115:2;18110:3;18051:67;:::i;:::-;18044:74;;18127:93;18216:3;18127:93;:::i;:::-;18245:2;18240:3;18236:12;18229:19;;18034:220;;;:::o;18260:366::-;;18423:67;18487:2;18482:3;18423:67;:::i;:::-;18416:74;;18499:93;18588:3;18499:93;:::i;:::-;18617:2;18612:3;18608:12;18601:19;;18406:220;;;:::o;18632:366::-;;18795:67;18859:2;18854:3;18795:67;:::i;:::-;18788:74;;18871:93;18960:3;18871:93;:::i;:::-;18989:2;18984:3;18980:12;18973:19;;18778:220;;;:::o;19004:366::-;;19167:67;19231:2;19226:3;19167:67;:::i;:::-;19160:74;;19243:93;19332:3;19243:93;:::i;:::-;19361:2;19356:3;19352:12;19345:19;;19150:220;;;:::o;19376:366::-;;19539:67;19603:2;19598:3;19539:67;:::i;:::-;19532:74;;19615:93;19704:3;19615:93;:::i;:::-;19733:2;19728:3;19724:12;19717:19;;19522:220;;;:::o;19748:398::-;;19928:83;20009:1;20004:3;19928:83;:::i;:::-;19921:90;;20020:93;20109:3;20020:93;:::i;:::-;20138:1;20133:3;20129:11;20122:18;;19911:235;;;:::o;20152:366::-;;20315:67;20379:2;20374:3;20315:67;:::i;:::-;20308:74;;20391:93;20480:3;20391:93;:::i;:::-;20509:2;20504:3;20500:12;20493:19;;20298:220;;;:::o;20524:366::-;;20687:67;20751:2;20746:3;20687:67;:::i;:::-;20680:74;;20763:93;20852:3;20763:93;:::i;:::-;20881:2;20876:3;20872:12;20865:19;;20670:220;;;:::o;20896:366::-;;21059:67;21123:2;21118:3;21059:67;:::i;:::-;21052:74;;21135:93;21224:3;21135:93;:::i;:::-;21253:2;21248:3;21244:12;21237:19;;21042:220;;;:::o;21268:118::-;21355:24;21373:5;21355:24;:::i;:::-;21350:3;21343:37;21333:53;;:::o;21392:701::-;;21695:95;21786:3;21777:6;21695:95;:::i;:::-;21688:102;;21807:95;21898:3;21889:6;21807:95;:::i;:::-;21800:102;;21919:148;22063:3;21919:148;:::i;:::-;21912:155;;22084:3;22077:10;;21677:416;;;;;:::o;22099:695::-;;22399:92;22487:3;22478:6;22399:92;:::i;:::-;22392:99;;22508:95;22599:3;22590:6;22508:95;:::i;:::-;22501:102;;22620:148;22764:3;22620:148;:::i;:::-;22613:155;;22785:3;22778:10;;22381:413;;;;;:::o;22800:379::-;;23006:147;23149:3;23006:147;:::i;:::-;22999:154;;23170:3;23163:10;;22988:191;;;:::o;23185:222::-;;23316:2;23305:9;23301:18;23293:26;;23329:71;23397:1;23386:9;23382:17;23373:6;23329:71;:::i;:::-;23283:124;;;;:::o;23413:640::-;;23646:3;23635:9;23631:19;23623:27;;23660:71;23728:1;23717:9;23713:17;23704:6;23660:71;:::i;:::-;23741:72;23809:2;23798:9;23794:18;23785:6;23741:72;:::i;:::-;23823;23891:2;23880:9;23876:18;23867:6;23823:72;:::i;:::-;23942:9;23936:4;23932:20;23927:2;23916:9;23912:18;23905:48;23970:76;24041:4;24032:6;23970:76;:::i;:::-;23962:84;;23613:440;;;;;;;:::o;24059:210::-;;24184:2;24173:9;24169:18;24161:26;;24197:65;24259:1;24248:9;24244:17;24235:6;24197:65;:::i;:::-;24151:118;;;;:::o;24275:238::-;;24414:2;24403:9;24399:18;24391:26;;24427:79;24503:1;24492:9;24488:17;24479:6;24427:79;:::i;:::-;24381:132;;;;:::o;24519:313::-;;24670:2;24659:9;24655:18;24647:26;;24719:9;24713:4;24709:20;24705:1;24694:9;24690:17;24683:47;24747:78;24820:4;24811:6;24747:78;:::i;:::-;24739:86;;24637:195;;;;:::o;24838:419::-;;25042:2;25031:9;25027:18;25019:26;;25091:9;25085:4;25081:20;25077:1;25066:9;25062:17;25055:47;25119:131;25245:4;25119:131;:::i;:::-;25111:139;;25009:248;;;:::o;25263:419::-;;25467:2;25456:9;25452:18;25444:26;;25516:9;25510:4;25506:20;25502:1;25491:9;25487:17;25480:47;25544:131;25670:4;25544:131;:::i;:::-;25536:139;;25434:248;;;:::o;25688:419::-;;25892:2;25881:9;25877:18;25869:26;;25941:9;25935:4;25931:20;25927:1;25916:9;25912:17;25905:47;25969:131;26095:4;25969:131;:::i;:::-;25961:139;;25859:248;;;:::o;26113:419::-;;26317:2;26306:9;26302:18;26294:26;;26366:9;26360:4;26356:20;26352:1;26341:9;26337:17;26330:47;26394:131;26520:4;26394:131;:::i;:::-;26386:139;;26284:248;;;:::o;26538:419::-;;26742:2;26731:9;26727:18;26719:26;;26791:9;26785:4;26781:20;26777:1;26766:9;26762:17;26755:47;26819:131;26945:4;26819:131;:::i;:::-;26811:139;;26709:248;;;:::o;26963:419::-;;27167:2;27156:9;27152:18;27144:26;;27216:9;27210:4;27206:20;27202:1;27191:9;27187:17;27180:47;27244:131;27370:4;27244:131;:::i;:::-;27236:139;;27134:248;;;:::o;27388:419::-;;27592:2;27581:9;27577:18;27569:26;;27641:9;27635:4;27631:20;27627:1;27616:9;27612:17;27605:47;27669:131;27795:4;27669:131;:::i;:::-;27661:139;;27559:248;;;:::o;27813:419::-;;28017:2;28006:9;28002:18;27994:26;;28066:9;28060:4;28056:20;28052:1;28041:9;28037:17;28030:47;28094:131;28220:4;28094:131;:::i;:::-;28086:139;;27984:248;;;:::o;28238:419::-;;28442:2;28431:9;28427:18;28419:26;;28491:9;28485:4;28481:20;28477:1;28466:9;28462:17;28455:47;28519:131;28645:4;28519:131;:::i;:::-;28511:139;;28409:248;;;:::o;28663:419::-;;28867:2;28856:9;28852:18;28844:26;;28916:9;28910:4;28906:20;28902:1;28891:9;28887:17;28880:47;28944:131;29070:4;28944:131;:::i;:::-;28936:139;;28834:248;;;:::o;29088:419::-;;29292:2;29281:9;29277:18;29269:26;;29341:9;29335:4;29331:20;29327:1;29316:9;29312:17;29305:47;29369:131;29495:4;29369:131;:::i;:::-;29361:139;;29259:248;;;:::o;29513:419::-;;29717:2;29706:9;29702:18;29694:26;;29766:9;29760:4;29756:20;29752:1;29741:9;29737:17;29730:47;29794:131;29920:4;29794:131;:::i;:::-;29786:139;;29684:248;;;:::o;29938:419::-;;30142:2;30131:9;30127:18;30119:26;;30191:9;30185:4;30181:20;30177:1;30166:9;30162:17;30155:47;30219:131;30345:4;30219:131;:::i;:::-;30211:139;;30109:248;;;:::o;30363:419::-;;30567:2;30556:9;30552:18;30544:26;;30616:9;30610:4;30606:20;30602:1;30591:9;30587:17;30580:47;30644:131;30770:4;30644:131;:::i;:::-;30636:139;;30534:248;;;:::o;30788:419::-;;30992:2;30981:9;30977:18;30969:26;;31041:9;31035:4;31031:20;31027:1;31016:9;31012:17;31005:47;31069:131;31195:4;31069:131;:::i;:::-;31061:139;;30959:248;;;:::o;31213:419::-;;31417:2;31406:9;31402:18;31394:26;;31466:9;31460:4;31456:20;31452:1;31441:9;31437:17;31430:47;31494:131;31620:4;31494:131;:::i;:::-;31486:139;;31384:248;;;:::o;31638:419::-;;31842:2;31831:9;31827:18;31819:26;;31891:9;31885:4;31881:20;31877:1;31866:9;31862:17;31855:47;31919:131;32045:4;31919:131;:::i;:::-;31911:139;;31809:248;;;:::o;32063:419::-;;32267:2;32256:9;32252:18;32244:26;;32316:9;32310:4;32306:20;32302:1;32291:9;32287:17;32280:47;32344:131;32470:4;32344:131;:::i;:::-;32336:139;;32234:248;;;:::o;32488:419::-;;32692:2;32681:9;32677:18;32669:26;;32741:9;32735:4;32731:20;32727:1;32716:9;32712:17;32705:47;32769:131;32895:4;32769:131;:::i;:::-;32761:139;;32659:248;;;:::o;32913:419::-;;33117:2;33106:9;33102:18;33094:26;;33166:9;33160:4;33156:20;33152:1;33141:9;33137:17;33130:47;33194:131;33320:4;33194:131;:::i;:::-;33186:139;;33084:248;;;:::o;33338:419::-;;33542:2;33531:9;33527:18;33519:26;;33591:9;33585:4;33581:20;33577:1;33566:9;33562:17;33555:47;33619:131;33745:4;33619:131;:::i;:::-;33611:139;;33509:248;;;:::o;33763:419::-;;33967:2;33956:9;33952:18;33944:26;;34016:9;34010:4;34006:20;34002:1;33991:9;33987:17;33980:47;34044:131;34170:4;34044:131;:::i;:::-;34036:139;;33934:248;;;:::o;34188:419::-;;34392:2;34381:9;34377:18;34369:26;;34441:9;34435:4;34431:20;34427:1;34416:9;34412:17;34405:47;34469:131;34595:4;34469:131;:::i;:::-;34461:139;;34359:248;;;:::o;34613:419::-;;34817:2;34806:9;34802:18;34794:26;;34866:9;34860:4;34856:20;34852:1;34841:9;34837:17;34830:47;34894:131;35020:4;34894:131;:::i;:::-;34886:139;;34784:248;;;:::o;35038:419::-;;35242:2;35231:9;35227:18;35219:26;;35291:9;35285:4;35281:20;35277:1;35266:9;35262:17;35255:47;35319:131;35445:4;35319:131;:::i;:::-;35311:139;;35209:248;;;:::o;35463:419::-;;35667:2;35656:9;35652:18;35644:26;;35716:9;35710:4;35706:20;35702:1;35691:9;35687:17;35680:47;35744:131;35870:4;35744:131;:::i;:::-;35736:139;;35634:248;;;:::o;35888:419::-;;36092:2;36081:9;36077:18;36069:26;;36141:9;36135:4;36131:20;36127:1;36116:9;36112:17;36105:47;36169:131;36295:4;36169:131;:::i;:::-;36161:139;;36059:248;;;:::o;36313:419::-;;36517:2;36506:9;36502:18;36494:26;;36566:9;36560:4;36556:20;36552:1;36541:9;36537:17;36530:47;36594:131;36720:4;36594:131;:::i;:::-;36586:139;;36484:248;;;:::o;36738:419::-;;36942:2;36931:9;36927:18;36919:26;;36991:9;36985:4;36981:20;36977:1;36966:9;36962:17;36955:47;37019:131;37145:4;37019:131;:::i;:::-;37011:139;;36909:248;;;:::o;37163:419::-;;37367:2;37356:9;37352:18;37344:26;;37416:9;37410:4;37406:20;37402:1;37391:9;37387:17;37380:47;37444:131;37570:4;37444:131;:::i;:::-;37436:139;;37334:248;;;:::o;37588:222::-;;37719:2;37708:9;37704:18;37696:26;;37732:71;37800:1;37789:9;37785:17;37776:6;37732:71;:::i;:::-;37686:124;;;;:::o;37816:129::-;;37877:20;;:::i;:::-;37867:30;;37906:33;37934:4;37926:6;37906:33;:::i;:::-;37857:88;;;:::o;37951:75::-;;38017:2;38011:9;38001:19;;37991:35;:::o;38032:307::-;;38183:18;38175:6;38172:30;38169:2;;;38205:18;;:::i;:::-;38169:2;38243:29;38265:6;38243:29;:::i;:::-;38235:37;;38327:4;38321;38317:15;38309:23;;38098:241;;;:::o;38345:308::-;;38497:18;38489:6;38486:30;38483:2;;;38519:18;;:::i;:::-;38483:2;38557:29;38579:6;38557:29;:::i;:::-;38549:37;;38641:4;38635;38631:15;38623:23;;38412:241;;;:::o;38659:141::-;;38731:3;38723:11;;38754:3;38751:1;38744:14;38788:4;38785:1;38775:18;38767:26;;38713:87;;;:::o;38806:98::-;;38891:5;38885:12;38875:22;;38864:40;;;:::o;38910:99::-;;38996:5;38990:12;38980:22;;38969:40;;;:::o;39015:168::-;;39132:6;39127:3;39120:19;39172:4;39167:3;39163:14;39148:29;;39110:73;;;;:::o;39189:147::-;;39327:3;39312:18;;39302:34;;;;:::o;39342:169::-;;39460:6;39455:3;39448:19;39500:4;39495:3;39491:14;39476:29;;39438:73;;;;:::o;39517:148::-;;39656:3;39641:18;;39631:34;;;;:::o;39671:305::-;;39730:20;39748:1;39730:20;:::i;:::-;39725:25;;39764:20;39782:1;39764:20;:::i;:::-;39759:25;;39918:1;39850:66;39846:74;39843:1;39840:81;39837:2;;;39924:18;;:::i;:::-;39837:2;39968:1;39965;39961:9;39954:16;;39715:261;;;;:::o;39982:185::-;;40039:20;40057:1;40039:20;:::i;:::-;40034:25;;40073:20;40091:1;40073:20;:::i;:::-;40068:25;;40112:1;40102:2;;40117:18;;:::i;:::-;40102:2;40159:1;40156;40152:9;40147:14;;40024:143;;;;:::o;40173:348::-;;40236:20;40254:1;40236:20;:::i;:::-;40231:25;;40270:20;40288:1;40270:20;:::i;:::-;40265:25;;40458:1;40390:66;40386:74;40383:1;40380:81;40375:1;40368:9;40361:17;40357:105;40354:2;;;40465:18;;:::i;:::-;40354:2;40513:1;40510;40506:9;40495:20;;40221:300;;;;:::o;40527:191::-;;40587:20;40605:1;40587:20;:::i;:::-;40582:25;;40621:20;40639:1;40621:20;:::i;:::-;40616:25;;40660:1;40657;40654:8;40651:2;;;40665:18;;:::i;:::-;40651:2;40710:1;40707;40703:9;40695:17;;40572:146;;;;:::o;40724:96::-;;40790:24;40808:5;40790:24;:::i;:::-;40779:35;;40769:51;;;:::o;40826:90::-;;40903:5;40896:13;40889:21;40878:32;;40868:48;;;:::o;40922:149::-;;40998:66;40991:5;40987:78;40976:89;;40966:105;;;:::o;41077:131::-;;41153:5;41142:16;;41159:43;41196:5;41159:43;:::i;:::-;41132:76;;;:::o;41214:126::-;;41291:42;41284:5;41280:54;41269:65;;41259:81;;;:::o;41346:77::-;;41412:5;41401:16;;41391:32;;;:::o;41429:131::-;;41520:34;41548:5;41520:34;:::i;:::-;41507:47;;41497:63;;;:::o;41566:154::-;41650:6;41645:3;41640;41627:30;41712:1;41703:6;41698:3;41694:16;41687:27;41617:103;;;:::o;41726:307::-;41794:1;41804:113;41818:6;41815:1;41812:13;41804:113;;;41903:1;41898:3;41894:11;41888:18;41884:1;41879:3;41875:11;41868:39;41840:2;41837:1;41833:10;41828:15;;41804:113;;;41935:6;41932:1;41929:13;41926:2;;;42015:1;42006:6;42001:3;41997:16;41990:27;41926:2;41775:258;;;;:::o;42039:320::-;;42120:1;42114:4;42110:12;42100:22;;42167:1;42161:4;42157:12;42188:18;42178:2;;42244:4;42236:6;42232:17;42222:27;;42178:2;42306;42298:6;42295:14;42275:18;42272:38;42269:2;;;42325:18;;:::i;:::-;42269:2;42090:269;;;;:::o;42365:281::-;42448:27;42470:4;42448:27;:::i;:::-;42440:6;42436:40;42578:6;42566:10;42563:22;42542:18;42530:10;42527:34;42524:62;42521:2;;;42589:18;;:::i;:::-;42521:2;42629:10;42625:2;42618:22;42408:238;;;:::o;42652:233::-;;42714:24;42732:5;42714:24;:::i;:::-;42705:33;;42760:66;42753:5;42750:77;42747:2;;;42830:18;;:::i;:::-;42747:2;42877:1;42870:5;42866:13;42859:20;;42695:190;;;:::o;42891:176::-;;42940:20;42958:1;42940:20;:::i;:::-;42935:25;;42974:20;42992:1;42974:20;:::i;:::-;42969:25;;43013:1;43003:2;;43018:18;;:::i;:::-;43003:2;43059:1;43056;43052:9;43047:14;;42925:142;;;;:::o;43073:180::-;43121:77;43118:1;43111:88;43218:4;43215:1;43208:15;43242:4;43239:1;43232:15;43259:180;43307:77;43304:1;43297:88;43404:4;43401:1;43394:15;43428:4;43425:1;43418:15;43445:180;43493:77;43490:1;43483:88;43590:4;43587:1;43580:15;43614:4;43611:1;43604:15;43631:180;43679:77;43676:1;43669:88;43776:4;43773:1;43766:15;43800:4;43797:1;43790:15;43817:180;43865:77;43862:1;43855:88;43962:4;43959:1;43952:15;43986:4;43983:1;43976:15;44003:102;;44095:2;44091:7;44086:2;44079:5;44075:14;44071:28;44061:38;;44051:54;;;:::o;44111:167::-;44251:19;44247:1;44239:6;44235:14;44228:43;44217:61;:::o;44284:237::-;44424:34;44420:1;44412:6;44408:14;44401:58;44493:20;44488:2;44480:6;44476:15;44469:45;44390:131;:::o;44527:225::-;44667:34;44663:1;44655:6;44651:14;44644:58;44736:8;44731:2;44723:6;44719:15;44712:33;44633:119;:::o;44758:224::-;44898:34;44894:1;44886:6;44882:14;44875:58;44967:7;44962:2;44954:6;44950:15;44943:32;44864:118;:::o;44988:178::-;45128:30;45124:1;45116:6;45112:14;45105:54;45094:72;:::o;45172:245::-;45312:34;45308:1;45300:6;45296:14;45289:58;45381:28;45376:2;45368:6;45364:15;45357:53;45278:139;:::o;45423:178::-;45563:30;45559:1;45551:6;45547:14;45540:54;45529:72;:::o;45607:170::-;45747:22;45743:1;45735:6;45731:14;45724:46;45713:64;:::o;45783:223::-;45923:34;45919:1;45911:6;45907:14;45900:58;45992:6;45987:2;45979:6;45975:15;45968:31;45889:117;:::o;46012:175::-;46152:27;46148:1;46140:6;46136:14;46129:51;46118:69;:::o;46193:231::-;46333:34;46329:1;46321:6;46317:14;46310:58;46402:14;46397:2;46389:6;46385:15;46378:39;46299:125;:::o;46430:181::-;46570:33;46566:1;46558:6;46554:14;46547:57;46536:75;:::o;46617:243::-;46757:34;46753:1;46745:6;46741:14;46734:58;46826:26;46821:2;46813:6;46809:15;46802:51;46723:137;:::o;46866:236::-;47006:34;47002:1;46994:6;46990:14;46983:58;47075:19;47070:2;47062:6;47058:15;47051:44;46972:130;:::o;47108:163::-;47248:15;47244:1;47236:6;47232:14;47225:39;47214:57;:::o;47277:229::-;47417:34;47413:1;47405:6;47401:14;47394:58;47486:12;47481:2;47473:6;47469:15;47462:37;47383:123;:::o;47512:231::-;47652:34;47648:1;47640:6;47636:14;47629:58;47721:14;47716:2;47708:6;47704:15;47697:39;47618:125;:::o;47749:228::-;47889:34;47885:1;47877:6;47873:14;47866:58;47958:11;47953:2;47945:6;47941:15;47934:36;47855:122;:::o;47983:182::-;48123:34;48119:1;48111:6;48107:14;48100:58;48089:76;:::o;48171:231::-;48311:34;48307:1;48299:6;48295:14;48288:58;48380:14;48375:2;48367:6;48363:15;48356:39;48277:125;:::o;48408:155::-;48548:7;48544:1;48536:6;48532:14;48525:31;48514:49;:::o;48569:182::-;48709:34;48705:1;48697:6;48693:14;48686:58;48675:76;:::o;48757:179::-;48897:31;48893:1;48885:6;48881:14;48874:55;48863:73;:::o;48942:234::-;49082:34;49078:1;49070:6;49066:14;49059:58;49151:17;49146:2;49138:6;49134:15;49127:42;49048:128;:::o;49182:222::-;49322:34;49318:1;49310:6;49306:14;49299:58;49391:5;49386:2;49378:6;49374:15;49367:30;49288:116;:::o;49410:177::-;49550:29;49546:1;49538:6;49534:14;49527:53;49516:71;:::o;49593:220::-;49733:34;49729:1;49721:6;49717:14;49710:58;49802:3;49797:2;49789:6;49785:15;49778:28;49699:114;:::o;49819:173::-;49959:25;49955:1;49947:6;49943:14;49936:49;49925:67;:::o;49998:114::-;50104:8;:::o;50118:236::-;50258:34;50254:1;50246:6;50242:14;50235:58;50327:19;50322:2;50314:6;50310:15;50303:44;50224:130;:::o;50360:181::-;50500:33;50496:1;50488:6;50484:14;50477:57;50466:75;:::o;50547:166::-;50687:18;50683:1;50675:6;50671:14;50664:42;50653:60;:::o;50719:115::-;50802:1;50795:5;50792:12;50782:2;;50808:18;;:::i;:::-;50782:2;50772:62;:::o;50840:122::-;50913:24;50931:5;50913:24;:::i;:::-;50906:5;50903:35;50893:2;;50952:1;50949;50942:12;50893:2;50883:79;:::o;50968:116::-;51038:21;51053:5;51038:21;:::i;:::-;51031:5;51028:32;51018:2;;51074:1;51071;51064:12;51018:2;51008:76;:::o;51090:120::-;51162:23;51179:5;51162:23;:::i;:::-;51155:5;51152:34;51142:2;;51200:1;51197;51190:12;51142:2;51132:78;:::o;51216:122::-;51289:24;51307:5;51289:24;:::i;:::-;51282:5;51279:35;51269:2;;51328:1;51325;51318:12;51269:2;51259:79;:::o
Swarm Source
ipfs://4d1bc6a09115dea95fd0118fc3549799442e6f5cbb949427d744bbc625ddd796
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.