Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 61 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 17402102 | 415 days ago | IN | 0 ETH | 0.00155895 | ||||
Set Approval For... | 16715633 | 512 days ago | IN | 0 ETH | 0.00104631 | ||||
Set Approval For... | 16680569 | 517 days ago | IN | 0 ETH | 0.00121794 | ||||
Set Approval For... | 16607010 | 527 days ago | IN | 0 ETH | 0.00086278 | ||||
Set Approval For... | 16600353 | 528 days ago | IN | 0 ETH | 0.00106127 | ||||
Set Approval For... | 16598735 | 528 days ago | IN | 0 ETH | 0.00102442 | ||||
Set Approval For... | 16597554 | 528 days ago | IN | 0 ETH | 0.00097568 | ||||
Set Approval For... | 16591764 | 529 days ago | IN | 0 ETH | 0.00158357 | ||||
Set Approval For... | 16541603 | 536 days ago | IN | 0 ETH | 0.00134582 | ||||
Transfer From | 16471722 | 546 days ago | IN | 0 ETH | 0.00225716 | ||||
Transfer From | 16471688 | 546 days ago | IN | 0 ETH | 0.00213072 | ||||
Set Approval For... | 16335547 | 565 days ago | IN | 0 ETH | 0.0010963 | ||||
Transfer From | 16335511 | 565 days ago | IN | 0 ETH | 0.001671 | ||||
Mint | 16329381 | 566 days ago | IN | 0 ETH | 0.00460932 | ||||
Mint | 16329379 | 566 days ago | IN | 0 ETH | 0.00452593 | ||||
Mint | 16329377 | 566 days ago | IN | 0 ETH | 0.00464302 | ||||
Mint | 16329376 | 566 days ago | IN | 0 ETH | 0.00467747 | ||||
Mint | 16329374 | 566 days ago | IN | 0 ETH | 0.00459351 | ||||
Mint | 16329365 | 566 days ago | IN | 0 ETH | 0.00453861 | ||||
Mint | 16329364 | 566 days ago | IN | 0 ETH | 0.00458628 | ||||
Update | 16329359 | 566 days ago | IN | 0 ETH | 0.00087744 | ||||
Update | 16329346 | 566 days ago | IN | 0 ETH | 0.00092953 | ||||
Mint | 16211503 | 582 days ago | IN | 0 ETH | 0.00365383 | ||||
Mint | 16211500 | 582 days ago | IN | 0 ETH | 0.00354543 | ||||
Update | 16211496 | 582 days ago | IN | 0 ETH | 0.00063839 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WCAVIP
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-18 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (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: contracts/WCAVIP.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.17; contract WCAVIP is ERC721Enumerable, Ownable { using Counters for Counters.Counter; address public manager; Counters.Counter private NFTId; mapping(uint256 => string) public nfts; modifier onlyOwnerOrManager() { require(owner() == msg.sender || manager == msg.sender, "Unauthorized"); _; } constructor(address _manager) ERC721("WCAPES VIP", "WCAVIP") { manager = _manager; } function setManager(address _manager) external onlyOwner { manager = _manager; } function mint(string calldata uri) external onlyOwnerOrManager { NFTId.increment(); _safeMint(owner(), NFTId.current()); nfts[NFTId.current()] = uri; } function update(uint256 id, string calldata uri) external onlyOwnerOrManager { require(id > 0 && id <= NFTId.current(), "Invalid token id"); nfts[id] = uri; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_tokenId > 0 && _tokenId <= NFTId.current(), "Invalid token id"); return nfts[_tokenId]; } function mintedCount() external view returns (uint256) { return NFTId.current(); } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokensIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokensIds; } function withdraw(uint256 _value) external payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ether left to withdraw"); uint256 toWithdraw = _value; if (balance < _value || _value == 0) { toWithdraw = balance; } (bool success, ) = (owner()).call{ value: toWithdraw }(""); require(success, "Transfer failed."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nfts","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":"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":"address","name":"_manager","type":"address"}],"name":"setManager","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":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620042a0380380620042a0833981810160405281019062000037919062000269565b6040518060400160405280600a81526020017f57434150455320564950000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f57434156495000000000000000000000000000000000000000000000000000008152508160009081620000b4919062000515565b508060019081620000c6919062000515565b505050620000e9620000dd6200013160201b60201c565b6200013960201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005fc565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002318262000204565b9050919050565b620002438162000224565b81146200024f57600080fd5b50565b600081519050620002638162000238565b92915050565b600060208284031215620002825762000281620001ff565b5b6000620002928482850162000252565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200031d57607f821691505b602082108103620003335762000332620002d5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200039d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200035e565b620003a986836200035e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003f6620003f0620003ea84620003c1565b620003cb565b620003c1565b9050919050565b6000819050919050565b6200041283620003d5565b6200042a6200042182620003fd565b8484546200036b565b825550505050565b600090565b6200044162000432565b6200044e81848462000407565b505050565b5b8181101562000476576200046a60008262000437565b60018101905062000454565b5050565b601f821115620004c5576200048f8162000339565b6200049a846200034e565b81016020851015620004aa578190505b620004c2620004b9856200034e565b83018262000453565b50505b505050565b600082821c905092915050565b6000620004ea60001984600802620004ca565b1980831691505092915050565b6000620005058383620004d7565b9150826002028217905092915050565b62000520826200029b565b67ffffffffffffffff8111156200053c576200053b620002a6565b5b62000548825462000304565b620005558282856200047a565b600060209050601f8311600181146200058d576000841562000578578287015190505b620005848582620004f7565b865550620005f4565b601f1984166200059d8662000339565b60005b82811015620005c757848901518255600182019150602085019450602081019050620005a0565b86831015620005e75784890151620005e3601f891682620004d7565b8355505b6001600288020188555050505b505050505050565b613c94806200060c6000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec578063c87b56dd1161008a578063d85d3d2711610064578063d85d3d27146105f1578063e985e9c51461061a578063f2fde38b14610657578063f745630f146106805761019c565b8063c87b56dd14610560578063cf721b151461059d578063d0ebdbe7146105c85761019c565b80638da5cb5b116100c65780638da5cb5b146104b857806395d89b41146104e3578063a22cb4651461050e578063b88d4fde146105375761019c565b806370a0823114610427578063715018a6146104645780638462151c1461047b5761019c565b8063265aa6211161015957806342842e0e1161013357806342842e0e14610359578063481c6a75146103825780634f6ccce7146103ad5780636352211e146103ea5761019c565b8063265aa621146102c35780632e1a7d4d146103005780632f745c591461031c5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612656565b6106a9565b6040516101d5919061269e565b60405180910390f35b3480156101ea57600080fd5b506101f3610723565b6040516102009190612749565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906127a1565b6107b5565b60405161023d919061280f565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612856565b6107fb565b005b34801561027b57600080fd5b50610284610912565b60405161029191906128a5565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906128c0565b61091f565b005b3480156102cf57600080fd5b506102ea60048036038101906102e591906127a1565b61097f565b6040516102f79190612749565b60405180910390f35b61031a600480360381019061031591906127a1565b610a1f565b005b34801561032857600080fd5b50610343600480360381019061033e9190612856565b610b44565b60405161035091906128a5565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906128c0565b610be9565b005b34801561038e57600080fd5b50610397610c09565b6040516103a4919061280f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127a1565b610c2f565b6040516103e191906128a5565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906127a1565b610ca0565b60405161041e919061280f565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612913565b610d51565b60405161045b91906128a5565b60405180910390f35b34801561047057600080fd5b50610479610e08565b005b34801561048757600080fd5b506104a2600480360381019061049d9190612913565b610e1c565b6040516104af91906129fe565b60405180910390f35b3480156104c457600080fd5b506104cd610eca565b6040516104da919061280f565b60405180910390f35b3480156104ef57600080fd5b506104f8610ef4565b6040516105059190612749565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190612a4c565b610f86565b005b34801561054357600080fd5b5061055e60048036038101906105599190612bc1565b610f9c565b005b34801561056c57600080fd5b50610587600480360381019061058291906127a1565b610ffe565b6040516105949190612749565b60405180910390f35b3480156105a957600080fd5b506105b26110fb565b6040516105bf91906128a5565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612913565b61110c565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612ca4565b611158565b005b34801561062657600080fd5b50610641600480360381019061063c9190612cf1565b611279565b60405161064e919061269e565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190612913565b61130d565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612d31565b611390565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071c575061071b826114dd565b5b9050919050565b60606000805461073290612dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90612dc0565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b60006107c0826115bf565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080682610ca0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612e63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661089561160a565b73ffffffffffffffffffffffffffffffffffffffff1614806108c457506108c3816108be61160a565b611279565b5b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612ef5565b60405180910390fd5b61090d8383611612565b505050565b6000600880549050905090565b61093061092a61160a565b826116cb565b61096f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096690612f87565b60405180910390fd5b61097a838383611760565b505050565b600d602052806000526040600020600091509050805461099e90612dc0565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90612dc0565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b505050505081565b610a276119c6565b600047905060008111610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690612ff3565b60405180910390fd5b600082905082821080610a825750600083145b15610a8b578190505b6000610a95610eca565b73ffffffffffffffffffffffffffffffffffffffff1682604051610ab890613044565b60006040518083038185875af1925050503d8060008114610af5576040519150601f19603f3d011682016040523d82523d6000602084013e610afa565b606091505b5050905080610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906130a5565b60405180910390fd5b50505050565b6000610b4f83610d51565b8210610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790613137565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c0483838360405180602001604052806000815250610f9c565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c39610912565b8210610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c71906131c9565b60405180910390fd5b60088281548110610c8e57610c8d6131e9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90613264565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906132f6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e106119c6565b610e1a6000611a44565b565b60606000610e2983610d51565b905060008167ffffffffffffffff811115610e4757610e46612a96565b5b604051908082528060200260200182016040528015610e755781602001602082028036833780820191505090505b50905060005b82811015610ebf57610e8d8582610b44565b828281518110610ea057610e9f6131e9565b5b6020026020010181815250508080610eb790613345565b915050610e7b565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f0390612dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2f90612dc0565b8015610f7c5780601f10610f5157610100808354040283529160200191610f7c565b820191906000526020600020905b815481529060010190602001808311610f5f57829003601f168201915b5050505050905090565b610f98610f9161160a565b8383611b0a565b5050565b610fad610fa761160a565b836116cb565b610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612f87565b60405180910390fd5b610ff884848484611c76565b50505050565b60606000821180156110195750611015600c611cd2565b8211155b611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f906133d9565b60405180910390fd5b600d6000838152602001908152602001600020805461107690612dc0565b80601f01602080910402602001604051908101604052809291908181526020018280546110a290612dc0565b80156110ef5780601f106110c4576101008083540402835291602001916110ef565b820191906000526020600020905b8154815290600101906020018083116110d257829003601f168201915b50505050509050919050565b6000611107600c611cd2565b905090565b6111146119c6565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611177610eca565b73ffffffffffffffffffffffffffffffffffffffff1614806111e657503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613445565b60405180910390fd5b61122f600c611ce0565b61124961123a610eca565b611244600c611cd2565b611cf6565b8181600d6000611259600c611cd2565b8152602001908152602001600020918261127492919061361c565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113156119c6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061375e565b60405180910390fd5b61138d81611a44565b50565b3373ffffffffffffffffffffffffffffffffffffffff166113af610eca565b73ffffffffffffffffffffffffffffffffffffffff16148061141e57503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613445565b60405180910390fd5b6000831180156114765750611472600c611cd2565b8311155b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906133d9565b60405180910390fd5b8181600d600086815260200190815260200160002091826114d792919061361c565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115b857506115b782611d14565b5b9050919050565b6115c881611d7e565b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613264565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661168583610ca0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806116d783610ca0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171957506117188185611279565b5b8061175757508373ffffffffffffffffffffffffffffffffffffffff1661173f846107b5565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661178082610ca0565b73ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd906137f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613882565b60405180910390fd5b611850838383611dea565b61185b600082611612565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ab91906138a2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190291906138d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119c1838383611efc565b505050565b6119ce61160a565b73ffffffffffffffffffffffffffffffffffffffff166119ec610eca565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613956565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f906139c2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c69919061269e565b60405180910390a3505050565b611c81848484611760565b611c8d84848484611f01565b611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613a54565b60405180910390fd5b50505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611d10828260405180602001604052806000815250612088565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611df58383836120e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e3757611e32816120e8565b611e76565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e7557611e748382612131565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eb857611eb38161229e565b611ef7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ef657611ef5828261236f565b5b5b505050565b505050565b6000611f228473ffffffffffffffffffffffffffffffffffffffff166123ee565b1561207b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f4b61160a565b8786866040518563ffffffff1660e01b8152600401611f6d9493929190613ac9565b6020604051808303816000875af1925050508015611fa957506040513d601f19601f82011682018060405250810190611fa69190613b2a565b60015b61202b573d8060008114611fd9576040519150601f19603f3d011682016040523d82523d6000602084013e611fde565b606091505b506000815103612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613a54565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612080565b600190505b949350505050565b6120928383612411565b61209f6000848484611f01565b6120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613a54565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161213e84610d51565b61214891906138a2565b905060006007600084815260200190815260200160002054905081811461222d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506122b291906138a2565b90506000600960008481526020019081526020016000205490506000600883815481106122e2576122e16131e9565b5b906000526020600020015490508060088381548110612304576123036131e9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061235357612352613b57565b5b6001900381819060005260206000200160009055905550505050565b600061237a83610d51565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790613bd2565b60405180910390fd5b61248981611d7e565b156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090613c3e565b60405180910390fd5b6124d560008383611dea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252591906138d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e660008383611efc565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612633816125fe565b811461263e57600080fd5b50565b6000813590506126508161262a565b92915050565b60006020828403121561266c5761266b6125f4565b5b600061267a84828501612641565b91505092915050565b60008115159050919050565b61269881612683565b82525050565b60006020820190506126b3600083018461268f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126f35780820151818401526020810190506126d8565b60008484015250505050565b6000601f19601f8301169050919050565b600061271b826126b9565b61272581856126c4565b93506127358185602086016126d5565b61273e816126ff565b840191505092915050565b600060208201905081810360008301526127638184612710565b905092915050565b6000819050919050565b61277e8161276b565b811461278957600080fd5b50565b60008135905061279b81612775565b92915050565b6000602082840312156127b7576127b66125f4565b5b60006127c58482850161278c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127f9826127ce565b9050919050565b612809816127ee565b82525050565b60006020820190506128246000830184612800565b92915050565b612833816127ee565b811461283e57600080fd5b50565b6000813590506128508161282a565b92915050565b6000806040838503121561286d5761286c6125f4565b5b600061287b85828601612841565b925050602061288c8582860161278c565b9150509250929050565b61289f8161276b565b82525050565b60006020820190506128ba6000830184612896565b92915050565b6000806000606084860312156128d9576128d86125f4565b5b60006128e786828701612841565b93505060206128f886828701612841565b92505060406129098682870161278c565b9150509250925092565b600060208284031215612929576129286125f4565b5b600061293784828501612841565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129758161276b565b82525050565b6000612987838361296c565b60208301905092915050565b6000602082019050919050565b60006129ab82612940565b6129b5818561294b565b93506129c08361295c565b8060005b838110156129f15781516129d8888261297b565b97506129e383612993565b9250506001810190506129c4565b5085935050505092915050565b60006020820190508181036000830152612a1881846129a0565b905092915050565b612a2981612683565b8114612a3457600080fd5b50565b600081359050612a4681612a20565b92915050565b60008060408385031215612a6357612a626125f4565b5b6000612a7185828601612841565b9250506020612a8285828601612a37565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ace826126ff565b810181811067ffffffffffffffff82111715612aed57612aec612a96565b5b80604052505050565b6000612b006125ea565b9050612b0c8282612ac5565b919050565b600067ffffffffffffffff821115612b2c57612b2b612a96565b5b612b35826126ff565b9050602081019050919050565b82818337600083830152505050565b6000612b64612b5f84612b11565b612af6565b905082815260208101848484011115612b8057612b7f612a91565b5b612b8b848285612b42565b509392505050565b600082601f830112612ba857612ba7612a8c565b5b8135612bb8848260208601612b51565b91505092915050565b60008060008060808587031215612bdb57612bda6125f4565b5b6000612be987828801612841565b9450506020612bfa87828801612841565b9350506040612c0b8782880161278c565b925050606085013567ffffffffffffffff811115612c2c57612c2b6125f9565b5b612c3887828801612b93565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112612c6457612c63612a8c565b5b8235905067ffffffffffffffff811115612c8157612c80612c44565b5b602083019150836001820283011115612c9d57612c9c612c49565b5b9250929050565b60008060208385031215612cbb57612cba6125f4565b5b600083013567ffffffffffffffff811115612cd957612cd86125f9565b5b612ce585828601612c4e565b92509250509250929050565b60008060408385031215612d0857612d076125f4565b5b6000612d1685828601612841565b9250506020612d2785828601612841565b9150509250929050565b600080600060408486031215612d4a57612d496125f4565b5b6000612d588682870161278c565b935050602084013567ffffffffffffffff811115612d7957612d786125f9565b5b612d8586828701612c4e565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd857607f821691505b602082108103612deb57612dea612d91565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4d6021836126c4565b9150612e5882612df1565b604082019050919050565b60006020820190508181036000830152612e7c81612e40565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612edf603e836126c4565b9150612eea82612e83565b604082019050919050565b60006020820190508181036000830152612f0e81612ed2565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612f71602e836126c4565b9150612f7c82612f15565b604082019050919050565b60006020820190508181036000830152612fa081612f64565b9050919050565b7f4e6f206574686572206c65667420746f20776974686472617700000000000000600082015250565b6000612fdd6019836126c4565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b600081905092915050565b50565b600061302e600083613013565b91506130398261301e565b600082019050919050565b600061304f82613021565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061308f6010836126c4565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613121602b836126c4565b915061312c826130c5565b604082019050919050565b6000602082019050818103600083015261315081613114565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006131b3602c836126c4565b91506131be82613157565b604082019050919050565b600060208201905081810360008301526131e2816131a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061324e6018836126c4565b915061325982613218565b602082019050919050565b6000602082019050818103600083015261327d81613241565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132e06029836126c4565b91506132eb82613284565b604082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133508261276b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361338257613381613316565b5b600182019050919050565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b60006133c36010836126c4565b91506133ce8261338d565b602082019050919050565b600060208201905081810360008301526133f2816133b6565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b600061342f600c836126c4565b915061343a826133f9565b602082019050919050565b6000602082019050818103600083015261345e81613422565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026134d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613495565b6134dc8683613495565b95508019841693508086168417925050509392505050565b6000819050919050565b600061351961351461350f8461276b565b6134f4565b61276b565b9050919050565b6000819050919050565b613533836134fe565b61354761353f82613520565b8484546134a2565b825550505050565b600090565b61355c61354f565b61356781848461352a565b505050565b5b8181101561358b57613580600082613554565b60018101905061356d565b5050565b601f8211156135d0576135a181613470565b6135aa84613485565b810160208510156135b9578190505b6135cd6135c585613485565b83018261356c565b50505b505050565b600082821c905092915050565b60006135f3600019846008026135d5565b1980831691505092915050565b600061360c83836135e2565b9150826002028217905092915050565b6136268383613465565b67ffffffffffffffff81111561363f5761363e612a96565b5b6136498254612dc0565b61365482828561358f565b6000601f8311600181146136835760008415613671578287013590505b61367b8582613600565b8655506136e3565b601f19841661369186613470565b60005b828110156136b957848901358255600182019150602085019450602081019050613694565b868310156136d657848901356136d2601f8916826135e2565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137486026836126c4565b9150613753826136ec565b604082019050919050565b600060208201905081810360008301526137778161373b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006137da6025836126c4565b91506137e58261377e565b604082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061386c6024836126c4565b915061387782613810565b604082019050919050565b6000602082019050818103600083015261389b8161385f565b9050919050565b60006138ad8261276b565b91506138b88361276b565b92508282039050818111156138d0576138cf613316565b5b92915050565b60006138e18261276b565b91506138ec8361276b565b925082820190508082111561390457613903613316565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139406020836126c4565b915061394b8261390a565b602082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006139ac6019836126c4565b91506139b782613976565b602082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613a3e6032836126c4565b9150613a49826139e2565b604082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613a9b82613a74565b613aa58185613a7f565b9350613ab58185602086016126d5565b613abe816126ff565b840191505092915050565b6000608082019050613ade6000830187612800565b613aeb6020830186612800565b613af86040830185612896565b8181036060830152613b0a8184613a90565b905095945050505050565b600081519050613b248161262a565b92915050565b600060208284031215613b4057613b3f6125f4565b5b6000613b4e84828501613b15565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613bbc6020836126c4565b9150613bc782613b86565b602082019050919050565b60006020820190508181036000830152613beb81613baf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c28601c836126c4565b9150613c3382613bf2565b602082019050919050565b60006020820190508181036000830152613c5781613c1b565b905091905056fea2646970667358221220ddd57858fa11b225737d2c371087b721b5755d59baeca5b3f96ae8774ddd6c3d64736f6c634300081100330000000000000000000000006a3e5509da279384f2c2f8b060013f6e49cbdf9d
Deployed Bytecode
0x60806040526004361061019c5760003560e01c806370a08231116100ec578063c87b56dd1161008a578063d85d3d2711610064578063d85d3d27146105f1578063e985e9c51461061a578063f2fde38b14610657578063f745630f146106805761019c565b8063c87b56dd14610560578063cf721b151461059d578063d0ebdbe7146105c85761019c565b80638da5cb5b116100c65780638da5cb5b146104b857806395d89b41146104e3578063a22cb4651461050e578063b88d4fde146105375761019c565b806370a0823114610427578063715018a6146104645780638462151c1461047b5761019c565b8063265aa6211161015957806342842e0e1161013357806342842e0e14610359578063481c6a75146103825780634f6ccce7146103ad5780636352211e146103ea5761019c565b8063265aa621146102c35780632e1a7d4d146103005780632f745c591461031c5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612656565b6106a9565b6040516101d5919061269e565b60405180910390f35b3480156101ea57600080fd5b506101f3610723565b6040516102009190612749565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906127a1565b6107b5565b60405161023d919061280f565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612856565b6107fb565b005b34801561027b57600080fd5b50610284610912565b60405161029191906128a5565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc91906128c0565b61091f565b005b3480156102cf57600080fd5b506102ea60048036038101906102e591906127a1565b61097f565b6040516102f79190612749565b60405180910390f35b61031a600480360381019061031591906127a1565b610a1f565b005b34801561032857600080fd5b50610343600480360381019061033e9190612856565b610b44565b60405161035091906128a5565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906128c0565b610be9565b005b34801561038e57600080fd5b50610397610c09565b6040516103a4919061280f565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127a1565b610c2f565b6040516103e191906128a5565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906127a1565b610ca0565b60405161041e919061280f565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612913565b610d51565b60405161045b91906128a5565b60405180910390f35b34801561047057600080fd5b50610479610e08565b005b34801561048757600080fd5b506104a2600480360381019061049d9190612913565b610e1c565b6040516104af91906129fe565b60405180910390f35b3480156104c457600080fd5b506104cd610eca565b6040516104da919061280f565b60405180910390f35b3480156104ef57600080fd5b506104f8610ef4565b6040516105059190612749565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190612a4c565b610f86565b005b34801561054357600080fd5b5061055e60048036038101906105599190612bc1565b610f9c565b005b34801561056c57600080fd5b50610587600480360381019061058291906127a1565b610ffe565b6040516105949190612749565b60405180910390f35b3480156105a957600080fd5b506105b26110fb565b6040516105bf91906128a5565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190612913565b61110c565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612ca4565b611158565b005b34801561062657600080fd5b50610641600480360381019061063c9190612cf1565b611279565b60405161064e919061269e565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190612913565b61130d565b005b34801561068c57600080fd5b506106a760048036038101906106a29190612d31565b611390565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071c575061071b826114dd565b5b9050919050565b60606000805461073290612dc0565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90612dc0565b80156107ab5780601f10610780576101008083540402835291602001916107ab565b820191906000526020600020905b81548152906001019060200180831161078e57829003601f168201915b5050505050905090565b60006107c0826115bf565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080682610ca0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d90612e63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661089561160a565b73ffffffffffffffffffffffffffffffffffffffff1614806108c457506108c3816108be61160a565b611279565b5b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90612ef5565b60405180910390fd5b61090d8383611612565b505050565b6000600880549050905090565b61093061092a61160a565b826116cb565b61096f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096690612f87565b60405180910390fd5b61097a838383611760565b505050565b600d602052806000526040600020600091509050805461099e90612dc0565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90612dc0565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b505050505081565b610a276119c6565b600047905060008111610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6690612ff3565b60405180910390fd5b600082905082821080610a825750600083145b15610a8b578190505b6000610a95610eca565b73ffffffffffffffffffffffffffffffffffffffff1682604051610ab890613044565b60006040518083038185875af1925050503d8060008114610af5576040519150601f19603f3d011682016040523d82523d6000602084013e610afa565b606091505b5050905080610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906130a5565b60405180910390fd5b50505050565b6000610b4f83610d51565b8210610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790613137565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c0483838360405180602001604052806000815250610f9c565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c39610912565b8210610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c71906131c9565b60405180910390fd5b60088281548110610c8e57610c8d6131e9565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90613264565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906132f6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e106119c6565b610e1a6000611a44565b565b60606000610e2983610d51565b905060008167ffffffffffffffff811115610e4757610e46612a96565b5b604051908082528060200260200182016040528015610e755781602001602082028036833780820191505090505b50905060005b82811015610ebf57610e8d8582610b44565b828281518110610ea057610e9f6131e9565b5b6020026020010181815250508080610eb790613345565b915050610e7b565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f0390612dc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2f90612dc0565b8015610f7c5780601f10610f5157610100808354040283529160200191610f7c565b820191906000526020600020905b815481529060010190602001808311610f5f57829003601f168201915b5050505050905090565b610f98610f9161160a565b8383611b0a565b5050565b610fad610fa761160a565b836116cb565b610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612f87565b60405180910390fd5b610ff884848484611c76565b50505050565b60606000821180156110195750611015600c611cd2565b8211155b611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f906133d9565b60405180910390fd5b600d6000838152602001908152602001600020805461107690612dc0565b80601f01602080910402602001604051908101604052809291908181526020018280546110a290612dc0565b80156110ef5780601f106110c4576101008083540402835291602001916110ef565b820191906000526020600020905b8154815290600101906020018083116110d257829003601f168201915b50505050509050919050565b6000611107600c611cd2565b905090565b6111146119c6565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16611177610eca565b73ffffffffffffffffffffffffffffffffffffffff1614806111e657503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613445565b60405180910390fd5b61122f600c611ce0565b61124961123a610eca565b611244600c611cd2565b611cf6565b8181600d6000611259600c611cd2565b8152602001908152602001600020918261127492919061361c565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113156119c6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061375e565b60405180910390fd5b61138d81611a44565b50565b3373ffffffffffffffffffffffffffffffffffffffff166113af610eca565b73ffffffffffffffffffffffffffffffffffffffff16148061141e57503373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613445565b60405180910390fd5b6000831180156114765750611472600c611cd2565b8311155b6114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac906133d9565b60405180910390fd5b8181600d600086815260200190815260200160002091826114d792919061361c565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806115a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115b857506115b782611d14565b5b9050919050565b6115c881611d7e565b611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90613264565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661168583610ca0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806116d783610ca0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171957506117188185611279565b5b8061175757508373ffffffffffffffffffffffffffffffffffffffff1661173f846107b5565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661178082610ca0565b73ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd906137f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90613882565b60405180910390fd5b611850838383611dea565b61185b600082611612565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ab91906138a2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461190291906138d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119c1838383611efc565b505050565b6119ce61160a565b73ffffffffffffffffffffffffffffffffffffffff166119ec610eca565b73ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3990613956565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f906139c2565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c69919061269e565b60405180910390a3505050565b611c81848484611760565b611c8d84848484611f01565b611ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc390613a54565b60405180910390fd5b50505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b611d10828260405180602001604052806000815250612088565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611df58383836120e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e3757611e32816120e8565b611e76565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611e7557611e748382612131565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eb857611eb38161229e565b611ef7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ef657611ef5828261236f565b5b5b505050565b505050565b6000611f228473ffffffffffffffffffffffffffffffffffffffff166123ee565b1561207b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f4b61160a565b8786866040518563ffffffff1660e01b8152600401611f6d9493929190613ac9565b6020604051808303816000875af1925050508015611fa957506040513d601f19601f82011682018060405250810190611fa69190613b2a565b60015b61202b573d8060008114611fd9576040519150601f19603f3d011682016040523d82523d6000602084013e611fde565b606091505b506000815103612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613a54565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612080565b600190505b949350505050565b6120928383612411565b61209f6000848484611f01565b6120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613a54565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161213e84610d51565b61214891906138a2565b905060006007600084815260200190815260200160002054905081811461222d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506122b291906138a2565b90506000600960008481526020019081526020016000205490506000600883815481106122e2576122e16131e9565b5b906000526020600020015490508060088381548110612304576123036131e9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061235357612352613b57565b5b6001900381819060005260206000200160009055905550505050565b600061237a83610d51565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790613bd2565b60405180910390fd5b61248981611d7e565b156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c090613c3e565b60405180910390fd5b6124d560008383611dea565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461252591906138d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e660008383611efc565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612633816125fe565b811461263e57600080fd5b50565b6000813590506126508161262a565b92915050565b60006020828403121561266c5761266b6125f4565b5b600061267a84828501612641565b91505092915050565b60008115159050919050565b61269881612683565b82525050565b60006020820190506126b3600083018461268f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126f35780820151818401526020810190506126d8565b60008484015250505050565b6000601f19601f8301169050919050565b600061271b826126b9565b61272581856126c4565b93506127358185602086016126d5565b61273e816126ff565b840191505092915050565b600060208201905081810360008301526127638184612710565b905092915050565b6000819050919050565b61277e8161276b565b811461278957600080fd5b50565b60008135905061279b81612775565b92915050565b6000602082840312156127b7576127b66125f4565b5b60006127c58482850161278c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127f9826127ce565b9050919050565b612809816127ee565b82525050565b60006020820190506128246000830184612800565b92915050565b612833816127ee565b811461283e57600080fd5b50565b6000813590506128508161282a565b92915050565b6000806040838503121561286d5761286c6125f4565b5b600061287b85828601612841565b925050602061288c8582860161278c565b9150509250929050565b61289f8161276b565b82525050565b60006020820190506128ba6000830184612896565b92915050565b6000806000606084860312156128d9576128d86125f4565b5b60006128e786828701612841565b93505060206128f886828701612841565b92505060406129098682870161278c565b9150509250925092565b600060208284031215612929576129286125f4565b5b600061293784828501612841565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6129758161276b565b82525050565b6000612987838361296c565b60208301905092915050565b6000602082019050919050565b60006129ab82612940565b6129b5818561294b565b93506129c08361295c565b8060005b838110156129f15781516129d8888261297b565b97506129e383612993565b9250506001810190506129c4565b5085935050505092915050565b60006020820190508181036000830152612a1881846129a0565b905092915050565b612a2981612683565b8114612a3457600080fd5b50565b600081359050612a4681612a20565b92915050565b60008060408385031215612a6357612a626125f4565b5b6000612a7185828601612841565b9250506020612a8285828601612a37565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ace826126ff565b810181811067ffffffffffffffff82111715612aed57612aec612a96565b5b80604052505050565b6000612b006125ea565b9050612b0c8282612ac5565b919050565b600067ffffffffffffffff821115612b2c57612b2b612a96565b5b612b35826126ff565b9050602081019050919050565b82818337600083830152505050565b6000612b64612b5f84612b11565b612af6565b905082815260208101848484011115612b8057612b7f612a91565b5b612b8b848285612b42565b509392505050565b600082601f830112612ba857612ba7612a8c565b5b8135612bb8848260208601612b51565b91505092915050565b60008060008060808587031215612bdb57612bda6125f4565b5b6000612be987828801612841565b9450506020612bfa87828801612841565b9350506040612c0b8782880161278c565b925050606085013567ffffffffffffffff811115612c2c57612c2b6125f9565b5b612c3887828801612b93565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112612c6457612c63612a8c565b5b8235905067ffffffffffffffff811115612c8157612c80612c44565b5b602083019150836001820283011115612c9d57612c9c612c49565b5b9250929050565b60008060208385031215612cbb57612cba6125f4565b5b600083013567ffffffffffffffff811115612cd957612cd86125f9565b5b612ce585828601612c4e565b92509250509250929050565b60008060408385031215612d0857612d076125f4565b5b6000612d1685828601612841565b9250506020612d2785828601612841565b9150509250929050565b600080600060408486031215612d4a57612d496125f4565b5b6000612d588682870161278c565b935050602084013567ffffffffffffffff811115612d7957612d786125f9565b5b612d8586828701612c4e565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd857607f821691505b602082108103612deb57612dea612d91565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e4d6021836126c4565b9150612e5882612df1565b604082019050919050565b60006020820190508181036000830152612e7c81612e40565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000612edf603e836126c4565b9150612eea82612e83565b604082019050919050565b60006020820190508181036000830152612f0e81612ed2565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612f71602e836126c4565b9150612f7c82612f15565b604082019050919050565b60006020820190508181036000830152612fa081612f64565b9050919050565b7f4e6f206574686572206c65667420746f20776974686472617700000000000000600082015250565b6000612fdd6019836126c4565b9150612fe882612fa7565b602082019050919050565b6000602082019050818103600083015261300c81612fd0565b9050919050565b600081905092915050565b50565b600061302e600083613013565b91506130398261301e565b600082019050919050565b600061304f82613021565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061308f6010836126c4565b915061309a82613059565b602082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613121602b836126c4565b915061312c826130c5565b604082019050919050565b6000602082019050818103600083015261315081613114565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60006131b3602c836126c4565b91506131be82613157565b604082019050919050565b600060208201905081810360008301526131e2816131a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061324e6018836126c4565b915061325982613218565b602082019050919050565b6000602082019050818103600083015261327d81613241565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132e06029836126c4565b91506132eb82613284565b604082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133508261276b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361338257613381613316565b5b600182019050919050565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b60006133c36010836126c4565b91506133ce8261338d565b602082019050919050565b600060208201905081810360008301526133f2816133b6565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b600061342f600c836126c4565b915061343a826133f9565b602082019050919050565b6000602082019050818103600083015261345e81613422565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026134d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613495565b6134dc8683613495565b95508019841693508086168417925050509392505050565b6000819050919050565b600061351961351461350f8461276b565b6134f4565b61276b565b9050919050565b6000819050919050565b613533836134fe565b61354761353f82613520565b8484546134a2565b825550505050565b600090565b61355c61354f565b61356781848461352a565b505050565b5b8181101561358b57613580600082613554565b60018101905061356d565b5050565b601f8211156135d0576135a181613470565b6135aa84613485565b810160208510156135b9578190505b6135cd6135c585613485565b83018261356c565b50505b505050565b600082821c905092915050565b60006135f3600019846008026135d5565b1980831691505092915050565b600061360c83836135e2565b9150826002028217905092915050565b6136268383613465565b67ffffffffffffffff81111561363f5761363e612a96565b5b6136498254612dc0565b61365482828561358f565b6000601f8311600181146136835760008415613671578287013590505b61367b8582613600565b8655506136e3565b601f19841661369186613470565b60005b828110156136b957848901358255600182019150602085019450602081019050613694565b868310156136d657848901356136d2601f8916826135e2565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137486026836126c4565b9150613753826136ec565b604082019050919050565b600060208201905081810360008301526137778161373b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006137da6025836126c4565b91506137e58261377e565b604082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061386c6024836126c4565b915061387782613810565b604082019050919050565b6000602082019050818103600083015261389b8161385f565b9050919050565b60006138ad8261276b565b91506138b88361276b565b92508282039050818111156138d0576138cf613316565b5b92915050565b60006138e18261276b565b91506138ec8361276b565b925082820190508082111561390457613903613316565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139406020836126c4565b915061394b8261390a565b602082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006139ac6019836126c4565b91506139b782613976565b602082019050919050565b600060208201905081810360008301526139db8161399f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613a3e6032836126c4565b9150613a49826139e2565b604082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613a9b82613a74565b613aa58185613a7f565b9350613ab58185602086016126d5565b613abe816126ff565b840191505092915050565b6000608082019050613ade6000830187612800565b613aeb6020830186612800565b613af86040830185612896565b8181036060830152613b0a8184613a90565b905095945050505050565b600081519050613b248161262a565b92915050565b600060208284031215613b4057613b3f6125f4565b5b6000613b4e84828501613b15565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613bbc6020836126c4565b9150613bc782613b86565b602082019050919050565b60006020820190508181036000830152613beb81613baf565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c28601c836126c4565b9150613c3382613bf2565b602082019050919050565b60006020820190508181036000830152613c5781613c1b565b905091905056fea2646970667358221220ddd57858fa11b225737d2c371087b721b5755d59baeca5b3f96ae8774ddd6c3d64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006a3e5509da279384f2c2f8b060013f6e49cbdf9d
-----Decoded View---------------
Arg [0] : _manager (address): 0x6A3E5509Da279384F2C2f8b060013f6e49Cbdf9d
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006a3e5509da279384f2c2f8b060013f6e49cbdf9d
Deployed Bytecode Sourcemap
47722:1819:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41475:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28209:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29722:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29239:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42115:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30422:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47874:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49163:375;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41783:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30829:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47812:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42305:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27920:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27651:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6738:103;;;;;;;;;;;;;:::i;:::-;;48848:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6090:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28378:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29965:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31085:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48562:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48756:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48134:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48224:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30191:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6996:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48391:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41475:224;41577:4;41616:35;41601:50;;;:11;:50;;;;:90;;;;41655:36;41679:11;41655:23;:36::i;:::-;41601:90;41594:97;;41475:224;;;:::o;28209:100::-;28263:13;28296:5;28289:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28209:100;:::o;29722:171::-;29798:7;29818:23;29833:7;29818:14;:23::i;:::-;29861:15;:24;29877:7;29861:24;;;;;;;;;;;;;;;;;;;;;29854:31;;29722:171;;;:::o;29239:417::-;29320:13;29336:23;29351:7;29336:14;:23::i;:::-;29320:39;;29384:5;29378:11;;:2;:11;;;29370:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29478:5;29462:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29487:37;29504:5;29511:12;:10;:12::i;:::-;29487:16;:37::i;:::-;29462:62;29440:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29627:21;29636:2;29640:7;29627:8;:21::i;:::-;29309:347;29239:417;;:::o;42115:113::-;42176:7;42203:10;:17;;;;42196:24;;42115:113;:::o;30422:336::-;30617:41;30636:12;:10;:12::i;:::-;30650:7;30617:18;:41::i;:::-;30609:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30722:28;30732:4;30738:2;30742:7;30722:9;:28::i;:::-;30422:336;;;:::o;47874:38::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49163:375::-;5976:13;:11;:13::i;:::-;49229:15:::1;49247:21;49229:39;;49291:1;49281:7;:11;49273:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49327:18;49348:6;49327:27;;49373:6;49363:7;:16;:31;;;;49393:1;49383:6;:11;49363:31;49359:69;;;49415:7;49402:20;;49359:69;49435:12;49454:7;:5;:7::i;:::-;49453:14;;49476:10;49453:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49434:58;;;49505:7;49497:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49224:314;;;49163:375:::0;:::o;41783:256::-;41880:7;41916:23;41933:5;41916:16;:23::i;:::-;41908:5;:31;41900:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42005:12;:19;42018:5;42005:19;;;;;;;;;;;;;;;:26;42025:5;42005:26;;;;;;;;;;;;41998:33;;41783:256;;;;:::o;30829:185::-;30967:39;30984:4;30990:2;30994:7;30967:39;;;;;;;;;;;;:16;:39::i;:::-;30829:185;;;:::o;47812:22::-;;;;;;;;;;;;;:::o;42305:233::-;42380:7;42416:30;:28;:30::i;:::-;42408:5;:38;42400:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42513:10;42524:5;42513:17;;;;;;;;:::i;:::-;;;;;;;;;;42506:24;;42305:233;;;:::o;27920:222::-;27992:7;28012:13;28028:7;:16;28036:7;28028:16;;;;;;;;;;;;;;;;;;;;;28012:32;;28080:1;28063:19;;:5;:19;;;28055:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28129:5;28122:12;;;27920:222;;;:::o;27651:207::-;27723:7;27768:1;27751:19;;:5;:19;;;27743:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27834:9;:16;27844:5;27834:16;;;;;;;;;;;;;;;;27827:23;;27651:207;;;:::o;6738:103::-;5976:13;:11;:13::i;:::-;6803:30:::1;6830:1;6803:18;:30::i;:::-;6738:103::o:0;48848:310::-;48910:16;48933:18;48954:17;48964:6;48954:9;:17::i;:::-;48933:38;;48976:26;49019:10;49005:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48976:54;;49040:9;49035:98;49059:10;49055:1;:14;49035:98;;;49097:30;49117:6;49125:1;49097:19;:30::i;:::-;49082:9;49092:1;49082:12;;;;;;;;:::i;:::-;;;;;;;:45;;;;;49071:3;;;;;:::i;:::-;;;;49035:98;;;;49144:9;49137:16;;;;48848:310;;;:::o;6090:87::-;6136:7;6163:6;;;;;;;;;;;6156:13;;6090:87;:::o;28378:104::-;28434:13;28467:7;28460:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28378:104;:::o;29965:155::-;30060:52;30079:12;:10;:12::i;:::-;30093:8;30103;30060:18;:52::i;:::-;29965:155;;:::o;31085:323::-;31259:41;31278:12;:10;:12::i;:::-;31292:7;31259:18;:41::i;:::-;31251:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31362:38;31376:4;31382:2;31386:7;31395:4;31362:13;:38::i;:::-;31085:323;;;;:::o;48562:189::-;48628:13;48667:1;48656:8;:12;:43;;;;;48684:15;:5;:13;:15::i;:::-;48672:8;:27;;48656:43;48648:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48732:4;:14;48737:8;48732:14;;;;;;;;;;;48725:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48562:189;;;:::o;48756:87::-;48802:7;48823:15;:5;:13;:15::i;:::-;48816:22;;48756:87;:::o;48134:85::-;5976:13;:11;:13::i;:::-;48206:8:::1;48196:7;;:18;;;;;;;;;;;;;;;;;;48134:85:::0;:::o;48224:162::-;47972:10;47961:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;47997:10;47986:21;;:7;;;;;;;;;;;:21;;;47961:46;47953:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48292:17:::1;:5;:15;:17::i;:::-;48314:35;48324:7;:5;:7::i;:::-;48333:15;:5;:13;:15::i;:::-;48314:9;:35::i;:::-;48378:3;;48354:4;:21;48359:15;:5;:13;:15::i;:::-;48354:21;;;;;;;;;;;:27;;;;;;;:::i;:::-;;48224:162:::0;;:::o;30191:164::-;30288:4;30312:18;:25;30331:5;30312:25;;;;;;;;;;;;;;;:35;30338:8;30312:35;;;;;;;;;;;;;;;;;;;;;;;;;30305:42;;30191:164;;;;:::o;6996:201::-;5976:13;:11;:13::i;:::-;7105:1:::1;7085:22;;:8;:22;;::::0;7077:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7161:28;7180:8;7161:18;:28::i;:::-;6996:201:::0;:::o;48391:166::-;47972:10;47961:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;47997:10;47986:21;;:7;;;;;;;;;;;:21;;;47961:46;47953:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48486:1:::1;48481:2;:6;:31;;;;;48497:15;:5;:13;:15::i;:::-;48491:2;:21;;48481:31;48473:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48549:3;;48538:4;:8;48543:2;48538:8;;;;;;;;;;;:14;;;;;;;:::i;:::-;;48391:166:::0;;;:::o;27282:305::-;27384:4;27436:25;27421:40;;;:11;:40;;;;:105;;;;27493:33;27478:48;;;:11;:48;;;;27421:105;:158;;;;27543:36;27567:11;27543:23;:36::i;:::-;27421:158;27401:178;;27282:305;;;:::o;37697:135::-;37779:16;37787:7;37779;:16::i;:::-;37771:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37697:135;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;36976:174::-;37078:2;37051:15;:24;37067:7;37051:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37134:7;37130:2;37096:46;;37105:23;37120:7;37105:14;:23::i;:::-;37096:46;;;;;;;;;;;;36976:174;;:::o;33209:264::-;33302:4;33319:13;33335:23;33350:7;33335:14;:23::i;:::-;33319:39;;33388:5;33377:16;;:7;:16;;;:52;;;;33397:32;33414:5;33421:7;33397:16;:32::i;:::-;33377:52;:87;;;;33457:7;33433:31;;:20;33445:7;33433:11;:20::i;:::-;:31;;;33377:87;33369:96;;;33209:264;;;;:::o;36232:625::-;36391:4;36364:31;;:23;36379:7;36364:14;:23::i;:::-;:31;;;36356:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36470:1;36456:16;;:2;:16;;;36448:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36526:39;36547:4;36553:2;36557:7;36526:20;:39::i;:::-;36630:29;36647:1;36651:7;36630:8;:29::i;:::-;36691:1;36672:9;:15;36682:4;36672:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36720:1;36703:9;:13;36713:2;36703:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36751:2;36732:7;:16;36740:7;36732:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36790:7;36786:2;36771:27;;36780:4;36771:27;;;;;;;;;;;;36811:38;36831:4;36837:2;36841:7;36811:19;:38::i;:::-;36232:625;;;:::o;6255:132::-;6330:12;:10;:12::i;:::-;6319:23;;:7;:5;:7::i;:::-;:23;;;6311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6255:132::o;7357:191::-;7431:16;7450:6;;;;;;;;;;;7431:25;;7476:8;7467:6;;:17;;;;;;;;;;;;;;;;;;7531:8;7500:40;;7521:8;7500:40;;;;;;;;;;;;7420:128;7357:191;:::o;37293:315::-;37448:8;37439:17;;:5;:17;;;37431:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37535:8;37497:18;:25;37516:5;37497:25;;;;;;;;;;;;;;;:35;37523:8;37497:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37581:8;37559:41;;37574:5;37559:41;;;37591:8;37559:41;;;;;;:::i;:::-;;;;;;;;37293:315;;;:::o;32289:313::-;32445:28;32455:4;32461:2;32465:7;32445:9;:28::i;:::-;32492:47;32515:4;32521:2;32525:7;32534:4;32492:22;:47::i;:::-;32484:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32289:313;;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;33815:110::-;33891:26;33901:2;33905:7;33891:26;;;;;;;;;;;;:9;:26::i;:::-;33815:110;;:::o;18944:157::-;19029:4;19068:25;19053:40;;;:11;:40;;;;19046:47;;18944:157;;;:::o;32915:127::-;32980:4;33032:1;33004:30;;:7;:16;33012:7;33004:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32997:37;;32915:127;;;:::o;43151:589::-;43295:45;43322:4;43328:2;43332:7;43295:26;:45::i;:::-;43373:1;43357:18;;:4;:18;;;43353:187;;43392:40;43424:7;43392:31;:40::i;:::-;43353:187;;;43462:2;43454:10;;:4;:10;;;43450:90;;43481:47;43514:4;43520:7;43481:32;:47::i;:::-;43450:90;43353:187;43568:1;43554:16;;:2;:16;;;43550:183;;43587:45;43624:7;43587:36;:45::i;:::-;43550:183;;;43660:4;43654:10;;:2;:10;;;43650:83;;43681:40;43709:2;43713:7;43681:27;:40::i;:::-;43650:83;43550:183;43151:589;;;:::o;40332:125::-;;;;:::o;38396:853::-;38550:4;38571:15;:2;:13;;;:15::i;:::-;38567:675;;;38623:2;38607:36;;;38644:12;:10;:12::i;:::-;38658:4;38664:7;38673:4;38607:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38603:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38865:1;38848:6;:13;:18;38844:328;;38891:60;;;;;;;;;;:::i;:::-;;;;;;;;38844:328;39122:6;39116:13;39107:6;39103:2;39099:15;39092:38;38603:584;38739:41;;;38729:51;;;:6;:51;;;;38722:58;;;;;38567:675;39226:4;39219:11;;38396:853;;;;;;;:::o;34152:319::-;34281:18;34287:2;34291:7;34281:5;:18::i;:::-;34332:53;34363:1;34367:2;34371:7;34380:4;34332:22;:53::i;:::-;34310:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34152:319;;;:::o;39821:126::-;;;;:::o;44463:164::-;44567:10;:17;;;;44540:15;:24;44556:7;44540:24;;;;;;;;;;;:44;;;;44595:10;44611:7;44595:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44463:164;:::o;45254:988::-;45520:22;45570:1;45545:22;45562:4;45545:16;:22::i;:::-;:26;;;;:::i;:::-;45520:51;;45582:18;45603:17;:26;45621:7;45603:26;;;;;;;;;;;;45582:47;;45750:14;45736:10;:28;45732:328;;45781:19;45803:12;:18;45816:4;45803:18;;;;;;;;;;;;;;;:34;45822:14;45803:34;;;;;;;;;;;;45781:56;;45887:11;45854:12;:18;45867:4;45854:18;;;;;;;;;;;;;;;:30;45873:10;45854:30;;;;;;;;;;;:44;;;;46004:10;45971:17;:30;45989:11;45971:30;;;;;;;;;;;:43;;;;45766:294;45732:328;46156:17;:26;46174:7;46156:26;;;;;;;;;;;46149:33;;;46200:12;:18;46213:4;46200:18;;;;;;;;;;;;;;;:34;46219:14;46200:34;;;;;;;;;;;46193:41;;;45335:907;;45254:988;;:::o;46537:1079::-;46790:22;46835:1;46815:10;:17;;;;:21;;;;:::i;:::-;46790:46;;46847:18;46868:15;:24;46884:7;46868:24;;;;;;;;;;;;46847:45;;47219:19;47241:10;47252:14;47241:26;;;;;;;;:::i;:::-;;;;;;;;;;47219:48;;47305:11;47280:10;47291;47280:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47416:10;47385:15;:28;47401:11;47385:28;;;;;;;;;;;:41;;;;47557:15;:24;47573:7;47557:24;;;;;;;;;;;47550:31;;;47592:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46608:1008;;;46537:1079;:::o;44041:221::-;44126:14;44143:20;44160:2;44143:16;:20::i;:::-;44126:37;;44201:7;44174:12;:16;44187:2;44174:16;;;;;;;;;;;;;;;:24;44191:6;44174:24;;;;;;;;;;;:34;;;;44248:6;44219:17;:26;44237:7;44219:26;;;;;;;;;;;:35;;;;44115:147;44041:221;;:::o;8788:326::-;8848:4;9105:1;9083:7;:19;;;:23;9076:30;;8788:326;;;:::o;34807:439::-;34901:1;34887:16;;:2;:16;;;34879:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34960:16;34968:7;34960;:16::i;:::-;34959:17;34951:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35022:45;35051:1;35055:2;35059:7;35022:20;:45::i;:::-;35097:1;35080:9;:13;35090:2;35080:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35128:2;35109:7;:16;35117:7;35109:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35173:7;35169:2;35148:33;;35165:1;35148:33;;;;;;;;;;;;35194:44;35222:1;35226:2;35230:7;35194:19;:44::i;:::-;34807:439;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:114::-;6269:6;6303:5;6297:12;6287:22;;6202:114;;;:::o;6322:184::-;6421:11;6455:6;6450:3;6443:19;6495:4;6490:3;6486:14;6471:29;;6322:184;;;;:::o;6512:132::-;6579:4;6602:3;6594:11;;6632:4;6627:3;6623:14;6615:22;;6512:132;;;:::o;6650:108::-;6727:24;6745:5;6727:24;:::i;:::-;6722:3;6715:37;6650:108;;:::o;6764:179::-;6833:10;6854:46;6896:3;6888:6;6854:46;:::i;:::-;6932:4;6927:3;6923:14;6909:28;;6764:179;;;;:::o;6949:113::-;7019:4;7051;7046:3;7042:14;7034:22;;6949:113;;;:::o;7098:732::-;7217:3;7246:54;7294:5;7246:54;:::i;:::-;7316:86;7395:6;7390:3;7316:86;:::i;:::-;7309:93;;7426:56;7476:5;7426:56;:::i;:::-;7505:7;7536:1;7521:284;7546:6;7543:1;7540:13;7521:284;;;7622:6;7616:13;7649:63;7708:3;7693:13;7649:63;:::i;:::-;7642:70;;7735:60;7788:6;7735:60;:::i;:::-;7725:70;;7581:224;7568:1;7565;7561:9;7556:14;;7521:284;;;7525:14;7821:3;7814:10;;7222:608;;;7098:732;;;;:::o;7836:373::-;7979:4;8017:2;8006:9;8002:18;7994:26;;8066:9;8060:4;8056:20;8052:1;8041:9;8037:17;8030:47;8094:108;8197:4;8188:6;8094:108;:::i;:::-;8086:116;;7836:373;;;;:::o;8215:116::-;8285:21;8300:5;8285:21;:::i;:::-;8278:5;8275:32;8265:60;;8321:1;8318;8311:12;8265:60;8215:116;:::o;8337:133::-;8380:5;8418:6;8405:20;8396:29;;8434:30;8458:5;8434:30;:::i;:::-;8337:133;;;;:::o;8476:468::-;8541:6;8549;8598:2;8586:9;8577:7;8573:23;8569:32;8566:119;;;8604:79;;:::i;:::-;8566:119;8724:1;8749:53;8794:7;8785:6;8774:9;8770:22;8749:53;:::i;:::-;8739:63;;8695:117;8851:2;8877:50;8919:7;8910:6;8899:9;8895:22;8877:50;:::i;:::-;8867:60;;8822:115;8476:468;;;;;:::o;8950:117::-;9059:1;9056;9049:12;9073:117;9182:1;9179;9172:12;9196:180;9244:77;9241:1;9234:88;9341:4;9338:1;9331:15;9365:4;9362:1;9355:15;9382:281;9465:27;9487:4;9465:27;:::i;:::-;9457:6;9453:40;9595:6;9583:10;9580:22;9559:18;9547:10;9544:34;9541:62;9538:88;;;9606:18;;:::i;:::-;9538:88;9646:10;9642:2;9635:22;9425:238;9382:281;;:::o;9669:129::-;9703:6;9730:20;;:::i;:::-;9720:30;;9759:33;9787:4;9779:6;9759:33;:::i;:::-;9669:129;;;:::o;9804:307::-;9865:4;9955:18;9947:6;9944:30;9941:56;;;9977:18;;:::i;:::-;9941:56;10015:29;10037:6;10015:29;:::i;:::-;10007:37;;10099:4;10093;10089:15;10081:23;;9804:307;;;:::o;10117:146::-;10214:6;10209:3;10204;10191:30;10255:1;10246:6;10241:3;10237:16;10230:27;10117:146;;;:::o;10269:423::-;10346:5;10371:65;10387:48;10428:6;10387:48;:::i;:::-;10371:65;:::i;:::-;10362:74;;10459:6;10452:5;10445:21;10497:4;10490:5;10486:16;10535:3;10526:6;10521:3;10517:16;10514:25;10511:112;;;10542:79;;:::i;:::-;10511:112;10632:54;10679:6;10674:3;10669;10632:54;:::i;:::-;10352:340;10269:423;;;;;:::o;10711:338::-;10766:5;10815:3;10808:4;10800:6;10796:17;10792:27;10782:122;;10823:79;;:::i;:::-;10782:122;10940:6;10927:20;10965:78;11039:3;11031:6;11024:4;11016:6;11012:17;10965:78;:::i;:::-;10956:87;;10772:277;10711:338;;;;:::o;11055:943::-;11150:6;11158;11166;11174;11223:3;11211:9;11202:7;11198:23;11194:33;11191:120;;;11230:79;;:::i;:::-;11191:120;11350:1;11375:53;11420:7;11411:6;11400:9;11396:22;11375:53;:::i;:::-;11365:63;;11321:117;11477:2;11503:53;11548:7;11539:6;11528:9;11524:22;11503:53;:::i;:::-;11493:63;;11448:118;11605:2;11631:53;11676:7;11667:6;11656:9;11652:22;11631:53;:::i;:::-;11621:63;;11576:118;11761:2;11750:9;11746:18;11733:32;11792:18;11784:6;11781:30;11778:117;;;11814:79;;:::i;:::-;11778:117;11919:62;11973:7;11964:6;11953:9;11949:22;11919:62;:::i;:::-;11909:72;;11704:287;11055:943;;;;;;;:::o;12004:117::-;12113:1;12110;12103:12;12127:117;12236:1;12233;12226:12;12264:553;12322:8;12332:6;12382:3;12375:4;12367:6;12363:17;12359:27;12349:122;;12390:79;;:::i;:::-;12349:122;12503:6;12490:20;12480:30;;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12669:4;12661:6;12657:17;12645:29;;12723:3;12715:4;12707:6;12703:17;12693:8;12689:32;12686:41;12683:128;;;12730:79;;:::i;:::-;12683:128;12264:553;;;;;:::o;12823:529::-;12894:6;12902;12951:2;12939:9;12930:7;12926:23;12922:32;12919:119;;;12957:79;;:::i;:::-;12919:119;13105:1;13094:9;13090:17;13077:31;13135:18;13127:6;13124:30;13121:117;;;13157:79;;:::i;:::-;13121:117;13270:65;13327:7;13318:6;13307:9;13303:22;13270:65;:::i;:::-;13252:83;;;;13048:297;12823:529;;;;;:::o;13358:474::-;13426:6;13434;13483:2;13471:9;13462:7;13458:23;13454:32;13451:119;;;13489:79;;:::i;:::-;13451:119;13609:1;13634:53;13679:7;13670:6;13659:9;13655:22;13634:53;:::i;:::-;13624:63;;13580:117;13736:2;13762:53;13807:7;13798:6;13787:9;13783:22;13762:53;:::i;:::-;13752:63;;13707:118;13358:474;;;;;:::o;13838:674::-;13918:6;13926;13934;13983:2;13971:9;13962:7;13958:23;13954:32;13951:119;;;13989:79;;:::i;:::-;13951:119;14109:1;14134:53;14179:7;14170:6;14159:9;14155:22;14134:53;:::i;:::-;14124:63;;14080:117;14264:2;14253:9;14249:18;14236:32;14295:18;14287:6;14284:30;14281:117;;;14317:79;;:::i;:::-;14281:117;14430:65;14487:7;14478:6;14467:9;14463:22;14430:65;:::i;:::-;14412:83;;;;14207:298;13838:674;;;;;:::o;14518:180::-;14566:77;14563:1;14556:88;14663:4;14660:1;14653:15;14687:4;14684:1;14677:15;14704:320;14748:6;14785:1;14779:4;14775:12;14765:22;;14832:1;14826:4;14822:12;14853:18;14843:81;;14909:4;14901:6;14897:17;14887:27;;14843:81;14971:2;14963:6;14960:14;14940:18;14937:38;14934:84;;14990:18;;:::i;:::-;14934:84;14755:269;14704:320;;;:::o;15030:220::-;15170:34;15166:1;15158:6;15154:14;15147:58;15239:3;15234:2;15226:6;15222:15;15215:28;15030:220;:::o;15256:366::-;15398:3;15419:67;15483:2;15478:3;15419:67;:::i;:::-;15412:74;;15495:93;15584:3;15495:93;:::i;:::-;15613:2;15608:3;15604:12;15597:19;;15256:366;;;:::o;15628:419::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15881:9;15875:4;15871:20;15867:1;15856:9;15852:17;15845:47;15909:131;16035:4;15909:131;:::i;:::-;15901:139;;15628:419;;;:::o;16053:249::-;16193:34;16189:1;16181:6;16177:14;16170:58;16262:32;16257:2;16249:6;16245:15;16238:57;16053:249;:::o;16308:366::-;16450:3;16471:67;16535:2;16530:3;16471:67;:::i;:::-;16464:74;;16547:93;16636:3;16547:93;:::i;:::-;16665:2;16660:3;16656:12;16649:19;;16308:366;;;:::o;16680:419::-;16846:4;16884:2;16873:9;16869:18;16861:26;;16933:9;16927:4;16923:20;16919:1;16908:9;16904:17;16897:47;16961:131;17087:4;16961:131;:::i;:::-;16953:139;;16680:419;;;:::o;17105:233::-;17245:34;17241:1;17233:6;17229:14;17222:58;17314:16;17309:2;17301:6;17297:15;17290:41;17105:233;:::o;17344:366::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17344:366;;;:::o;17716:419::-;17882:4;17920:2;17909:9;17905:18;17897:26;;17969:9;17963:4;17959:20;17955:1;17944:9;17940:17;17933:47;17997:131;18123:4;17997:131;:::i;:::-;17989:139;;17716:419;;;:::o;18141:175::-;18281:27;18277:1;18269:6;18265:14;18258:51;18141:175;:::o;18322:366::-;18464:3;18485:67;18549:2;18544:3;18485:67;:::i;:::-;18478:74;;18561:93;18650:3;18561:93;:::i;:::-;18679:2;18674:3;18670:12;18663:19;;18322:366;;;:::o;18694:419::-;18860:4;18898:2;18887:9;18883:18;18875:26;;18947:9;18941:4;18937:20;18933:1;18922:9;18918:17;18911:47;18975:131;19101:4;18975:131;:::i;:::-;18967:139;;18694:419;;;:::o;19119:147::-;19220:11;19257:3;19242:18;;19119:147;;;;:::o;19272:114::-;;:::o;19392:398::-;19551:3;19572:83;19653:1;19648:3;19572:83;:::i;:::-;19565:90;;19664:93;19753:3;19664:93;:::i;:::-;19782:1;19777:3;19773:11;19766:18;;19392:398;;;:::o;19796:379::-;19980:3;20002:147;20145:3;20002:147;:::i;:::-;19995:154;;20166:3;20159:10;;19796:379;;;:::o;20181:166::-;20321:18;20317:1;20309:6;20305:14;20298:42;20181:166;:::o;20353:366::-;20495:3;20516:67;20580:2;20575:3;20516:67;:::i;:::-;20509:74;;20592:93;20681:3;20592:93;:::i;:::-;20710:2;20705:3;20701:12;20694:19;;20353:366;;;:::o;20725:419::-;20891:4;20929:2;20918:9;20914:18;20906:26;;20978:9;20972:4;20968:20;20964:1;20953:9;20949:17;20942:47;21006:131;21132:4;21006:131;:::i;:::-;20998:139;;20725:419;;;:::o;21150:230::-;21290:34;21286:1;21278:6;21274:14;21267:58;21359:13;21354:2;21346:6;21342:15;21335:38;21150:230;:::o;21386:366::-;21528:3;21549:67;21613:2;21608:3;21549:67;:::i;:::-;21542:74;;21625:93;21714:3;21625:93;:::i;:::-;21743:2;21738:3;21734:12;21727:19;;21386:366;;;:::o;21758:419::-;21924:4;21962:2;21951:9;21947:18;21939:26;;22011:9;22005:4;22001:20;21997:1;21986:9;21982:17;21975:47;22039:131;22165:4;22039:131;:::i;:::-;22031:139;;21758:419;;;:::o;22183:231::-;22323:34;22319:1;22311:6;22307:14;22300:58;22392:14;22387:2;22379:6;22375:15;22368:39;22183:231;:::o;22420:366::-;22562:3;22583:67;22647:2;22642:3;22583:67;:::i;:::-;22576:74;;22659:93;22748:3;22659:93;:::i;:::-;22777:2;22772:3;22768:12;22761:19;;22420:366;;;:::o;22792:419::-;22958:4;22996:2;22985:9;22981:18;22973:26;;23045:9;23039:4;23035:20;23031:1;23020:9;23016:17;23009:47;23073:131;23199:4;23073:131;:::i;:::-;23065:139;;22792:419;;;:::o;23217:180::-;23265:77;23262:1;23255:88;23362:4;23359:1;23352:15;23386:4;23383:1;23376:15;23403:174;23543:26;23539:1;23531:6;23527:14;23520:50;23403:174;:::o;23583:366::-;23725:3;23746:67;23810:2;23805:3;23746:67;:::i;:::-;23739:74;;23822:93;23911:3;23822:93;:::i;:::-;23940:2;23935:3;23931:12;23924:19;;23583:366;;;:::o;23955:419::-;24121:4;24159:2;24148:9;24144:18;24136:26;;24208:9;24202:4;24198:20;24194:1;24183:9;24179:17;24172:47;24236:131;24362:4;24236:131;:::i;:::-;24228:139;;23955:419;;;:::o;24380:228::-;24520:34;24516:1;24508:6;24504:14;24497:58;24589:11;24584:2;24576:6;24572:15;24565:36;24380:228;:::o;24614:366::-;24756:3;24777:67;24841:2;24836:3;24777:67;:::i;:::-;24770:74;;24853:93;24942:3;24853:93;:::i;:::-;24971:2;24966:3;24962:12;24955:19;;24614:366;;;:::o;24986:419::-;25152:4;25190:2;25179:9;25175:18;25167:26;;25239:9;25233:4;25229:20;25225:1;25214:9;25210:17;25203:47;25267:131;25393:4;25267:131;:::i;:::-;25259:139;;24986:419;;;:::o;25411:180::-;25459:77;25456:1;25449:88;25556:4;25553:1;25546:15;25580:4;25577:1;25570:15;25597:233;25636:3;25659:24;25677:5;25659:24;:::i;:::-;25650:33;;25705:66;25698:5;25695:77;25692:103;;25775:18;;:::i;:::-;25692:103;25822:1;25815:5;25811:13;25804:20;;25597:233;;;:::o;25836:166::-;25976:18;25972:1;25964:6;25960:14;25953:42;25836:166;:::o;26008:366::-;26150:3;26171:67;26235:2;26230:3;26171:67;:::i;:::-;26164:74;;26247:93;26336:3;26247:93;:::i;:::-;26365:2;26360:3;26356:12;26349:19;;26008:366;;;:::o;26380:419::-;26546:4;26584:2;26573:9;26569:18;26561:26;;26633:9;26627:4;26623:20;26619:1;26608:9;26604:17;26597:47;26661:131;26787:4;26661:131;:::i;:::-;26653:139;;26380:419;;;:::o;26805:162::-;26945:14;26941:1;26933:6;26929:14;26922:38;26805:162;:::o;26973:366::-;27115:3;27136:67;27200:2;27195:3;27136:67;:::i;:::-;27129:74;;27212:93;27301:3;27212:93;:::i;:::-;27330:2;27325:3;27321:12;27314:19;;26973:366;;;:::o;27345:419::-;27511:4;27549:2;27538:9;27534:18;27526:26;;27598:9;27592:4;27588:20;27584:1;27573:9;27569:17;27562:47;27626:131;27752:4;27626:131;:::i;:::-;27618:139;;27345:419;;;:::o;27770:97::-;27829:6;27857:3;27847:13;;27770:97;;;;:::o;27873:141::-;27922:4;27945:3;27937:11;;27968:3;27965:1;27958:14;28002:4;27999:1;27989:18;27981:26;;27873:141;;;:::o;28020:93::-;28057:6;28104:2;28099;28092:5;28088:14;28084:23;28074:33;;28020:93;;;:::o;28119:107::-;28163:8;28213:5;28207:4;28203:16;28182:37;;28119:107;;;;:::o;28232:393::-;28301:6;28351:1;28339:10;28335:18;28374:97;28404:66;28393:9;28374:97;:::i;:::-;28492:39;28522:8;28511:9;28492:39;:::i;:::-;28480:51;;28564:4;28560:9;28553:5;28549:21;28540:30;;28613:4;28603:8;28599:19;28592:5;28589:30;28579:40;;28308:317;;28232:393;;;;;:::o;28631:60::-;28659:3;28680:5;28673:12;;28631:60;;;:::o;28697:142::-;28747:9;28780:53;28798:34;28807:24;28825:5;28807:24;:::i;:::-;28798:34;:::i;:::-;28780:53;:::i;:::-;28767:66;;28697:142;;;:::o;28845:75::-;28888:3;28909:5;28902:12;;28845:75;;;:::o;28926:269::-;29036:39;29067:7;29036:39;:::i;:::-;29097:91;29146:41;29170:16;29146:41;:::i;:::-;29138:6;29131:4;29125:11;29097:91;:::i;:::-;29091:4;29084:105;29002:193;28926:269;;;:::o;29201:73::-;29246:3;29201:73;:::o;29280:189::-;29357:32;;:::i;:::-;29398:65;29456:6;29448;29442:4;29398:65;:::i;:::-;29333:136;29280:189;;:::o;29475:186::-;29535:120;29552:3;29545:5;29542:14;29535:120;;;29606:39;29643:1;29636:5;29606:39;:::i;:::-;29579:1;29572:5;29568:13;29559:22;;29535:120;;;29475:186;;:::o;29667:543::-;29768:2;29763:3;29760:11;29757:446;;;29802:38;29834:5;29802:38;:::i;:::-;29886:29;29904:10;29886:29;:::i;:::-;29876:8;29872:44;30069:2;30057:10;30054:18;30051:49;;;30090:8;30075:23;;30051:49;30113:80;30169:22;30187:3;30169:22;:::i;:::-;30159:8;30155:37;30142:11;30113:80;:::i;:::-;29772:431;;29757:446;29667:543;;;:::o;30216:117::-;30270:8;30320:5;30314:4;30310:16;30289:37;;30216:117;;;;:::o;30339:169::-;30383:6;30416:51;30464:1;30460:6;30452:5;30449:1;30445:13;30416:51;:::i;:::-;30412:56;30497:4;30491;30487:15;30477:25;;30390:118;30339:169;;;;:::o;30513:295::-;30589:4;30735:29;30760:3;30754:4;30735:29;:::i;:::-;30727:37;;30797:3;30794:1;30790:11;30784:4;30781:21;30773:29;;30513:295;;;;:::o;30813:1403::-;30937:44;30977:3;30972;30937:44;:::i;:::-;31046:18;31038:6;31035:30;31032:56;;;31068:18;;:::i;:::-;31032:56;31112:38;31144:4;31138:11;31112:38;:::i;:::-;31197:67;31257:6;31249;31243:4;31197:67;:::i;:::-;31291:1;31320:2;31312:6;31309:14;31337:1;31332:632;;;;32008:1;32025:6;32022:84;;;32081:9;32076:3;32072:19;32059:33;32050:42;;32022:84;32132:67;32192:6;32185:5;32132:67;:::i;:::-;32126:4;32119:81;31981:229;31302:908;;31332:632;31384:4;31380:9;31372:6;31368:22;31418:37;31450:4;31418:37;:::i;:::-;31477:1;31491:215;31505:7;31502:1;31499:14;31491:215;;;31591:9;31586:3;31582:19;31569:33;31561:6;31554:49;31642:1;31634:6;31630:14;31620:24;;31689:2;31678:9;31674:18;31661:31;;31528:4;31525:1;31521:12;31516:17;;31491:215;;;31734:6;31725:7;31722:19;31719:186;;;31799:9;31794:3;31790:19;31777:33;31842:48;31884:4;31876:6;31872:17;31861:9;31842:48;:::i;:::-;31834:6;31827:64;31742:163;31719:186;31951:1;31947;31939:6;31935:14;31931:22;31925:4;31918:36;31339:625;;;31302:908;;30912:1304;;;30813:1403;;;:::o;32222:225::-;32362:34;32358:1;32350:6;32346:14;32339:58;32431:8;32426:2;32418:6;32414:15;32407:33;32222:225;:::o;32453:366::-;32595:3;32616:67;32680:2;32675:3;32616:67;:::i;:::-;32609:74;;32692:93;32781:3;32692:93;:::i;:::-;32810:2;32805:3;32801:12;32794:19;;32453:366;;;:::o;32825:419::-;32991:4;33029:2;33018:9;33014:18;33006:26;;33078:9;33072:4;33068:20;33064:1;33053:9;33049:17;33042:47;33106:131;33232:4;33106:131;:::i;:::-;33098:139;;32825:419;;;:::o;33250:224::-;33390:34;33386:1;33378:6;33374:14;33367:58;33459:7;33454:2;33446:6;33442:15;33435:32;33250:224;:::o;33480:366::-;33622:3;33643:67;33707:2;33702:3;33643:67;:::i;:::-;33636:74;;33719:93;33808:3;33719:93;:::i;:::-;33837:2;33832:3;33828:12;33821:19;;33480:366;;;:::o;33852:419::-;34018:4;34056:2;34045:9;34041:18;34033:26;;34105:9;34099:4;34095:20;34091:1;34080:9;34076:17;34069:47;34133:131;34259:4;34133:131;:::i;:::-;34125:139;;33852:419;;;:::o;34277:223::-;34417:34;34413:1;34405:6;34401:14;34394:58;34486:6;34481:2;34473:6;34469:15;34462:31;34277:223;:::o;34506:366::-;34648:3;34669:67;34733:2;34728:3;34669:67;:::i;:::-;34662:74;;34745:93;34834:3;34745:93;:::i;:::-;34863:2;34858:3;34854:12;34847:19;;34506:366;;;:::o;34878:419::-;35044:4;35082:2;35071:9;35067:18;35059:26;;35131:9;35125:4;35121:20;35117:1;35106:9;35102:17;35095:47;35159:131;35285:4;35159:131;:::i;:::-;35151:139;;34878:419;;;:::o;35303:194::-;35343:4;35363:20;35381:1;35363:20;:::i;:::-;35358:25;;35397:20;35415:1;35397:20;:::i;:::-;35392:25;;35441:1;35438;35434:9;35426:17;;35465:1;35459:4;35456:11;35453:37;;;35470:18;;:::i;:::-;35453:37;35303:194;;;;:::o;35503:191::-;35543:3;35562:20;35580:1;35562:20;:::i;:::-;35557:25;;35596:20;35614:1;35596:20;:::i;:::-;35591:25;;35639:1;35636;35632:9;35625:16;;35660:3;35657:1;35654:10;35651:36;;;35667:18;;:::i;:::-;35651:36;35503:191;;;;:::o;35700:182::-;35840:34;35836:1;35828:6;35824:14;35817:58;35700:182;:::o;35888:366::-;36030:3;36051:67;36115:2;36110:3;36051:67;:::i;:::-;36044:74;;36127:93;36216:3;36127:93;:::i;:::-;36245:2;36240:3;36236:12;36229:19;;35888:366;;;:::o;36260:419::-;36426:4;36464:2;36453:9;36449:18;36441:26;;36513:9;36507:4;36503:20;36499:1;36488:9;36484:17;36477:47;36541:131;36667:4;36541:131;:::i;:::-;36533:139;;36260:419;;;:::o;36685:175::-;36825:27;36821:1;36813:6;36809:14;36802:51;36685:175;:::o;36866:366::-;37008:3;37029:67;37093:2;37088:3;37029:67;:::i;:::-;37022:74;;37105:93;37194:3;37105:93;:::i;:::-;37223:2;37218:3;37214:12;37207:19;;36866:366;;;:::o;37238:419::-;37404:4;37442:2;37431:9;37427:18;37419:26;;37491:9;37485:4;37481:20;37477:1;37466:9;37462:17;37455:47;37519:131;37645:4;37519:131;:::i;:::-;37511:139;;37238:419;;;:::o;37663:237::-;37803:34;37799:1;37791:6;37787:14;37780:58;37872:20;37867:2;37859:6;37855:15;37848:45;37663:237;:::o;37906:366::-;38048:3;38069:67;38133:2;38128:3;38069:67;:::i;:::-;38062:74;;38145:93;38234:3;38145:93;:::i;:::-;38263:2;38258:3;38254:12;38247:19;;37906:366;;;:::o;38278:419::-;38444:4;38482:2;38471:9;38467:18;38459:26;;38531:9;38525:4;38521:20;38517:1;38506:9;38502:17;38495:47;38559:131;38685:4;38559:131;:::i;:::-;38551:139;;38278:419;;;:::o;38703:98::-;38754:6;38788:5;38782:12;38772:22;;38703:98;;;:::o;38807:168::-;38890:11;38924:6;38919:3;38912:19;38964:4;38959:3;38955:14;38940:29;;38807:168;;;;:::o;38981:373::-;39067:3;39095:38;39127:5;39095:38;:::i;:::-;39149:70;39212:6;39207:3;39149:70;:::i;:::-;39142:77;;39228:65;39286:6;39281:3;39274:4;39267:5;39263:16;39228:65;:::i;:::-;39318:29;39340:6;39318:29;:::i;:::-;39313:3;39309:39;39302:46;;39071:283;38981:373;;;;:::o;39360:640::-;39555:4;39593:3;39582:9;39578:19;39570:27;;39607:71;39675:1;39664:9;39660:17;39651:6;39607:71;:::i;:::-;39688:72;39756:2;39745:9;39741:18;39732:6;39688:72;:::i;:::-;39770;39838:2;39827:9;39823:18;39814:6;39770:72;:::i;:::-;39889:9;39883:4;39879:20;39874:2;39863:9;39859:18;39852:48;39917:76;39988:4;39979:6;39917:76;:::i;:::-;39909:84;;39360:640;;;;;;;:::o;40006:141::-;40062:5;40093:6;40087:13;40078:22;;40109:32;40135:5;40109:32;:::i;:::-;40006:141;;;;:::o;40153:349::-;40222:6;40271:2;40259:9;40250:7;40246:23;40242:32;40239:119;;;40277:79;;:::i;:::-;40239:119;40397:1;40422:63;40477:7;40468:6;40457:9;40453:22;40422:63;:::i;:::-;40412:73;;40368:127;40153:349;;;;:::o;40508:180::-;40556:77;40553:1;40546:88;40653:4;40650:1;40643:15;40677:4;40674:1;40667:15;40694:182;40834:34;40830:1;40822:6;40818:14;40811:58;40694:182;:::o;40882:366::-;41024:3;41045:67;41109:2;41104:3;41045:67;:::i;:::-;41038:74;;41121:93;41210:3;41121:93;:::i;:::-;41239:2;41234:3;41230:12;41223:19;;40882:366;;;:::o;41254:419::-;41420:4;41458:2;41447:9;41443:18;41435:26;;41507:9;41501:4;41497:20;41493:1;41482:9;41478:17;41471:47;41535:131;41661:4;41535:131;:::i;:::-;41527:139;;41254:419;;;:::o;41679:178::-;41819:30;41815:1;41807:6;41803:14;41796:54;41679:178;:::o;41863:366::-;42005:3;42026:67;42090:2;42085:3;42026:67;:::i;:::-;42019:74;;42102:93;42191:3;42102:93;:::i;:::-;42220:2;42215:3;42211:12;42204:19;;41863:366;;;:::o;42235:419::-;42401:4;42439:2;42428:9;42424:18;42416:26;;42488:9;42482:4;42478:20;42474:1;42463:9;42459:17;42452:47;42516:131;42642:4;42516:131;:::i;:::-;42508:139;;42235:419;;;:::o
Swarm Source
ipfs://ddd57858fa11b225737d2c371087b721b5755d59baeca5b3f96ae8774ddd6c3d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.