Overview
ETH Balance
0.002 ETH
Eth Value
$5.10 (@ $2,548.55/ETH)More Info
Private Name Tags
ContractCreator
Latest 16 from a total of 16 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Listing | 17364644 | 440 days ago | IN | 0 ETH | 0.0075481 | ||||
Create Listing | 17364631 | 440 days ago | IN | 0 ETH | 0.00689599 | ||||
Create Listing | 17364617 | 440 days ago | IN | 0 ETH | 0.00503833 | ||||
Accept Offer | 17336229 | 444 days ago | IN | 0 ETH | 0.00518242 | ||||
Make Offer | 17336201 | 444 days ago | IN | 0.002 ETH | 0.00578425 | ||||
Create Listing | 17336198 | 444 days ago | IN | 0 ETH | 0.01010988 | ||||
Accept Offer | 17335448 | 444 days ago | IN | 0 ETH | 0.00391733 | ||||
Buy | 17331123 | 445 days ago | IN | 0.002 ETH | 0.0055544 | ||||
Make Offer | 17329163 | 445 days ago | IN | 0.002 ETH | 0.00535833 | ||||
Create Listing | 17329145 | 445 days ago | IN | 0 ETH | 0.00885154 | ||||
Make Offer | 17322361 | 446 days ago | IN | 0.002 ETH | 0.0066045 | ||||
Create Listing | 17322356 | 446 days ago | IN | 0 ETH | 0.01101864 | ||||
Create Listing | 17317161 | 447 days ago | IN | 0 ETH | 0.00160694 | ||||
Create Listing | 17313884 | 447 days ago | IN | 0 ETH | 0.00791216 | ||||
Make Offer | 17313273 | 447 days ago | IN | 0.001 ETH | 0.00071482 | ||||
0x60806040 | 17274144 | 453 days ago | IN | 0 ETH | 0.19656566 |
Loading...
Loading
Contract Name:
AirNFTMarket
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-16 */ // Sources flattened with hardhat v2.11.2 https://hardhat.org // File @openzeppelin/contracts/security/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // 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/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/utils/introspection/[email protected] // 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/token/ERC721/[email protected] // 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/[email protected] // 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/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/utils/[email protected] // 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/[email protected] // 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 contracts/AirNFTMarket.sol pragma solidity ^0.8.9; contract AirNFTMarket is IERC721Receiver, IERC1155Receiver, ReentrancyGuard, Ownable { address payable public contractOwner; uint8 public constant KIND_FIX_SALE = 1; uint8 public constant KIND_AUCTION = 2; uint8 public constant STATUS_OPEN = 1; uint8 public constant STATUS_DONE = 2; uint8 public constant STATUS_CANCELLED = 3; uint8 public constant DIRECT_BUY = 1; uint8 public constant OFFER_BUY = 2; uint8 public constant OFFER_CREATED = 1; uint8 public constant OFFER_ACCEPTED = 2; uint8 public constant OFFER_CANCELLED = 3; uint8 public constant TOKEN_721 = 1; // 721 token uint8 public constant TOKEN_1155 = 2; // 1155 token struct TokenPair { address tokenAddress; // token contract address uint256 tokenId; // token id (if applicable) uint256 amount; // token amount (if applicable) uint8 kind; // token kind (721/1151) } struct Inventory { address seller; uint256 price; // display price uint256 netPrice; // actual price (auction: minus incentive) uint256 startAt; // (if auction kind) uint256 endAt; // (if auction kind) uint8 kind; uint8 status; TokenPair token; } struct Offer { uint256 amount; uint256 startAt; uint256 endAt; uint8 status; } // events event EvInventoryCreated(uint256 invId, TokenPair token, address indexed seller, uint256 price, uint256 kind); event EvInventoryAuctionCreated(uint256 invId, TokenPair token, address indexed seller, uint256 price, uint256 kind, uint256 startAt, uint256 endAt); event EvPurchased(address indexed previousOwner, address indexed newOwner, uint price, uint nftID); event EvInventoryCancelled(uint256 invId, address indexed seller, uint256 status, uint256 kind); event EvInventoryPriceUpdated(uint256 invId, address indexed seller, uint256 oldPrice, uint256 newPrice); event EvOfferCreated(uint256 invId, address indexed seller, address indexed offeror, uint256 amount, uint256 startAt, uint256 endAt); event EvOfferAccepted(uint256 invId, address indexed seller, address indexed offeror, uint256 amount); event EvOfferCancelled(uint256 invId, address indexed offeror, uint256 amount); event EvOfferUpdated(uint256 invId, address indexed offeror, uint256 amount); event EvBid(uint256 invId, address indexed bidder, uint256 bid); event EvAuctionCompleted(uint256 invId, address indexed seller, address indexed bidder, uint256 bid); event EvWithdrawBid(uint256 invId, address indexed bidder, uint256 bid); event EvMarketCommissionUpdated(uint256 minAuctionIncrement); event EvMinAuctionIncrementUpdated(uint256 marketCommission); mapping(uint256 => Inventory) public inventories; mapping(uint256 => mapping(address => Offer)) public offers; mapping(uint256 => mapping(address => uint256)) public bids; mapping(uint256 => address) public highestBidder; uint256 public invCount; uint256 public minAuctionIncrement = 10; // 10 percent uint256 public marketCommission = 40; // 2.5 percent constructor(address owner_) payable{ contractOwner = payable(owner_); } function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external pure override returns (bytes4) { (operator); (from); (tokenId); (data); return this.onERC721Received.selector; } function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external pure override returns (bytes4) { (operator); (from); (id); (value); (data); return this.onERC1155Received.selector; } function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external pure override returns (bytes4) { (operator); (from); (ids); (values); (data); return this.onERC1155BatchReceived.selector; } function supportsInterface(bytes4 interfaceId) external pure override returns (bool) { return (interfaceId == type(IERC721Receiver).interfaceId) || (interfaceId == type(IERC1155Receiver).interfaceId); } modifier isInvFixSaleOpen(uint256 invId) { require(hasInv(invId), 'inventory does not exist'); require(isFixSaleOpen(invId), 'inventory is no longer opened'); _; } modifier isInvAuctionValid(uint256 invId) { require(hasInv(invId), 'inventory does not exist'); require(isAuctionOpen(invId), 'auction has ended'); _; } modifier isInvAuctionEnded(uint256 invId) { require(hasInv(invId), 'inventory does not exist'); require(isAuction(invId), 'auction does not exist'); require(isAuctionExpired(invId), 'auction still going'); _; } modifier onlySeller(uint256 invId) { Inventory storage inv = inventories[invId]; require(msg.sender == inv.seller, "Only the seller can invoke this method"); _; } function updateMinAuctionIncrement(uint256 minAuctionIncrement_) public onlyOwner { minAuctionIncrement = minAuctionIncrement_; emit EvMinAuctionIncrementUpdated(marketCommission); } function updateMarketCommission(uint256 marketCommission_) public onlyOwner { marketCommission = marketCommission_; emit EvMarketCommissionUpdated(marketCommission); } function createListing( TokenPair calldata token, uint256 kind, uint256 price, uint256 durationInSeconds ) public returns (uint256) { require(kind == KIND_FIX_SALE || kind == KIND_AUCTION, 'Listing type not supported'); require(isApproved(token, msg.sender), 'token not approved'); invCount++; uint256 invId = invCount; if(kind == KIND_FIX_SALE) { inventories[invId] = Inventory({ seller: msg.sender, price: price, netPrice: price, status: STATUS_OPEN, kind: KIND_FIX_SALE, token: token, startAt: 0, endAt: 0 }); emit EvInventoryCreated(invId, token, msg.sender, price, kind); } else if(kind == KIND_AUCTION) { uint256 startAt = block.timestamp; uint256 endAt = startAt + durationInSeconds; inventories[invId] = Inventory({ seller: msg.sender, price: price, netPrice: price, status: STATUS_OPEN, kind: KIND_AUCTION, token: token, startAt: startAt, endAt: endAt }); _transferToken( inventories[invId].token.tokenAddress, inventories[invId].token.tokenId, inventories[invId].token.kind, inventories[invId].token.amount, msg.sender, address(this) ); emit EvInventoryAuctionCreated(invId, token, msg.sender, price, kind, startAt, endAt); } else { revert('impossible'); } return invId; } function updateListingPrice( uint256 invId, uint256 price ) public isInvFixSaleOpen(invId) onlySeller(invId) { require(price > 0, "Error, the price must be greater than 0"); Inventory storage inv = inventories[invId]; uint256 oldPrice = inv.price; inv.price = price; inv.netPrice = price; emit EvInventoryPriceUpdated(invId, inv.seller, oldPrice, price); } function cancelFixSaleListing( uint256 invId ) public isInvFixSaleOpen(invId) onlySeller(invId) { Inventory storage inv = inventories[invId]; inv.status = STATUS_CANCELLED; emit EvInventoryCancelled(invId, inv.seller, STATUS_CANCELLED, inv.kind); } function buy( uint256 invId ) public payable isInvFixSaleOpen(invId) nonReentrant { Inventory storage inv = inventories[invId]; require(msg.value >= inv.price, "Error, the amount is lower"); require(msg.sender != inv.seller, "Can not buy what you own"); _transferToken( inventories[invId].token.tokenAddress, inventories[invId].token.tokenId, inventories[invId].token.kind, inventories[invId].token.amount, inv.seller, msg.sender ); uint256 _commissionValue = inv.price / marketCommission; uint256 _sellerValue = inv.price - _commissionValue; _transfer(payable(inv.seller), _sellerValue); _transfer(contractOwner, _commissionValue); inv.status = STATUS_DONE; emit EvPurchased(inv.seller, msg.sender, inv.price, inv.token.tokenId); } function makeOffer( uint256 invId, uint256 durationInSeconds ) public payable isInvFixSaleOpen(invId) nonReentrant { Inventory storage inv = inventories[invId]; require(msg.value >= 0, "Error, the amount is lower"); require(msg.sender != inv.seller, "Can not make offer on what you own"); uint256 startAt = block.timestamp; uint256 endAt = startAt + durationInSeconds; offers[invId][msg.sender] = Offer({ amount: msg.value, status: OFFER_CREATED, startAt: startAt, endAt: endAt }); emit EvOfferCreated(invId, inv.seller, msg.sender, msg.value, startAt, endAt); } function updateOffer(uint256 invId) public payable nonReentrant { require(hasInv(invId), 'inventory does not exist'); require(isFixSale(invId), 'inventory is not fix sale kind'); Offer storage offer = offers[invId][msg.sender]; require(offer.status == OFFER_CREATED, 'offer already processed'); offer.amount += msg.value; emit EvOfferUpdated(invId, msg.sender, offer.amount); } function cancelOffer( uint256 invId ) public payable nonReentrant { require(hasInv(invId), 'inventory does not exist'); require(isFixSale(invId), 'inventory is not fix sale kind'); Offer storage offer = offers[invId][msg.sender]; require(offer.status == OFFER_CREATED, 'offer already processed'); _transfer(payable(msg.sender), offer.amount); offer.status = OFFER_CANCELLED; emit EvOfferCancelled(invId, msg.sender, offer.amount); } function acceptOffer( uint256 invId, address offeror ) public payable isInvFixSaleOpen(invId) onlySeller(invId) nonReentrant { Inventory storage inv = inventories[invId]; Offer storage offer = offers[invId][offeror]; require(offer.endAt > block.timestamp, "Offer already expired"); require(offer.status == OFFER_CREATED, "Offer already processed"); _transferToken( inventories[invId].token.tokenAddress, inventories[invId].token.tokenId, inventories[invId].token.kind, inventories[invId].token.amount, inv.seller, offeror ); uint256 _commissionValue = offer.amount / marketCommission; uint256 _sellerValue = offer.amount - _commissionValue; _transfer(payable(inv.seller), _sellerValue); _transfer(contractOwner, _commissionValue); offer.status = OFFER_ACCEPTED; inv.status = STATUS_DONE; emit EvOfferAccepted(invId, inv.seller, offeror, offer.amount); } function cancelAuctionListing( uint256 invId ) public isInvAuctionValid(invId) onlySeller(invId) { require(getHighestBidder(invId) == address(0), 'cannot cancel an auction with bids'); Inventory storage inv = inventories[invId]; inv.status = STATUS_CANCELLED; emit EvInventoryCancelled(invId, inv.seller, STATUS_CANCELLED, inv.kind); } function bid(uint256 invId) public payable isInvAuctionValid(invId) nonReentrant { Inventory storage inv = inventories[invId]; require(msg.sender != inv.seller, "cannot bid on what you own"); uint256 newBid = bids[invId][msg.sender] + msg.value; uint256 incentive = inv.price / minAuctionIncrement; require(newBid >= inv.price + incentive, 'bid price too low'); bids[invId][msg.sender] += msg.value; highestBidder[invId] = msg.sender; inv.price = inv.price + incentive; emit EvBid(invId, msg.sender, newBid); } function completeAuction(uint256 invId) public payable isInvAuctionEnded(invId) nonReentrant { require(isStatusOpen(invId), 'auction not open'); Inventory storage inv = inventories[invId]; address winner = highestBidder[invId]; require( msg.sender == inv.seller || msg.sender == winner, 'only seller or winner can complete auction' ); if(winner != address(0)) { _transferToken( inventories[invId].token.tokenAddress, inventories[invId].token.tokenId, inventories[invId].token.kind, inventories[invId].token.amount, address(this), winner ); uint256 amount = bids[invId][winner]; uint256 _commissionValue = amount / marketCommission; uint256 _sellerValue = amount - _commissionValue; _transfer(payable(inv.seller), _sellerValue); _transfer(contractOwner, _commissionValue); } else { _transferToken( inventories[invId].token.tokenAddress, inventories[invId].token.tokenId, inventories[invId].token.kind, inventories[invId].token.amount, address(this), inv.seller ); } inv.status = STATUS_DONE; emit EvAuctionCompleted(invId, inv.seller, winner, bids[invId][winner]); } function withdrawBid(uint256 invId) public payable isInvAuctionEnded(invId) nonReentrant { require(!isStatusOpen(invId), 'auction must be ended or cancelled'); require(highestBidder[invId] != msg.sender, 'highest bidder cannot withdraw bid'); uint256 balance = bids[invId][msg.sender]; bids[invId][msg.sender] = 0; _transfer(payable(msg.sender), balance); emit EvWithdrawBid(invId, msg.sender, balance); } function isAuctionOpen(uint256 id) public view returns (bool) { return isAuction(id) && inventories[id].status == STATUS_OPEN && inventories[id].endAt > block.timestamp; } function isAuction(uint256 id) public view returns (bool) { return inventories[id].kind == KIND_AUCTION; } function isAuctionExpired(uint256 id) public view returns (bool) { return isAuction(id) && inventories[id].endAt <= block.timestamp; } function isFixSaleOpen(uint256 id) public view returns (bool) { return isFixSale(id) && inventories[id].status == STATUS_OPEN; } function isFixSale(uint256 id) public view returns (bool) { return inventories[id].kind == KIND_FIX_SALE; } function hasInv(uint256 id) public view returns (bool) { return inventories[id].kind != 0; } function isStatusOpen(uint256 id) public view returns (bool) { return inventories[id].status == STATUS_OPEN; } function getHighestBidder(uint256 id) public view returns (address) { return highestBidder[id]; } function isApproved(TokenPair calldata token, address tokenOwner) public view returns (bool) { if(token.kind == TOKEN_721){ IERC721 t = IERC721(token.tokenAddress); if ( t.ownerOf(token.tokenId) == tokenOwner && (t.getApproved(token.tokenId) == address(this) || t.isApprovedForAll(tokenOwner, address(this))) ) { // pass } else { return false; } } else if (token.kind == TOKEN_1155) { IERC1155 t = IERC1155(token.tokenAddress); if ( t.balanceOf(tokenOwner, token.tokenId) >= token.amount && t.isApprovedForAll(tokenOwner, address(this)) ) { // pass } else { return false; } } else { revert('unsupported token'); } return true; } function _transferToken(address tokenAddress, uint256 tokenId, uint256 kind, uint256 amount, address from, address to) internal { if(kind == TOKEN_721){ _executeERC721TransferFrom(tokenAddress,from, to, tokenId); } else if (kind == TOKEN_1155) { _executeERC1155SafeTransferFrom(tokenAddress, from, to, tokenId, amount); } else { revert('unsupported token'); } } function _transfer( address payable to, uint256 amount ) internal { if (amount == 0) { return; } require(to != address(0), 'cannot transfer to address(0)'); (bool transferSent, ) = to.call{value: amount}(""); require(transferSent, "Failed to send Ether"); } function _executeERC1155SafeTransferFrom( address tokenAddress, address from, address to, uint256 tokenId, uint256 amount ) internal { if (tokenAddress.code.length == 0) { revert ("Not a contract"); } (bool status, ) = tokenAddress.call(abi.encodeCall(IERC1155.safeTransferFrom, (from, to, tokenId, amount, ""))); if (!status) { revert ("ERC1155SafeTransferFromFail"); } } function _executeERC721TransferFrom(address tokenAddress, address from, address to, uint256 tokenId) internal { if (tokenAddress.code.length == 0) { revert ("Not a contract"); } (bool status, ) = tokenAddress.call(abi.encodeCall(IERC721.transferFrom, (from, to, tokenId))); if (!status) { revert ("ERC721TransferFromFail"); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"}],"name":"EvAuctionCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"}],"name":"EvBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"}],"indexed":false,"internalType":"struct AirNFTMarket.TokenPair","name":"token","type":"tuple"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kind","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endAt","type":"uint256"}],"name":"EvInventoryAuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"status","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kind","type":"uint256"}],"name":"EvInventoryCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"}],"indexed":false,"internalType":"struct AirNFTMarket.TokenPair","name":"token","type":"tuple"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kind","type":"uint256"}],"name":"EvInventoryCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"EvInventoryPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minAuctionIncrement","type":"uint256"}],"name":"EvMarketCommissionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketCommission","type":"uint256"}],"name":"EvMinAuctionIncrementUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"offeror","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EvOfferAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"offeror","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EvOfferCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"offeror","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endAt","type":"uint256"}],"name":"EvOfferCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"offeror","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EvOfferUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftID","type":"uint256"}],"name":"EvPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"invId","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"}],"name":"EvWithdrawBid","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"},{"inputs":[],"name":"DIRECT_BUY","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KIND_AUCTION","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KIND_FIX_SALE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OFFER_ACCEPTED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OFFER_BUY","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OFFER_CANCELLED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OFFER_CREATED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATUS_CANCELLED","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATUS_DONE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATUS_OPEN","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_1155","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_721","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"},{"internalType":"address","name":"offeror","type":"address"}],"name":"acceptOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"bids","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"cancelAuctionListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"cancelFixSaleListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"cancelOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"completeAuction","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractOwner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"}],"internalType":"struct AirNFTMarket.TokenPair","name":"token","type":"tuple"},{"internalType":"uint256","name":"kind","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"durationInSeconds","type":"uint256"}],"name":"createListing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getHighestBidder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"hasInv","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"highestBidder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"invCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"inventories","outputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"netPrice","type":"uint256"},{"internalType":"uint256","name":"startAt","type":"uint256"},{"internalType":"uint256","name":"endAt","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"}],"internalType":"struct AirNFTMarket.TokenPair","name":"token","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"kind","type":"uint8"}],"internalType":"struct AirNFTMarket.TokenPair","name":"token","type":"tuple"},{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isAuctionExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isAuctionOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isFixSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isFixSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isStatusOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"},{"internalType":"uint256","name":"durationInSeconds","type":"uint256"}],"name":"makeOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"marketCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAuctionIncrement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"offers","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startAt","type":"uint256"},{"internalType":"uint256","name":"endAt","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updateListingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketCommission_","type":"uint256"}],"name":"updateMarketCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAuctionIncrement_","type":"uint256"}],"name":"updateMinAuctionIncrement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"updateOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"invId","type":"uint256"}],"name":"withdrawBid","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052600a6008556028600955604051620034b6380380620034b68339810160408190526200003091620000b8565b6001600055620000403362000066565b600280546001600160a01b0319166001600160a01b0392909216919091179055620000ea565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620000cb57600080fd5b81516001600160a01b0381168114620000e357600080fd5b9392505050565b6133bc80620000fa6000396000f3fe6080604052600436106102c95760003560e01c80638704f2a311610175578063ce606ee0116100dc578063ef706adf11610095578063f2fde38b1161006f578063f2fde38b14610961578063f5116bc914610981578063f7a3320e146103fe578063fad3ef93146103fe57600080fd5b8063ef706adf14610921578063f0d250ba14610425578063f23a6e611461093457600080fd5b8063ce606ee014610814578063d90c436f14610834578063d96a094a1461084a578063dd6fa4991461085d578063ebdfbce514610873578063ee98ce91146108e657600080fd5b8063bc197c811161012e578063bc197c8114610640578063c46049431461066f578063c477be20146103fe578063c750cb791461068f578063c94749d5146106c5578063cd78ba01146106fb57600080fd5b80638704f2a3146105995780638da5cb5b146105cf5780638f14b6ab1461042557806390f01472146105ed578063918d407d1461060d57806395f136ac1461062057600080fd5b80632a5a9435116102345780636b6e702e116101ed5780637234d8f2116101c75780637234d8f214610425578063740db280146104255780637ceddb431461051957806382c4a0011461057957600080fd5b80636b6e702e1461052e578063708d4d351461054e578063715018a61461056457600080fd5b80632a5a94351461044d5780633f1ffcec1461046d578063451df52e146104a5578063454a2ab3146104f357806356d282fc146105065780635a4e5a151461051957600080fd5b8063150b7a0211610286578063150b7a02146103995780631a4eb0c2146103de5780631ab016bb146103fe5780631b6369ab1461042557806321b628861461043a57806324f8515b146103fe57600080fd5b806301ffc9a7146102ce57806305b7cdd3146103035780630ad48628146103185780630d249ea0146103385780630eaaf4c8146103665780631389b11714610379575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612cc1565b6109b6565b60405190151581526020015b60405180910390f35b610316610311366004612cf2565b6109ed565b005b34801561032457600080fd5b506102ee610333366004612d14565b610bcc565b34801561034457600080fd5b50610358610353366004612d45565b610c28565b6040519081526020016102fa565b610316610374366004612d14565b611016565b34801561038557600080fd5b506102ee610394366004612d14565b61127b565b3480156103a557600080fd5b506103c56103b4366004612ddd565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102fa565b3480156103ea57600080fd5b506102ee6103f9366004612e50565b6112b3565b34801561040a57600080fd5b50610413600181565b60405160ff90911681526020016102fa565b34801561043157600080fd5b50610413600281565b610316610448366004612d14565b61158c565b34801561045957600080fd5b50610316610468366004612d14565b61191b565b34801561047957600080fd5b50610358610488366004612e88565b600560209081526000928352604080842090915290825290205481565b3480156104b157600080fd5b506104db6104c0366004612d14565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b610316610501366004612d14565b611aba565b610316610514366004612d14565b611cfc565b34801561052557600080fd5b50610413600381565b34801561053a57600080fd5b506102ee610549366004612d14565b611e8e565b34801561055a57600080fd5b5061035860085481565b34801561057057600080fd5b50610316611ed0565b34801561058557600080fd5b50610316610594366004612d14565b611ee4565b3480156105a557600080fd5b506102ee6105b4366004612d14565b60009081526003602052604090206005015460ff1660021490565b3480156105db57600080fd5b506001546001600160a01b03166104db565b3480156105f957600080fd5b50610316610608366004612d14565b611f28565b61031661061b366004612e88565b611f68565b34801561062c57600080fd5b5061031661063b366004612d14565b612208565b34801561064c57600080fd5b506103c561065b366004612ef2565b63bc197c8160e01b98975050505050505050565b34801561067b57600080fd5b5061031661068a366004612cf2565b61229a565b34801561069b57600080fd5b506104db6106aa366004612d14565b6000908152600660205260409020546001600160a01b031690565b3480156106d157600080fd5b506102ee6106e0366004612d14565b60009081526003602052604090206005015460ff1660011490565b34801561070757600080fd5b5061079f610716366004612d14565b60036020818152600092835260409283902080546001820154600283015494830154600484015460058501548851608081018a5260068701546001600160a01b03908116825260078801549882019890985260088701549981019990995260099095015460ff90811660608a015295909316969195949093818116926101009091049091169088565b604080516001600160a01b03998a16815260208082019990995280820197909752606080880196909652608087019490945260ff92831660a087015290821660c0860152805190961660e0850152938501516101008401528401516101208301529092015116610140820152610160016102fa565b34801561082057600080fd5b506002546104db906001600160a01b031681565b34801561084057600080fd5b5061035860095481565b610316610858366004612d14565b612408565b34801561086957600080fd5b5061035860075481565b34801561087f57600080fd5b506108c361088e366004612e88565b600460209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015260ff1660608201526080016102fa565b3480156108f257600080fd5b506102ee610901366004612d14565b600090815260036020526040902060050154610100900460ff1660011490565b61031661092f366004612d14565b61264a565b34801561094057600080fd5b506103c561094f366004612fb1565b63f23a6e6160e01b9695505050505050565b34801561096d57600080fd5b5061031661097c36600461302d565b6127d0565b34801561098d57600080fd5b506102ee61099c366004612d14565b60009081526003602052604090206005015460ff16151590565b60006001600160e01b03198216630a85bd0160e11b14806109e757506001600160e01b03198216630271189760e51b145b92915050565b600082815260036020526040902060050154829060ff16610a295760405162461bcd60e51b8152600401610a209061304a565b60405180910390fd5b610a3281611e8e565b610a4e5760405162461bcd60e51b8152600401610a2090613081565b600260005403610a705760405162461bcd60e51b8152600401610a20906130b8565b6002600090815583815260036020526040902080546001600160a01b03163303610ae75760405162461bcd60e51b815260206004820152602260248201527f43616e206e6f74206d616b65206f66666572206f6e207768617420796f75206f6044820152613bb760f11b6064820152608401610a20565b426000610af48583613105565b6040805160808101825234808252602080830187815283850186815260016060860181815260008f81526004865288812033808352965288902096518755925190860155516002850155516003909301805460ff9490941660ff19909416939093179092558654925193945090926001600160a01b0392909216917fcfd873caf19badf47e73383de2ac62615a1bd6e2bd97a6a32df5fdc3b01ff61091610bb7918b91908890889093845260208401929092526040830152606082015260800190565b60405180910390a35050600160005550505050565b60008181526003602052604081206005015460ff166002148015610c095750600082815260036020526040902060050154610100900460ff166001145b80156109e7575050600090815260036020526040902060040154421090565b60006001841480610c395750600284145b610c855760405162461bcd60e51b815260206004820152601a60248201527f4c697374696e672074797065206e6f7420737570706f727465640000000000006044820152606401610a20565b610c8f85336112b3565b610cd05760405162461bcd60e51b81526020600482015260126024820152711d1bdad95b881b9bdd08185c1c1c9bdd995960721b6044820152606401610a20565b60078054906000610ce083613118565b90915550506007546000198501610e47576040805161010081018252338152602081018690529081018590526000606082018190526080820152600160a0820181905260c082015260e08101610d3b36899003890189613147565b9052600082815260036020818152604092839020845181546001600160a01b03199081166001600160a01b03928316178355868401516001840155868601516002840155606080880151958401959095556080870151600484015560a087015160058401805460c08a015160ff93841661ffff19909216919091176101009184169190910217905560e090970151805160068501805490931693169290921790559182015160078201558184015160088201559101516009909101805460ff191691909316179091555133907fa0f2b3b2e8655a14216a76a8c3c6f9f744081b73331c42121bb612fb2b9028fb90610e3a9084908a9089908b9061320a565b60405180910390a261100d565b6001198501610fd857426000610e5d8583613105565b6040805161010081018252338152602081018990529081018890526060810184905260808101829052600260a0820152600160c082015290915060e08101610eaa368b90038b018b613147565b9052600084815260036020818152604092839020845181546001600160a01b039182166001600160a01b0319918216178355868401516001840155868601516002840155606080880151958401959095556080870151600484015560a087015160058401805460c08a015160ff9081166101000261ffff199092169381169390931717905560e0909701518051600685018054919094169216821790925592810151600783018190559481015160088301819055930151600990910180549190951660ff19919091168117909455610f86939092913330612849565b336001600160a01b03167fa7d20855870d654c2bd83bac070a0e627a5c1b521913eaac00282bbb2154f76b848a898b8787604051610fc996959493929190613230565b60405180910390a2505061100d565b60405162461bcd60e51b815260206004820152600a602482015269696d706f737369626c6560b01b6044820152606401610a20565b95945050505050565b600081815260036020526040902060050154819060ff166110495760405162461bcd60e51b8152600401610a209061304a565b6110688160009081526003602052604090206005015460ff1660021490565b6110ad5760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610a20565b6110b68161127b565b6110f85760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610a20565b60026000540361111a5760405162461bcd60e51b8152600401610a20906130b8565b600260005561114382600090815260036020526040902060050154610100900460ff1660011490565b1561119b5760405162461bcd60e51b815260206004820152602260248201527f61756374696f6e206d75737420626520656e646564206f722063616e63656c6c604482015261195960f21b6064820152608401610a20565b600082815260066020526040902054336001600160a01b039091160361120e5760405162461bcd60e51b815260206004820152602260248201527f68696768657374206269646465722063616e6e6f7420776974686472617720626044820152611a5960f21b6064820152608401610a20565b6000828152600560209081526040808320338085529252822080549290556112369082612881565b604080518481526020810183905233917f7b8450decc7d5cd32eed685e9d8580e85388aaa0e75e8a73b8e4443e8586ad8d910160405180910390a25050600160005550565b60008181526003602052604081206005015460ff1660021480156109e757505060009081526003602052604090206004015442101590565b600060016112c76080850160608601613269565b60ff16036114665760006112de602085018561302d565b6040516331a9108f60e11b8152602086013560048201529091506001600160a01b038085169190831690636352211e90602401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190613284565b6001600160a01b0316148015611452575060405163020604bf60e21b81526020850135600482015230906001600160a01b0383169063081812fc90602401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d19190613284565b6001600160a01b03161480611452575060405163e985e9c560e01b81526001600160a01b03848116600483015230602483015282169063e985e9c5906044015b602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145291906132a1565b6114605760009150506109e7565b50611583565b60026114786080850160608601613269565b60ff160361154757600061148f602085018561302d565b60408051627eeac760e11b81526001600160a01b03868116600483015260208801356024830152929350908601359183169062fdd58e90604401602060405180830381865afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906132c3565b10158015611452575060405163e985e9c560e01b81526001600160a01b03848116600483015230602483015282169063e985e9c590604401611411565b60405162461bcd60e51b81526020600482015260116024820152703ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610a20565b50600192915050565b600081815260036020526040902060050154819060ff166115bf5760405162461bcd60e51b8152600401610a209061304a565b6115de8160009081526003602052604090206005015460ff1660021490565b6116235760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610a20565b61162c8161127b565b61166e5760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610a20565b6002600054036116905760405162461bcd60e51b8152600401610a20906130b8565b60026000556116b982600090815260036020526040902060050154610100900460ff1660011490565b6116f85760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610a20565b600082815260036020908152604080832060069092529091205481546001600160a01b0391821691163314806117365750336001600160a01b038216145b6117955760405162461bcd60e51b815260206004820152602a60248201527f6f6e6c792073656c6c6572206f722077696e6e65722063616e20636f6d706c656044820152693a329030bab1ba34b7b760b11b6064820152608401610a20565b6001600160a01b038116156118595760008481526003602052604090206006810154600782015460098301546008909301546117e2936001600160a01b039093169260ff16903086612849565b60008481526005602090815260408083206001600160a01b038516845290915281205460095490919061181590836132dc565b9050600061182382846132fe565b855490915061183b906001600160a01b031682612881565b600254611851906001600160a01b031683612881565b50505061189d565b6000848152600360205260409020600681015460078201546009830154600890930154855461189d946001600160a01b039485169460ff9091169291309116612849565b6005828101805461ff00191661020017905582546000868152602092835260408082206001600160a01b03868116808552918652928290205482518a8152958601529391909216917fb072c6ae25b30378645a1e2bff1a727b0a3ad4c6f8c6fb6c385d2d3323dddd23910160405180910390a3505060016000555050565b600081815260036020526040902060050154819060ff1661194e5760405162461bcd60e51b8152600401610a209061304a565b61195781610bcc565b6119975760405162461bcd60e51b8152602060048201526011602482015270185d58dd1a5bdb881a185cc8195b991959607a1b6044820152606401610a20565b600082815260036020526040902080548391906001600160a01b031633146119d15760405162461bcd60e51b8152600401610a2090613311565b6000848152600660205260409020546001600160a01b031615611a415760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742063616e63656c20616e2061756374696f6e2077697468206269604482015261647360f01b6064820152608401610a20565b60008481526003602081815260409283902060058101805461030061ff0019821617909155815485518a81529384019490945260ff168285015292516001600160a01b03909216917faacaec0f49c111b93b126b01fae37ea237edb829f483b288ecce8a51cc49b55f9181900360600190a25050505050565b600081815260036020526040902060050154819060ff16611aed5760405162461bcd60e51b8152600401610a209061304a565b611af681610bcc565b611b365760405162461bcd60e51b8152602060048201526011602482015270185d58dd1a5bdb881a185cc8195b991959607a1b6044820152606401610a20565b600260005403611b585760405162461bcd60e51b8152600401610a20906130b8565b6002600090815582815260036020526040902080546001600160a01b03163303611bc45760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f7420626964206f6e207768617420796f75206f776e0000000000006044820152606401610a20565b6000838152600560209081526040808320338452909152812054611be9903490613105565b905060006008548360010154611bff91906132dc565b9050808360010154611c119190613105565b821015611c545760405162461bcd60e51b815260206004820152601160248201527062696420707269636520746f6f206c6f7760781b6044820152606401610a20565b600085815260056020908152604080832033845290915281208054349290611c7d908490613105565b9091555050600085815260066020526040902080546001600160a01b031916331790556001830154611cb0908290613105565b6001840155604080518681526020810184905233917fc5bab98305c61fdf0d2d937ad4bbbabf819737c9a189438a3cf99f845b0e0f67910160405180910390a250506001600055505050565b600260005403611d1e5760405162461bcd60e51b8152600401610a20906130b8565b600260009081558181526003602052604090206005015460ff16611d545760405162461bcd60e51b8152600401610a209061304a565b611d738160009081526003602052604090206005015460ff1660011490565b611dbf5760405162461bcd60e51b815260206004820152601e60248201527f696e76656e746f7279206973206e6f74206669782073616c65206b696e6400006044820152606401610a20565b60008181526004602090815260408083203384529091529020600381015460ff16600114611e295760405162461bcd60e51b81526020600482015260176024820152761bd999995c88185b1c9958591e481c1c9bd8d95cdcd959604a1b6044820152606401610a20565b34816000016000828254611e3d9190613105565b9091555050805460405133917fd3cf940c0176f3576ca168358b65ea8684a1d425964a02dfed71833af27f725c91611e7d91868252602082015260400190565b60405180910390a250506001600055565b60008181526003602052604081206005015460ff1660011480156109e75750600082815260036020526040902060050154610100900460ff1660011492915050565b611ed8612982565b611ee260006129dc565b565b611eec612982565b60098190556040518181527f1c25cee3c02d00128aba12fb322f467e45e20b7fdf26e6a65381cf081563fb41906020015b60405180910390a150565b611f30612982565b60088190556009546040519081527f0f5723f2ac27807d8ac15c2fe206896aa27150df178b0fb20909e2ad67e87b8990602001611f1d565b600082815260036020526040902060050154829060ff16611f9b5760405162461bcd60e51b8152600401610a209061304a565b611fa481611e8e565b611fc05760405162461bcd60e51b8152600401610a2090613081565b600083815260036020526040902080548491906001600160a01b03163314611ffa5760405162461bcd60e51b8152600401610a2090613311565b60026000540361201c5760405162461bcd60e51b8152600401610a20906130b8565b60026000818155868152600360209081526040808320600483528184206001600160a01b038a1685529092529091209182015490919042106120985760405162461bcd60e51b815260206004820152601560248201527413d999995c88185b1c9958591e48195e1c1a5c9959605a1b6044820152606401610a20565b600381015460ff166001146120ef5760405162461bcd60e51b815260206004820152601760248201527f4f6666657220616c72656164792070726f6365737365640000000000000000006044820152606401610a20565b60008781526003602052604090206006810154600782015460098301546008909301548554612132946001600160a01b039485169460ff9091169291168b612849565b6009548154600091612143916132dc565b9050600081836000015461215791906132fe565b845490915061216f906001600160a01b031682612881565b600254612185906001600160a01b031683612881565b60038301805460ff1916600217905560058401805461020061ff0019909116179055835483546040516001600160a01b03808c169316917fe2f722e60c7b286851134a8c25c92fce1261b8e645664dc4ddd48e5c5e6c6ded916121f0918e8252602082015260400190565b60405180910390a35050600160005550505050505050565b600081815260036020526040902060050154819060ff1661223b5760405162461bcd60e51b8152600401610a209061304a565b61224481611e8e565b6122605760405162461bcd60e51b8152600401610a2090613081565b600082815260036020526040902080548391906001600160a01b03163314611a415760405162461bcd60e51b8152600401610a2090613311565b600082815260036020526040902060050154829060ff166122cd5760405162461bcd60e51b8152600401610a209061304a565b6122d681611e8e565b6122f25760405162461bcd60e51b8152600401610a2090613081565b600083815260036020526040902080548491906001600160a01b0316331461232c5760405162461bcd60e51b8152600401610a2090613311565b6000841161238c5760405162461bcd60e51b815260206004820152602760248201527f4572726f722c20746865207072696365206d75737420626520677265617465726044820152660207468616e20360cc1b6064820152608401610a20565b6000858152600360209081526040918290206001810180549088905560028201889055815484518a8152938401829052938301889052909290916001600160a01b03909116907f1d343dd389c85362ddcffb32dc7a11722813730140df02430a580a5016b85a179060600160405180910390a250505050505050565b600081815260036020526040902060050154819060ff1661243b5760405162461bcd60e51b8152600401610a209061304a565b61244481611e8e565b6124605760405162461bcd60e51b8152600401610a2090613081565b6002600054036124825760405162461bcd60e51b8152600401610a20906130b8565b6002600090815582815260036020526040902060018101543410156124e95760405162461bcd60e51b815260206004820152601a60248201527f4572726f722c2074686520616d6f756e74206973206c6f7765720000000000006044820152606401610a20565b80546001600160a01b031633036125425760405162461bcd60e51b815260206004820152601860248201527f43616e206e6f7420627579207768617420796f75206f776e00000000000000006044820152606401610a20565b60008381526003602052604090206006810154600782015460098301546008909301548454612585946001600160a01b039485169460ff90911692911633612849565b6000600954826001015461259991906132dc565b905060008183600101546125ad91906132fe565b83549091506125c5906001600160a01b031682612881565b6002546125db906001600160a01b031683612881565b60058301805461ff00191661020017905582546001840154600785015460408051928352602083019190915233926001600160a01b0316917f329ed77eba9e35e38400649df65277f6ebb9a20f5f45eeae5d73d92cdae8e6e2910160405180910390a350506001600055505050565b60026000540361266c5760405162461bcd60e51b8152600401610a20906130b8565b600260009081558181526003602052604090206005015460ff166126a25760405162461bcd60e51b8152600401610a209061304a565b6126c18160009081526003602052604090206005015460ff1660011490565b61270d5760405162461bcd60e51b815260206004820152601e60248201527f696e76656e746f7279206973206e6f74206669782073616c65206b696e6400006044820152606401610a20565b60008181526004602090815260408083203384529091529020600381015460ff166001146127775760405162461bcd60e51b81526020600482015260176024820152761bd999995c88185b1c9958591e481c1c9bd8d95cdcd959604a1b6044820152606401610a20565b612785338260000154612881565b6003818101805460ff19169091179055805460405133917f49be1a85cd4b4a4011f82d2e4259a7fbd3ea2f7b47f1bc06de87fa3b41a3506b91611e7d91868252602082015260400190565b6127d8612982565b6001600160a01b03811661283d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b612846816129dc565b50565b60001984016128635761285e86838388612a2e565b612879565b60011984016115475761285e8683838887612b6d565b505050505050565b8060000361288d575050565b6001600160a01b0382166128e35760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f74207472616e7366657220746f20616464726573732830290000006044820152606401610a20565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612930576040519150601f19603f3d011682016040523d82523d6000602084013e612935565b606091505b505090508061297d5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610a20565b505050565b6001546001600160a01b03163314611ee25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a20565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b836001600160a01b03163b600003612a795760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610a20565b6040516001600160a01b0384811660248301528381166044830152606482018390526000919086169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251612ada9190613357565b6000604051808303816000865af19150503d8060008114612b17576040519150601f19603f3d011682016040523d82523d6000602084013e612b1c565b606091505b5050905080612b665760405162461bcd60e51b8152602060048201526016602482015275115490cdcc8c551c985b9cd9995c919c9bdb51985a5b60521b6044820152606401610a20565b5050505050565b846001600160a01b03163b600003612bb85760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610a20565b6040516001600160a01b0385811660248301528481166044830152606482018490526084820183905260a060a4830152600060c48301819052919087169060e40160408051601f198184030181529181526020820180516001600160e01b0316637921219560e11b17905251612c2e9190613357565b6000604051808303816000865af19150503d8060008114612c6b576040519150601f19603f3d011682016040523d82523d6000602084013e612c70565b606091505b50509050806128795760405162461bcd60e51b815260206004820152601b60248201527f45524331313535536166655472616e7366657246726f6d4661696c00000000006044820152606401610a20565b600060208284031215612cd357600080fd5b81356001600160e01b031981168114612ceb57600080fd5b9392505050565b60008060408385031215612d0557600080fd5b50508035926020909101359150565b600060208284031215612d2657600080fd5b5035919050565b600060808284031215612d3f57600080fd5b50919050565b60008060008060e08587031215612d5b57600080fd5b612d658686612d2d565b966080860135965060a08601359560c00135945092505050565b6001600160a01b038116811461284657600080fd5b60008083601f840112612da657600080fd5b50813567ffffffffffffffff811115612dbe57600080fd5b602083019150836020828501011115612dd657600080fd5b9250929050565b600080600080600060808688031215612df557600080fd5b8535612e0081612d7f565b94506020860135612e1081612d7f565b935060408601359250606086013567ffffffffffffffff811115612e3357600080fd5b612e3f88828901612d94565b969995985093965092949392505050565b60008060a08385031215612e6357600080fd5b612e6d8484612d2d565b91506080830135612e7d81612d7f565b809150509250929050565b60008060408385031215612e9b57600080fd5b823591506020830135612e7d81612d7f565b60008083601f840112612ebf57600080fd5b50813567ffffffffffffffff811115612ed757600080fd5b6020830191508360208260051b8501011115612dd657600080fd5b60008060008060008060008060a0898b031215612f0e57600080fd5b8835612f1981612d7f565b97506020890135612f2981612d7f565b9650604089013567ffffffffffffffff80821115612f4657600080fd5b612f528c838d01612ead565b909850965060608b0135915080821115612f6b57600080fd5b612f778c838d01612ead565b909650945060808b0135915080821115612f9057600080fd5b50612f9d8b828c01612d94565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612fca57600080fd5b8635612fd581612d7f565b95506020870135612fe581612d7f565b94506040870135935060608701359250608087013567ffffffffffffffff81111561300f57600080fd5b61301b89828a01612d94565b979a9699509497509295939492505050565b60006020828403121561303f57600080fd5b8135612ceb81612d7f565b60208082526018908201527f696e76656e746f727920646f6573206e6f742065786973740000000000000000604082015260600190565b6020808252601d908201527f696e76656e746f7279206973206e6f206c6f6e676572206f70656e6564000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109e7576109e76130ef565b60006001820161312a5761312a6130ef565b5060010190565b803560ff8116811461314257600080fd5b919050565b60006080828403121561315957600080fd5b6040516080810181811067ffffffffffffffff8211171561318a57634e487b7160e01b600052604160045260246000fd5b604052823561319881612d7f565b8082525060208301356020820152604083013560408201526131bc60608401613131565b60608201529392505050565b80356131d381612d7f565b6001600160a01b03168252602081810135908301526040808201359083015260ff61320060608301613131565b1660608301525050565b84815260e0810161321e60208301866131c8565b60a082019390935260c0015292915050565b868152610120810161324560208301886131c8565b8560a08301528460c08301528360e083015282610100830152979650505050505050565b60006020828403121561327b57600080fd5b612ceb82613131565b60006020828403121561329657600080fd5b8151612ceb81612d7f565b6000602082840312156132b357600080fd5b81518015158114612ceb57600080fd5b6000602082840312156132d557600080fd5b5051919050565b6000826132f957634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156109e7576109e76130ef565b60208082526026908201527f4f6e6c79207468652073656c6c65722063616e20696e766f6b652074686973206040820152651b595d1a1bd960d21b606082015260800190565b6000825160005b81811015613378576020818601810151858301520161335e565b50600092019182525091905056fea264697066735822122033703c8e9b0899e8059545617461a8ee537201cc77453fbc3dc38f6fb078a56464736f6c634300081100330000000000000000000000004f2575b8f88af8d8b1f7e62f518dd568cca31b2f
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80638704f2a311610175578063ce606ee0116100dc578063ef706adf11610095578063f2fde38b1161006f578063f2fde38b14610961578063f5116bc914610981578063f7a3320e146103fe578063fad3ef93146103fe57600080fd5b8063ef706adf14610921578063f0d250ba14610425578063f23a6e611461093457600080fd5b8063ce606ee014610814578063d90c436f14610834578063d96a094a1461084a578063dd6fa4991461085d578063ebdfbce514610873578063ee98ce91146108e657600080fd5b8063bc197c811161012e578063bc197c8114610640578063c46049431461066f578063c477be20146103fe578063c750cb791461068f578063c94749d5146106c5578063cd78ba01146106fb57600080fd5b80638704f2a3146105995780638da5cb5b146105cf5780638f14b6ab1461042557806390f01472146105ed578063918d407d1461060d57806395f136ac1461062057600080fd5b80632a5a9435116102345780636b6e702e116101ed5780637234d8f2116101c75780637234d8f214610425578063740db280146104255780637ceddb431461051957806382c4a0011461057957600080fd5b80636b6e702e1461052e578063708d4d351461054e578063715018a61461056457600080fd5b80632a5a94351461044d5780633f1ffcec1461046d578063451df52e146104a5578063454a2ab3146104f357806356d282fc146105065780635a4e5a151461051957600080fd5b8063150b7a0211610286578063150b7a02146103995780631a4eb0c2146103de5780631ab016bb146103fe5780631b6369ab1461042557806321b628861461043a57806324f8515b146103fe57600080fd5b806301ffc9a7146102ce57806305b7cdd3146103035780630ad48628146103185780630d249ea0146103385780630eaaf4c8146103665780631389b11714610379575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612cc1565b6109b6565b60405190151581526020015b60405180910390f35b610316610311366004612cf2565b6109ed565b005b34801561032457600080fd5b506102ee610333366004612d14565b610bcc565b34801561034457600080fd5b50610358610353366004612d45565b610c28565b6040519081526020016102fa565b610316610374366004612d14565b611016565b34801561038557600080fd5b506102ee610394366004612d14565b61127b565b3480156103a557600080fd5b506103c56103b4366004612ddd565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102fa565b3480156103ea57600080fd5b506102ee6103f9366004612e50565b6112b3565b34801561040a57600080fd5b50610413600181565b60405160ff90911681526020016102fa565b34801561043157600080fd5b50610413600281565b610316610448366004612d14565b61158c565b34801561045957600080fd5b50610316610468366004612d14565b61191b565b34801561047957600080fd5b50610358610488366004612e88565b600560209081526000928352604080842090915290825290205481565b3480156104b157600080fd5b506104db6104c0366004612d14565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b610316610501366004612d14565b611aba565b610316610514366004612d14565b611cfc565b34801561052557600080fd5b50610413600381565b34801561053a57600080fd5b506102ee610549366004612d14565b611e8e565b34801561055a57600080fd5b5061035860085481565b34801561057057600080fd5b50610316611ed0565b34801561058557600080fd5b50610316610594366004612d14565b611ee4565b3480156105a557600080fd5b506102ee6105b4366004612d14565b60009081526003602052604090206005015460ff1660021490565b3480156105db57600080fd5b506001546001600160a01b03166104db565b3480156105f957600080fd5b50610316610608366004612d14565b611f28565b61031661061b366004612e88565b611f68565b34801561062c57600080fd5b5061031661063b366004612d14565b612208565b34801561064c57600080fd5b506103c561065b366004612ef2565b63bc197c8160e01b98975050505050505050565b34801561067b57600080fd5b5061031661068a366004612cf2565b61229a565b34801561069b57600080fd5b506104db6106aa366004612d14565b6000908152600660205260409020546001600160a01b031690565b3480156106d157600080fd5b506102ee6106e0366004612d14565b60009081526003602052604090206005015460ff1660011490565b34801561070757600080fd5b5061079f610716366004612d14565b60036020818152600092835260409283902080546001820154600283015494830154600484015460058501548851608081018a5260068701546001600160a01b03908116825260078801549882019890985260088701549981019990995260099095015460ff90811660608a015295909316969195949093818116926101009091049091169088565b604080516001600160a01b03998a16815260208082019990995280820197909752606080880196909652608087019490945260ff92831660a087015290821660c0860152805190961660e0850152938501516101008401528401516101208301529092015116610140820152610160016102fa565b34801561082057600080fd5b506002546104db906001600160a01b031681565b34801561084057600080fd5b5061035860095481565b610316610858366004612d14565b612408565b34801561086957600080fd5b5061035860075481565b34801561087f57600080fd5b506108c361088e366004612e88565b600460209081526000928352604080842090915290825290208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015260ff1660608201526080016102fa565b3480156108f257600080fd5b506102ee610901366004612d14565b600090815260036020526040902060050154610100900460ff1660011490565b61031661092f366004612d14565b61264a565b34801561094057600080fd5b506103c561094f366004612fb1565b63f23a6e6160e01b9695505050505050565b34801561096d57600080fd5b5061031661097c36600461302d565b6127d0565b34801561098d57600080fd5b506102ee61099c366004612d14565b60009081526003602052604090206005015460ff16151590565b60006001600160e01b03198216630a85bd0160e11b14806109e757506001600160e01b03198216630271189760e51b145b92915050565b600082815260036020526040902060050154829060ff16610a295760405162461bcd60e51b8152600401610a209061304a565b60405180910390fd5b610a3281611e8e565b610a4e5760405162461bcd60e51b8152600401610a2090613081565b600260005403610a705760405162461bcd60e51b8152600401610a20906130b8565b6002600090815583815260036020526040902080546001600160a01b03163303610ae75760405162461bcd60e51b815260206004820152602260248201527f43616e206e6f74206d616b65206f66666572206f6e207768617420796f75206f6044820152613bb760f11b6064820152608401610a20565b426000610af48583613105565b6040805160808101825234808252602080830187815283850186815260016060860181815260008f81526004865288812033808352965288902096518755925190860155516002850155516003909301805460ff9490941660ff19909416939093179092558654925193945090926001600160a01b0392909216917fcfd873caf19badf47e73383de2ac62615a1bd6e2bd97a6a32df5fdc3b01ff61091610bb7918b91908890889093845260208401929092526040830152606082015260800190565b60405180910390a35050600160005550505050565b60008181526003602052604081206005015460ff166002148015610c095750600082815260036020526040902060050154610100900460ff166001145b80156109e7575050600090815260036020526040902060040154421090565b60006001841480610c395750600284145b610c855760405162461bcd60e51b815260206004820152601a60248201527f4c697374696e672074797065206e6f7420737570706f727465640000000000006044820152606401610a20565b610c8f85336112b3565b610cd05760405162461bcd60e51b81526020600482015260126024820152711d1bdad95b881b9bdd08185c1c1c9bdd995960721b6044820152606401610a20565b60078054906000610ce083613118565b90915550506007546000198501610e47576040805161010081018252338152602081018690529081018590526000606082018190526080820152600160a0820181905260c082015260e08101610d3b36899003890189613147565b9052600082815260036020818152604092839020845181546001600160a01b03199081166001600160a01b03928316178355868401516001840155868601516002840155606080880151958401959095556080870151600484015560a087015160058401805460c08a015160ff93841661ffff19909216919091176101009184169190910217905560e090970151805160068501805490931693169290921790559182015160078201558184015160088201559101516009909101805460ff191691909316179091555133907fa0f2b3b2e8655a14216a76a8c3c6f9f744081b73331c42121bb612fb2b9028fb90610e3a9084908a9089908b9061320a565b60405180910390a261100d565b6001198501610fd857426000610e5d8583613105565b6040805161010081018252338152602081018990529081018890526060810184905260808101829052600260a0820152600160c082015290915060e08101610eaa368b90038b018b613147565b9052600084815260036020818152604092839020845181546001600160a01b039182166001600160a01b0319918216178355868401516001840155868601516002840155606080880151958401959095556080870151600484015560a087015160058401805460c08a015160ff9081166101000261ffff199092169381169390931717905560e0909701518051600685018054919094169216821790925592810151600783018190559481015160088301819055930151600990910180549190951660ff19919091168117909455610f86939092913330612849565b336001600160a01b03167fa7d20855870d654c2bd83bac070a0e627a5c1b521913eaac00282bbb2154f76b848a898b8787604051610fc996959493929190613230565b60405180910390a2505061100d565b60405162461bcd60e51b815260206004820152600a602482015269696d706f737369626c6560b01b6044820152606401610a20565b95945050505050565b600081815260036020526040902060050154819060ff166110495760405162461bcd60e51b8152600401610a209061304a565b6110688160009081526003602052604090206005015460ff1660021490565b6110ad5760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610a20565b6110b68161127b565b6110f85760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610a20565b60026000540361111a5760405162461bcd60e51b8152600401610a20906130b8565b600260005561114382600090815260036020526040902060050154610100900460ff1660011490565b1561119b5760405162461bcd60e51b815260206004820152602260248201527f61756374696f6e206d75737420626520656e646564206f722063616e63656c6c604482015261195960f21b6064820152608401610a20565b600082815260066020526040902054336001600160a01b039091160361120e5760405162461bcd60e51b815260206004820152602260248201527f68696768657374206269646465722063616e6e6f7420776974686472617720626044820152611a5960f21b6064820152608401610a20565b6000828152600560209081526040808320338085529252822080549290556112369082612881565b604080518481526020810183905233917f7b8450decc7d5cd32eed685e9d8580e85388aaa0e75e8a73b8e4443e8586ad8d910160405180910390a25050600160005550565b60008181526003602052604081206005015460ff1660021480156109e757505060009081526003602052604090206004015442101590565b600060016112c76080850160608601613269565b60ff16036114665760006112de602085018561302d565b6040516331a9108f60e11b8152602086013560048201529091506001600160a01b038085169190831690636352211e90602401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190613284565b6001600160a01b0316148015611452575060405163020604bf60e21b81526020850135600482015230906001600160a01b0383169063081812fc90602401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d19190613284565b6001600160a01b03161480611452575060405163e985e9c560e01b81526001600160a01b03848116600483015230602483015282169063e985e9c5906044015b602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145291906132a1565b6114605760009150506109e7565b50611583565b60026114786080850160608601613269565b60ff160361154757600061148f602085018561302d565b60408051627eeac760e11b81526001600160a01b03868116600483015260208801356024830152929350908601359183169062fdd58e90604401602060405180830381865afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906132c3565b10158015611452575060405163e985e9c560e01b81526001600160a01b03848116600483015230602483015282169063e985e9c590604401611411565b60405162461bcd60e51b81526020600482015260116024820152703ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610a20565b50600192915050565b600081815260036020526040902060050154819060ff166115bf5760405162461bcd60e51b8152600401610a209061304a565b6115de8160009081526003602052604090206005015460ff1660021490565b6116235760405162461bcd60e51b8152602060048201526016602482015275185d58dd1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610a20565b61162c8161127b565b61166e5760405162461bcd60e51b815260206004820152601360248201527261756374696f6e207374696c6c20676f696e6760681b6044820152606401610a20565b6002600054036116905760405162461bcd60e51b8152600401610a20906130b8565b60026000556116b982600090815260036020526040902060050154610100900460ff1660011490565b6116f85760405162461bcd60e51b815260206004820152601060248201526f30bab1ba34b7b7103737ba1037b832b760811b6044820152606401610a20565b600082815260036020908152604080832060069092529091205481546001600160a01b0391821691163314806117365750336001600160a01b038216145b6117955760405162461bcd60e51b815260206004820152602a60248201527f6f6e6c792073656c6c6572206f722077696e6e65722063616e20636f6d706c656044820152693a329030bab1ba34b7b760b11b6064820152608401610a20565b6001600160a01b038116156118595760008481526003602052604090206006810154600782015460098301546008909301546117e2936001600160a01b039093169260ff16903086612849565b60008481526005602090815260408083206001600160a01b038516845290915281205460095490919061181590836132dc565b9050600061182382846132fe565b855490915061183b906001600160a01b031682612881565b600254611851906001600160a01b031683612881565b50505061189d565b6000848152600360205260409020600681015460078201546009830154600890930154855461189d946001600160a01b039485169460ff9091169291309116612849565b6005828101805461ff00191661020017905582546000868152602092835260408082206001600160a01b03868116808552918652928290205482518a8152958601529391909216917fb072c6ae25b30378645a1e2bff1a727b0a3ad4c6f8c6fb6c385d2d3323dddd23910160405180910390a3505060016000555050565b600081815260036020526040902060050154819060ff1661194e5760405162461bcd60e51b8152600401610a209061304a565b61195781610bcc565b6119975760405162461bcd60e51b8152602060048201526011602482015270185d58dd1a5bdb881a185cc8195b991959607a1b6044820152606401610a20565b600082815260036020526040902080548391906001600160a01b031633146119d15760405162461bcd60e51b8152600401610a2090613311565b6000848152600660205260409020546001600160a01b031615611a415760405162461bcd60e51b815260206004820152602260248201527f63616e6e6f742063616e63656c20616e2061756374696f6e2077697468206269604482015261647360f01b6064820152608401610a20565b60008481526003602081815260409283902060058101805461030061ff0019821617909155815485518a81529384019490945260ff168285015292516001600160a01b03909216917faacaec0f49c111b93b126b01fae37ea237edb829f483b288ecce8a51cc49b55f9181900360600190a25050505050565b600081815260036020526040902060050154819060ff16611aed5760405162461bcd60e51b8152600401610a209061304a565b611af681610bcc565b611b365760405162461bcd60e51b8152602060048201526011602482015270185d58dd1a5bdb881a185cc8195b991959607a1b6044820152606401610a20565b600260005403611b585760405162461bcd60e51b8152600401610a20906130b8565b6002600090815582815260036020526040902080546001600160a01b03163303611bc45760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f7420626964206f6e207768617420796f75206f776e0000000000006044820152606401610a20565b6000838152600560209081526040808320338452909152812054611be9903490613105565b905060006008548360010154611bff91906132dc565b9050808360010154611c119190613105565b821015611c545760405162461bcd60e51b815260206004820152601160248201527062696420707269636520746f6f206c6f7760781b6044820152606401610a20565b600085815260056020908152604080832033845290915281208054349290611c7d908490613105565b9091555050600085815260066020526040902080546001600160a01b031916331790556001830154611cb0908290613105565b6001840155604080518681526020810184905233917fc5bab98305c61fdf0d2d937ad4bbbabf819737c9a189438a3cf99f845b0e0f67910160405180910390a250506001600055505050565b600260005403611d1e5760405162461bcd60e51b8152600401610a20906130b8565b600260009081558181526003602052604090206005015460ff16611d545760405162461bcd60e51b8152600401610a209061304a565b611d738160009081526003602052604090206005015460ff1660011490565b611dbf5760405162461bcd60e51b815260206004820152601e60248201527f696e76656e746f7279206973206e6f74206669782073616c65206b696e6400006044820152606401610a20565b60008181526004602090815260408083203384529091529020600381015460ff16600114611e295760405162461bcd60e51b81526020600482015260176024820152761bd999995c88185b1c9958591e481c1c9bd8d95cdcd959604a1b6044820152606401610a20565b34816000016000828254611e3d9190613105565b9091555050805460405133917fd3cf940c0176f3576ca168358b65ea8684a1d425964a02dfed71833af27f725c91611e7d91868252602082015260400190565b60405180910390a250506001600055565b60008181526003602052604081206005015460ff1660011480156109e75750600082815260036020526040902060050154610100900460ff1660011492915050565b611ed8612982565b611ee260006129dc565b565b611eec612982565b60098190556040518181527f1c25cee3c02d00128aba12fb322f467e45e20b7fdf26e6a65381cf081563fb41906020015b60405180910390a150565b611f30612982565b60088190556009546040519081527f0f5723f2ac27807d8ac15c2fe206896aa27150df178b0fb20909e2ad67e87b8990602001611f1d565b600082815260036020526040902060050154829060ff16611f9b5760405162461bcd60e51b8152600401610a209061304a565b611fa481611e8e565b611fc05760405162461bcd60e51b8152600401610a2090613081565b600083815260036020526040902080548491906001600160a01b03163314611ffa5760405162461bcd60e51b8152600401610a2090613311565b60026000540361201c5760405162461bcd60e51b8152600401610a20906130b8565b60026000818155868152600360209081526040808320600483528184206001600160a01b038a1685529092529091209182015490919042106120985760405162461bcd60e51b815260206004820152601560248201527413d999995c88185b1c9958591e48195e1c1a5c9959605a1b6044820152606401610a20565b600381015460ff166001146120ef5760405162461bcd60e51b815260206004820152601760248201527f4f6666657220616c72656164792070726f6365737365640000000000000000006044820152606401610a20565b60008781526003602052604090206006810154600782015460098301546008909301548554612132946001600160a01b039485169460ff9091169291168b612849565b6009548154600091612143916132dc565b9050600081836000015461215791906132fe565b845490915061216f906001600160a01b031682612881565b600254612185906001600160a01b031683612881565b60038301805460ff1916600217905560058401805461020061ff0019909116179055835483546040516001600160a01b03808c169316917fe2f722e60c7b286851134a8c25c92fce1261b8e645664dc4ddd48e5c5e6c6ded916121f0918e8252602082015260400190565b60405180910390a35050600160005550505050505050565b600081815260036020526040902060050154819060ff1661223b5760405162461bcd60e51b8152600401610a209061304a565b61224481611e8e565b6122605760405162461bcd60e51b8152600401610a2090613081565b600082815260036020526040902080548391906001600160a01b03163314611a415760405162461bcd60e51b8152600401610a2090613311565b600082815260036020526040902060050154829060ff166122cd5760405162461bcd60e51b8152600401610a209061304a565b6122d681611e8e565b6122f25760405162461bcd60e51b8152600401610a2090613081565b600083815260036020526040902080548491906001600160a01b0316331461232c5760405162461bcd60e51b8152600401610a2090613311565b6000841161238c5760405162461bcd60e51b815260206004820152602760248201527f4572726f722c20746865207072696365206d75737420626520677265617465726044820152660207468616e20360cc1b6064820152608401610a20565b6000858152600360209081526040918290206001810180549088905560028201889055815484518a8152938401829052938301889052909290916001600160a01b03909116907f1d343dd389c85362ddcffb32dc7a11722813730140df02430a580a5016b85a179060600160405180910390a250505050505050565b600081815260036020526040902060050154819060ff1661243b5760405162461bcd60e51b8152600401610a209061304a565b61244481611e8e565b6124605760405162461bcd60e51b8152600401610a2090613081565b6002600054036124825760405162461bcd60e51b8152600401610a20906130b8565b6002600090815582815260036020526040902060018101543410156124e95760405162461bcd60e51b815260206004820152601a60248201527f4572726f722c2074686520616d6f756e74206973206c6f7765720000000000006044820152606401610a20565b80546001600160a01b031633036125425760405162461bcd60e51b815260206004820152601860248201527f43616e206e6f7420627579207768617420796f75206f776e00000000000000006044820152606401610a20565b60008381526003602052604090206006810154600782015460098301546008909301548454612585946001600160a01b039485169460ff90911692911633612849565b6000600954826001015461259991906132dc565b905060008183600101546125ad91906132fe565b83549091506125c5906001600160a01b031682612881565b6002546125db906001600160a01b031683612881565b60058301805461ff00191661020017905582546001840154600785015460408051928352602083019190915233926001600160a01b0316917f329ed77eba9e35e38400649df65277f6ebb9a20f5f45eeae5d73d92cdae8e6e2910160405180910390a350506001600055505050565b60026000540361266c5760405162461bcd60e51b8152600401610a20906130b8565b600260009081558181526003602052604090206005015460ff166126a25760405162461bcd60e51b8152600401610a209061304a565b6126c18160009081526003602052604090206005015460ff1660011490565b61270d5760405162461bcd60e51b815260206004820152601e60248201527f696e76656e746f7279206973206e6f74206669782073616c65206b696e6400006044820152606401610a20565b60008181526004602090815260408083203384529091529020600381015460ff166001146127775760405162461bcd60e51b81526020600482015260176024820152761bd999995c88185b1c9958591e481c1c9bd8d95cdcd959604a1b6044820152606401610a20565b612785338260000154612881565b6003818101805460ff19169091179055805460405133917f49be1a85cd4b4a4011f82d2e4259a7fbd3ea2f7b47f1bc06de87fa3b41a3506b91611e7d91868252602082015260400190565b6127d8612982565b6001600160a01b03811661283d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b612846816129dc565b50565b60001984016128635761285e86838388612a2e565b612879565b60011984016115475761285e8683838887612b6d565b505050505050565b8060000361288d575050565b6001600160a01b0382166128e35760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f74207472616e7366657220746f20616464726573732830290000006044820152606401610a20565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612930576040519150601f19603f3d011682016040523d82523d6000602084013e612935565b606091505b505090508061297d5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610a20565b505050565b6001546001600160a01b03163314611ee25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a20565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b836001600160a01b03163b600003612a795760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610a20565b6040516001600160a01b0384811660248301528381166044830152606482018390526000919086169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251612ada9190613357565b6000604051808303816000865af19150503d8060008114612b17576040519150601f19603f3d011682016040523d82523d6000602084013e612b1c565b606091505b5050905080612b665760405162461bcd60e51b8152602060048201526016602482015275115490cdcc8c551c985b9cd9995c919c9bdb51985a5b60521b6044820152606401610a20565b5050505050565b846001600160a01b03163b600003612bb85760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b6044820152606401610a20565b6040516001600160a01b0385811660248301528481166044830152606482018490526084820183905260a060a4830152600060c48301819052919087169060e40160408051601f198184030181529181526020820180516001600160e01b0316637921219560e11b17905251612c2e9190613357565b6000604051808303816000865af19150503d8060008114612c6b576040519150601f19603f3d011682016040523d82523d6000602084013e612c70565b606091505b50509050806128795760405162461bcd60e51b815260206004820152601b60248201527f45524331313535536166655472616e7366657246726f6d4661696c00000000006044820152606401610a20565b600060208284031215612cd357600080fd5b81356001600160e01b031981168114612ceb57600080fd5b9392505050565b60008060408385031215612d0557600080fd5b50508035926020909101359150565b600060208284031215612d2657600080fd5b5035919050565b600060808284031215612d3f57600080fd5b50919050565b60008060008060e08587031215612d5b57600080fd5b612d658686612d2d565b966080860135965060a08601359560c00135945092505050565b6001600160a01b038116811461284657600080fd5b60008083601f840112612da657600080fd5b50813567ffffffffffffffff811115612dbe57600080fd5b602083019150836020828501011115612dd657600080fd5b9250929050565b600080600080600060808688031215612df557600080fd5b8535612e0081612d7f565b94506020860135612e1081612d7f565b935060408601359250606086013567ffffffffffffffff811115612e3357600080fd5b612e3f88828901612d94565b969995985093965092949392505050565b60008060a08385031215612e6357600080fd5b612e6d8484612d2d565b91506080830135612e7d81612d7f565b809150509250929050565b60008060408385031215612e9b57600080fd5b823591506020830135612e7d81612d7f565b60008083601f840112612ebf57600080fd5b50813567ffffffffffffffff811115612ed757600080fd5b6020830191508360208260051b8501011115612dd657600080fd5b60008060008060008060008060a0898b031215612f0e57600080fd5b8835612f1981612d7f565b97506020890135612f2981612d7f565b9650604089013567ffffffffffffffff80821115612f4657600080fd5b612f528c838d01612ead565b909850965060608b0135915080821115612f6b57600080fd5b612f778c838d01612ead565b909650945060808b0135915080821115612f9057600080fd5b50612f9d8b828c01612d94565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612fca57600080fd5b8635612fd581612d7f565b95506020870135612fe581612d7f565b94506040870135935060608701359250608087013567ffffffffffffffff81111561300f57600080fd5b61301b89828a01612d94565b979a9699509497509295939492505050565b60006020828403121561303f57600080fd5b8135612ceb81612d7f565b60208082526018908201527f696e76656e746f727920646f6573206e6f742065786973740000000000000000604082015260600190565b6020808252601d908201527f696e76656e746f7279206973206e6f206c6f6e676572206f70656e6564000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156109e7576109e76130ef565b60006001820161312a5761312a6130ef565b5060010190565b803560ff8116811461314257600080fd5b919050565b60006080828403121561315957600080fd5b6040516080810181811067ffffffffffffffff8211171561318a57634e487b7160e01b600052604160045260246000fd5b604052823561319881612d7f565b8082525060208301356020820152604083013560408201526131bc60608401613131565b60608201529392505050565b80356131d381612d7f565b6001600160a01b03168252602081810135908301526040808201359083015260ff61320060608301613131565b1660608301525050565b84815260e0810161321e60208301866131c8565b60a082019390935260c0015292915050565b868152610120810161324560208301886131c8565b8560a08301528460c08301528360e083015282610100830152979650505050505050565b60006020828403121561327b57600080fd5b612ceb82613131565b60006020828403121561329657600080fd5b8151612ceb81612d7f565b6000602082840312156132b357600080fd5b81518015158114612ceb57600080fd5b6000602082840312156132d557600080fd5b5051919050565b6000826132f957634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156109e7576109e76130ef565b60208082526026908201527f4f6e6c79207468652073656c6c65722063616e20696e766f6b652074686973206040820152651b595d1a1bd960d21b606082015260800190565b6000825160005b81811015613378576020818601810151858301520161335e565b50600092019182525091905056fea264697066735822122033703c8e9b0899e8059545617461a8ee537201cc77453fbc3dc38f6fb078a56464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004f2575b8f88af8d8b1f7e62f518dd568cca31b2f
-----Decoded View---------------
Arg [0] : owner_ (address): 0x4F2575b8F88aF8D8B1F7e62F518dd568CcA31b2f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004f2575b8f88af8d8b1f7e62f518dd568cca31b2f
Deployed Bytecode Sourcemap
38498:19287:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42897:242;;;;;;;;;;-1:-1:-1;42897:242:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;42897:242:0;;;;;;;;48000:728;;;;;;:::i;:::-;;:::i;:::-;;53874:224;;;;;;;;;;-1:-1:-1;53874:224:0;;;;;:::i;:::-;;:::i;44461:1849::-;;;;;;;;;;-1:-1:-1;44461:1849:0;;;;;:::i;:::-;;:::i;:::-;;;1699:25:1;;;1687:2;1672:18;44461:1849:0;1553:177:1;53396:470:0;;;;;;:::i;:::-;;:::i;54234:148::-;;;;;;;;;;-1:-1:-1;54234:148:0;;;;;:::i;:::-;;:::i;41834:311::-;;;;;;;;;;-1:-1:-1;41834:311:0;;;;;:::i;:::-;-1:-1:-1;;;41834:311:0;;;;;;;;;;;-1:-1:-1;;;;;;3144:33:1;;;3126:52;;3114:2;3099:18;41834:311:0;2982:202:1;55064:983:0;;;;;;;;;;-1:-1:-1;55064:983:0;;;;;:::i;:::-;;:::i;38639:39::-;;;;;;;;;;;;38677:1;38639:39;;;;;3745:4:1;3733:17;;;3715:36;;3703:2;3688:18;38639:39:0;3573:184:1;39004:40:0;;;;;;;;;;;;39043:1;39004:40;;51853:1535;;;;;;:::i;:::-;;:::i;50837:392::-;;;;;;;;;;-1:-1:-1;50837:392:0;;;;;:::i;:::-;;:::i;41466:59::-;;;;;;;;;;-1:-1:-1;41466:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;41532:48;;;;;;;;;;-1:-1:-1;41532:48:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;41532:48:0;;;;;;-1:-1:-1;;;;;4246:32:1;;;4228:51;;4216:2;4201:18;41532:48:0;4082:203:1;51237:606:0;;;;;;:::i;:::-;;:::i;48736:448::-;;;;;;:::i;:::-;;:::i;38820:42::-;;;;;;;;;;;;38861:1;38820:42;;54390:168;;;;;;;;;;-1:-1:-1;54390:168:0;;;;;:::i;:::-;;:::i;41621:39::-;;;;;;;;;;;;;;;;37600:103;;;;;;;;;;;;;:::i;44240:213::-;;;;;;;;;;-1:-1:-1;44240:213:0;;;;;:::i;:::-;;:::i;54106:120::-;;;;;;;;;;-1:-1:-1;54106:120:0;;;;;:::i;:::-;54158:4;54182:15;;;:11;:15;;;;;:20;;;:36;:20;38722:1;54182:36;;54106:120;36952:87;;;;;;;;;;-1:-1:-1;37025:6:0;;-1:-1:-1;;;;;37025:6:0;36952:87;;44004:228;;;;;;;;;;-1:-1:-1;44004:228:0;;;;;:::i;:::-;;:::i;49728:1101::-;;;;;;:::i;:::-;;:::i;46761:294::-;;;;;;;;;;-1:-1:-1;46761:294:0;;;;;:::i;:::-;;:::i;42506:381::-;;;;;;;;;;-1:-1:-1;42506:381:0;;;;;:::i;:::-;-1:-1:-1;;;42506:381:0;;;;;;;;;;;46318:435;;;;;;;;;;-1:-1:-1;46318:435:0;;;;;:::i;:::-;;:::i;54943:111::-;;;;;;;;;;-1:-1:-1;54943:111:0;;;;;:::i;:::-;55002:7;55029:17;;;:13;:17;;;;;;-1:-1:-1;;;;;55029:17:0;;54943:111;54566:121;;;;;;;;;;-1:-1:-1;54566:121:0;;;;;:::i;:::-;54618:4;54642:15;;;:11;:15;;;;;:20;;;:37;:20;38677:1;54642:37;;54566:121;41345:48;;;;;;;;;;-1:-1:-1;41345:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41345:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6450:15:1;;;6432:34;;6497:2;6482:18;;;6475:34;;;;6525:18;;;6518:34;;;;6583:2;6568:18;;;6561:34;;;;6626:3;6611:19;;6604:35;;;;6688:4;6676:17;;;6412:3;6655:19;;6648:46;6731:17;;;6725:3;6710:19;;6703:46;6790:13;;6786:22;;;6780:3;6765:19;;6758:51;6852:15;;;6846:22;6840:3;6825:19;;6818:51;6912:15;;6906:22;6900:3;6885:19;;6878:51;6976:15;;;6970:22;6966:33;6960:3;6945:19;;6938:62;6381:3;6366:19;41345:48:0;6005:1001:1;38594:36:0;;;;;;;;;;-1:-1:-1;38594:36:0;;;;-1:-1:-1;;;;;38594:36:0;;;41681;;;;;;;;;;;;;;;;47063:929;;;;;;:::i;:::-;;:::i;41589:23::-;;;;;;;;;;;;;;;;41400:59;;;;;;;;;;-1:-1:-1;41400:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7462:25:1;;;7518:2;7503:18;;7496:34;;;;7546:18;;;7539:34;7621:4;7609:17;7604:2;7589:18;;7582:45;7449:3;7434:19;41400:59:0;7235:398:1;54811:124:0;;;;;;;;;;-1:-1:-1;54811:124:0;;;;;:::i;:::-;54866:4;54890:15;;;:11;:15;;;;;:22;;;;;;:37;:22;38768:1;54890:37;;54811:124;49192:528;;;;;;:::i;:::-;;:::i;42153:345::-;;;;;;;;;;-1:-1:-1;42153:345:0;;;;;:::i;:::-;-1:-1:-1;;;42153:345:0;;;;;;;;;37858:201;;;;;;;;;;-1:-1:-1;37858:201:0;;;;;:::i;:::-;;:::i;54697:106::-;;;;;;;;;;-1:-1:-1;54697:106:0;;;;;:::i;:::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;;;:25;;;54697:106;42897:242;42976:4;-1:-1:-1;;;;;;43014:48:0;;-1:-1:-1;;;43014:48:0;;43013:118;;-1:-1:-1;;;;;;;43081:49:0;;-1:-1:-1;;;43081:49:0;43013:118;42993:138;42897:242;-1:-1:-1;;42897:242:0:o;48000:728::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;48118:5;;54770:20;;43199:50;;;;-1:-1:-1;;;43199:50:0;;;;;;;:::i;:::-;;;;;;;;;43268:20;43282:5;43268:13;:20::i;:::-;43260:62;;;;-1:-1:-1;;;43260:62:0;;;;;;;:::i;:::-;1916:1:::1;2514:7;;:19:::0;2506:63:::1;;;;-1:-1:-1::0;;;2506:63:0::1;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;;;48181;;;:11:::2;:18;::::0;;;;48296:10;;-1:-1:-1;;;;;48296:10:0::2;48282;:24:::0;48274:71:::2;;;::::0;-1:-1:-1;;;48274:71:0;;10346:2:1;48274:71:0::2;::::0;::::2;10328:21:1::0;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:32;10517:19;;48274:71:0::2;10144:398:1::0;48274:71:0::2;48376:15;48358;48418:27;48428:17:::0;48376:15;48418:27:::2;:::i;:::-;48486:144;::::0;;::::2;::::0;::::2;::::0;;48515:9:::2;48486:144:::0;;;::::2;::::0;;::::2;::::0;;;;;;;;;38996:1:::2;48486:144:::0;;;;;;-1:-1:-1;48458:13:0;;;:6:::2;:13:::0;;;;;48472:10:::2;48458:25:::0;;;;;;;;:172;;;;;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;;48486:144:::2;48458:172:::0;;;::::2;-1:-1:-1::0;;48458:172:0;;::::2;::::0;;;::::2;::::0;;;48670:10;;48648:72;;48402:43;;-1:-1:-1;48472:10:0;;-1:-1:-1;;;;;48670:10:0;;;::::2;::::0;48648:72:::2;::::0;::::2;::::0;48465:5;;48515:9;48584:7;;48402:43;;11040:25:1;;;11096:2;11081:18;;11074:34;;;;11139:2;11124:18;;11117:34;11182:2;11167:18;;11160:34;11027:3;11012:19;;10809:391;48648:72:0::2;;;;;;;;-1:-1:-1::0;;1872:1:0::1;2826:7;:22:::0;-1:-1:-1;;;;48000:728:0:o;53874:224::-;53930:4;54182:15;;;:11;:15;;;;;:20;;;:36;:20;38722:1;54182:36;53967:67;;;;-1:-1:-1;53997:15:0;;;;:11;:15;;;;;:22;;;;;;:37;:22;38768:1;53997:37;53967:67;:123;;;;-1:-1:-1;;54051:15:0;;;;:11;:15;;;;;:21;;;54075:15;-1:-1:-1;;53874:224:0:o;44461:1849::-;44625:7;38677:1;44653:21;;;:45;;-1:-1:-1;38722:1:0;44678:20;;44653:45;44645:84;;;;-1:-1:-1;;;44645:84:0;;11407:2:1;44645:84:0;;;11389:21:1;11446:2;11426:18;;;11419:30;11485:28;11465:18;;;11458:56;11531:18;;44645:84:0;11205:350:1;44645:84:0;44748:29;44759:5;44766:10;44748;:29::i;:::-;44740:60;;;;-1:-1:-1;;;44740:60:0;;11762:2:1;44740:60:0;;;11744:21:1;11801:2;11781:18;;;11774:30;-1:-1:-1;;;11820:18:1;;;11813:48;11878:18;;44740:60:0;11560:342:1;44740:60:0;44813:8;:10;;;:8;:10;;;:::i;:::-;;;;-1:-1:-1;;44850:8:0;;-1:-1:-1;;44874:21:0;;44871:1407;;44933:291;;;;;;;;44970:10;44933:291;;;;;;;;;;;;;;-1:-1:-1;44933:291:0;;;;;;;;;;38677:1;44933:291;;;;;;;;;;;;;;;;;;;;45147:5;44933:291;:::i;:::-;;;44912:18;;;;:11;:18;;;;;;;;;:312;;;;-1:-1:-1;;;;;;44912:312:0;;;-1:-1:-1;;;;;44912:312:0;;;;;;;;;;-1:-1:-1;44912:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44912:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44912:312:0;;;;;;;;;45246:57;45279:10;;45246:57;;;;44912:18;;45272:5;;45291;;45298:4;;45246:57;:::i;:::-;;;;;;;;44871:1407;;;-1:-1:-1;;45326:20:0;;45323:955;;45381:15;45363;45427:27;45437:17;45381:15;45427:27;:::i;:::-;45492:300;;;;;;;;45529:10;45492:300;;;;;;;;;;;;;;;;;;;;;;;;;;38722:1;45492:300;;;;38768:1;45492:300;;;;45411:43;;-1:-1:-1;45492:300:0;;;;;;;;;;45705:5;45492:300;:::i;:::-;;;45471:18;;;;:11;:18;;;;;;;;;:321;;;;-1:-1:-1;;;;;45471:321:0;;;-1:-1:-1;;;;;;45471:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45471:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45471:321:0;;;;;;;;;45809:300;;45471:321;;;46051:10;46089:4;45809:14;:300::i;:::-;46171:10;-1:-1:-1;;;;;46131:80:0;;46157:5;46164;46183;46190:4;46196:7;46205:5;46131:80;;;;;;;;;;;:::i;:::-;;;;;;;;45348:877;;45323:955;;;46246:20;;-1:-1:-1;;;46246:20:0;;14753:2:1;46246:20:0;;;14735:21:1;14792:2;14772:18;;;14765:30;-1:-1:-1;;;14811:18:1;;;14804:40;14861:18;;46246:20:0;14551:334:1;45323:955:0;46297:5;44461:1849;-1:-1:-1;;;;;44461:1849:0:o;53396:470::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;53465:5;;54770:20;;43595:50;;;;-1:-1:-1;;;43595:50:0;;;;;;;:::i;:::-;43664:16;43674:5;54158:4;54182:15;;;:11;:15;;;;;:20;;;:36;:20;38722:1;54182:36;;54106:120;43664:16;43656:51;;;;-1:-1:-1;;;43656:51:0;;15092:2:1;43656:51:0;;;15074:21:1;15131:2;15111:18;;;15104:30;-1:-1:-1;;;15150:18:1;;;15143:52;15212:18;;43656:51:0;14890:346:1;43656:51:0;43726:23;43743:5;43726:16;:23::i;:::-;43718:55;;;;-1:-1:-1;;;43718:55:0;;15443:2:1;43718:55:0;;;15425:21:1;15482:2;15462:18;;;15455:30;-1:-1:-1;;;15501:18:1;;;15494:49;15560:18;;43718:55:0;15241:343:1;43718:55:0;1916:1:::1;2514:7;;:19:::0;2506:63:::1;;;;-1:-1:-1::0;;;2506:63:0::1;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;53505:19:::2;53518:5:::0;54866:4;54890:15;;;:11;:15;;;;;:22;;;;;;:37;:22;38768:1;54890:37;;54811:124;53505:19:::2;53504:20;53496:67;;;::::0;-1:-1:-1;;;53496:67:0;;15791:2:1;53496:67:0::2;::::0;::::2;15773:21:1::0;15830:2;15810:18;;;15803:30;15869:34;15849:18;;;15842:62;-1:-1:-1;;;15920:18:1;;;15913:32;15962:19;;53496:67:0::2;15589:398:1::0;53496:67:0::2;53582:20;::::0;;;:13:::2;:20;::::0;;;;;53606:10:::2;-1:-1:-1::0;;;;;53582:20:0;;::::2;:34:::0;53574:81:::2;;;::::0;-1:-1:-1;;;53574:81:0;;16194:2:1;53574:81:0::2;::::0;::::2;16176:21:1::0;16233:2;16213:18;;;16206:30;16272:34;16252:18;;;16245:62;-1:-1:-1;;;16323:18:1;;;16316:32;16365:19;;53574:81:0::2;15992:398:1::0;53574:81:0::2;53668:15;53686:11:::0;;;:4:::2;:11;::::0;;;;;;;53698:10:::2;53686:23:::0;;;;;;;;;53720:27;;;53758:39:::2;::::0;53686:23;53758:9:::2;:39::i;:::-;53815:41;::::0;;16569:25:1;;;16625:2;16610:18;;16603:34;;;53836:10:0::2;::::0;53815:41:::2;::::0;16542:18:1;53815:41:0::2;;;;;;;-1:-1:-1::0;;1872:1:0::1;2826:7;:22:::0;-1:-1:-1;53396:470:0:o;54234:148::-;54293:4;54182:15;;;:11;:15;;;;;:20;;;:36;:20;38722:1;54182:36;54317:57;;;;-1:-1:-1;;54334:15:0;;;;:11;:15;;;;;:21;;;54359:15;-1:-1:-1;54334:40:0;;54234:148::o;55064:983::-;55151:4;39138:1;55171:10;;;;;;;;:::i;:::-;:23;;;55168:848;;55210:9;55230:18;;;;:5;:18;:::i;:::-;55286:24;;-1:-1:-1;;;55286:24:0;;55296:13;;;;55286:24;;;1699:25:1;55210:39:0;;-1:-1:-1;;;;;;55286:38:0;;;;:9;;;;;;1672:18:1;;55286:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55286:38:0;;:172;;;;-1:-1:-1;55346:28:0;;-1:-1:-1;;;55346:28:0;;55360:13;;;;55346:28;;;1699:25:1;55386:4:0;;-1:-1:-1;;;;;55346:13:0;;;;;1672:18:1;;55346:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55346:45:0;;:111;;;-1:-1:-1;55412:45:0;;-1:-1:-1;;;55412:45:0;;-1:-1:-1;;;;;17321:15:1;;;55412:45:0;;;17303:34:1;55451:4:0;17353:18:1;;;17346:43;55412:18:0;;;;;17238::1;;55412:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55264:311;;55554:5;55547:12;;;;;55264:311;55195:391;55168:848;;;39194:1;55596:10;;;;;;;;:::i;:::-;:24;;;55592:424;;55637:10;55659:18;;;;:5;:18;:::i;:::-;55757:12;55715:38;;-1:-1:-1;;;55715:38:0;;-1:-1:-1;;;;;17874:32:1;;;55715:38:0;;;17856:51:1;55739:13:0;;;;17923:18:1;;;17916:34;55637:41:0;;-1:-1:-1;55757:12:0;;;;;55715:11;;;;;17829:18:1;;55715:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;:120;;;;-1:-1:-1;55790:45:0;;-1:-1:-1;;;55790:45:0;;-1:-1:-1;;;;;17321:15:1;;;55790:45:0;;;17303:34:1;55829:4:0;17353:18:1;;;17346:43;55790:18:0;;;;;17238::1;;55790:45:0;17091:304:1;55592:424:0;55977:27;;-1:-1:-1;;;55977:27:0;;18352:2:1;55977:27:0;;;18334:21:1;18391:2;18371:18;;;18364:30;-1:-1:-1;;;18410:18:1;;;18403:47;18467:18;;55977:27:0;18150:341:1;55592:424:0;-1:-1:-1;56035:4:0;55064:983;;;;:::o;51853:1535::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;51926:5;;54770:20;;43595:50;;;;-1:-1:-1;;;43595:50:0;;;;;;;:::i;:::-;43664:16;43674:5;54158:4;54182:15;;;:11;:15;;;;;:20;;;:36;:20;38722:1;54182:36;;54106:120;43664:16;43656:51;;;;-1:-1:-1;;;43656:51:0;;15092:2:1;43656:51:0;;;15074:21:1;15131:2;15111:18;;;15104:30;-1:-1:-1;;;15150:18:1;;;15143:52;15212:18;;43656:51:0;14890:346:1;43656:51:0;43726:23;43743:5;43726:16;:23::i;:::-;43718:55;;;;-1:-1:-1;;;43718:55:0;;15443:2:1;43718:55:0;;;15425:21:1;15482:2;15462:18;;;15455:30;-1:-1:-1;;;15501:18:1;;;15494:49;15560:18;;43718:55:0;15241:343:1;43718:55:0;1916:1:::1;2514:7;;:19:::0;2506:63:::1;;;;-1:-1:-1::0;;;2506:63:0::1;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;51965:19:::2;51978:5:::0;54866:4;54890:15;;;:11;:15;;;;;:22;;;;;;:37;:22;38768:1;54890:37;;54811:124;51965:19:::2;51957:48;;;::::0;-1:-1:-1;;;51957:48:0;;18698:2:1;51957:48:0::2;::::0;::::2;18680:21:1::0;18737:2;18717:18;;;18710:30;-1:-1:-1;;;18756:18:1;;;18749:46;18812:18;;51957:48:0::2;18496:340:1::0;51957:48:0::2;52018:21;52042:18:::0;;;:11:::2;:18;::::0;;;;;;;52088:13:::2;:20:::0;;;;;;;52156:10;;-1:-1:-1;;;;;52088:20:0;;::::2;::::0;52156:10:::2;52142;:24;::::0;:48:::2;;-1:-1:-1::0;52170:10:0::2;-1:-1:-1::0;;;;;52170:20:0;::::2;;52142:48;52120:141;;;::::0;-1:-1:-1;;;52120:141:0;;19043:2:1;52120:141:0::2;::::0;::::2;19025:21:1::0;19082:2;19062:18;;;19055:30;19121:34;19101:18;;;19094:62;-1:-1:-1;;;19172:18:1;;;19165:40;19222:19;;52120:141:0::2;18841:406:1::0;52120:141:0::2;-1:-1:-1::0;;;;;52277:20:0;::::2;::::0;52274:984:::2;;52346:18;::::0;;;:11:::2;:18;::::0;;;;:24:::2;::::0;::::2;:37:::0;52403:32;;;;52455:29;;;;52504:31;;;;;52313:296:::2;::::0;-1:-1:-1;;;;;52346:37:0;;::::2;::::0;52455:29:::2;;::::0;52563:4:::2;52588:6:::0;52313:14:::2;:296::i;:::-;52626:14;52643:11:::0;;;:4:::2;:11;::::0;;;;;;;-1:-1:-1;;;;;52643:19:0;::::2;::::0;;;;;;;;52714:16:::2;::::0;52643:19;;52626:14;52705:25:::2;::::0;52643:19;52705:25:::2;:::i;:::-;52678:52:::0;-1:-1:-1;52745:20:0::2;52768:25;52678:52:::0;52768:6;:25:::2;:::i;:::-;52828:10:::0;;52745:48;;-1:-1:-1;52810:44:0::2;::::0;-1:-1:-1;;;;;52828:10:0::2;52745:48:::0;52810:9:::2;:44::i;:::-;52879:13;::::0;52869:42:::2;::::0;-1:-1:-1;;;;;52879:13:0::2;52894:16:::0;52869:9:::2;:42::i;:::-;52299:626;;;52274:984;;;52979:18;::::0;;;:11:::2;:18;::::0;;;;:24:::2;::::0;::::2;:37:::0;53036:32;;;;53088:29;;;;53137:31;;;;;53221:10;;52946:300:::2;::::0;-1:-1:-1;;;;;52979:37:0;;::::2;::::0;53088:29:::2;::::0;;::::2;::::0;53137:31;53196:4:::2;::::0;53221:10:::2;52946:14;:300::i;:::-;53270:10;::::0;;::::2;:24:::0;;-1:-1:-1;;53270:24:0::2;::::0;::::2;::::0;;53338:10;;-1:-1:-1;53358:11:0;;;::::2;::::0;;;;;;;-1:-1:-1;;;;;53312:66:0;;::::2;53358:19:::0;;;;;;;;;;;53312:66;;16569:25:1;;;16610:18;;;16603:34;53312:66:0;53338:10;;;::::2;::::0;53312:66:::2;::::0;16542:18:1;53312:66:0::2;;;;;;;-1:-1:-1::0;;1872:1:0::1;2826:7;:22:::0;-1:-1:-1;;51853:1535:0:o;50837:392::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;50923:5;;54770:20;;43403:50;;;;-1:-1:-1;;;43403:50:0;;;;;;;:::i;:::-;43472:20;43486:5;43472:13;:20::i;:::-;43464:50;;;;-1:-1:-1;;;43464:50:0;;19809:2:1;43464:50:0;;;19791:21:1;19848:2;19828:18;;;19821:30;-1:-1:-1;;;19867:18:1;;;19860:47;19924:18;;43464:50:0;19607:341:1;43464:50:0;43847:21:::1;43871:18:::0;;;:11:::1;:18;::::0;;;;43923:10;;43871:18;;;-1:-1:-1;;;;;43923:10:0::1;43909;:24;43901:75;;;;-1:-1:-1::0;;;43901:75:0::1;;;;;;;:::i;:::-;51002:1:::2;55029:17:::0;;;:13;:17;;;;;;-1:-1:-1;;;;;55029:17:0;50967:37;50959:84:::2;;;::::0;-1:-1:-1;;;50959:84:0;;20562:2:1;50959:84:0::2;::::0;::::2;20544:21:1::0;20601:2;20581:18;;;20574:30;20640:34;20620:18;;;20613:62;-1:-1:-1;;;20691:18:1;;;20684:32;20733:19;;50959:84:0::2;20360:398:1::0;50959:84:0::2;51055:21;51079:18:::0;;;:11:::2;:18;::::0;;;;;;;;51108:10:::2;::::0;::::2;:29:::0;;;-1:-1:-1;;51108:29:0;::::2;;::::0;;;51182:10;;51154:67;;20961:25:1;;;21002:18;;;20995:45;;;;51108:29:0::2;51212:8:::0;21056:18:1;;;21049:45;51154:67:0;;-1:-1:-1;;;;;51182:10:0;;::::2;::::0;51154:67:::2;::::0;;;;20949:2:1;51154:67:0;;::::2;50948:281;43836:160:::1;43525:1;50837:392:::0;;:::o;51237:606::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;51298:5;;54770:20;;43403:50;;;;-1:-1:-1;;;43403:50:0;;;;;;;:::i;:::-;43472:20;43486:5;43472:13;:20::i;:::-;43464:50;;;;-1:-1:-1;;;43464:50:0;;19809:2:1;43464:50:0;;;19791:21:1;19848:2;19828:18;;;19821:30;-1:-1:-1;;;19867:18:1;;;19860:47;19924:18;;43464:50:0;19607:341:1;43464:50:0;1916:1:::1;2514:7;;:19:::0;2506:63:::1;;;;-1:-1:-1::0;;;2506:63:0::1;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;;;51353;;;:11:::2;:18;::::0;;;;51404:10;;-1:-1:-1;;;;;51404:10:0::2;51390;:24:::0;51382:63:::2;;;::::0;-1:-1:-1;;;51382:63:0;;21307:2:1;51382:63:0::2;::::0;::::2;21289:21:1::0;21346:2;21326:18;;;21319:30;21385:28;21365:18;;;21358:56;21431:18;;51382:63:0::2;21105:350:1::0;51382:63:0::2;51458:14;51475:11:::0;;;:4:::2;:11;::::0;;;;;;;51487:10:::2;51475:23:::0;;;;;;;;:35:::2;::::0;51501:9:::2;::::0;51475:35:::2;:::i;:::-;51458:52;;51521:17;51553:19;;51541:3;:9;;;:31;;;;:::i;:::-;51521:51;;51613:9;51601:3;:9;;;:21;;;;:::i;:::-;51591:6;:31;;51583:61;;;::::0;-1:-1:-1;;;51583:61:0;;21662:2:1;51583:61:0::2;::::0;::::2;21644:21:1::0;21701:2;21681:18;;;21674:30;-1:-1:-1;;;21720:18:1;;;21713:47;21777:18;;51583:61:0::2;21460:341:1::0;51583:61:0::2;51657:11;::::0;;;:4:::2;:11;::::0;;;;;;;51669:10:::2;51657:23:::0;;;;;;;:36;;51684:9:::2;::::0;51657:11;:36:::2;::::0;51684:9;;51657:36:::2;:::i;:::-;::::0;;;-1:-1:-1;;51706:20:0::2;::::0;;;:13:::2;:20;::::0;;;;:33;;-1:-1:-1;;;;;;51706:33:0::2;51729:10;51706:33;::::0;;;51764:9;::::2;::::0;:21:::2;::::0;51776:9;;51764:21:::2;:::i;:::-;51752:9;::::0;::::2;:33:::0;51803:32:::2;::::0;;16569:25:1;;;16625:2;16610:18;;16603:34;;;51816:10:0::2;::::0;51803:32:::2;::::0;16542:18:1;51803:32:0::2;;;;;;;-1:-1:-1::0;;1872:1:0::1;2826:7;:22:::0;-1:-1:-1;;;51237:606:0:o;48736:448::-;1916:1;2514:7;;:19;2506:63;;;;-1:-1:-1;;;2506:63:0;;;;;;;:::i;:::-;1916:1;2647:7;:18;;;54770:15;;;:11;:15;;;;;:20;;;;;48811:50:::1;;;;-1:-1:-1::0;;;48811:50:0::1;;;;;;;:::i;:::-;48880:16;48890:5;54618:4:::0;54642:15;;;:11;:15;;;;;:20;;;:37;:20;38677:1;54642:37;;54566:121;48880:16:::1;48872:59;;;::::0;-1:-1:-1;;;48872:59:0;;22008:2:1;48872:59:0::1;::::0;::::1;21990:21:1::0;22047:2;22027:18;;;22020:30;22086:32;22066:18;;;22059:60;22136:18;;48872:59:0::1;21806:354:1::0;48872:59:0::1;48952:19;48974:13:::0;;;:6:::1;:13;::::0;;;;;;;48988:10:::1;48974:25:::0;;;;;;;49018:12:::1;::::0;::::1;::::0;:29:::1;:12;38996:1;49018:29;49010:65;;;::::0;-1:-1:-1;;;49010:65:0;;22367:2:1;49010:65:0::1;::::0;::::1;22349:21:1::0;22406:2;22386:18;;;22379:30;-1:-1:-1;;;22425:18:1;;;22418:53;22488:18;;49010:65:0::1;22165:347:1::0;49010:65:0::1;49102:9;49086:5;:12;;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;49163:12:0;;49129:47:::1;::::0;49151:10:::1;::::0;49129:47:::1;::::0;::::1;::::0;49144:5;16569:25:1;;16625:2;16610:18;;16603:34;16557:2;16542:18;;16395:248;49129:47:0::1;;;;;;;;-1:-1:-1::0;;1872:1:0;2826:7;:22;48736:448::o;54390:168::-;54446:4;54642:15;;;:11;:15;;;;;:20;;;:37;:20;38677:1;54642:37;54483:67;;;;-1:-1:-1;54513:15:0;;;;:11;:15;;;;;:22;;;;;;:37;:22;38768:1;54513:37;54463:87;54390:168;-1:-1:-1;;54390:168:0:o;37600:103::-;36838:13;:11;:13::i;:::-;37665:30:::1;37692:1;37665:18;:30::i;:::-;37600:103::o:0;44240:213::-;36838:13;:11;:13::i;:::-;44350:16:::1;:36:::0;;;44402:43:::1;::::0;1699:25:1;;;44402:43:0::1;::::0;1687:2:1;1672:18;44402:43:0::1;;;;;;;;44240:213:::0;:::o;44004:228::-;36838:13;:11;:13::i;:::-;44120:19:::1;:42:::0;;;44207:16:::1;::::0;44178:46:::1;::::0;1699:25:1;;;44178:46:0::1;::::0;1687:2:1;1672:18;44178:46:0::1;1553:177:1::0;49728:1101:0;54746:4;54770:15;;;:11;:15;;;;;:20;;;49838:5;;54770:20;;43199:50;;;;-1:-1:-1;;;43199:50:0;;;;;;;:::i;:::-;43268:20;43282:5;43268:13;:20::i;:::-;43260:62;;;;-1:-1:-1;;;43260:62:0;;;;;;;:::i;:::-;43847:21:::1;43871:18:::0;;;:11:::1;:18;::::0;;;;43923:10;;43871:18;;;-1:-1:-1;;;;;43923:10:0::1;43909;:24;43901:75;;;;-1:-1:-1::0;;;43901:75:0::1;;;;;;;:::i;:::-;1916:1:::2;2514:7;;:19:::0;2506:63:::2;;;;-1:-1:-1::0;;;2506:63:0::2;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;;;49911;;;:11:::3;:18;::::0;;;;;;;49972:6:::3;:13:::0;;;;;-1:-1:-1;;;;;49972:22:0;::::3;::::0;;;;;;;;50013:11;;::::3;::::0;49911:18;;49972:22;50027:15:::3;-1:-1:-1::0;50005:63:0::3;;;::::0;-1:-1:-1;;;50005:63:0;;22719:2:1;50005:63:0::3;::::0;::::3;22701:21:1::0;22758:2;22738:18;;;22731:30;-1:-1:-1;;;22777:18:1;;;22770:51;22838:18;;50005:63:0::3;22517:345:1::0;50005:63:0::3;50087:12;::::0;::::3;::::0;:29:::3;:12;38996:1;50087:29;50079:65;;;::::0;-1:-1:-1;;;50079:65:0;;23069:2:1;50079:65:0::3;::::0;::::3;23051:21:1::0;23108:2;23088:18;;;23081:30;23147:25;23127:18;;;23120:53;23190:18;;50079:65:0::3;22867:347:1::0;50079:65:0::3;50186:18;::::0;;;:11:::3;:18;::::0;;;;:24:::3;::::0;::::3;:37:::0;50239:32;;;;50287:29;;;;50332:31;;;;;50379:10;;50157:266:::3;::::0;-1:-1:-1;;;;;50186:37:0;;::::3;::::0;50287:29:::3;::::0;;::::3;::::0;50332:31;50379:10:::3;50405:7:::0;50157:14:::3;:266::i;:::-;50478:16;::::0;50463:12;;50436:24:::3;::::0;50463:31:::3;::::0;::::3;:::i;:::-;50436:58;;50505:20;50543:16;50528:5;:12;;;:31;;;;:::i;:::-;50590:10:::0;;50505:54;;-1:-1:-1;50572:44:0::3;::::0;-1:-1:-1;;;;;50590:10:0::3;50505:54:::0;50572:9:::3;:44::i;:::-;50637:13;::::0;50627:42:::3;::::0;-1:-1:-1;;;;;50637:13:0::3;50652:16:::0;50627:9:::3;:42::i;:::-;50682:12;::::0;::::3;:29:::0;;-1:-1:-1;;50682:29:0::3;39043:1;50682:29;::::0;;50722:10:::3;::::0;::::3;:24:::0;;;-1:-1:-1;;50722:24:0;;::::3;;::::0;;50787:10;;50808:12;;50764:57:::3;::::0;-1:-1:-1;;;;;50764:57:0;;::::3;::::0;50787:10:::3;::::0;50764:57:::3;::::0;::::3;::::0;50780:5;16569:25:1;;16625:2;16610:18;;16603:34;16557:2;16542:18;;16395:248;50764:57:0::3;;;;;;;;-1:-1:-1::0;;1872:1:0::2;2826:7;:22:::0;-1:-1:-1;;;;;;;49728:1101:0:o;46761:294::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;46846:5;;54770:20;;43199:50;;;;-1:-1:-1;;;43199:50:0;;;;;;;:::i;:::-;43268:20;43282:5;43268:13;:20::i;:::-;43260:62;;;;-1:-1:-1;;;43260:62:0;;;;;;;:::i;:::-;43847:21:::1;43871:18:::0;;;:11:::1;:18;::::0;;;;43923:10;;43871:18;;;-1:-1:-1;;;;;43923:10:0::1;43909;:24;43901:75;;;;-1:-1:-1::0;;;43901:75:0::1;;;;;;;:::i;46318:435::-:0;54746:4;54770:15;;;:11;:15;;;;;:20;;;46425:5;;54770:20;;43199:50;;;;-1:-1:-1;;;43199:50:0;;;;;;;:::i;:::-;43268:20;43282:5;43268:13;:20::i;:::-;43260:62;;;;-1:-1:-1;;;43260:62:0;;;;;;;:::i;:::-;43847:21:::1;43871:18:::0;;;:11:::1;:18;::::0;;;;43923:10;;43871:18;;;-1:-1:-1;;;;;43923:10:0::1;43909;:24;43901:75;;;;-1:-1:-1::0;;;43901:75:0::1;;;;;;;:::i;:::-;46477:1:::2;46469:5;:9;46461:61;;;::::0;-1:-1:-1;;;46461:61:0;;23421:2:1;46461:61:0::2;::::0;::::2;23403:21:1::0;23460:2;23440:18;;;23433:30;23499:34;23479:18;;;23472:62;-1:-1:-1;;;23550:18:1;;;23543:37;23597:19;;46461:61:0::2;23219:403:1::0;46461:61:0::2;46532:21;46556:18:::0;;;:11:::2;:18;::::0;;;;;;;;46603:9:::2;::::0;::::2;::::0;;46622:17;;;;46649:12:::2;::::0;::::2;:20:::0;;;46717:10;;46686:59;;23829:25:1;;;23870:18;;;23863:34;;;23913:18;;;23906:34;;;46556:18:0;;46603:9;;-1:-1:-1;;;;;46717:10:0;;::::2;::::0;46686:59:::2;::::0;23817:2:1;23802:18;46686:59:0::2;;;;;;;46450:303;;43836:160:::1;43333:1;46318:435:::0;;;:::o;47063:929::-;54746:4;54770:15;;;:11;:15;;;;;:20;;;47139:5;;54770:20;;43199:50;;;;-1:-1:-1;;;43199:50:0;;;;;;;:::i;:::-;43268:20;43282:5;43268:13;:20::i;:::-;43260:62;;;;-1:-1:-1;;;43260:62:0;;;;;;;:::i;:::-;1916:1:::1;2514:7;;:19:::0;2506:63:::1;;;;-1:-1:-1::0;;;2506:63:0::1;;;;;;;:::i;:::-;1916:1;2647:7;:18:::0;;;47194;;;:11:::2;:18;::::0;;;;47244:9:::2;::::0;::::2;::::0;47231::::2;:22;;47223:61;;;::::0;-1:-1:-1;;;47223:61:0;;9991:2:1;47223:61:0::2;::::0;::::2;9973:21:1::0;10030:2;10010:18;;;10003:30;10069:28;10049:18;;;10042:56;10115:18;;47223:61:0::2;9789:350:1::0;47223:61:0::2;47317:10:::0;;-1:-1:-1;;;;;47317:10:0::2;47303;:24:::0;47295:61:::2;;;::::0;-1:-1:-1;;;47295:61:0;;24153:2:1;47295:61:0::2;::::0;::::2;24135:21:1::0;24192:2;24172:18;;;24165:30;24231:26;24211:18;;;24204:54;24275:18;;47295:61:0::2;23951:348:1::0;47295:61:0::2;47398:18;::::0;;;:11:::2;:18;::::0;;;;:24:::2;::::0;::::2;:37:::0;47451:32;;;;47499:29;;;;47544:31;;;;;47591:10;;47369:255:::2;::::0;-1:-1:-1;;;;;47398:37:0;;::::2;::::0;47499:29:::2;::::0;;::::2;::::0;47544:31;47591:10:::2;47603;47369:14;:255::i;:::-;47637:24;47676:16;;47664:3;:9;;;:28;;;;:::i;:::-;47637:55;;47703:20;47738:16;47726:3;:9;;;:28;;;;:::i;:::-;47785:10:::0;;47703:51;;-1:-1:-1;47767:44:0::2;::::0;-1:-1:-1;;;;;47785:10:0::2;47703:51:::0;47767:9:::2;:44::i;:::-;47832:13;::::0;47822:42:::2;::::0;-1:-1:-1;;;;;47832:13:0::2;47847:16:::0;47822:9:::2;:42::i;:::-;47877:10;::::0;::::2;:24:::0;;-1:-1:-1;;47877:24:0::2;::::0;::::2;::::0;;47931:10;;-1:-1:-1;47955:9:0;::::2;::::0;47966:17;;;;47919:65:::2;::::0;;16569:25:1;;;16625:2;16610:18;;16603:34;;;;47943:10:0::2;::::0;-1:-1:-1;;;;;47931:10:0::2;::::0;47919:65:::2;::::0;16542:18:1;47919:65:0::2;;;;;;;-1:-1:-1::0;;1872:1:0::1;2826:7;:22:::0;-1:-1:-1;;;47063:929:0:o;49192:528::-;1916:1;2514:7;;:19;2506:63;;;;-1:-1:-1;;;2506:63:0;;;;;;;:::i;:::-;1916:1;2647:7;:18;;;54770:15;;;:11;:15;;;;;:20;;;;;49283:50:::1;;;;-1:-1:-1::0;;;49283:50:0::1;;;;;;;:::i;:::-;49352:16;49362:5;54618:4:::0;54642:15;;;:11;:15;;;;;:20;;;:37;:20;38677:1;54642:37;;54566:121;49352:16:::1;49344:59;;;::::0;-1:-1:-1;;;49344:59:0;;22008:2:1;49344:59:0::1;::::0;::::1;21990:21:1::0;22047:2;22027:18;;;22020:30;22086:32;22066:18;;;22059:60;22136:18;;49344:59:0::1;21806:354:1::0;49344:59:0::1;49424:19;49446:13:::0;;;:6:::1;:13;::::0;;;;;;;49460:10:::1;49446:25:::0;;;;;;;49490:12:::1;::::0;::::1;::::0;:29:::1;:12;38996:1;49490:29;49482:65;;;::::0;-1:-1:-1;;;49482:65:0;;22367:2:1;49482:65:0::1;::::0;::::1;22349:21:1::0;22406:2;22386:18;;;22379:30;-1:-1:-1;;;22425:18:1;;;22418:53;22488:18;;49482:65:0::1;22165:347:1::0;49482:65:0::1;49558:44;49576:10;49589:5;:12;;;49558:9;:44::i;:::-;39091:1;49615:12:::0;;::::1;:30:::0;;-1:-1:-1;;49615:30:0::1;::::0;;::::1;::::0;;49699:12;;49663:49:::1;::::0;49687:10:::1;::::0;49663:49:::1;::::0;::::1;::::0;49680:5;16569:25:1;;16625:2;16610:18;;16603:34;16557:2;16542:18;;16395:248;37858:201:0;36838:13;:11;:13::i;:::-;-1:-1:-1;;;;;37947:22:0;::::1;37939:73;;;::::0;-1:-1:-1;;;37939:73:0;;24506:2:1;37939:73:0::1;::::0;::::1;24488:21:1::0;24545:2;24525:18;;;24518:30;24584:34;24564:18;;;24557:62;-1:-1:-1;;;24635:18:1;;;24628:36;24681:19;;37939:73:0::1;24304:402:1::0;37939:73:0::1;38023:28;38042:8;38023:18;:28::i;:::-;37858:201:::0;:::o;56055:443::-;-1:-1:-1;;56197:17:0;;56194:295;;56230:58;56257:12;56270:4;56276:2;56280:7;56230:26;:58::i;:::-;56194:295;;;-1:-1:-1;;56310:18:0;;56306:183;;56345:72;56377:12;56391:4;56397:2;56401:7;56410:6;56345:31;:72::i;56306:183::-;56055:443;;;;;;:::o;56506:347::-;56610:6;56620:1;56610:11;56606:50;;56506:347;;:::o;56606:50::-;-1:-1:-1;;;;;56674:16:0;;56666:58;;;;-1:-1:-1;;;56666:58:0;;24913:2:1;56666:58:0;;;24895:21:1;24952:2;24932:18;;;24925:30;24991:31;24971:18;;;24964:59;25040:18;;56666:58:0;24711:353:1;56666:58:0;56738:17;56761:2;-1:-1:-1;;;;;56761:7:0;56776:6;56761:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56737:50;;;56806:12;56798:45;;;;-1:-1:-1;;;56798:45:0;;25481:2:1;56798:45:0;;;25463:21:1;25520:2;25500:18;;;25493:30;-1:-1:-1;;;25539:18:1;;;25532:50;25599:18;;56798:45:0;25279:344:1;56798:45:0;56595:258;56506:347;;:::o;37117:132::-;37025:6;;-1:-1:-1;;;;;37025:6:0;35577:10;37181:23;37173:68;;;;-1:-1:-1;;;37173:68:0;;25830:2:1;37173:68:0;;;25812:21:1;;;25849:18;;;25842:30;25908:34;25888:18;;;25881:62;25960:18;;37173:68:0;25628:356:1;38219:191:0;38312:6;;;-1:-1:-1;;;;;38329:17:0;;;-1:-1:-1;;;;;;38329:17:0;;;;;;;38362:40;;38312:6;;;38329:17;38312:6;;38362:40;;38293:16;;38362:40;38282:128;38219:191;:::o;57371:407::-;57496:12;-1:-1:-1;;;;;57496:24:0;;57524:1;57496:29;57492:87;;57542:25;;-1:-1:-1;;;57542:25:0;;26191:2:1;57542:25:0;;;26173:21:1;26230:2;26210:18;;;26203:30;-1:-1:-1;;;26249:18:1;;;26242:44;26303:18;;57542:25:0;25989:338:1;57492:87:0;57627:57;;-1:-1:-1;;;;;26590:15:1;;;57627:57:0;;;26572:34:1;26642:15;;;26622:18;;;26615:43;26674:18;;;26667:34;;;57592:11:0;;57609:17;;;;26507:18:1;;57627:57:0;;;-1:-1:-1;;57627:57:0;;;;;;;;;;;;;;-1:-1:-1;;;;;57627:57:0;-1:-1:-1;;;57627:57:0;;;57609:76;;;57627:57;57609:76;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57591:94;;;57703:6;57698:73;;57726:33;;-1:-1:-1;;;57726:33:0;;27331:2:1;57726:33:0;;;27313:21:1;27370:2;27350:18;;;27343:30;-1:-1:-1;;;27389:18:1;;;27382:52;27451:18;;57726:33:0;27129:346:1;57698:73:0;57481:297;57371:407;;;;:::o;56861:502::-;57059:12;-1:-1:-1;;;;;57059:24:0;;57087:1;57059:29;57055:87;;57105:25;;-1:-1:-1;;;57105:25:0;;26191:2:1;57105:25:0;;;26173:21:1;26230:2;26210:18;;;26203:30;-1:-1:-1;;;26249:18:1;;;26242:44;26303:18;;57105:25:0;25989:338:1;57055:87:0;57190:74;;-1:-1:-1;;;;;27831:15:1;;;57190:74:0;;;27813:34:1;27883:15;;;27863:18;;;27856:43;27915:18;;;27908:34;;;27958:18;;;27951:34;;;27793:3;28001:19;;;27994:32;57155:11:0;28042:19:1;;;28035:30;;;57155:11:0;57172:17;;;;28082:19:1;;57190:74:0;;;-1:-1:-1;;57190:74:0;;;;;;;;;;;;;;-1:-1:-1;;;;;57190:74:0;-1:-1:-1;;;57190:74:0;;;57172:93;;;57190:74;57172:93;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57154:111;;;57283:6;57278:78;;57306:38;;-1:-1:-1;;;57306:38:0;;28314:2:1;57306:38:0;;;28296:21:1;28353:2;28333:18;;;28326:30;28392:29;28372:18;;;28365:57;28439:18;;57306:38:0;28112:351:1;14:286;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:1:o;497:248::-;565:6;573;626:2;614:9;605:7;601:23;597:32;594:52;;;642:1;639;632:12;594:52;-1:-1:-1;;665:23:1;;;735:2;720:18;;;707:32;;-1:-1:-1;497:248:1:o;750:180::-;809:6;862:2;850:9;841:7;837:23;833:32;830:52;;;878:1;875;868:12;830:52;-1:-1:-1;901:23:1;;750:180;-1:-1:-1;750:180:1:o;935:158::-;997:5;1042:3;1033:6;1028:3;1024:16;1020:26;1017:46;;;1059:1;1056;1049:12;1017:46;-1:-1:-1;1081:6:1;935:158;-1:-1:-1;935:158:1:o;1098:450::-;1213:6;1221;1229;1237;1290:3;1278:9;1269:7;1265:23;1261:33;1258:53;;;1307:1;1304;1297:12;1258:53;1330:56;1378:7;1367:9;1330:56;:::i;:::-;1320:66;1433:3;1418:19;;1405:33;;-1:-1:-1;1485:3:1;1470:19;;1457:33;;1537:3;1522:19;1509:33;;-1:-1:-1;1098:450:1;-1:-1:-1;;;1098:450:1:o;1735:131::-;-1:-1:-1;;;;;1810:31:1;;1800:42;;1790:70;;1856:1;1853;1846:12;1871:347;1922:8;1932:6;1986:3;1979:4;1971:6;1967:17;1963:27;1953:55;;2004:1;2001;1994:12;1953:55;-1:-1:-1;2027:20:1;;2070:18;2059:30;;2056:50;;;2102:1;2099;2092:12;2056:50;2139:4;2131:6;2127:17;2115:29;;2191:3;2184:4;2175:6;2167;2163:19;2159:30;2156:39;2153:59;;;2208:1;2205;2198:12;2153:59;1871:347;;;;;:::o;2223:754::-;2320:6;2328;2336;2344;2352;2405:3;2393:9;2384:7;2380:23;2376:33;2373:53;;;2422:1;2419;2412:12;2373:53;2461:9;2448:23;2480:31;2505:5;2480:31;:::i;:::-;2530:5;-1:-1:-1;2587:2:1;2572:18;;2559:32;2600:33;2559:32;2600:33;:::i;:::-;2652:7;-1:-1:-1;2706:2:1;2691:18;;2678:32;;-1:-1:-1;2761:2:1;2746:18;;2733:32;2788:18;2777:30;;2774:50;;;2820:1;2817;2810:12;2774:50;2859:58;2909:7;2900:6;2889:9;2885:22;2859:58;:::i;:::-;2223:754;;;;-1:-1:-1;2223:754:1;;-1:-1:-1;2936:8:1;;2833:84;2223:754;-1:-1:-1;;;2223:754:1:o;3189:379::-;3286:6;3294;3347:3;3335:9;3326:7;3322:23;3318:33;3315:53;;;3364:1;3361;3354:12;3315:53;3387:56;3435:7;3424:9;3387:56;:::i;:::-;3377:66;;3493:3;3482:9;3478:19;3465:33;3507:31;3532:5;3507:31;:::i;:::-;3557:5;3547:15;;;3189:379;;;;;:::o;3762:315::-;3830:6;3838;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;3943:9;3930:23;3920:33;;4003:2;3992:9;3988:18;3975:32;4016:31;4041:5;4016:31;:::i;4290:367::-;4353:8;4363:6;4417:3;4410:4;4402:6;4398:17;4394:27;4384:55;;4435:1;4432;4425:12;4384:55;-1:-1:-1;4458:20:1;;4501:18;4490:30;;4487:50;;;4533:1;4530;4523:12;4487:50;4570:4;4562:6;4558:17;4546:29;;4630:3;4623:4;4613:6;4610:1;4606:14;4598:6;4594:27;4590:38;4587:47;4584:67;;;4647:1;4644;4637:12;4662:1338;4822:6;4830;4838;4846;4854;4862;4870;4878;4931:3;4919:9;4910:7;4906:23;4902:33;4899:53;;;4948:1;4945;4938:12;4899:53;4987:9;4974:23;5006:31;5031:5;5006:31;:::i;:::-;5056:5;-1:-1:-1;5113:2:1;5098:18;;5085:32;5126:33;5085:32;5126:33;:::i;:::-;5178:7;-1:-1:-1;5236:2:1;5221:18;;5208:32;5259:18;5289:14;;;5286:34;;;5316:1;5313;5306:12;5286:34;5355:70;5417:7;5408:6;5397:9;5393:22;5355:70;:::i;:::-;5444:8;;-1:-1:-1;5329:96:1;-1:-1:-1;5532:2:1;5517:18;;5504:32;;-1:-1:-1;5548:16:1;;;5545:36;;;5577:1;5574;5567:12;5545:36;5616:72;5680:7;5669:8;5658:9;5654:24;5616:72;:::i;:::-;5707:8;;-1:-1:-1;5590:98:1;-1:-1:-1;5795:3:1;5780:19;;5767:33;;-1:-1:-1;5812:16:1;;;5809:36;;;5841:1;5838;5831:12;5809:36;;5880:60;5932:7;5921:8;5910:9;5906:24;5880:60;:::i;:::-;4662:1338;;;;-1:-1:-1;4662:1338:1;;-1:-1:-1;4662:1338:1;;;;;;5959:8;-1:-1:-1;;;4662:1338:1:o;7638:823::-;7744:6;7752;7760;7768;7776;7784;7837:3;7825:9;7816:7;7812:23;7808:33;7805:53;;;7854:1;7851;7844:12;7805:53;7893:9;7880:23;7912:31;7937:5;7912:31;:::i;:::-;7962:5;-1:-1:-1;8019:2:1;8004:18;;7991:32;8032:33;7991:32;8032:33;:::i;:::-;8084:7;-1:-1:-1;8138:2:1;8123:18;;8110:32;;-1:-1:-1;8189:2:1;8174:18;;8161:32;;-1:-1:-1;8244:3:1;8229:19;;8216:33;8272:18;8261:30;;8258:50;;;8304:1;8301;8294:12;8258:50;8343:58;8393:7;8384:6;8373:9;8369:22;8343:58;:::i;:::-;7638:823;;;;-1:-1:-1;7638:823:1;;-1:-1:-1;7638:823:1;;8420:8;;7638:823;-1:-1:-1;;;7638:823:1:o;8466:247::-;8525:6;8578:2;8566:9;8557:7;8553:23;8549:32;8546:52;;;8594:1;8591;8584:12;8546:52;8633:9;8620:23;8652:31;8677:5;8652:31;:::i;8718:348::-;8920:2;8902:21;;;8959:2;8939:18;;;8932:30;8998:26;8993:2;8978:18;;8971:54;9057:2;9042:18;;8718:348::o;9071:353::-;9273:2;9255:21;;;9312:2;9292:18;;;9285:30;9351:31;9346:2;9331:18;;9324:59;9415:2;9400:18;;9071:353::o;9429:355::-;9631:2;9613:21;;;9670:2;9650:18;;;9643:30;9709:33;9704:2;9689:18;;9682:61;9775:2;9760:18;;9429:355::o;10547:127::-;10608:10;10603:3;10599:20;10596:1;10589:31;10639:4;10636:1;10629:15;10663:4;10660:1;10653:15;10679:125;10744:9;;;10765:10;;;10762:36;;;10778:18;;:::i;11907:135::-;11946:3;11967:17;;;11964:43;;11987:18;;:::i;:::-;-1:-1:-1;12034:1:1;12023:13;;11907:135::o;12047:156::-;12113:20;;12173:4;12162:16;;12152:27;;12142:55;;12193:1;12190;12183:12;12142:55;12047:156;;;:::o;12208:808::-;12294:6;12347:3;12335:9;12326:7;12322:23;12318:33;12315:53;;;12364:1;12361;12354:12;12315:53;12397:2;12391:9;12439:3;12431:6;12427:16;12509:6;12497:10;12494:22;12473:18;12461:10;12458:34;12455:62;12452:185;;;12559:10;12554:3;12550:20;12547:1;12540:31;12594:4;12591:1;12584:15;12622:4;12619:1;12612:15;12452:185;12653:2;12646:22;12690:23;;12722:31;12690:23;12722:31;:::i;:::-;12777:5;12769:6;12762:21;;12844:2;12833:9;12829:18;12816:32;12811:2;12803:6;12799:15;12792:57;12910:2;12899:9;12895:18;12882:32;12877:2;12869:6;12865:15;12858:57;12948:36;12980:2;12969:9;12965:18;12948:36;:::i;:::-;12943:2;12931:15;;12924:61;12935:6;12208:808;-1:-1:-1;;;12208:808:1:o;13021:413::-;13121:5;13108:19;13136:33;13161:7;13136:33;:::i;:::-;-1:-1:-1;;;;;13190:33:1;13178:46;;13280:4;13269:16;;;13256:30;13240:14;;;13233:54;13343:4;13332:16;;;13319:30;13303:14;;;13296:54;13422:4;13386:34;13414:4;13403:16;;13386:34;:::i;:::-;13382:45;13375:4;13370:3;13366:14;13359:69;13021:413;;:::o;13439:479::-;13726:25;;;13713:3;13698:19;;13760:64;13820:2;13805:18;;13797:6;13760:64;:::i;:::-;13855:3;13840:19;;13833:35;;;;13899:3;13884:19;13877:35;13439:479;;-1:-1:-1;;13439:479:1:o;13923:623::-;14266:25;;;14253:3;14238:19;;14300:64;14360:2;14345:18;;14337:6;14300:64;:::i;:::-;14401:6;14395:3;14384:9;14380:19;14373:35;14445:6;14439:3;14428:9;14424:19;14417:35;14489:6;14483:3;14472:9;14468:19;14461:35;14533:6;14527:3;14516:9;14512:19;14505:35;13923:623;;;;;;;;;:::o;16648:182::-;16705:6;16758:2;16746:9;16737:7;16733:23;16729:32;16726:52;;;16774:1;16771;16764:12;16726:52;16797:27;16814:9;16797:27;:::i;16835:251::-;16905:6;16958:2;16946:9;16937:7;16933:23;16929:32;16926:52;;;16974:1;16971;16964:12;16926:52;17006:9;17000:16;17025:31;17050:5;17025:31;:::i;17400:277::-;17467:6;17520:2;17508:9;17499:7;17495:23;17491:32;17488:52;;;17536:1;17533;17526:12;17488:52;17568:9;17562:16;17621:5;17614:13;17607:21;17600:5;17597:32;17587:60;;17643:1;17640;17633:12;17961:184;18031:6;18084:2;18072:9;18063:7;18059:23;18055:32;18052:52;;;18100:1;18097;18090:12;18052:52;-1:-1:-1;18123:16:1;;17961:184;-1:-1:-1;17961:184:1:o;19252:217::-;19292:1;19318;19308:132;;19362:10;19357:3;19353:20;19350:1;19343:31;19397:4;19394:1;19387:15;19425:4;19422:1;19415:15;19308:132;-1:-1:-1;19454:9:1;;19252:217::o;19474:128::-;19541:9;;;19562:11;;;19559:37;;;19576:18;;:::i;19953:402::-;20155:2;20137:21;;;20194:2;20174:18;;;20167:30;20233:34;20228:2;20213:18;;20206:62;-1:-1:-1;;;20299:2:1;20284:18;;20277:36;20345:3;20330:19;;19953:402::o;26712:412::-;26841:3;26879:6;26873:13;26904:1;26914:129;26928:6;26925:1;26922:13;26914:129;;;27026:4;27010:14;;;27006:25;;27000:32;26987:11;;;26980:53;26943:12;26914:129;;;-1:-1:-1;27098:1:1;27062:16;;27087:13;;;-1:-1:-1;27062:16:1;26712:412;-1:-1:-1;26712:412:1:o
Swarm Source
ipfs://33703c8e9b0899e8059545617461a8ee537201cc77453fbc3dc38f6fb078a564
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,548.55 | 0.002 | $5.1 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.