Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 78 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint With Fo Pun... | 19151516 | 754 days ago | IN | 0 ETH | 0.00301116 | ||||
| Mint With Fo Pun... | 19151515 | 754 days ago | IN | 0 ETH | 0.00287484 | ||||
| Mint With Fo Pun... | 19151514 | 754 days ago | IN | 0 ETH | 0.00257688 | ||||
| Mint With Fo Pun... | 19151514 | 754 days ago | IN | 0 ETH | 0.00257694 | ||||
| Mint With Fo Pun... | 19151514 | 754 days ago | IN | 0 ETH | 0.00257694 | ||||
| Set Approval For... | 18670897 | 822 days ago | IN | 0 ETH | 0.00280179 | ||||
| Withdraw | 18564328 | 837 days ago | IN | 0 ETH | 0.0031312 | ||||
| Transfer From | 16817074 | 1082 days ago | IN | 0 ETH | 0.00139155 | ||||
| Mint With Fo Pun... | 16817062 | 1082 days ago | IN | 0 ETH | 0.00334085 | ||||
| Set Approval For... | 16277289 | 1158 days ago | IN | 0 ETH | 0.00076349 | ||||
| Transfer From | 14861929 | 1370 days ago | IN | 0 ETH | 0.00153438 | ||||
| Set Approval For... | 14803289 | 1380 days ago | IN | 0 ETH | 0.00070185 | ||||
| Mint | 14584892 | 1414 days ago | IN | 0.05 ETH | 0.00751518 | ||||
| Set Approval For... | 14268049 | 1464 days ago | IN | 0 ETH | 0.0011542 | ||||
| Set Approval For... | 14242610 | 1468 days ago | IN | 0 ETH | 0.00210887 | ||||
| Withdraw | 14155549 | 1481 days ago | IN | 0 ETH | 0.00399597 | ||||
| Transfer From | 14152295 | 1482 days ago | IN | 0 ETH | 0.00464889 | ||||
| Withdraw | 14143511 | 1483 days ago | IN | 0 ETH | 0.0026007 | ||||
| Mint With Fo Pun... | 14116229 | 1487 days ago | IN | 0 ETH | 0.01824745 | ||||
| Set Approval For... | 14088778 | 1492 days ago | IN | 0 ETH | 0.00535566 | ||||
| Set Approval For... | 14024073 | 1502 days ago | IN | 0 ETH | 0.00440794 | ||||
| Set Approval For... | 13978150 | 1509 days ago | IN | 0 ETH | 0.00929535 | ||||
| Mint With Fo Pun... | 13945578 | 1514 days ago | IN | 0 ETH | 0.02010649 | ||||
| Set Approval For... | 13914631 | 1518 days ago | IN | 0 ETH | 0.00554127 | ||||
| Withdraw | 13863827 | 1526 days ago | IN | 0 ETH | 0.00198462 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 18564328 | 837 days ago | 0.1 ETH | ||||
| - | 14201063 | 1474 days ago | 0.05 ETH | ||||
| - | 14155549 | 1481 days ago | 0.5 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144257 | 1483 days ago | 0.05 ETH | ||||
| - | 14144238 | 1483 days ago | 0.05 ETH | ||||
| - | 14143511 | 1483 days ago | 0.55 ETH | ||||
| - | 14116229 | 1487 days ago | 0.05 ETH | ||||
| - | 13930941 | 1516 days ago | 0.05 ETH | ||||
| - | 13930940 | 1516 days ago | 0.05 ETH | ||||
| - | 13930940 | 1516 days ago | 0.05 ETH | ||||
| - | 13930940 | 1516 days ago | 0.05 ETH | ||||
| - | 13930940 | 1516 days ago | 0.05 ETH | ||||
| - | 13930924 | 1516 days ago | 0.05 ETH | ||||
| - | 13930921 | 1516 days ago | 0.05 ETH | ||||
| - | 13930921 | 1516 days ago | 0.05 ETH | ||||
| - | 13930921 | 1516 days ago | 0.05 ETH | ||||
| - | 13872168 | 1525 days ago | 0.05 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GenVibes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-11-29
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts@4.4.0/utils/Counters.sol
// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts@4.4.0/utils/Strings.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/security/Pausable.sol
// OpenZeppelin Contracts v4.4.0 (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts@4.4.0/utils/Address.sol
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts@4.4.0/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.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 `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts@4.4.0/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.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`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts@4.4.0/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts@4.4.0/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.0 (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@4.4.0/token/ERC721/ERC721.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts@4.4.0/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: genvibes.sol
// __| __| \ | \ \ / _ _| _ ) __| __|
// (_ | _| . | \ \ / | _ \ _| \__ \
// \___| ___| _|\_| \_/ ___| ___/ ___| ____/
pragma solidity ^0.8.2;
interface FourierPunks {
function ownerOf(uint256 tokenId) external view returns (address owner);
}
contract GenVibes is ERC721, ERC721Enumerable, Pausable, Ownable {
event Mint(address indexed _from, uint _tokenID, uint _hash);
using Counters for Counters.Counter;
Counters.Counter public mintCounter;
Counters.Counter public fopunkMintCounter;
address fp_addr = 0xDb1cbD0B58fb4f7C9f6857025DA29f42371fB659;
FourierPunks fp;
uint mintPrice = 0.05 ether;
uint public constant MAX_FOPUNK_MINTS = 420;
uint public constant MAX_PAID_MINTS = 1000;
mapping(uint => bool) fopunk_mint;
mapping(uint => uint) public tokenHash;
string private _baseURIextended = 'https://api.genvibes.io/token?id=';
mapping(uint=>string) private generationCode;
string public generationCodeHash = '3c2ededf3eef5651e02617d790f1084c0469834a8c0644f922bea0043150443e';
string public p5jsversion = '1.4.0';
function updateCodeHash(string memory _newhash) public onlyOwner{
generationCodeHash = _newhash;
}
function uploadCode(uint part, string memory code) public onlyOwner{
generationCode[part] = code;
}
function getGenerationCode(uint part) public view returns (string memory){
return generationCode[part];
}
function checkFoPunk(uint fopunkID) public view returns (bool freeMint){
require(fopunkID < 420 && fopunkID >=0,"Not valid FourierPunk ID");
return !fopunk_mint[fopunkID];
}
function fpMints() public view returns (uint m){
return fopunkMintCounter.current();
}
function regMints() public view returns (uint m){
return mintCounter.current();
}
function mintWithFoPunk(uint fopunkID) public whenNotPaused{
require(fp.ownerOf(fopunkID) == msg.sender,"Not owner of that FourierPunk");
require(checkFoPunk(fopunkID),"Already used");
require(fopunkMintCounter.current() < MAX_FOPUNK_MINTS,"No free mints left");
fopunk_mint[fopunkID] = true;
uint nextTokenId = mintCounter.current()+fopunkMintCounter.current();
fopunkMintCounter.increment();
uint hash = generateHash(nextTokenId);
tokenHash[nextTokenId] = hash;
_safeMint(msg.sender, nextTokenId);
emit Mint(msg.sender, nextTokenId, hash);
}
function withdraw() public onlyOwner{
payable(msg.sender).transfer(address(this).balance);
}
function mint() public payable whenNotPaused{
require(msg.value >= mintPrice,"Not enough");
require(mintCounter.current() < MAX_PAID_MINTS,"No paid mints left");
uint nextTokenId = mintCounter.current()+fopunkMintCounter.current();
mintCounter.increment();
tokenHash[nextTokenId] = generateHash(nextTokenId);
uint hash = generateHash(nextTokenId);
tokenHash[nextTokenId] = hash;
_safeMint(msg.sender, nextTokenId);
emit Mint(msg.sender, nextTokenId, hash);
}
function generateHash(uint inp) internal view returns (uint randomNumber){
return uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, msg.sender, inp))) % 1e20;
}
constructor() ERC721("GenVibes", "GENV") {
fp = FourierPunks(fp_addr);
_pause();
}
function setBaseURI(string memory baseURI_) external onlyOwner() {
_baseURIextended = baseURI_;
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseURIextended;
}
function pause() public onlyOwner {
_pause();
}
function unpause() public onlyOwner {
_unpause();
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId)
internal
override(ERC721, ERC721Enumerable)
{
super._beforeTokenTransfer(from, to, tokenId);
}
// The following functions are overrides required by Solidity.
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721Enumerable)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}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":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_hash","type":"uint256"}],"name":"Mint","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_FOPUNK_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PAID_MINTS","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":"fopunkID","type":"uint256"}],"name":"checkFoPunk","outputs":[{"internalType":"bool","name":"freeMint","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fopunkMintCounter","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fpMints","outputs":[{"internalType":"uint256","name":"m","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generationCodeHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"part","type":"uint256"}],"name":"getGenerationCode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCounter","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fopunkID","type":"uint256"}],"name":"mintWithFoPunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"p5jsversion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"regMints","outputs":[{"internalType":"uint256","name":"m","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newhash","type":"string"}],"name":"updateCodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"part","type":"uint256"},{"internalType":"string","name":"code","type":"string"}],"name":"uploadCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405273db1cbd0b58fb4f7c9f6857025da29f42371fb659600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066b1a2bc2ec50000600f556040518060600160405280602181526020016200515a60219139601290805190602001906200009592919062000415565b506040518060600160405280604081526020016200517b6040913960149080519060200190620000c792919062000415565b506040518060400160405280600581526020017f312e342e30000000000000000000000000000000000000000000000000000000815250601590805190602001906200011592919062000415565b503480156200012357600080fd5b506040518060400160405280600881526020017f47656e56696265730000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f47454e56000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001a892919062000415565b508060019080519060200190620001c192919062000415565b5050506000600a60006101000a81548160ff021916908315150217905550620001ff620001f36200027860201b60201c565b6200028060201b60201c565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002726200034660201b60201c565b6200060f565b600033905090565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000356620003fe60201b60201c565b1562000399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000390906200051a565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003e56200027860201b60201c565b604051620003f49190620004fd565b60405180910390a1565b6000600a60009054906101000a900460ff16905090565b828054620004239062000581565b90600052602060002090601f01602090048101928262000447576000855562000493565b82601f106200046257805160ff191683800117855562000493565b8280016001018555821562000493579182015b828111156200049257825182559160200191906001019062000475565b5b509050620004a29190620004a6565b5090565b5b80821115620004c1576000816000905550600101620004a7565b5090565b620004d0816200054d565b82525050565b6000620004e56010836200053c565b9150620004f282620005e6565b602082019050919050565b6000602082019050620005146000830184620004c5565b92915050565b600060208201905081810360008301526200053581620004d6565b9050919050565b600082825260208201905092915050565b60006200055a8262000561565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200059a57607f821691505b60208210811415620005b157620005b0620005b7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b614b3b806200061f6000396000f3fe6080604052600436106102305760003560e01c806355f804b31161012e578063973c5f5f116100ab578063c87b56dd1161006f578063c87b56dd1461080c578063cbf23b0214610849578063e985e9c514610872578063f2fde38b146108af578063fd67191e146108d857610230565b8063973c5f5f14610727578063a22cb46514610752578063a38643971461077b578063a9a8721a146107b8578063b88d4fde146107e357610230565b806370a08231116100f257806370a0823114610666578063715018a6146106a35780638456cb59146106ba5780638da5cb5b146106d157806395d89b41146106fc57610230565b806355f804b3146105815780635c975abb146105aa5780635d226625146105d5578063600e2e8f146105fe5780636352211e1461062957610230565b806328eb6ab1116101bc57806346aa52ce1161018057806346aa52ce1461048657806347dece93146104b157806348756e81146104dc5780634f6ccce714610507578063552bf34a1461054457610230565b806328eb6ab1146103c75780632f745c59146103f25780633ccfd60b1461042f5780633f4ba83a1461044657806342842e0e1461045d57610230565b806310c7343b1161020357806310c7343b146103035780631249c58b1461034057806318160ddd1461034a5780632217be1e1461037557806323b872dd1461039e57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613587565b610903565b6040516102699190613c18565b60405180910390f35b34801561027e57600080fd5b50610287610915565b6040516102949190613c33565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061362a565b6109a7565b6040516102d19190613bb1565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613547565b610a2c565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061362a565b610b44565b6040516103379190613c18565b60405180910390f35b610348610bc0565b005b34801561035657600080fd5b5061035f610d69565b60405161036c9190613f95565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190613657565b610d76565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190613431565b610e1e565b005b3480156103d357600080fd5b506103dc610e7e565b6040516103e99190613f95565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613547565b610e8f565b6040516104269190613f95565b60405180910390f35b34801561043b57600080fd5b50610444610f34565b005b34801561045257600080fd5b5061045b610ff9565b005b34801561046957600080fd5b50610484600480360381019061047f9190613431565b61107f565b005b34801561049257600080fd5b5061049b61109f565b6040516104a89190613f95565b60405180910390f35b3480156104bd57600080fd5b506104c66110ab565b6040516104d39190613c33565b60405180910390f35b3480156104e857600080fd5b506104f1611139565b6040516104fe9190613f95565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061362a565b61113f565b60405161053b9190613f95565b60405180910390f35b34801561055057600080fd5b5061056b6004803603810190610566919061362a565b6111b0565b6040516105789190613c33565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906135e1565b611255565b005b3480156105b657600080fd5b506105bf6112eb565b6040516105cc9190613c18565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061362a565b611302565b005b34801561060a57600080fd5b506106136115d3565b6040516106209190613f95565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b919061362a565b6115e4565b60405161065d9190613bb1565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613397565b611696565b60405161069a9190613f95565b60405180910390f35b3480156106af57600080fd5b506106b861174e565b005b3480156106c657600080fd5b506106cf6117d6565b005b3480156106dd57600080fd5b506106e661185c565b6040516106f39190613bb1565b60405180910390f35b34801561070857600080fd5b50610711611886565b60405161071e9190613c33565b60405180910390f35b34801561073357600080fd5b5061073c611918565b6040516107499190613f95565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190613507565b61191e565b005b34801561078757600080fd5b506107a2600480360381019061079d919061362a565b611934565b6040516107af9190613f95565b60405180910390f35b3480156107c457600080fd5b506107cd61194c565b6040516107da9190613c33565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613484565b6119da565b005b34801561081857600080fd5b50610833600480360381019061082e919061362a565b611a3c565b6040516108409190613c33565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906135e1565b611ae3565b005b34801561087e57600080fd5b50610899600480360381019061089491906133f1565b611b79565b6040516108a69190613c18565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613397565b611c0d565b005b3480156108e457600080fd5b506108ed611d05565b6040516108fa9190613f95565b60405180910390f35b600061090e82611d11565b9050919050565b60606000805461092490614214565b80601f016020809104026020016040519081016040528092919081815260200182805461095090614214565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b5050505050905090565b60006109b282611d8b565b6109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890613e55565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a37826115e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613ed5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac7611df7565b73ffffffffffffffffffffffffffffffffffffffff161480610af65750610af581610af0611df7565b611b79565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613d95565b60405180910390fd5b610b3f8383611dff565b505050565b60006101a482108015610b58575060008210155b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613f35565b60405180910390fd5b6010600083815260200190815260200160002060009054906101000a900460ff16159050919050565b610bc86112eb565b15610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613d75565b60405180910390fd5b600f54341015610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613db5565b60405180910390fd5b6103e8610c5a600b611eb8565b10610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9190613f55565b60405180910390fd5b6000610ca6600c611eb8565b610cb0600b611eb8565b610cba91906140a3565b9050610cc6600b611ec6565b610ccf81611edc565b60116000838152602001908152602001600020819055506000610cf182611edc565b9050806011600084815260200190815260200160002081905550610d153383611f29565b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8383604051610d5d929190613fb0565b60405180910390a25050565b6000600880549050905090565b610d7e611df7565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61185c565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613e75565b60405180910390fd5b80601360008481526020019081526020016000209080519060200190610e19929190613196565b505050565b610e2f610e29611df7565b82611f47565b610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613ef5565b60405180910390fd5b610e79838383612025565b505050565b6000610e8a600c611eb8565b905090565b6000610e9a83611696565b8210610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290613c95565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f3c611df7565b73ffffffffffffffffffffffffffffffffffffffff16610f5a61185c565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613e75565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ff6573d6000803e3d6000fd5b50565b611001611df7565b73ffffffffffffffffffffffffffffffffffffffff1661101f61185c565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613e75565b60405180910390fd5b61107d612281565b565b61109a838383604051806020016040528060008152506119da565b505050565b600b8060000154905081565b601580546110b890614214565b80601f01602080910402602001604051908101604052809291908181526020018280546110e490614214565b80156111315780601f1061110657610100808354040283529160200191611131565b820191906000526020600020905b81548152906001019060200180831161111457829003601f168201915b505050505081565b6103e881565b6000611149610d69565b821061118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613f15565b60405180910390fd5b6008828154811061119e5761119d6143db565b5b90600052602060002001549050919050565b60606013600083815260200190815260200160002080546111d090614214565b80601f01602080910402602001604051908101604052809291908181526020018280546111fc90614214565b80156112495780601f1061121e57610100808354040283529160200191611249565b820191906000526020600020905b81548152906001019060200180831161122c57829003601f168201915b50505050509050919050565b61125d611df7565b73ffffffffffffffffffffffffffffffffffffffff1661127b61185c565b73ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890613e75565b60405180910390fd5b80601290805190602001906112e7929190613196565b5050565b6000600a60009054906101000a900460ff16905090565b61130a6112eb565b1561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613d75565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113bc9190613f95565b60206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c91906133c4565b73ffffffffffffffffffffffffffffffffffffffff1614611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145990613f75565b60405180910390fd5b61146b81610b44565b6114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613c55565b60405180910390fd5b6101a46114b7600c611eb8565b106114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613e35565b60405180910390fd5b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600061152f600c611eb8565b611539600b611eb8565b61154391906140a3565b905061154f600c611ec6565b600061155a82611edc565b905080601160008481526020019081526020016000208190555061157e3383611f29565b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83836040516115c6929190613fb0565b60405180910390a2505050565b60006115df600b611eb8565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168490613df5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613dd5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611756611df7565b73ffffffffffffffffffffffffffffffffffffffff1661177461185c565b73ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613e75565b60405180910390fd5b6117d46000612323565b565b6117de611df7565b73ffffffffffffffffffffffffffffffffffffffff166117fc61185c565b73ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613e75565b60405180910390fd5b61185a6123e9565b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461189590614214565b80601f01602080910402602001604051908101604052809291908181526020018280546118c190614214565b801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050905090565b6101a481565b611930611929611df7565b838361248c565b5050565b60116020528060005260406000206000915090505481565b6014805461195990614214565b80601f016020809104026020016040519081016040528092919081815260200182805461198590614214565b80156119d25780601f106119a7576101008083540402835291602001916119d2565b820191906000526020600020905b8154815290600101906020018083116119b557829003601f168201915b505050505081565b6119eb6119e5611df7565b83611f47565b611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613ef5565b60405180910390fd5b611a36848484846125f9565b50505050565b6060611a4782611d8b565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613eb5565b60405180910390fd5b6000611a90612655565b90506000815111611ab05760405180602001604052806000815250611adb565b80611aba846126e7565b604051602001611acb929190613b3f565b6040516020818303038152906040525b915050919050565b611aeb611df7565b73ffffffffffffffffffffffffffffffffffffffff16611b0961185c565b73ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613e75565b60405180910390fd5b8060149080519060200190611b75929190613196565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c15611df7565b73ffffffffffffffffffffffffffffffffffffffff16611c3361185c565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090613cd5565b60405180910390fd5b611d0281612323565b50565b600c8060000154905081565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d845750611d8382612848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e72836115e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600068056bc75e2d6310000044423385604051602001611eff9493929190613b63565b6040516020818303038152906040528051906020012060001c611f2291906142ee565b9050919050565b611f4382826040518060200160405280600081525061292a565b5050565b6000611f5282611d8b565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613d55565b60405180910390fd5b6000611f9c836115e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200b57508373ffffffffffffffffffffffffffffffffffffffff16611ff3846109a7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061201c575061201b8185611b79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612045826115e4565b73ffffffffffffffffffffffffffffffffffffffff161461209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613d15565b60405180910390fd5b612116838383612985565b612121600082611dff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612171919061412a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c891906140a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6122896112eb565b6122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613c75565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61230c611df7565b6040516123199190613bb1565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123f16112eb565b15612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242890613d75565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612475611df7565b6040516124829190613bb1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290613d35565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125ec9190613c18565b60405180910390a3505050565b612604848484612025565b61261084848484612995565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613cb5565b60405180910390fd5b50505050565b60606012805461266490614214565b80601f016020809104026020016040519081016040528092919081815260200182805461269090614214565b80156126dd5780601f106126b2576101008083540402835291602001916126dd565b820191906000526020600020905b8154815290600101906020018083116126c057829003601f168201915b5050505050905090565b6060600082141561272f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612843565b600082905060005b6000821461276157808061274a90614277565b915050600a8261275a91906140f9565b9150612737565b60008167ffffffffffffffff81111561277d5761277c61440a565b5b6040519080825280601f01601f1916602001820160405280156127af5781602001600182028036833780820191505090505b5090505b6000851461283c576001826127c8919061412a565b9150600a856127d791906142ee565b60306127e391906140a3565b60f81b8183815181106127f9576127f86143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561283591906140f9565b94506127b3565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061291357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612923575061292282612b2c565b5b9050919050565b6129348383612b96565b6129416000848484612995565b612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790613cb5565b60405180910390fd5b505050565b612990838383612d64565b505050565b60006129b68473ffffffffffffffffffffffffffffffffffffffff16612e78565b15612b1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129df611df7565b8786866040518563ffffffff1660e01b8152600401612a019493929190613bcc565b602060405180830381600087803b158015612a1b57600080fd5b505af1925050508015612a4c57506040513d601f19601f82011682018060405250810190612a4991906135b4565b60015b612acf573d8060008114612a7c576040519150601f19603f3d011682016040523d82523d6000602084013e612a81565b606091505b50600081511415612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90613cb5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b24565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd90613e15565b60405180910390fd5b612c0f81611d8b565b15612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690613cf5565b60405180910390fd5b612c5b60008383612985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906140a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612d6f838383612e8b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612db257612dad81612e90565b612df1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612df057612def8382612ed9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3457612e2f81613046565b612e73565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e7257612e718282613117565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ee684611696565b612ef0919061412a565b9050600060076000848152602001908152602001600020549050818114612fd5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305a919061412a565b905060006009600084815260200190815260200160002054905060006008838154811061308a576130896143db565b5b9060005260206000200154905080600883815481106130ac576130ab6143db565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130fb576130fa6143ac565b5b6001900381819060005260206000200160009055905550505050565b600061312283611696565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546131a290614214565b90600052602060002090601f0160209004810192826131c4576000855561320b565b82601f106131dd57805160ff191683800117855561320b565b8280016001018555821561320b579182015b8281111561320a5782518255916020019190600101906131ef565b5b509050613218919061321c565b5090565b5b8082111561323557600081600090555060010161321d565b5090565b600061324c61324784613ffe565b613fd9565b9050828152602081018484840111156132685761326761443e565b5b6132738482856141d2565b509392505050565b600061328e6132898461402f565b613fd9565b9050828152602081018484840111156132aa576132a961443e565b5b6132b58482856141d2565b509392505050565b6000813590506132cc81614aa9565b92915050565b6000815190506132e181614aa9565b92915050565b6000813590506132f681614ac0565b92915050565b60008135905061330b81614ad7565b92915050565b60008151905061332081614ad7565b92915050565b600082601f83011261333b5761333a614439565b5b813561334b848260208601613239565b91505092915050565b600082601f83011261336957613368614439565b5b813561337984826020860161327b565b91505092915050565b60008135905061339181614aee565b92915050565b6000602082840312156133ad576133ac614448565b5b60006133bb848285016132bd565b91505092915050565b6000602082840312156133da576133d9614448565b5b60006133e8848285016132d2565b91505092915050565b6000806040838503121561340857613407614448565b5b6000613416858286016132bd565b9250506020613427858286016132bd565b9150509250929050565b60008060006060848603121561344a57613449614448565b5b6000613458868287016132bd565b9350506020613469868287016132bd565b925050604061347a86828701613382565b9150509250925092565b6000806000806080858703121561349e5761349d614448565b5b60006134ac878288016132bd565b94505060206134bd878288016132bd565b93505060406134ce87828801613382565b925050606085013567ffffffffffffffff8111156134ef576134ee614443565b5b6134fb87828801613326565b91505092959194509250565b6000806040838503121561351e5761351d614448565b5b600061352c858286016132bd565b925050602061353d858286016132e7565b9150509250929050565b6000806040838503121561355e5761355d614448565b5b600061356c858286016132bd565b925050602061357d85828601613382565b9150509250929050565b60006020828403121561359d5761359c614448565b5b60006135ab848285016132fc565b91505092915050565b6000602082840312156135ca576135c9614448565b5b60006135d884828501613311565b91505092915050565b6000602082840312156135f7576135f6614448565b5b600082013567ffffffffffffffff81111561361557613614614443565b5b61362184828501613354565b91505092915050565b6000602082840312156136405761363f614448565b5b600061364e84828501613382565b91505092915050565b6000806040838503121561366e5761366d614448565b5b600061367c85828601613382565b925050602083013567ffffffffffffffff81111561369d5761369c614443565b5b6136a985828601613354565b9150509250929050565b6136bc8161415e565b82525050565b6136d36136ce8261415e565b6142c0565b82525050565b6136e281614170565b82525050565b60006136f382614060565b6136fd8185614076565b935061370d8185602086016141e1565b6137168161444d565b840191505092915050565b600061372c8261406b565b6137368185614087565b93506137468185602086016141e1565b61374f8161444d565b840191505092915050565b60006137658261406b565b61376f8185614098565b935061377f8185602086016141e1565b80840191505092915050565b6000613798600c83614087565b91506137a38261446b565b602082019050919050565b60006137bb601483614087565b91506137c682614494565b602082019050919050565b60006137de602b83614087565b91506137e9826144bd565b604082019050919050565b6000613801603283614087565b915061380c8261450c565b604082019050919050565b6000613824602683614087565b915061382f8261455b565b604082019050919050565b6000613847601c83614087565b9150613852826145aa565b602082019050919050565b600061386a602483614087565b9150613875826145d3565b604082019050919050565b600061388d601983614087565b915061389882614622565b602082019050919050565b60006138b0602c83614087565b91506138bb8261464b565b604082019050919050565b60006138d3601083614087565b91506138de8261469a565b602082019050919050565b60006138f6603883614087565b9150613901826146c3565b604082019050919050565b6000613919600a83614087565b915061392482614712565b602082019050919050565b600061393c602a83614087565b91506139478261473b565b604082019050919050565b600061395f602983614087565b915061396a8261478a565b604082019050919050565b6000613982602083614087565b915061398d826147d9565b602082019050919050565b60006139a5601283614087565b91506139b082614802565b602082019050919050565b60006139c8602c83614087565b91506139d38261482b565b604082019050919050565b60006139eb602083614087565b91506139f68261487a565b602082019050919050565b6000613a0e602983614087565b9150613a19826148a3565b604082019050919050565b6000613a31602f83614087565b9150613a3c826148f2565b604082019050919050565b6000613a54602183614087565b9150613a5f82614941565b604082019050919050565b6000613a77603183614087565b9150613a8282614990565b604082019050919050565b6000613a9a602c83614087565b9150613aa5826149df565b604082019050919050565b6000613abd601883614087565b9150613ac882614a2e565b602082019050919050565b6000613ae0601283614087565b9150613aeb82614a57565b602082019050919050565b6000613b03601d83614087565b9150613b0e82614a80565b602082019050919050565b613b22816141c8565b82525050565b613b39613b34826141c8565b6142e4565b82525050565b6000613b4b828561375a565b9150613b57828461375a565b91508190509392505050565b6000613b6f8287613b28565b602082019150613b7f8286613b28565b602082019150613b8f82856136c2565b601482019150613b9f8284613b28565b60208201915081905095945050505050565b6000602082019050613bc660008301846136b3565b92915050565b6000608082019050613be160008301876136b3565b613bee60208301866136b3565b613bfb6040830185613b19565b8181036060830152613c0d81846136e8565b905095945050505050565b6000602082019050613c2d60008301846136d9565b92915050565b60006020820190508181036000830152613c4d8184613721565b905092915050565b60006020820190508181036000830152613c6e8161378b565b9050919050565b60006020820190508181036000830152613c8e816137ae565b9050919050565b60006020820190508181036000830152613cae816137d1565b9050919050565b60006020820190508181036000830152613cce816137f4565b9050919050565b60006020820190508181036000830152613cee81613817565b9050919050565b60006020820190508181036000830152613d0e8161383a565b9050919050565b60006020820190508181036000830152613d2e8161385d565b9050919050565b60006020820190508181036000830152613d4e81613880565b9050919050565b60006020820190508181036000830152613d6e816138a3565b9050919050565b60006020820190508181036000830152613d8e816138c6565b9050919050565b60006020820190508181036000830152613dae816138e9565b9050919050565b60006020820190508181036000830152613dce8161390c565b9050919050565b60006020820190508181036000830152613dee8161392f565b9050919050565b60006020820190508181036000830152613e0e81613952565b9050919050565b60006020820190508181036000830152613e2e81613975565b9050919050565b60006020820190508181036000830152613e4e81613998565b9050919050565b60006020820190508181036000830152613e6e816139bb565b9050919050565b60006020820190508181036000830152613e8e816139de565b9050919050565b60006020820190508181036000830152613eae81613a01565b9050919050565b60006020820190508181036000830152613ece81613a24565b9050919050565b60006020820190508181036000830152613eee81613a47565b9050919050565b60006020820190508181036000830152613f0e81613a6a565b9050919050565b60006020820190508181036000830152613f2e81613a8d565b9050919050565b60006020820190508181036000830152613f4e81613ab0565b9050919050565b60006020820190508181036000830152613f6e81613ad3565b9050919050565b60006020820190508181036000830152613f8e81613af6565b9050919050565b6000602082019050613faa6000830184613b19565b92915050565b6000604082019050613fc56000830185613b19565b613fd26020830184613b19565b9392505050565b6000613fe3613ff4565b9050613fef8282614246565b919050565b6000604051905090565b600067ffffffffffffffff8211156140195761401861440a565b5b6140228261444d565b9050602081019050919050565b600067ffffffffffffffff82111561404a5761404961440a565b5b6140538261444d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140ae826141c8565b91506140b9836141c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ee576140ed61431f565b5b828201905092915050565b6000614104826141c8565b915061410f836141c8565b92508261411f5761411e61434e565b5b828204905092915050565b6000614135826141c8565b9150614140836141c8565b9250828210156141535761415261431f565b5b828203905092915050565b6000614169826141a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141ff5780820151818401526020810190506141e4565b8381111561420e576000848401525b50505050565b6000600282049050600182168061422c57607f821691505b602082108114156142405761423f61437d565b5b50919050565b61424f8261444d565b810181811067ffffffffffffffff8211171561426e5761426d61440a565b5b80604052505050565b6000614282826141c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b5576142b461431f565b5b600182019050919050565b60006142cb826142d2565b9050919050565b60006142dd8261445e565b9050919050565b6000819050919050565b60006142f9826141c8565b9150614304836141c8565b9250826143145761431361434e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416c726561647920757365640000000000000000000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f2066726565206d696e7473206c6566740000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f742076616c696420466f757269657250756e6b2049440000000000000000600082015250565b7f4e6f2070616964206d696e7473206c6566740000000000000000000000000000600082015250565b7f4e6f74206f776e6572206f66207468617420466f757269657250756e6b000000600082015250565b614ab28161415e565b8114614abd57600080fd5b50565b614ac981614170565b8114614ad457600080fd5b50565b614ae08161417c565b8114614aeb57600080fd5b50565b614af7816141c8565b8114614b0257600080fd5b5056fea26469706673582212205fa87e8b55ce6d1985a7021813a6d03249ea943960df08317eb789bc567554b064736f6c6343000807003368747470733a2f2f6170692e67656e76696265732e696f2f746f6b656e3f69643d33633265646564663365656635363531653032363137643739306631303834633034363938333461386330363434663932326265613030343331353034343365
Deployed Bytecode
0x6080604052600436106102305760003560e01c806355f804b31161012e578063973c5f5f116100ab578063c87b56dd1161006f578063c87b56dd1461080c578063cbf23b0214610849578063e985e9c514610872578063f2fde38b146108af578063fd67191e146108d857610230565b8063973c5f5f14610727578063a22cb46514610752578063a38643971461077b578063a9a8721a146107b8578063b88d4fde146107e357610230565b806370a08231116100f257806370a0823114610666578063715018a6146106a35780638456cb59146106ba5780638da5cb5b146106d157806395d89b41146106fc57610230565b806355f804b3146105815780635c975abb146105aa5780635d226625146105d5578063600e2e8f146105fe5780636352211e1461062957610230565b806328eb6ab1116101bc57806346aa52ce1161018057806346aa52ce1461048657806347dece93146104b157806348756e81146104dc5780634f6ccce714610507578063552bf34a1461054457610230565b806328eb6ab1146103c75780632f745c59146103f25780633ccfd60b1461042f5780633f4ba83a1461044657806342842e0e1461045d57610230565b806310c7343b1161020357806310c7343b146103035780631249c58b1461034057806318160ddd1461034a5780632217be1e1461037557806323b872dd1461039e57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613587565b610903565b6040516102699190613c18565b60405180910390f35b34801561027e57600080fd5b50610287610915565b6040516102949190613c33565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061362a565b6109a7565b6040516102d19190613bb1565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613547565b610a2c565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061362a565b610b44565b6040516103379190613c18565b60405180910390f35b610348610bc0565b005b34801561035657600080fd5b5061035f610d69565b60405161036c9190613f95565b60405180910390f35b34801561038157600080fd5b5061039c60048036038101906103979190613657565b610d76565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190613431565b610e1e565b005b3480156103d357600080fd5b506103dc610e7e565b6040516103e99190613f95565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190613547565b610e8f565b6040516104269190613f95565b60405180910390f35b34801561043b57600080fd5b50610444610f34565b005b34801561045257600080fd5b5061045b610ff9565b005b34801561046957600080fd5b50610484600480360381019061047f9190613431565b61107f565b005b34801561049257600080fd5b5061049b61109f565b6040516104a89190613f95565b60405180910390f35b3480156104bd57600080fd5b506104c66110ab565b6040516104d39190613c33565b60405180910390f35b3480156104e857600080fd5b506104f1611139565b6040516104fe9190613f95565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061362a565b61113f565b60405161053b9190613f95565b60405180910390f35b34801561055057600080fd5b5061056b6004803603810190610566919061362a565b6111b0565b6040516105789190613c33565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906135e1565b611255565b005b3480156105b657600080fd5b506105bf6112eb565b6040516105cc9190613c18565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061362a565b611302565b005b34801561060a57600080fd5b506106136115d3565b6040516106209190613f95565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b919061362a565b6115e4565b60405161065d9190613bb1565b60405180910390f35b34801561067257600080fd5b5061068d60048036038101906106889190613397565b611696565b60405161069a9190613f95565b60405180910390f35b3480156106af57600080fd5b506106b861174e565b005b3480156106c657600080fd5b506106cf6117d6565b005b3480156106dd57600080fd5b506106e661185c565b6040516106f39190613bb1565b60405180910390f35b34801561070857600080fd5b50610711611886565b60405161071e9190613c33565b60405180910390f35b34801561073357600080fd5b5061073c611918565b6040516107499190613f95565b60405180910390f35b34801561075e57600080fd5b5061077960048036038101906107749190613507565b61191e565b005b34801561078757600080fd5b506107a2600480360381019061079d919061362a565b611934565b6040516107af9190613f95565b60405180910390f35b3480156107c457600080fd5b506107cd61194c565b6040516107da9190613c33565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613484565b6119da565b005b34801561081857600080fd5b50610833600480360381019061082e919061362a565b611a3c565b6040516108409190613c33565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906135e1565b611ae3565b005b34801561087e57600080fd5b50610899600480360381019061089491906133f1565b611b79565b6040516108a69190613c18565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613397565b611c0d565b005b3480156108e457600080fd5b506108ed611d05565b6040516108fa9190613f95565b60405180910390f35b600061090e82611d11565b9050919050565b60606000805461092490614214565b80601f016020809104026020016040519081016040528092919081815260200182805461095090614214565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b5050505050905090565b60006109b282611d8b565b6109f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e890613e55565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a37826115e4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613ed5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac7611df7565b73ffffffffffffffffffffffffffffffffffffffff161480610af65750610af581610af0611df7565b611b79565b5b610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c90613d95565b60405180910390fd5b610b3f8383611dff565b505050565b60006101a482108015610b58575060008210155b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613f35565b60405180910390fd5b6010600083815260200190815260200160002060009054906101000a900460ff16159050919050565b610bc86112eb565b15610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613d75565b60405180910390fd5b600f54341015610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613db5565b60405180910390fd5b6103e8610c5a600b611eb8565b10610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9190613f55565b60405180910390fd5b6000610ca6600c611eb8565b610cb0600b611eb8565b610cba91906140a3565b9050610cc6600b611ec6565b610ccf81611edc565b60116000838152602001908152602001600020819055506000610cf182611edc565b9050806011600084815260200190815260200160002081905550610d153383611f29565b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8383604051610d5d929190613fb0565b60405180910390a25050565b6000600880549050905090565b610d7e611df7565b73ffffffffffffffffffffffffffffffffffffffff16610d9c61185c565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613e75565b60405180910390fd5b80601360008481526020019081526020016000209080519060200190610e19929190613196565b505050565b610e2f610e29611df7565b82611f47565b610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613ef5565b60405180910390fd5b610e79838383612025565b505050565b6000610e8a600c611eb8565b905090565b6000610e9a83611696565b8210610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290613c95565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f3c611df7565b73ffffffffffffffffffffffffffffffffffffffff16610f5a61185c565b73ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790613e75565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ff6573d6000803e3d6000fd5b50565b611001611df7565b73ffffffffffffffffffffffffffffffffffffffff1661101f61185c565b73ffffffffffffffffffffffffffffffffffffffff1614611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c90613e75565b60405180910390fd5b61107d612281565b565b61109a838383604051806020016040528060008152506119da565b505050565b600b8060000154905081565b601580546110b890614214565b80601f01602080910402602001604051908101604052809291908181526020018280546110e490614214565b80156111315780601f1061110657610100808354040283529160200191611131565b820191906000526020600020905b81548152906001019060200180831161111457829003601f168201915b505050505081565b6103e881565b6000611149610d69565b821061118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613f15565b60405180910390fd5b6008828154811061119e5761119d6143db565b5b90600052602060002001549050919050565b60606013600083815260200190815260200160002080546111d090614214565b80601f01602080910402602001604051908101604052809291908181526020018280546111fc90614214565b80156112495780601f1061121e57610100808354040283529160200191611249565b820191906000526020600020905b81548152906001019060200180831161122c57829003601f168201915b50505050509050919050565b61125d611df7565b73ffffffffffffffffffffffffffffffffffffffff1661127b61185c565b73ffffffffffffffffffffffffffffffffffffffff16146112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c890613e75565b60405180910390fd5b80601290805190602001906112e7929190613196565b5050565b6000600a60009054906101000a900460ff16905090565b61130a6112eb565b1561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613d75565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016113bc9190613f95565b60206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c91906133c4565b73ffffffffffffffffffffffffffffffffffffffff1614611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145990613f75565b60405180910390fd5b61146b81610b44565b6114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a190613c55565b60405180910390fd5b6101a46114b7600c611eb8565b106114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613e35565b60405180910390fd5b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600061152f600c611eb8565b611539600b611eb8565b61154391906140a3565b905061154f600c611ec6565b600061155a82611edc565b905080601160008481526020019081526020016000208190555061157e3383611f29565b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83836040516115c6929190613fb0565b60405180910390a2505050565b60006115df600b611eb8565b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168490613df5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613dd5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611756611df7565b73ffffffffffffffffffffffffffffffffffffffff1661177461185c565b73ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613e75565b60405180910390fd5b6117d46000612323565b565b6117de611df7565b73ffffffffffffffffffffffffffffffffffffffff166117fc61185c565b73ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613e75565b60405180910390fd5b61185a6123e9565b565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461189590614214565b80601f01602080910402602001604051908101604052809291908181526020018280546118c190614214565b801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050905090565b6101a481565b611930611929611df7565b838361248c565b5050565b60116020528060005260406000206000915090505481565b6014805461195990614214565b80601f016020809104026020016040519081016040528092919081815260200182805461198590614214565b80156119d25780601f106119a7576101008083540402835291602001916119d2565b820191906000526020600020905b8154815290600101906020018083116119b557829003601f168201915b505050505081565b6119eb6119e5611df7565b83611f47565b611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613ef5565b60405180910390fd5b611a36848484846125f9565b50505050565b6060611a4782611d8b565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613eb5565b60405180910390fd5b6000611a90612655565b90506000815111611ab05760405180602001604052806000815250611adb565b80611aba846126e7565b604051602001611acb929190613b3f565b6040516020818303038152906040525b915050919050565b611aeb611df7565b73ffffffffffffffffffffffffffffffffffffffff16611b0961185c565b73ffffffffffffffffffffffffffffffffffffffff1614611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690613e75565b60405180910390fd5b8060149080519060200190611b75929190613196565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c15611df7565b73ffffffffffffffffffffffffffffffffffffffff16611c3361185c565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613e75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf090613cd5565b60405180910390fd5b611d0281612323565b50565b600c8060000154905081565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d845750611d8382612848565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e72836115e4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600068056bc75e2d6310000044423385604051602001611eff9493929190613b63565b6040516020818303038152906040528051906020012060001c611f2291906142ee565b9050919050565b611f4382826040518060200160405280600081525061292a565b5050565b6000611f5282611d8b565b611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613d55565b60405180910390fd5b6000611f9c836115e4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200b57508373ffffffffffffffffffffffffffffffffffffffff16611ff3846109a7565b73ffffffffffffffffffffffffffffffffffffffff16145b8061201c575061201b8185611b79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612045826115e4565b73ffffffffffffffffffffffffffffffffffffffff161461209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613d15565b60405180910390fd5b612116838383612985565b612121600082611dff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612171919061412a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121c891906140a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6122896112eb565b6122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613c75565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61230c611df7565b6040516123199190613bb1565b60405180910390a1565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123f16112eb565b15612431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242890613d75565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612475611df7565b6040516124829190613bb1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290613d35565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125ec9190613c18565b60405180910390a3505050565b612604848484612025565b61261084848484612995565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613cb5565b60405180910390fd5b50505050565b60606012805461266490614214565b80601f016020809104026020016040519081016040528092919081815260200182805461269090614214565b80156126dd5780601f106126b2576101008083540402835291602001916126dd565b820191906000526020600020905b8154815290600101906020018083116126c057829003601f168201915b5050505050905090565b6060600082141561272f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612843565b600082905060005b6000821461276157808061274a90614277565b915050600a8261275a91906140f9565b9150612737565b60008167ffffffffffffffff81111561277d5761277c61440a565b5b6040519080825280601f01601f1916602001820160405280156127af5781602001600182028036833780820191505090505b5090505b6000851461283c576001826127c8919061412a565b9150600a856127d791906142ee565b60306127e391906140a3565b60f81b8183815181106127f9576127f86143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561283591906140f9565b94506127b3565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061291357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612923575061292282612b2c565b5b9050919050565b6129348383612b96565b6129416000848484612995565b612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297790613cb5565b60405180910390fd5b505050565b612990838383612d64565b505050565b60006129b68473ffffffffffffffffffffffffffffffffffffffff16612e78565b15612b1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129df611df7565b8786866040518563ffffffff1660e01b8152600401612a019493929190613bcc565b602060405180830381600087803b158015612a1b57600080fd5b505af1925050508015612a4c57506040513d601f19601f82011682018060405250810190612a4991906135b4565b60015b612acf573d8060008114612a7c576040519150601f19603f3d011682016040523d82523d6000602084013e612a81565b606091505b50600081511415612ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe90613cb5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b24565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd90613e15565b60405180910390fd5b612c0f81611d8b565b15612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690613cf5565b60405180910390fd5b612c5b60008383612985565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906140a3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612d6f838383612e8b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612db257612dad81612e90565b612df1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612df057612def8382612ed9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3457612e2f81613046565b612e73565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e7257612e718282613117565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ee684611696565b612ef0919061412a565b9050600060076000848152602001908152602001600020549050818114612fd5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305a919061412a565b905060006009600084815260200190815260200160002054905060006008838154811061308a576130896143db565b5b9060005260206000200154905080600883815481106130ac576130ab6143db565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130fb576130fa6143ac565b5b6001900381819060005260206000200160009055905550505050565b600061312283611696565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546131a290614214565b90600052602060002090601f0160209004810192826131c4576000855561320b565b82601f106131dd57805160ff191683800117855561320b565b8280016001018555821561320b579182015b8281111561320a5782518255916020019190600101906131ef565b5b509050613218919061321c565b5090565b5b8082111561323557600081600090555060010161321d565b5090565b600061324c61324784613ffe565b613fd9565b9050828152602081018484840111156132685761326761443e565b5b6132738482856141d2565b509392505050565b600061328e6132898461402f565b613fd9565b9050828152602081018484840111156132aa576132a961443e565b5b6132b58482856141d2565b509392505050565b6000813590506132cc81614aa9565b92915050565b6000815190506132e181614aa9565b92915050565b6000813590506132f681614ac0565b92915050565b60008135905061330b81614ad7565b92915050565b60008151905061332081614ad7565b92915050565b600082601f83011261333b5761333a614439565b5b813561334b848260208601613239565b91505092915050565b600082601f83011261336957613368614439565b5b813561337984826020860161327b565b91505092915050565b60008135905061339181614aee565b92915050565b6000602082840312156133ad576133ac614448565b5b60006133bb848285016132bd565b91505092915050565b6000602082840312156133da576133d9614448565b5b60006133e8848285016132d2565b91505092915050565b6000806040838503121561340857613407614448565b5b6000613416858286016132bd565b9250506020613427858286016132bd565b9150509250929050565b60008060006060848603121561344a57613449614448565b5b6000613458868287016132bd565b9350506020613469868287016132bd565b925050604061347a86828701613382565b9150509250925092565b6000806000806080858703121561349e5761349d614448565b5b60006134ac878288016132bd565b94505060206134bd878288016132bd565b93505060406134ce87828801613382565b925050606085013567ffffffffffffffff8111156134ef576134ee614443565b5b6134fb87828801613326565b91505092959194509250565b6000806040838503121561351e5761351d614448565b5b600061352c858286016132bd565b925050602061353d858286016132e7565b9150509250929050565b6000806040838503121561355e5761355d614448565b5b600061356c858286016132bd565b925050602061357d85828601613382565b9150509250929050565b60006020828403121561359d5761359c614448565b5b60006135ab848285016132fc565b91505092915050565b6000602082840312156135ca576135c9614448565b5b60006135d884828501613311565b91505092915050565b6000602082840312156135f7576135f6614448565b5b600082013567ffffffffffffffff81111561361557613614614443565b5b61362184828501613354565b91505092915050565b6000602082840312156136405761363f614448565b5b600061364e84828501613382565b91505092915050565b6000806040838503121561366e5761366d614448565b5b600061367c85828601613382565b925050602083013567ffffffffffffffff81111561369d5761369c614443565b5b6136a985828601613354565b9150509250929050565b6136bc8161415e565b82525050565b6136d36136ce8261415e565b6142c0565b82525050565b6136e281614170565b82525050565b60006136f382614060565b6136fd8185614076565b935061370d8185602086016141e1565b6137168161444d565b840191505092915050565b600061372c8261406b565b6137368185614087565b93506137468185602086016141e1565b61374f8161444d565b840191505092915050565b60006137658261406b565b61376f8185614098565b935061377f8185602086016141e1565b80840191505092915050565b6000613798600c83614087565b91506137a38261446b565b602082019050919050565b60006137bb601483614087565b91506137c682614494565b602082019050919050565b60006137de602b83614087565b91506137e9826144bd565b604082019050919050565b6000613801603283614087565b915061380c8261450c565b604082019050919050565b6000613824602683614087565b915061382f8261455b565b604082019050919050565b6000613847601c83614087565b9150613852826145aa565b602082019050919050565b600061386a602483614087565b9150613875826145d3565b604082019050919050565b600061388d601983614087565b915061389882614622565b602082019050919050565b60006138b0602c83614087565b91506138bb8261464b565b604082019050919050565b60006138d3601083614087565b91506138de8261469a565b602082019050919050565b60006138f6603883614087565b9150613901826146c3565b604082019050919050565b6000613919600a83614087565b915061392482614712565b602082019050919050565b600061393c602a83614087565b91506139478261473b565b604082019050919050565b600061395f602983614087565b915061396a8261478a565b604082019050919050565b6000613982602083614087565b915061398d826147d9565b602082019050919050565b60006139a5601283614087565b91506139b082614802565b602082019050919050565b60006139c8602c83614087565b91506139d38261482b565b604082019050919050565b60006139eb602083614087565b91506139f68261487a565b602082019050919050565b6000613a0e602983614087565b9150613a19826148a3565b604082019050919050565b6000613a31602f83614087565b9150613a3c826148f2565b604082019050919050565b6000613a54602183614087565b9150613a5f82614941565b604082019050919050565b6000613a77603183614087565b9150613a8282614990565b604082019050919050565b6000613a9a602c83614087565b9150613aa5826149df565b604082019050919050565b6000613abd601883614087565b9150613ac882614a2e565b602082019050919050565b6000613ae0601283614087565b9150613aeb82614a57565b602082019050919050565b6000613b03601d83614087565b9150613b0e82614a80565b602082019050919050565b613b22816141c8565b82525050565b613b39613b34826141c8565b6142e4565b82525050565b6000613b4b828561375a565b9150613b57828461375a565b91508190509392505050565b6000613b6f8287613b28565b602082019150613b7f8286613b28565b602082019150613b8f82856136c2565b601482019150613b9f8284613b28565b60208201915081905095945050505050565b6000602082019050613bc660008301846136b3565b92915050565b6000608082019050613be160008301876136b3565b613bee60208301866136b3565b613bfb6040830185613b19565b8181036060830152613c0d81846136e8565b905095945050505050565b6000602082019050613c2d60008301846136d9565b92915050565b60006020820190508181036000830152613c4d8184613721565b905092915050565b60006020820190508181036000830152613c6e8161378b565b9050919050565b60006020820190508181036000830152613c8e816137ae565b9050919050565b60006020820190508181036000830152613cae816137d1565b9050919050565b60006020820190508181036000830152613cce816137f4565b9050919050565b60006020820190508181036000830152613cee81613817565b9050919050565b60006020820190508181036000830152613d0e8161383a565b9050919050565b60006020820190508181036000830152613d2e8161385d565b9050919050565b60006020820190508181036000830152613d4e81613880565b9050919050565b60006020820190508181036000830152613d6e816138a3565b9050919050565b60006020820190508181036000830152613d8e816138c6565b9050919050565b60006020820190508181036000830152613dae816138e9565b9050919050565b60006020820190508181036000830152613dce8161390c565b9050919050565b60006020820190508181036000830152613dee8161392f565b9050919050565b60006020820190508181036000830152613e0e81613952565b9050919050565b60006020820190508181036000830152613e2e81613975565b9050919050565b60006020820190508181036000830152613e4e81613998565b9050919050565b60006020820190508181036000830152613e6e816139bb565b9050919050565b60006020820190508181036000830152613e8e816139de565b9050919050565b60006020820190508181036000830152613eae81613a01565b9050919050565b60006020820190508181036000830152613ece81613a24565b9050919050565b60006020820190508181036000830152613eee81613a47565b9050919050565b60006020820190508181036000830152613f0e81613a6a565b9050919050565b60006020820190508181036000830152613f2e81613a8d565b9050919050565b60006020820190508181036000830152613f4e81613ab0565b9050919050565b60006020820190508181036000830152613f6e81613ad3565b9050919050565b60006020820190508181036000830152613f8e81613af6565b9050919050565b6000602082019050613faa6000830184613b19565b92915050565b6000604082019050613fc56000830185613b19565b613fd26020830184613b19565b9392505050565b6000613fe3613ff4565b9050613fef8282614246565b919050565b6000604051905090565b600067ffffffffffffffff8211156140195761401861440a565b5b6140228261444d565b9050602081019050919050565b600067ffffffffffffffff82111561404a5761404961440a565b5b6140538261444d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140ae826141c8565b91506140b9836141c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ee576140ed61431f565b5b828201905092915050565b6000614104826141c8565b915061410f836141c8565b92508261411f5761411e61434e565b5b828204905092915050565b6000614135826141c8565b9150614140836141c8565b9250828210156141535761415261431f565b5b828203905092915050565b6000614169826141a8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141ff5780820151818401526020810190506141e4565b8381111561420e576000848401525b50505050565b6000600282049050600182168061422c57607f821691505b602082108114156142405761423f61437d565b5b50919050565b61424f8261444d565b810181811067ffffffffffffffff8211171561426e5761426d61440a565b5b80604052505050565b6000614282826141c8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b5576142b461431f565b5b600182019050919050565b60006142cb826142d2565b9050919050565b60006142dd8261445e565b9050919050565b6000819050919050565b60006142f9826141c8565b9150614304836141c8565b9250826143145761431361434e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f416c726561647920757365640000000000000000000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f2066726565206d696e7473206c6566740000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f742076616c696420466f757269657250756e6b2049440000000000000000600082015250565b7f4e6f2070616964206d696e7473206c6566740000000000000000000000000000600082015250565b7f4e6f74206f776e6572206f66207468617420466f757269657250756e6b000000600082015250565b614ab28161415e565b8114614abd57600080fd5b50565b614ac981614170565b8114614ad457600080fd5b50565b614ae08161417c565b8114614aeb57600080fd5b50565b614af7816141c8565b8114614b0257600080fd5b5056fea26469706673582212205fa87e8b55ce6d1985a7021813a6d03249ea943960df08317eb789bc567554b064736f6c63430008070033
Deployed Bytecode Sourcemap
48644:4157:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52586:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29654:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31213:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30736:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49873:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51048:544;;;:::i;:::-;;42806:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49625;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31963:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42474:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50934:106;;;;;;;;;;;;;:::i;:::-;;52231:65;;;;;;;;;;;;;:::i;:::-;;32373:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48829:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49461;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49092:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42996:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49746:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51912:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8207:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50288:638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50185:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29348:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29078:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6252:103;;;;;;;;;;;;;:::i;:::-;;52162:61;;;;;;;;;;;;;:::i;:::-;;5601:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29823:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49042:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31506:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49181:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49353:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32629:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29998:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49505:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31732:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6510:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48871:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52586:212;52725:4;52754:36;52778:11;52754:23;:36::i;:::-;52747:43;;52586:212;;;:::o;29654:100::-;29708:13;29741:5;29734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29654:100;:::o;31213:221::-;31289:7;31317:16;31325:7;31317;:16::i;:::-;31309:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31402:15;:24;31418:7;31402:24;;;;;;;;;;;;;;;;;;;;;31395:31;;31213:221;;;:::o;30736:411::-;30817:13;30833:23;30848:7;30833:14;:23::i;:::-;30817:39;;30881:5;30875:11;;:2;:11;;;;30867:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30975:5;30959:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30984:37;31001:5;31008:12;:10;:12::i;:::-;30984:16;:37::i;:::-;30959:62;30937:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31118:21;31127:2;31131:7;31118:8;:21::i;:::-;30806:341;30736:411;;:::o;49873:196::-;49930:13;49974:3;49963:8;:14;:30;;;;;49992:1;49981:8;:12;;49963:30;49955:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50040:11;:21;50052:8;50040:21;;;;;;;;;;;;;;;;;;;;;50039:22;50032:29;;49873:196;;;:::o;51048:544::-;8533:8;:6;:8::i;:::-;8532:9;8524:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51124:9:::1;;51111;:22;;51103:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49130:4;51166:21;:11;:19;:21::i;:::-;:38;51158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51237:16;51278:27;:17;:25;:27::i;:::-;51256:21;:11;:19;:21::i;:::-;:49;;;;:::i;:::-;51237:68;;51316:23;:11;:21;:23::i;:::-;51375:25;51388:11;51375:12;:25::i;:::-;51350:9;:22;51360:11;51350:22;;;;;;;;;;;:50;;;;51411:9;51423:25;51436:11;51423:12;:25::i;:::-;51411:37;;51484:4;51459:9;:22;51469:11;51459:22;;;;;;;;;;;:29;;;;51499:34;51509:10;51521:11;51499:9;:34::i;:::-;51554:10;51549:35;;;51566:11;51579:4;51549:35;;;;;;;:::i;:::-;;;;;;;;51092:500;;51048:544::o:0;42806:113::-;42867:7;42894:10;:17;;;;42887:24;;42806:113;:::o;49625:::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49726:4:::1;49703:14;:20;49718:4;49703:20;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;49625:113:::0;;:::o;31963:339::-;32158:41;32177:12;:10;:12::i;:::-;32191:7;32158:18;:41::i;:::-;32150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32266:28;32276:4;32282:2;32286:7;32266:9;:28::i;:::-;31963:339;;;:::o;50077:100::-;50117:6;50142:27;:17;:25;:27::i;:::-;50135:34;;50077:100;:::o;42474:256::-;42571:7;42607:23;42624:5;42607:16;:23::i;:::-;42599:5;:31;42591:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42696:12;:19;42709:5;42696:19;;;;;;;;;;;;;;;:26;42716:5;42696:26;;;;;;;;;;;;42689:33;;42474:256;;;;:::o;50934:106::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50989:10:::1;50981:28;;:51;51010:21;50981:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50934:106::o:0;52231:65::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52278:10:::1;:8;:10::i;:::-;52231:65::o:0;32373:185::-;32511:39;32528:4;32534:2;32538:7;32511:39;;;;;;;;;;;;:16;:39::i;:::-;32373:185;;;:::o;48829:35::-;;;;;;;;;:::o;49461:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49092:42::-;49130:4;49092:42;:::o;42996:233::-;43071:7;43107:30;:28;:30::i;:::-;43099:5;:38;43091:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43204:10;43215:5;43204:17;;;;;;;;:::i;:::-;;;;;;;;;;43197:24;;42996:233;;;:::o;49746:119::-;49805:13;49837:14;:20;49852:4;49837:20;;;;;;;;;;;49830:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49746:119;;;:::o;51912:111::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52007:8:::1;51988:16;:27;;;;;;;;;;;;:::i;:::-;;51912:111:::0;:::o;8207:86::-;8254:4;8278:7;;;;;;;;;;;8271:14;;8207:86;:::o;50288:638::-;8533:8;:6;:8::i;:::-;8532:9;8524:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50390:10:::1;50366:34;;:2;;;;;;;;;;;:10;;;50377:8;50366:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;50358:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50452:21;50464:8;50452:11;:21::i;:::-;50444:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;49082:3;50508:27;:17;:25;:27::i;:::-;:46;50500:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50611:4;50587:11;:21;50599:8;50587:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;50626:16;50667:27;:17;:25;:27::i;:::-;50645:21;:11;:19;:21::i;:::-;:49;;;;:::i;:::-;50626:68;;50705:29;:17;:27;:29::i;:::-;50745:9;50757:25;50770:11;50757:12;:25::i;:::-;50745:37;;50818:4;50793:9;:22;50803:11;50793:22;;;;;;;;;;;:29;;;;50833:34;50843:10;50855:11;50833:9;:34::i;:::-;50888:10;50883:35;;;50900:11;50913:4;50883:35;;;;;;;:::i;:::-;;;;;;;;50347:579;;50288:638:::0;:::o;50185:95::-;50226:6;50251:21;:11;:19;:21::i;:::-;50244:28;;50185:95;:::o;29348:239::-;29420:7;29440:13;29456:7;:16;29464:7;29456:16;;;;;;;;;;;;;;;;;;;;;29440:32;;29508:1;29491:19;;:5;:19;;;;29483:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29574:5;29567:12;;;29348:239;;;:::o;29078:208::-;29150:7;29195:1;29178:19;;:5;:19;;;;29170:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29262:9;:16;29272:5;29262:16;;;;;;;;;;;;;;;;29255:23;;29078:208;;;:::o;6252:103::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6317:30:::1;6344:1;6317:18;:30::i;:::-;6252:103::o:0;52162:61::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52207:8:::1;:6;:8::i;:::-;52162:61::o:0;5601:87::-;5647:7;5674:6;;;;;;;;;;;5667:13;;5601:87;:::o;29823:104::-;29879:13;29912:7;29905:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29823:104;:::o;49042:43::-;49082:3;49042:43;:::o;31506:155::-;31601:52;31620:12;:10;:12::i;:::-;31634:8;31644;31601:18;:52::i;:::-;31506:155;;:::o;49181:38::-;;;;;;;;;;;;;;;;;:::o;49353:101::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32629:328::-;32804:41;32823:12;:10;:12::i;:::-;32837:7;32804:18;:41::i;:::-;32796:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32910:39;32924:4;32930:2;32934:7;32943:5;32910:13;:39::i;:::-;32629:328;;;;:::o;29998:334::-;30071:13;30105:16;30113:7;30105;:16::i;:::-;30097:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30186:21;30210:10;:8;:10::i;:::-;30186:34;;30262:1;30244:7;30238:21;:25;:86;;;;;;;;;;;;;;;;;30290:7;30299:18;:7;:16;:18::i;:::-;30273:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30238:86;30231:93;;;29998:334;;;:::o;49505:112::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49601:8:::1;49580:18;:29;;;;;;;;;;;;:::i;:::-;;49505:112:::0;:::o;31732:164::-;31829:4;31853:18;:25;31872:5;31853:25;;;;;;;;;;;;;;;:35;31879:8;31853:35;;;;;;;;;;;;;;;;;;;;;;;;;31846:42;;31732:164;;;;:::o;6510:201::-;5832:12;:10;:12::i;:::-;5821:23;;:7;:5;:7::i;:::-;:23;;;5813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6619:1:::1;6599:22;;:8;:22;;;;6591:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6675:28;6694:8;6675:18;:28::i;:::-;6510:201:::0;:::o;48871:41::-;;;;;;;;;:::o;42166:224::-;42268:4;42307:35;42292:50;;;:11;:50;;;;:90;;;;42346:36;42370:11;42346:23;:36::i;:::-;42292:90;42285:97;;42166:224;;;:::o;34467:127::-;34532:4;34584:1;34556:30;;:7;:16;34564:7;34556:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34549:37;;34467:127;;;:::o;4319:98::-;4372:7;4399:10;4392:17;;4319:98;:::o;38449:174::-;38551:2;38524:15;:24;38540:7;38524:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38607:7;38603:2;38569:46;;38578:23;38593:7;38578:14;:23::i;:::-;38569:46;;;;;;;;;;;;38449:174;;:::o;911:114::-;976:7;1003;:14;;;996:21;;911:114;;;:::o;1033:127::-;1140:1;1122:7;:14;;;:19;;;;;;;;;;;1033:127;:::o;51600:191::-;51655:17;51779:4;51723:16;51741:15;51758:10;51770:3;51706:68;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51696:79;;;;;;51691:85;;:92;;;;:::i;:::-;51684:99;;51600:191;;;:::o;35451:110::-;35527:26;35537:2;35541:7;35527:26;;;;;;;;;;;;:9;:26::i;:::-;35451:110;;:::o;34761:348::-;34854:4;34879:16;34887:7;34879;:16::i;:::-;34871:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34955:13;34971:23;34986:7;34971:14;:23::i;:::-;34955:39;;35024:5;35013:16;;:7;:16;;;:51;;;;35057:7;35033:31;;:20;35045:7;35033:11;:20::i;:::-;:31;;;35013:51;:87;;;;35068:32;35085:5;35092:7;35068:16;:32::i;:::-;35013:87;35005:96;;;34761:348;;;;:::o;37753:578::-;37912:4;37885:31;;:23;37900:7;37885:14;:23::i;:::-;:31;;;37877:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37995:1;37981:16;;:2;:16;;;;37973:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38051:39;38072:4;38078:2;38082:7;38051:20;:39::i;:::-;38155:29;38172:1;38176:7;38155:8;:29::i;:::-;38216:1;38197:9;:15;38207:4;38197:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38245:1;38228:9;:13;38238:2;38228:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38276:2;38257:7;:16;38265:7;38257:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38315:7;38311:2;38296:27;;38305:4;38296:27;;;;;;;;;;;;37753:578;;;:::o;9266:120::-;8810:8;:6;:8::i;:::-;8802:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9335:5:::1;9325:7;;:15;;;;;;;;;;;;;;;;;;9356:22;9365:12;:10;:12::i;:::-;9356:22;;;;;;:::i;:::-;;;;;;;;9266:120::o:0;6871:191::-;6945:16;6964:6;;;;;;;;;;;6945:25;;6990:8;6981:6;;:17;;;;;;;;;;;;;;;;;;7045:8;7014:40;;7035:8;7014:40;;;;;;;;;;;;6934:128;6871:191;:::o;9007:118::-;8533:8;:6;:8::i;:::-;8532:9;8524:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9077:4:::1;9067:7;;:14;;;;;;;;;;;;;;;;;;9097:20;9104:12;:10;:12::i;:::-;9097:20;;;;;;:::i;:::-;;;;;;;;9007:118::o:0;38765:315::-;38920:8;38911:17;;:5;:17;;;;38903:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39007:8;38969:18;:25;38988:5;38969:25;;;;;;;;;;;;;;;:35;38995:8;38969:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39053:8;39031:41;;39046:5;39031:41;;;39063:8;39031:41;;;;;;:::i;:::-;;;;;;;;38765:315;;;:::o;33839:::-;33996:28;34006:4;34012:2;34016:7;33996:9;:28::i;:::-;34043:48;34066:4;34072:2;34076:7;34085:5;34043:22;:48::i;:::-;34035:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33839:315;;;;:::o;52031:117::-;52091:13;52124:16;52117:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52031:117;:::o;1875:723::-;1931:13;2161:1;2152:5;:10;2148:53;;;2179:10;;;;;;;;;;;;;;;;;;;;;2148:53;2211:12;2226:5;2211:20;;2242:14;2267:78;2282:1;2274:4;:9;2267:78;;2300:8;;;;;:::i;:::-;;;;2331:2;2323:10;;;;;:::i;:::-;;;2267:78;;;2355:19;2387:6;2377:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2355:39;;2405:154;2421:1;2412:5;:10;2405:154;;2449:1;2439:11;;;;;:::i;:::-;;;2516:2;2508:5;:10;;;;:::i;:::-;2495:2;:24;;;;:::i;:::-;2482:39;;2465:6;2472;2465:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2545:2;2536:11;;;;;:::i;:::-;;;2405:154;;;2583:6;2569:21;;;;;1875:723;;;;:::o;28709:305::-;28811:4;28863:25;28848:40;;;:11;:40;;;;:105;;;;28920:33;28905:48;;;:11;:48;;;;28848:105;:158;;;;28970:36;28994:11;28970:23;:36::i;:::-;28848:158;28828:178;;28709:305;;;:::o;35788:321::-;35918:18;35924:2;35928:7;35918:5;:18::i;:::-;35969:54;36000:1;36004:2;36008:7;36017:5;35969:22;:54::i;:::-;35947:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35788:321;;;:::o;52304:204::-;52455:45;52482:4;52488:2;52492:7;52455:26;:45::i;:::-;52304:204;;;:::o;39645:799::-;39800:4;39821:15;:2;:13;;;:15::i;:::-;39817:620;;;39873:2;39857:36;;;39894:12;:10;:12::i;:::-;39908:4;39914:7;39923:5;39857:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39853:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40116:1;40099:6;:13;:18;40095:272;;;40142:60;;;;;;;;;;:::i;:::-;;;;;;;;40095:272;40317:6;40311:13;40302:6;40298:2;40294:15;40287:38;39853:529;39990:41;;;39980:51;;;:6;:51;;;;39973:58;;;;;39817:620;40421:4;40414:11;;39645:799;;;;;;;:::o;20381:157::-;20466:4;20505:25;20490:40;;;:11;:40;;;;20483:47;;20381:157;;;:::o;36445:382::-;36539:1;36525:16;;:2;:16;;;;36517:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36598:16;36606:7;36598;:16::i;:::-;36597:17;36589:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36660:45;36689:1;36693:2;36697:7;36660:20;:45::i;:::-;36735:1;36718:9;:13;36728:2;36718:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36766:2;36747:7;:16;36755:7;36747:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36811:7;36807:2;36786:33;;36803:1;36786:33;;;;;;;;;;;;36445:382;;:::o;43842:589::-;43986:45;44013:4;44019:2;44023:7;43986:26;:45::i;:::-;44064:1;44048:18;;:4;:18;;;44044:187;;;44083:40;44115:7;44083:31;:40::i;:::-;44044:187;;;44153:2;44145:10;;:4;:10;;;44141:90;;44172:47;44205:4;44211:7;44172:32;:47::i;:::-;44141:90;44044:187;44259:1;44245:16;;:2;:16;;;44241:183;;;44278:45;44315:7;44278:36;:45::i;:::-;44241:183;;;44351:4;44345:10;;:2;:10;;;44341:83;;44372:40;44400:2;44404:7;44372:27;:40::i;:::-;44341:83;44241:183;43842:589;;;:::o;10219:387::-;10279:4;10487:12;10554:7;10542:20;10534:28;;10597:1;10590:4;:8;10583:15;;;10219:387;;;:::o;41016:126::-;;;;:::o;45154:164::-;45258:10;:17;;;;45231:15;:24;45247:7;45231:24;;;;;;;;;;;:44;;;;45286:10;45302:7;45286:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45154:164;:::o;45945:988::-;46211:22;46261:1;46236:22;46253:4;46236:16;:22::i;:::-;:26;;;;:::i;:::-;46211:51;;46273:18;46294:17;:26;46312:7;46294:26;;;;;;;;;;;;46273:47;;46441:14;46427:10;:28;46423:328;;46472:19;46494:12;:18;46507:4;46494:18;;;;;;;;;;;;;;;:34;46513:14;46494:34;;;;;;;;;;;;46472:56;;46578:11;46545:12;:18;46558:4;46545:18;;;;;;;;;;;;;;;:30;46564:10;46545:30;;;;;;;;;;;:44;;;;46695:10;46662:17;:30;46680:11;46662:30;;;;;;;;;;;:43;;;;46457:294;46423:328;46847:17;:26;46865:7;46847:26;;;;;;;;;;;46840:33;;;46891:12;:18;46904:4;46891:18;;;;;;;;;;;;;;;:34;46910:14;46891:34;;;;;;;;;;;46884:41;;;46026:907;;45945:988;;:::o;47228:1079::-;47481:22;47526:1;47506:10;:17;;;;:21;;;;:::i;:::-;47481:46;;47538:18;47559:15;:24;47575:7;47559:24;;;;;;;;;;;;47538:45;;47910:19;47932:10;47943:14;47932:26;;;;;;;;:::i;:::-;;;;;;;;;;47910:48;;47996:11;47971:10;47982;47971:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48107:10;48076:15;:28;48092:11;48076:28;;;;;;;;;;;:41;;;;48248:15;:24;48264:7;48248:24;;;;;;;;;;;48241:31;;;48283:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47299:1008;;;47228:1079;:::o;44732:221::-;44817:14;44834:20;44851:2;44834:16;:20::i;:::-;44817:37;;44892:7;44865:12;:16;44878:2;44865:16;;;;;;;;;;;;;;;:24;44882:6;44865:24;;;;;;;;;;;:34;;;;44939:6;44910:17;:26;44928:7;44910:26;;;;;;;;;;;:35;;;;44806:147;44732:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:351::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:64;3087:7;3078:6;3067:9;3063:22;3031:64;:::i;:::-;3021:74;;2977:128;2761:351;;;;:::o;3118:474::-;3186:6;3194;3243:2;3231:9;3222:7;3218:23;3214:32;3211:119;;;3249:79;;:::i;:::-;3211:119;3369:1;3394:53;3439:7;3430:6;3419:9;3415:22;3394:53;:::i;:::-;3384:63;;3340:117;3496:2;3522:53;3567:7;3558:6;3547:9;3543:22;3522:53;:::i;:::-;3512:63;;3467:118;3118:474;;;;;:::o;3598:619::-;3675:6;3683;3691;3740:2;3728:9;3719:7;3715:23;3711:32;3708:119;;;3746:79;;:::i;:::-;3708:119;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3598:619;;;;;:::o;4223:943::-;4318:6;4326;4334;4342;4391:3;4379:9;4370:7;4366:23;4362:33;4359:120;;;4398:79;;:::i;:::-;4359:120;4518:1;4543:53;4588:7;4579:6;4568:9;4564:22;4543:53;:::i;:::-;4533:63;;4489:117;4645:2;4671:53;4716:7;4707:6;4696:9;4692:22;4671:53;:::i;:::-;4661:63;;4616:118;4773:2;4799:53;4844:7;4835:6;4824:9;4820:22;4799:53;:::i;:::-;4789:63;;4744:118;4929:2;4918:9;4914:18;4901:32;4960:18;4952:6;4949:30;4946:117;;;4982:79;;:::i;:::-;4946:117;5087:62;5141:7;5132:6;5121:9;5117:22;5087:62;:::i;:::-;5077:72;;4872:287;4223:943;;;;;;;:::o;5172:468::-;5237:6;5245;5294:2;5282:9;5273:7;5269:23;5265:32;5262:119;;;5300:79;;:::i;:::-;5262:119;5420:1;5445:53;5490:7;5481:6;5470:9;5466:22;5445:53;:::i;:::-;5435:63;;5391:117;5547:2;5573:50;5615:7;5606:6;5595:9;5591:22;5573:50;:::i;:::-;5563:60;;5518:115;5172:468;;;;;:::o;5646:474::-;5714:6;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;5646:474;;;;;:::o;6126:327::-;6184:6;6233:2;6221:9;6212:7;6208:23;6204:32;6201:119;;;6239:79;;:::i;:::-;6201:119;6359:1;6384:52;6428:7;6419:6;6408:9;6404:22;6384:52;:::i;:::-;6374:62;;6330:116;6126:327;;;;:::o;6459:349::-;6528:6;6577:2;6565:9;6556:7;6552:23;6548:32;6545:119;;;6583:79;;:::i;:::-;6545:119;6703:1;6728:63;6783:7;6774:6;6763:9;6759:22;6728:63;:::i;:::-;6718:73;;6674:127;6459:349;;;;:::o;6814:509::-;6883:6;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7086:1;7075:9;7071:17;7058:31;7116:18;7108:6;7105:30;7102:117;;;7138:79;;:::i;:::-;7102:117;7243:63;7298:7;7289:6;7278:9;7274:22;7243:63;:::i;:::-;7233:73;;7029:287;6814:509;;;;:::o;7329:329::-;7388:6;7437:2;7425:9;7416:7;7412:23;7408:32;7405:119;;;7443:79;;:::i;:::-;7405:119;7563:1;7588:53;7633:7;7624:6;7613:9;7609:22;7588:53;:::i;:::-;7578:63;;7534:117;7329:329;;;;:::o;7664:654::-;7742:6;7750;7799:2;7787:9;7778:7;7774:23;7770:32;7767:119;;;7805:79;;:::i;:::-;7767:119;7925:1;7950:53;7995:7;7986:6;7975:9;7971:22;7950:53;:::i;:::-;7940:63;;7896:117;8080:2;8069:9;8065:18;8052:32;8111:18;8103:6;8100:30;8097:117;;;8133:79;;:::i;:::-;8097:117;8238:63;8293:7;8284:6;8273:9;8269:22;8238:63;:::i;:::-;8228:73;;8023:288;7664:654;;;;;:::o;8324:118::-;8411:24;8429:5;8411:24;:::i;:::-;8406:3;8399:37;8324:118;;:::o;8448:157::-;8553:45;8573:24;8591:5;8573:24;:::i;:::-;8553:45;:::i;:::-;8548:3;8541:58;8448:157;;:::o;8611:109::-;8692:21;8707:5;8692:21;:::i;:::-;8687:3;8680:34;8611:109;;:::o;8726:360::-;8812:3;8840:38;8872:5;8840:38;:::i;:::-;8894:70;8957:6;8952:3;8894:70;:::i;:::-;8887:77;;8973:52;9018:6;9013:3;9006:4;8999:5;8995:16;8973:52;:::i;:::-;9050:29;9072:6;9050:29;:::i;:::-;9045:3;9041:39;9034:46;;8816:270;8726:360;;;;:::o;9092:364::-;9180:3;9208:39;9241:5;9208:39;:::i;:::-;9263:71;9327:6;9322:3;9263:71;:::i;:::-;9256:78;;9343:52;9388:6;9383:3;9376:4;9369:5;9365:16;9343:52;:::i;:::-;9420:29;9442:6;9420:29;:::i;:::-;9415:3;9411:39;9404:46;;9184:272;9092:364;;;;:::o;9462:377::-;9568:3;9596:39;9629:5;9596:39;:::i;:::-;9651:89;9733:6;9728:3;9651:89;:::i;:::-;9644:96;;9749:52;9794:6;9789:3;9782:4;9775:5;9771:16;9749:52;:::i;:::-;9826:6;9821:3;9817:16;9810:23;;9572:267;9462:377;;;;:::o;9845:366::-;9987:3;10008:67;10072:2;10067:3;10008:67;:::i;:::-;10001:74;;10084:93;10173:3;10084:93;:::i;:::-;10202:2;10197:3;10193:12;10186:19;;9845:366;;;:::o;10217:::-;10359:3;10380:67;10444:2;10439:3;10380:67;:::i;:::-;10373:74;;10456:93;10545:3;10456:93;:::i;:::-;10574:2;10569:3;10565:12;10558:19;;10217:366;;;:::o;10589:::-;10731:3;10752:67;10816:2;10811:3;10752:67;:::i;:::-;10745:74;;10828:93;10917:3;10828:93;:::i;:::-;10946:2;10941:3;10937:12;10930:19;;10589:366;;;:::o;10961:::-;11103:3;11124:67;11188:2;11183:3;11124:67;:::i;:::-;11117:74;;11200:93;11289:3;11200:93;:::i;:::-;11318:2;11313:3;11309:12;11302:19;;10961:366;;;:::o;11333:::-;11475:3;11496:67;11560:2;11555:3;11496:67;:::i;:::-;11489:74;;11572:93;11661:3;11572:93;:::i;:::-;11690:2;11685:3;11681:12;11674:19;;11333:366;;;:::o;11705:::-;11847:3;11868:67;11932:2;11927:3;11868:67;:::i;:::-;11861:74;;11944:93;12033:3;11944:93;:::i;:::-;12062:2;12057:3;12053:12;12046:19;;11705:366;;;:::o;12077:::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:::-;12591:3;12612:67;12676:2;12671:3;12612:67;:::i;:::-;12605:74;;12688:93;12777:3;12688:93;:::i;:::-;12806:2;12801:3;12797:12;12790:19;;12449:366;;;:::o;12821:::-;12963:3;12984:67;13048:2;13043:3;12984:67;:::i;:::-;12977:74;;13060:93;13149:3;13060:93;:::i;:::-;13178:2;13173:3;13169:12;13162:19;;12821:366;;;:::o;13193:::-;13335:3;13356:67;13420:2;13415:3;13356:67;:::i;:::-;13349:74;;13432:93;13521:3;13432:93;:::i;:::-;13550:2;13545:3;13541:12;13534:19;;13193:366;;;:::o;13565:::-;13707:3;13728:67;13792:2;13787:3;13728:67;:::i;:::-;13721:74;;13804:93;13893:3;13804:93;:::i;:::-;13922:2;13917:3;13913:12;13906:19;;13565:366;;;:::o;13937:::-;14079:3;14100:67;14164:2;14159:3;14100:67;:::i;:::-;14093:74;;14176:93;14265:3;14176:93;:::i;:::-;14294:2;14289:3;14285:12;14278:19;;13937:366;;;:::o;14309:::-;14451:3;14472:67;14536:2;14531:3;14472:67;:::i;:::-;14465:74;;14548:93;14637:3;14548:93;:::i;:::-;14666:2;14661:3;14657:12;14650:19;;14309:366;;;:::o;14681:::-;14823:3;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14920:93;15009:3;14920:93;:::i;:::-;15038:2;15033:3;15029:12;15022:19;;14681:366;;;:::o;15053:::-;15195:3;15216:67;15280:2;15275:3;15216:67;:::i;:::-;15209:74;;15292:93;15381:3;15292:93;:::i;:::-;15410:2;15405:3;15401:12;15394:19;;15053:366;;;:::o;15425:::-;15567:3;15588:67;15652:2;15647:3;15588:67;:::i;:::-;15581:74;;15664:93;15753:3;15664:93;:::i;:::-;15782:2;15777:3;15773:12;15766:19;;15425:366;;;:::o;15797:::-;15939:3;15960:67;16024:2;16019:3;15960:67;:::i;:::-;15953:74;;16036:93;16125:3;16036:93;:::i;:::-;16154:2;16149:3;16145:12;16138:19;;15797:366;;;:::o;16169:::-;16311:3;16332:67;16396:2;16391:3;16332:67;:::i;:::-;16325:74;;16408:93;16497:3;16408:93;:::i;:::-;16526:2;16521:3;16517:12;16510:19;;16169:366;;;:::o;16541:::-;16683:3;16704:67;16768:2;16763:3;16704:67;:::i;:::-;16697:74;;16780:93;16869:3;16780:93;:::i;:::-;16898:2;16893:3;16889:12;16882:19;;16541:366;;;:::o;16913:::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:::-;17427:3;17448:67;17512:2;17507:3;17448:67;:::i;:::-;17441:74;;17524:93;17613:3;17524:93;:::i;:::-;17642:2;17637:3;17633:12;17626:19;;17285:366;;;:::o;17657:::-;17799:3;17820:67;17884:2;17879:3;17820:67;:::i;:::-;17813:74;;17896:93;17985:3;17896:93;:::i;:::-;18014:2;18009:3;18005:12;17998:19;;17657:366;;;:::o;18029:::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:::-;18543:3;18564:67;18628:2;18623:3;18564:67;:::i;:::-;18557:74;;18640:93;18729:3;18640:93;:::i;:::-;18758:2;18753:3;18749:12;18742:19;;18401:366;;;:::o;18773:::-;18915:3;18936:67;19000:2;18995:3;18936:67;:::i;:::-;18929:74;;19012:93;19101:3;19012:93;:::i;:::-;19130:2;19125:3;19121:12;19114:19;;18773:366;;;:::o;19145:::-;19287:3;19308:67;19372:2;19367:3;19308:67;:::i;:::-;19301:74;;19384:93;19473:3;19384:93;:::i;:::-;19502:2;19497:3;19493:12;19486:19;;19145:366;;;:::o;19517:118::-;19604:24;19622:5;19604:24;:::i;:::-;19599:3;19592:37;19517:118;;:::o;19641:157::-;19746:45;19766:24;19784:5;19766:24;:::i;:::-;19746:45;:::i;:::-;19741:3;19734:58;19641:157;;:::o;19804:435::-;19984:3;20006:95;20097:3;20088:6;20006:95;:::i;:::-;19999:102;;20118:95;20209:3;20200:6;20118:95;:::i;:::-;20111:102;;20230:3;20223:10;;19804:435;;;;;:::o;20245:679::-;20441:3;20456:75;20527:3;20518:6;20456:75;:::i;:::-;20556:2;20551:3;20547:12;20540:19;;20569:75;20640:3;20631:6;20569:75;:::i;:::-;20669:2;20664:3;20660:12;20653:19;;20682:75;20753:3;20744:6;20682:75;:::i;:::-;20782:2;20777:3;20773:12;20766:19;;20795:75;20866:3;20857:6;20795:75;:::i;:::-;20895:2;20890:3;20886:12;20879:19;;20915:3;20908:10;;20245:679;;;;;;;:::o;20930:222::-;21023:4;21061:2;21050:9;21046:18;21038:26;;21074:71;21142:1;21131:9;21127:17;21118:6;21074:71;:::i;:::-;20930:222;;;;:::o;21158:640::-;21353:4;21391:3;21380:9;21376:19;21368:27;;21405:71;21473:1;21462:9;21458:17;21449:6;21405:71;:::i;:::-;21486:72;21554:2;21543:9;21539:18;21530:6;21486:72;:::i;:::-;21568;21636:2;21625:9;21621:18;21612:6;21568:72;:::i;:::-;21687:9;21681:4;21677:20;21672:2;21661:9;21657:18;21650:48;21715:76;21786:4;21777:6;21715:76;:::i;:::-;21707:84;;21158:640;;;;;;;:::o;21804:210::-;21891:4;21929:2;21918:9;21914:18;21906:26;;21942:65;22004:1;21993:9;21989:17;21980:6;21942:65;:::i;:::-;21804:210;;;;:::o;22020:313::-;22133:4;22171:2;22160:9;22156:18;22148:26;;22220:9;22214:4;22210:20;22206:1;22195:9;22191:17;22184:47;22248:78;22321:4;22312:6;22248:78;:::i;:::-;22240:86;;22020:313;;;;:::o;22339:419::-;22505:4;22543:2;22532:9;22528:18;22520:26;;22592:9;22586:4;22582:20;22578:1;22567:9;22563:17;22556:47;22620:131;22746:4;22620:131;:::i;:::-;22612:139;;22339:419;;;:::o;22764:::-;22930:4;22968:2;22957:9;22953:18;22945:26;;23017:9;23011:4;23007:20;23003:1;22992:9;22988:17;22981:47;23045:131;23171:4;23045:131;:::i;:::-;23037:139;;22764:419;;;:::o;23189:::-;23355:4;23393:2;23382:9;23378:18;23370:26;;23442:9;23436:4;23432:20;23428:1;23417:9;23413:17;23406:47;23470:131;23596:4;23470:131;:::i;:::-;23462:139;;23189:419;;;:::o;23614:::-;23780:4;23818:2;23807:9;23803:18;23795:26;;23867:9;23861:4;23857:20;23853:1;23842:9;23838:17;23831:47;23895:131;24021:4;23895:131;:::i;:::-;23887:139;;23614:419;;;:::o;24039:::-;24205:4;24243:2;24232:9;24228:18;24220:26;;24292:9;24286:4;24282:20;24278:1;24267:9;24263:17;24256:47;24320:131;24446:4;24320:131;:::i;:::-;24312:139;;24039:419;;;:::o;24464:::-;24630:4;24668:2;24657:9;24653:18;24645:26;;24717:9;24711:4;24707:20;24703:1;24692:9;24688:17;24681:47;24745:131;24871:4;24745:131;:::i;:::-;24737:139;;24464:419;;;:::o;24889:::-;25055:4;25093:2;25082:9;25078:18;25070:26;;25142:9;25136:4;25132:20;25128:1;25117:9;25113:17;25106:47;25170:131;25296:4;25170:131;:::i;:::-;25162:139;;24889:419;;;:::o;25314:::-;25480:4;25518:2;25507:9;25503:18;25495:26;;25567:9;25561:4;25557:20;25553:1;25542:9;25538:17;25531:47;25595:131;25721:4;25595:131;:::i;:::-;25587:139;;25314:419;;;:::o;25739:::-;25905:4;25943:2;25932:9;25928:18;25920:26;;25992:9;25986:4;25982:20;25978:1;25967:9;25963:17;25956:47;26020:131;26146:4;26020:131;:::i;:::-;26012:139;;25739:419;;;:::o;26164:::-;26330:4;26368:2;26357:9;26353:18;26345:26;;26417:9;26411:4;26407:20;26403:1;26392:9;26388:17;26381:47;26445:131;26571:4;26445:131;:::i;:::-;26437:139;;26164:419;;;:::o;26589:::-;26755:4;26793:2;26782:9;26778:18;26770:26;;26842:9;26836:4;26832:20;26828:1;26817:9;26813:17;26806:47;26870:131;26996:4;26870:131;:::i;:::-;26862:139;;26589:419;;;:::o;27014:::-;27180:4;27218:2;27207:9;27203:18;27195:26;;27267:9;27261:4;27257:20;27253:1;27242:9;27238:17;27231:47;27295:131;27421:4;27295:131;:::i;:::-;27287:139;;27014:419;;;:::o;27439:::-;27605:4;27643:2;27632:9;27628:18;27620:26;;27692:9;27686:4;27682:20;27678:1;27667:9;27663:17;27656:47;27720:131;27846:4;27720:131;:::i;:::-;27712:139;;27439:419;;;:::o;27864:::-;28030:4;28068:2;28057:9;28053:18;28045:26;;28117:9;28111:4;28107:20;28103:1;28092:9;28088:17;28081:47;28145:131;28271:4;28145:131;:::i;:::-;28137:139;;27864:419;;;:::o;28289:::-;28455:4;28493:2;28482:9;28478:18;28470:26;;28542:9;28536:4;28532:20;28528:1;28517:9;28513:17;28506:47;28570:131;28696:4;28570:131;:::i;:::-;28562:139;;28289:419;;;:::o;28714:::-;28880:4;28918:2;28907:9;28903:18;28895:26;;28967:9;28961:4;28957:20;28953:1;28942:9;28938:17;28931:47;28995:131;29121:4;28995:131;:::i;:::-;28987:139;;28714:419;;;:::o;29139:::-;29305:4;29343:2;29332:9;29328:18;29320:26;;29392:9;29386:4;29382:20;29378:1;29367:9;29363:17;29356:47;29420:131;29546:4;29420:131;:::i;:::-;29412:139;;29139:419;;;:::o;29564:::-;29730:4;29768:2;29757:9;29753:18;29745:26;;29817:9;29811:4;29807:20;29803:1;29792:9;29788:17;29781:47;29845:131;29971:4;29845:131;:::i;:::-;29837:139;;29564:419;;;:::o;29989:::-;30155:4;30193:2;30182:9;30178:18;30170:26;;30242:9;30236:4;30232:20;30228:1;30217:9;30213:17;30206:47;30270:131;30396:4;30270:131;:::i;:::-;30262:139;;29989:419;;;:::o;30414:::-;30580:4;30618:2;30607:9;30603:18;30595:26;;30667:9;30661:4;30657:20;30653:1;30642:9;30638:17;30631:47;30695:131;30821:4;30695:131;:::i;:::-;30687:139;;30414:419;;;:::o;30839:::-;31005:4;31043:2;31032:9;31028:18;31020:26;;31092:9;31086:4;31082:20;31078:1;31067:9;31063:17;31056:47;31120:131;31246:4;31120:131;:::i;:::-;31112:139;;30839:419;;;:::o;31264:::-;31430:4;31468:2;31457:9;31453:18;31445:26;;31517:9;31511:4;31507:20;31503:1;31492:9;31488:17;31481:47;31545:131;31671:4;31545:131;:::i;:::-;31537:139;;31264:419;;;:::o;31689:::-;31855:4;31893:2;31882:9;31878:18;31870:26;;31942:9;31936:4;31932:20;31928:1;31917:9;31913:17;31906:47;31970:131;32096:4;31970:131;:::i;:::-;31962:139;;31689:419;;;:::o;32114:::-;32280:4;32318:2;32307:9;32303:18;32295:26;;32367:9;32361:4;32357:20;32353:1;32342:9;32338:17;32331:47;32395:131;32521:4;32395:131;:::i;:::-;32387:139;;32114:419;;;:::o;32539:::-;32705:4;32743:2;32732:9;32728:18;32720:26;;32792:9;32786:4;32782:20;32778:1;32767:9;32763:17;32756:47;32820:131;32946:4;32820:131;:::i;:::-;32812:139;;32539:419;;;:::o;32964:::-;33130:4;33168:2;33157:9;33153:18;33145:26;;33217:9;33211:4;33207:20;33203:1;33192:9;33188:17;33181:47;33245:131;33371:4;33245:131;:::i;:::-;33237:139;;32964:419;;;:::o;33389:222::-;33482:4;33520:2;33509:9;33505:18;33497:26;;33533:71;33601:1;33590:9;33586:17;33577:6;33533:71;:::i;:::-;33389:222;;;;:::o;33617:332::-;33738:4;33776:2;33765:9;33761:18;33753:26;;33789:71;33857:1;33846:9;33842:17;33833:6;33789:71;:::i;:::-;33870:72;33938:2;33927:9;33923:18;33914:6;33870:72;:::i;:::-;33617:332;;;;;:::o;33955:129::-;33989:6;34016:20;;:::i;:::-;34006:30;;34045:33;34073:4;34065:6;34045:33;:::i;:::-;33955:129;;;:::o;34090:75::-;34123:6;34156:2;34150:9;34140:19;;34090:75;:::o;34171:307::-;34232:4;34322:18;34314:6;34311:30;34308:56;;;34344:18;;:::i;:::-;34308:56;34382:29;34404:6;34382:29;:::i;:::-;34374:37;;34466:4;34460;34456:15;34448:23;;34171:307;;;:::o;34484:308::-;34546:4;34636:18;34628:6;34625:30;34622:56;;;34658:18;;:::i;:::-;34622:56;34696:29;34718:6;34696:29;:::i;:::-;34688:37;;34780:4;34774;34770:15;34762:23;;34484:308;;;:::o;34798:98::-;34849:6;34883:5;34877:12;34867:22;;34798:98;;;:::o;34902:99::-;34954:6;34988:5;34982:12;34972:22;;34902:99;;;:::o;35007:168::-;35090:11;35124:6;35119:3;35112:19;35164:4;35159:3;35155:14;35140:29;;35007:168;;;;:::o;35181:169::-;35265:11;35299:6;35294:3;35287:19;35339:4;35334:3;35330:14;35315:29;;35181:169;;;;:::o;35356:148::-;35458:11;35495:3;35480:18;;35356:148;;;;:::o;35510:305::-;35550:3;35569:20;35587:1;35569:20;:::i;:::-;35564:25;;35603:20;35621:1;35603:20;:::i;:::-;35598:25;;35757:1;35689:66;35685:74;35682:1;35679:81;35676:107;;;35763:18;;:::i;:::-;35676:107;35807:1;35804;35800:9;35793:16;;35510:305;;;;:::o;35821:185::-;35861:1;35878:20;35896:1;35878:20;:::i;:::-;35873:25;;35912:20;35930:1;35912:20;:::i;:::-;35907:25;;35951:1;35941:35;;35956:18;;:::i;:::-;35941:35;35998:1;35995;35991:9;35986:14;;35821:185;;;;:::o;36012:191::-;36052:4;36072:20;36090:1;36072:20;:::i;:::-;36067:25;;36106:20;36124:1;36106:20;:::i;:::-;36101:25;;36145:1;36142;36139:8;36136:34;;;36150:18;;:::i;:::-;36136:34;36195:1;36192;36188:9;36180:17;;36012:191;;;;:::o;36209:96::-;36246:7;36275:24;36293:5;36275:24;:::i;:::-;36264:35;;36209:96;;;:::o;36311:90::-;36345:7;36388:5;36381:13;36374:21;36363:32;;36311:90;;;:::o;36407:149::-;36443:7;36483:66;36476:5;36472:78;36461:89;;36407:149;;;:::o;36562:126::-;36599:7;36639:42;36632:5;36628:54;36617:65;;36562:126;;;:::o;36694:77::-;36731:7;36760:5;36749:16;;36694:77;;;:::o;36777:154::-;36861:6;36856:3;36851;36838:30;36923:1;36914:6;36909:3;36905:16;36898:27;36777:154;;;:::o;36937:307::-;37005:1;37015:113;37029:6;37026:1;37023:13;37015:113;;;37114:1;37109:3;37105:11;37099:18;37095:1;37090:3;37086:11;37079:39;37051:2;37048:1;37044:10;37039:15;;37015:113;;;37146:6;37143:1;37140:13;37137:101;;;37226:1;37217:6;37212:3;37208:16;37201:27;37137:101;36986:258;36937:307;;;:::o;37250:320::-;37294:6;37331:1;37325:4;37321:12;37311:22;;37378:1;37372:4;37368:12;37399:18;37389:81;;37455:4;37447:6;37443:17;37433:27;;37389:81;37517:2;37509:6;37506:14;37486:18;37483:38;37480:84;;;37536:18;;:::i;:::-;37480:84;37301:269;37250:320;;;:::o;37576:281::-;37659:27;37681:4;37659:27;:::i;:::-;37651:6;37647:40;37789:6;37777:10;37774:22;37753:18;37741:10;37738:34;37735:62;37732:88;;;37800:18;;:::i;:::-;37732:88;37840:10;37836:2;37829:22;37619:238;37576:281;;:::o;37863:233::-;37902:3;37925:24;37943:5;37925:24;:::i;:::-;37916:33;;37971:66;37964:5;37961:77;37958:103;;;38041:18;;:::i;:::-;37958:103;38088:1;38081:5;38077:13;38070:20;;37863:233;;;:::o;38102:100::-;38141:7;38170:26;38190:5;38170:26;:::i;:::-;38159:37;;38102:100;;;:::o;38208:94::-;38247:7;38276:20;38290:5;38276:20;:::i;:::-;38265:31;;38208:94;;;:::o;38308:79::-;38347:7;38376:5;38365:16;;38308:79;;;:::o;38393:176::-;38425:1;38442:20;38460:1;38442:20;:::i;:::-;38437:25;;38476:20;38494:1;38476:20;:::i;:::-;38471:25;;38515:1;38505:35;;38520:18;;:::i;:::-;38505:35;38561:1;38558;38554:9;38549:14;;38393:176;;;;:::o;38575:180::-;38623:77;38620:1;38613:88;38720:4;38717:1;38710:15;38744:4;38741:1;38734:15;38761:180;38809:77;38806:1;38799:88;38906:4;38903:1;38896:15;38930:4;38927:1;38920:15;38947:180;38995:77;38992:1;38985:88;39092:4;39089:1;39082:15;39116:4;39113:1;39106:15;39133:180;39181:77;39178:1;39171:88;39278:4;39275:1;39268:15;39302:4;39299:1;39292:15;39319:180;39367:77;39364:1;39357:88;39464:4;39461:1;39454:15;39488:4;39485:1;39478:15;39505:180;39553:77;39550:1;39543:88;39650:4;39647:1;39640:15;39674:4;39671:1;39664:15;39691:117;39800:1;39797;39790:12;39814:117;39923:1;39920;39913:12;39937:117;40046:1;40043;40036:12;40060:117;40169:1;40166;40159:12;40183:102;40224:6;40275:2;40271:7;40266:2;40259:5;40255:14;40251:28;40241:38;;40183:102;;;:::o;40291:94::-;40324:8;40372:5;40368:2;40364:14;40343:35;;40291:94;;;:::o;40391:162::-;40531:14;40527:1;40519:6;40515:14;40508:38;40391:162;:::o;40559:170::-;40699:22;40695:1;40687:6;40683:14;40676:46;40559:170;:::o;40735:230::-;40875:34;40871:1;40863:6;40859:14;40852:58;40944:13;40939:2;40931:6;40927:15;40920:38;40735:230;:::o;40971:237::-;41111:34;41107:1;41099:6;41095:14;41088:58;41180:20;41175:2;41167:6;41163:15;41156:45;40971:237;:::o;41214:225::-;41354:34;41350:1;41342:6;41338:14;41331:58;41423:8;41418:2;41410:6;41406:15;41399:33;41214:225;:::o;41445:178::-;41585:30;41581:1;41573:6;41569:14;41562:54;41445:178;:::o;41629:223::-;41769:34;41765:1;41757:6;41753:14;41746:58;41838:6;41833:2;41825:6;41821:15;41814:31;41629:223;:::o;41858:175::-;41998:27;41994:1;41986:6;41982:14;41975:51;41858:175;:::o;42039:231::-;42179:34;42175:1;42167:6;42163:14;42156:58;42248:14;42243:2;42235:6;42231:15;42224:39;42039:231;:::o;42276:166::-;42416:18;42412:1;42404:6;42400:14;42393:42;42276:166;:::o;42448:243::-;42588:34;42584:1;42576:6;42572:14;42565:58;42657:26;42652:2;42644:6;42640:15;42633:51;42448:243;:::o;42697:160::-;42837:12;42833:1;42825:6;42821:14;42814:36;42697:160;:::o;42863:229::-;43003:34;42999:1;42991:6;42987:14;42980:58;43072:12;43067:2;43059:6;43055:15;43048:37;42863:229;:::o;43098:228::-;43238:34;43234:1;43226:6;43222:14;43215:58;43307:11;43302:2;43294:6;43290:15;43283:36;43098:228;:::o;43332:182::-;43472:34;43468:1;43460:6;43456:14;43449:58;43332:182;:::o;43520:168::-;43660:20;43656:1;43648:6;43644:14;43637:44;43520:168;:::o;43694:231::-;43834:34;43830:1;43822:6;43818:14;43811:58;43903:14;43898:2;43890:6;43886:15;43879:39;43694:231;:::o;43931:182::-;44071:34;44067:1;44059:6;44055:14;44048:58;43931:182;:::o;44119:228::-;44259:34;44255:1;44247:6;44243:14;44236:58;44328:11;44323:2;44315:6;44311:15;44304:36;44119:228;:::o;44353:234::-;44493:34;44489:1;44481:6;44477:14;44470:58;44562:17;44557:2;44549:6;44545:15;44538:42;44353:234;:::o;44593:220::-;44733:34;44729:1;44721:6;44717:14;44710:58;44802:3;44797:2;44789:6;44785:15;44778:28;44593:220;:::o;44819:236::-;44959:34;44955:1;44947:6;44943:14;44936:58;45028:19;45023:2;45015:6;45011:15;45004:44;44819:236;:::o;45061:231::-;45201:34;45197:1;45189:6;45185:14;45178:58;45270:14;45265:2;45257:6;45253:15;45246:39;45061:231;:::o;45298:174::-;45438:26;45434:1;45426:6;45422:14;45415:50;45298:174;:::o;45478:168::-;45618:20;45614:1;45606:6;45602:14;45595:44;45478:168;:::o;45652:179::-;45792:31;45788:1;45780:6;45776:14;45769:55;45652:179;:::o;45837:122::-;45910:24;45928:5;45910:24;:::i;:::-;45903:5;45900:35;45890:63;;45949:1;45946;45939:12;45890:63;45837:122;:::o;45965:116::-;46035:21;46050:5;46035:21;:::i;:::-;46028:5;46025:32;46015:60;;46071:1;46068;46061:12;46015:60;45965:116;:::o;46087:120::-;46159:23;46176:5;46159:23;:::i;:::-;46152:5;46149:34;46139:62;;46197:1;46194;46187:12;46139:62;46087:120;:::o;46213:122::-;46286:24;46304:5;46286:24;:::i;:::-;46279:5;46276:35;46266:63;;46325:1;46322;46315:12;46266:63;46213:122;:::o
Swarm Source
ipfs://5fa87e8b55ce6d1985a7021813a6d03249ea943960df08317eb789bc567554b0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.