Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 7 from a total of 7 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Open Auction | 14635332 | 1428 days ago | IN | 0 ETH | 0.00990066 | ||||
| Open Auction | 14634875 | 1428 days ago | IN | 0 ETH | 0.01289346 | ||||
| Open Auction | 14634808 | 1428 days ago | IN | 0 ETH | 0.00729167 | ||||
| Open Auction | 14634393 | 1428 days ago | IN | 0 ETH | 0.00822474 | ||||
| Open Auction | 14634049 | 1428 days ago | IN | 0 ETH | 0.00794364 | ||||
| Open Auction | 14634021 | 1428 days ago | IN | 0 ETH | 0.00763547 | ||||
| Update Trader | 14633686 | 1428 days ago | IN | 0 ETH | 0.00123065 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WhitelistAuction
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-04-17
*/
// File: @openzeppelin\contracts\token\ERC20\IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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);
}
// File: node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155.sol
// OpenZeppelin Contracts v4.4.1 (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 be 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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol
// 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: node_modules\@openzeppelin\contracts\token\ERC1155\extensions\IERC1155MetadataURI.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}
// File: node_modules\@openzeppelin\contracts\utils\Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: node_modules\@openzeppelin\contracts\utils\Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: node_modules\@openzeppelin\contracts\utils\introspection\ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin\contracts\token\ERC1155\ERC1155.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*/
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using Address for address;
// Mapping from token ID to account balances
mapping(uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;
/**
* @dev See {_setURI}.
*/
constructor(string memory uri_) {
_setURI(uri_);
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC1155).interfaceId ||
interfaceId == type(IERC1155MetadataURI).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*
* This implementation returns the same URI for *all* token types. It relies
* on the token type ID substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID.
*/
function uri(uint256) public view virtual override returns (string memory) {
return _uri;
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
require(account != address(0), "ERC1155: balance query for the zero address");
return _balances[id][account];
}
/**
* @dev See {IERC1155-balanceOfBatch}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
public
view
virtual
override
returns (uint256[] memory)
{
require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
batchBalances[i] = balanceOf(accounts[i], ids[i]);
}
return batchBalances;
}
/**
* @dev See {IERC1155-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC1155-isApprovedForAll}.
*/
function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
return _operatorApprovals[account][operator];
}
/**
* @dev See {IERC1155-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
_safeTransferFrom(from, to, id, amount, data);
}
/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) public virtual override {
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
_safeBatchTransferFrom(from, to, ids, amounts, data);
}
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `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 memory data
) internal virtual {
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
// unchecked {
_balances[id][from] = fromBalance - amount;
// }
_balances[id][to] += amount;
emit TransferSingle(operator, from, to, id, amount);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - 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[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
require(to != address(0), "ERC1155: transfer to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
uint256 amount = amounts[i];
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
// unchecked {
_balances[id][from] = fromBalance - amount;
// }
_balances[id][to] += amount;
}
emit TransferBatch(operator, from, to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
}
/**
* @dev Sets a new URI for all token types, by relying on the token type ID
* substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* By this mechanism, any occurrence of the `\{id\}` substring in either the
* URI or any of the amounts in the JSON file at said URI will be replaced by
* clients with the token type ID.
*
* For example, the `https://token-cdn-domain/\{id\}.json` URI would be
* interpreted by clients as
* `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
* for token type ID 0x4cce0.
*
* See {uri}.
*
* Because these URIs cannot be meaningfully represented by the {URI} event,
* this function emits no events.
*/
function _setURI(string memory newuri) internal virtual {
_uri = newuri;
}
/**
* @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _mint(
address to,
uint256 id,
uint256 amount,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);
_balances[id][to] += amount;
emit TransferSingle(operator, address(0), to, id, amount);
_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* 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 _mintBatch(
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; i++) {
_balances[ids[i]][to] += amounts[i];
}
emit TransferBatch(operator, address(0), to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `from`
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `from` must have at least `amount` tokens of token type `id`.
*/
function _burn(
address from,
uint256 id,
uint256 amount
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
// unchecked {
_balances[id][from] = fromBalance - amount;
// }
emit TransferSingle(operator, from, address(0), id, amount);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(
address from,
uint256[] memory ids,
uint256[] memory amounts
) internal virtual {
require(from != address(0), "ERC1155: burn from the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
for (uint256 i = 0; i < ids.length; i++) {
uint256 id = ids[i];
uint256 amount = amounts[i];
uint256 fromBalance = _balances[id][from];
require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
// unchecked {
_balances[id][from] = fromBalance - amount;
// }
}
emit TransferBatch(operator, from, address(0), ids, amounts);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits a {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC1155: setting approval status for self");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) internal virtual {}
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) private {
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
if (response != IERC1155Receiver.onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
) private {
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
bytes4 response
) {
if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
}
// File: @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol
// File: @openzeppelin\contracts\utils\math\SafeMath.sol
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
// }
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// unchecked {
if (b > a) return (false, 0);
return (true, a - b);
// }
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
// }
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
// }
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
// }
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
// unchecked {
require(b <= a, errorMessage);
return a - b;
// }
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
// unchecked {
require(b > 0, errorMessage);
return a / b;
// }
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
// unchecked {
require(b > 0, errorMessage);
return a % b;
// }
}
}
// File: @openzeppelin\contracts\access\Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts\WLAuction.sol
pragma solidity ^0.8.0;
contract WhitelistAuction is ERC1155, Ownable {
using SafeMath for uint256;
address public MODERATOR;
struct Auction {
address creator;
uint256 startTime; // start timestamp of an auction
uint256 endTime; // end timestamp of an auction
uint256 snapshotTime; // snapshot timestamp of an auction
uint256 fee;
uint256 claimed;
string ipfs;
IERC20 currency;
}
// CURRENT VERSION ACCESTS ONLY FOLLOWING 4 CURRENCIES
address[4] ACCPCETABLE_CURRENCY = [
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, //WBNB(TEST), WETH(RPDOCUT)
0xdAC17F958D2ee523a2206206994597C13D831ec7, //USDT
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, //USDC
0x882e5b370D595E50c24b2a0e7a94e87Cc32ADdA1 // GAME
];
uint256 private _nonce = 0;
mapping(uint256 => Auction) public auctions;
mapping(uint256 => mapping(address => bool)) public win_claimed;
mapping(address => bool) public traders;
event AuctionCreated(uint256 idx, string ipfs_url);
event AuctionClosed(uint256 idx);
event WinnerClaimed(uint256 idx, address user);
constructor(
address _moderator
) ERC1155("") {
MODERATOR = _moderator;
}
/**
Create a new Whitelist auction
*/
function openAuction(
uint256 _startTime,
uint256 _endTime,
uint256 _snapshotTime,
uint8 _currencyIdx,
string memory _ipfs
) external onlyTrader {
// TODO parameters value checking
require(
_startTime > block.timestamp &&
_startTime < _endTime &&
_endTime < _snapshotTime,
"invalid_time"
);
require(
_currencyIdx < ACCPCETABLE_CURRENCY.length,
"invalid_setting"
);
// register new auction
_nonce = _nonce + 1;
auctions[_nonce] = Auction(
msg.sender,
_startTime,
_endTime,
_snapshotTime,
0,
0,
_ipfs,
IERC20(ACCPCETABLE_CURRENCY[_currencyIdx])
);
emit AuctionCreated(_nonce, _ipfs);
}
function setModerator (address _moderator) external onlyOwner {
MODERATOR = _moderator;
}
function claimWinning (
uint256 _index,
uint256 _price,
bytes calldata signatureA,
bytes calldata signatureB
) external {
// prevent double claim
require(!win_claimed[_index][msg.sender], 'already_claimed');
// check aution status and restriction
Auction storage a = auctions[_index];
require(a.endTime < block.timestamp, 'aution_not_end');
bytes32 messageA = prefixed(keccak256(abi.encodePacked(
msg.sender,
_index,
_price
)));
bytes32 messageB = prefixed(keccak256(abi.encodePacked(
signatureA
)));
require(recoverSigner(messageA, signatureA) == msg.sender, 'client_not_signed');
require(recoverSigner(messageB, signatureB) == MODERATOR, 'moderator_not_signed');
// update auction state
a.claimed = a.claimed.add(1);
win_claimed[_index][msg.sender] = true;
// transfer payment
a.currency.transferFrom(msg.sender, a.creator, _price);
// mint new NFTs to contract itself
_mint( address(msg.sender), _index, 1, "");
emit WinnerClaimed(_index, msg.sender);
}
function prefixed(bytes32 hash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked(
'\x19Ethereum Signed Message:\n32',
hash
));
}
function recoverSigner(bytes32 message, bytes memory sig)
internal
pure
returns (address)
{
uint8 v;
bytes32 r;
bytes32 s;
(v, r, s) = splitSignature(sig);
return ecrecover(message, v, r, s);
}
function splitSignature(bytes memory sig)
internal
pure
returns (uint8, bytes32, bytes32)
{
require(sig.length == 65);
bytes32 r;
bytes32 s;
uint8 v;
assembly {
// first 32 bytes, after the length prefix
r := mload(add(sig, 32))
// second 32 bytes
s := mload(add(sig, 64))
// final byte (first byte of the next 32 bytes)
v := byte(0, mload(add(sig, 96)))
}
return (v, r, s);
}
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4) {
return bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"));
}
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4) {
return bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"));
}
function updateTrader(address _trader, bool _approved) external onlyOwner {
traders[_trader] = _approved;
}
function closeAuction(uint256 _auctionId) external {
Auction storage a = auctions[_auctionId];
require(a.creator == msg.sender, 'only_creator_can_cancel');
delete auctions[_auctionId];
emit AuctionClosed(_auctionId);
}
// updated uri function for NFT metadata
function uri(uint256 _id) public view virtual override returns (string memory) {
Auction storage a = auctions[_id];
if (a.creator == address(0)) {
return "";
}
return string(abi.encodePacked('ipfs://', a.ipfs));
}
modifier onlyTrader() {
require(traders[msg.sender] == true, "Not trader");
// Underscore is a special character only used inside
// a function modifier and it tells Solidity to
// execute the rest of the code.
_;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_moderator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"idx","type":"uint256"}],"name":"AuctionClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"idx","type":"uint256"},{"indexed":false,"internalType":"string","name":"ipfs_url","type":"string"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"idx","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"WinnerClaimed","type":"event"},{"inputs":[],"name":"MODERATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctions","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"snapshotTime","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"},{"internalType":"string","name":"ipfs","type":"string"},{"internalType":"contract IERC20","name":"currency","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"bytes","name":"signatureA","type":"bytes"},{"internalType":"bytes","name":"signatureB","type":"bytes"}],"name":"claimWinning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionId","type":"uint256"}],"name":"closeAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"},{"internalType":"uint256","name":"_snapshotTime","type":"uint256"},{"internalType":"uint8","name":"_currencyIdx","type":"uint8"},{"internalType":"string","name":"_ipfs","type":"string"}],"name":"openAuction","outputs":[],"stateMutability":"nonpayable","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_moderator","type":"address"}],"name":"setModerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"traders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"updateTrader","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"win_claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
61010060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2608090815273dac17f958d2ee523a2206206994597c13d831ec760a05273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860c05273882e5b370d595e50c24b2a0e7a94e87cc32adda160e0526200007790600590600462000164565b5060006009553480156200008a57600080fd5b5060405162002a1a38038062002a1a833981016040819052620000ad9162000255565b604080516020810190915260008152620000c781620000f9565b50620000d33362000112565b600480546001600160a01b0319166001600160a01b0392909216919091179055620002c4565b80516200010e906002906020840190620001c1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8260048101928215620001af579160200282015b82811115620001af57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000178565b50620001bd9291506200023e565b5090565b828054620001cf9062000287565b90600052602060002090601f016020900481019282620001f35760008555620001af565b82601f106200020e57805160ff1916838001178555620001af565b82800160010185558215620001af579182015b82811115620001af57825182559160200191906001019062000221565b5b80821115620001bd57600081556001016200023f565b6000602082840312156200026857600080fd5b81516001600160a01b03811681146200028057600080fd5b9392505050565b600181811c908216806200029c57607f821691505b60208210811415620002be57634e487b7160e01b600052602260045260246000fd5b50919050565b61274680620002d46000396000f3fe608060405234801561001057600080fd5b50600436106101405760003560e01c8063715018a6116100b8578063bc197c811161007c578063bc197c81146102fe578063e985e9c514610352578063f23a6e611461038e578063f242432a146103c7578063f2fde38b146103da578063fe18bff7146103ed57600080fd5b8063715018a61461029c57806375bba189146102a45780638da5cb5b146102b757806392a88fa2146102c8578063a22cb465146102eb57600080fd5b8063189556ec1161010a578063189556ec146101d6578063236ed8f3146102045780632eb2c2d61461021757806334b4e6251461022a5780634e1273f414610255578063571a26a01461027557600080fd5b8062f7db0c14610145578062fdd58e1461015a57806301ffc9a7146101805780630e89341c146101a357806313b02d23146101c3575b600080fd5b610158610153366004611eb9565b610400565b005b61016d610168366004611ef0565b61045e565b6040519081526020015b60405180910390f35b61019361018e366004612007565b6104f0565b6040519015158152602001610177565b6101b66101b1366004612041565b610542565b60405161017791906123f1565b6101586101d136600461207d565b6105a4565b6101936101e436600461205a565b600b60209081526000928352604080842090915290825290205460ff1681565b610158610212366004612041565b61095f565b610158610225366004611d35565b610a5c565b60045461023d906001600160a01b031681565b6040516001600160a01b039091168152602001610177565b610268610263366004611f1a565b610af3565b60405161017791906123b0565b610288610283366004612041565b610c1c565b604051610177989796959493929190612356565b610158610cfc565b6101586102b2366004611c2d565b610d32565b6003546001600160a01b031661023d565b6101936102d6366004611c2d565b600c6020526000908152604090205460ff1681565b6101586102f9366004611eb9565b610d7e565b61033961030c366004611c7b565b7fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f669414662198975050505050505050565b6040516001600160e01b03199091168152602001610177565b610193610360366004611c48565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61033961039c366004611dde565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf979695505050505050565b6101586103d5366004611e55565b610d8d565b6101586103e8366004611c2d565b610e14565b6101586103fb3660046120ed565b610eaf565b6003546001600160a01b031633146104335760405162461bcd60e51b815260040161042a906124db565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60006001600160a01b0383166104ca5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161042a565b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061052157506001600160e01b031982166303a24d0760e21b145b8061053c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600a602052604090208054606091906001600160a01b0316610579575050604080516020810190915260008152919050565b8060060160405160200161058d91906121fe565b604051602081830303815290604052915050919050565b6000868152600b6020908152604080832033845290915290205460ff16156106005760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e57d8db185a5b5959608a1b604482015260640161042a565b6000868152600a60205260409020600281015442116106525760405162461bcd60e51b815260206004820152600e60248201526d185d5d1a5bdb97db9bdd17d95b9960921b604482015260640161042a565b6040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018790526000906106e6906074015b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050600061070087876040516020016106869291906121ee565b9050336001600160a01b031661074c8389898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110f292505050565b6001600160a01b0316146107965760405162461bcd60e51b815260206004820152601160248201527018db1a595b9d17db9bdd17dcda59db9959607a1b604482015260640161042a565b600454604080516020601f88018190048102820181019092528681526001600160a01b03909216916107e59184919089908990819084018382808284376000920191909152506110f292505050565b6001600160a01b0316146108325760405162461bcd60e51b81526020600482015260146024820152731b5bd9195c985d1bdc97db9bdd17dcda59db995960621b604482015260640161042a565b6005830154610842906001611171565b60058401556000898152600b6020908152604080832033808552925291829020805460ff191660011790556007850154855492516323b872dd60e01b815260048101929092526001600160a01b039283166024830152604482018b905291909116906323b872dd90606401602060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190611fea565b5061091c338a600160405180602001604052806000815250611184565b604080518a81523360208201527fed1eba3863baacca567a3a707fe433cb3795babe317e89362468cea105a55e26910160405180910390a1505050505050505050565b6000818152600a6020526040902080546001600160a01b031633146109c65760405162461bcd60e51b815260206004820152601760248201527f6f6e6c795f63726561746f725f63616e5f63616e63656c000000000000000000604482015260640161042a565b6000828152600a6020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905590610a1360068301826119be565b5060070180546001600160a01b03191690556040518281527fac4a907ec29adcc56774b757ecb1e1b4d597374fc9386107d05e2670259df7d39060200160405180910390a15050565b6001600160a01b038516331480610a785750610a788533610360565b610adf5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161042a565b610aec858585858561128e565b5050505050565b60608151835114610b585760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161042a565b600083516001600160401b03811115610b7357610b73612631565b604051908082528060200260200182016040528015610b9c578160200160208202803683370190505b50905060005b8451811015610c1457610be7858281518110610bc057610bc061261b565b6020026020010151858381518110610bda57610bda61261b565b602002602001015161045e565b828281518110610bf957610bf961261b565b6020908102919091010152610c0d816125ea565b9050610ba2565b509392505050565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870180546001600160a01b039097169795969495939492939192610c6a90612583565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9690612583565b8015610ce35780601f10610cb857610100808354040283529160200191610ce3565b820191906000526020600020905b815481529060010190602001808311610cc657829003601f168201915b505050600790930154919250506001600160a01b031688565b6003546001600160a01b03163314610d265760405162461bcd60e51b815260040161042a906124db565b610d3060006114b6565b565b6003546001600160a01b03163314610d5c5760405162461bcd60e51b815260040161042a906124db565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d89338383611508565b5050565b6001600160a01b038516331480610da95750610da98533610360565b610e075760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161042a565b610aec85858585856115e9565b6003546001600160a01b03163314610e3e5760405162461bcd60e51b815260040161042a906124db565b6001600160a01b038116610ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042a565b610eac816114b6565b50565b336000908152600c602052604090205460ff161515600114610f005760405162461bcd60e51b815260206004820152600a6024820152692737ba103a3930b232b960b11b604482015260640161042a565b4285118015610f0e57508385105b8015610f1957508284105b610f545760405162461bcd60e51b815260206004820152600c60248201526b696e76616c69645f74696d6560a01b604482015260640161042a565b60048260ff1610610f995760405162461bcd60e51b815260206004820152600f60248201526e696e76616c69645f73657474696e6760881b604482015260640161042a565b600954610fa7906001612554565b600981905550604051806101000160405280336001600160a01b03168152602001868152602001858152602001848152602001600081526020016000815260200182815260200160058460ff16600481106110045761100461261b565b01546001600160a01b039081169091526009546000908152600a6020908152604091829020845181546001600160a01b0319169416939093178355838101516001840155908301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151805161108692600685019201906119f8565b5060e09190910151600790910180546001600160a01b0319166001600160a01b039092169190911790556009546040517f84dbbe572fcd8281f88fbf55359ad5039443609c2304288d3c8816dd3bb9fc21916110e3918490612510565b60405180910390a15050505050565b6000806000806111018561170f565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa15801561115c573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600061117d8284612554565b9392505050565b6001600160a01b0384166111e45760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161042a565b336111fe816000876111f58861173e565b610aec8861173e565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061122e908490612554565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610aec81600087878787611789565b81518351146112f05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161042a565b6001600160a01b0384166113165760405162461bcd60e51b815260040161042a9061244c565b3360005b84518110156114485760008582815181106113375761133761261b565b6020026020010151905060008583815181106113555761135561261b565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113a55760405162461bcd60e51b815260040161042a90612491565b6113af828261256c565b60008085815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055508160008085815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461142d9190612554565b9250508190555050505080611441906125ea565b905061131a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114989291906123c3565b60405180910390a46114ae8187878787876118f4565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561157c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161042a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661160f5760405162461bcd60e51b815260040161042a9061244c565b3361161f8187876111f58861173e565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156116605760405162461bcd60e51b815260040161042a90612491565b61166a848261256c565b6000868152602081815260408083206001600160a01b038c811685529252808320939093558816815290812080548692906116a6908490612554565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611706828888888888611789565b50505050505050565b6000806000835160411461172257600080fd5b5050506020810151604082015160609092015160001a92909190565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106117785761177861261b565b602090810291909101015292915050565b6001600160a01b0384163b156114ae5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117cd9089908990889088908890600401612311565b602060405180830381600087803b1580156117e757600080fd5b505af1925050508015611817575060408051601f3d908101601f1916820190925261181491810190612024565b60015b6118c457611823612647565b806308c379a0141561185d5750611838612663565b80611843575061185f565b8060405162461bcd60e51b815260040161042a91906123f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161042a565b6001600160e01b0319811663f23a6e6160e01b146117065760405162461bcd60e51b815260040161042a90612404565b6001600160a01b0384163b156114ae5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061193890899089908890889088906004016122b3565b602060405180830381600087803b15801561195257600080fd5b505af1925050508015611982575060408051601f3d908101601f1916820190925261197f91810190612024565b60015b61198e57611823612647565b6001600160e01b0319811663bc197c8160e01b146117065760405162461bcd60e51b815260040161042a90612404565b5080546119ca90612583565b6000825580601f106119da575050565b601f016020900490600052602060002090810190610eac9190611a7c565b828054611a0490612583565b90600052602060002090601f016020900481019282611a265760008555611a6c565b82601f10611a3f57805160ff1916838001178555611a6c565b82800160010185558215611a6c579182015b82811115611a6c578251825591602001919060010190611a51565b50611a78929150611a7c565b5090565b5b80821115611a785760008155600101611a7d565b60006001600160401b03831115611aaa57611aaa612631565b604051611ac1601f8501601f1916602001826125be565b809150838152848484011115611ad657600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611b0557600080fd5b919050565b60008083601f840112611b1c57600080fd5b5081356001600160401b03811115611b3357600080fd5b6020830191508360208260051b8501011115611b4e57600080fd5b9250929050565b600082601f830112611b6657600080fd5b81356020611b7382612531565b604051611b8082826125be565b8381528281019150858301600585901b87018401881015611ba057600080fd5b60005b85811015611bbf57813584529284019290840190600101611ba3565b5090979650505050505050565b60008083601f840112611bde57600080fd5b5081356001600160401b03811115611bf557600080fd5b602083019150836020828501011115611b4e57600080fd5b600082601f830112611c1e57600080fd5b61117d83833560208501611a91565b600060208284031215611c3f57600080fd5b61117d82611aee565b60008060408385031215611c5b57600080fd5b611c6483611aee565b9150611c7260208401611aee565b90509250929050565b60008060008060008060008060a0898b031215611c9757600080fd5b611ca089611aee565b9750611cae60208a01611aee565b965060408901356001600160401b0380821115611cca57600080fd5b611cd68c838d01611b0a565b909850965060608b0135915080821115611cef57600080fd5b611cfb8c838d01611b0a565b909650945060808b0135915080821115611d1457600080fd5b50611d218b828c01611bcc565b999c989b5096995094979396929594505050565b600080600080600060a08688031215611d4d57600080fd5b611d5686611aee565b9450611d6460208701611aee565b935060408601356001600160401b0380821115611d8057600080fd5b611d8c89838a01611b55565b94506060880135915080821115611da257600080fd5b611dae89838a01611b55565b93506080880135915080821115611dc457600080fd5b50611dd188828901611c0d565b9150509295509295909350565b60008060008060008060a08789031215611df757600080fd5b611e0087611aee565b9550611e0e60208801611aee565b9450604087013593506060870135925060808701356001600160401b03811115611e3757600080fd5b611e4389828a01611bcc565b979a9699509497509295939492505050565b600080600080600060a08688031215611e6d57600080fd5b611e7686611aee565b9450611e8460208701611aee565b9350604086013592506060860135915060808601356001600160401b03811115611ead57600080fd5b611dd188828901611c0d565b60008060408385031215611ecc57600080fd5b611ed583611aee565b91506020830135611ee5816126ec565b809150509250929050565b60008060408385031215611f0357600080fd5b611f0c83611aee565b946020939093013593505050565b60008060408385031215611f2d57600080fd5b82356001600160401b0380821115611f4457600080fd5b818501915085601f830112611f5857600080fd5b81356020611f6582612531565b604051611f7282826125be565b8381528281019150858301600585901b870184018b1015611f9257600080fd5b600096505b84871015611fbc57611fa881611aee565b835260019690960195918301918301611f97565b5096505086013592505080821115611fd357600080fd5b50611fe085828601611b55565b9150509250929050565b600060208284031215611ffc57600080fd5b815161117d816126ec565b60006020828403121561201957600080fd5b813561117d816126fa565b60006020828403121561203657600080fd5b815161117d816126fa565b60006020828403121561205357600080fd5b5035919050565b6000806040838503121561206d57600080fd5b82359150611c7260208401611aee565b6000806000806000806080878903121561209657600080fd5b863595506020870135945060408701356001600160401b03808211156120bb57600080fd5b6120c78a838b01611bcc565b909650945060608901359150808211156120e057600080fd5b50611e4389828a01611bcc565b600080600080600060a0868803121561210557600080fd5b853594506020860135935060408601359250606086013560ff8116811461212b57600080fd5b915060808601356001600160401b0381111561214657600080fd5b8601601f8101881361215757600080fd5b611dd188823560208401611a91565b600081518084526020808501945080840160005b838110156121965781518752958201959082019060010161217a565b509495945050505050565b6000815180845260005b818110156121c7576020818501810151868301820152016121ab565b818111156121d9576000602083870101525b50601f01601f19169290920160200192915050565b8183823760009101908152919050565b66697066733a2f2f60c81b8152600060076000845481600182811c91508083168061222a57607f831692505b602080841082141561224a57634e487b7160e01b86526022600452602486fd5b81801561225e5760018114612273576122a4565b60ff1986168a890152848a01880196506122a4565b60008b81526020902060005b8681101561229a5781548c82018b015290850190830161227f565b505087858b010196505b50949998505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122df90830186612166565b82810360608401526122f18186612166565b9050828103608084015261230581856121a1565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061234b908301846121a1565b979650505050505050565b600061010060018060a01b03808c1684528a60208501528960408501528860608501528760808501528660a08501528160c0850152612397828501876121a1565b925080851660e085015250509998505050505050505050565b60208152600061117d6020830184612166565b6040815260006123d66040830185612166565b82810360208401526123e88185612166565b95945050505050565b60208152600061117d60208301846121a1565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061252960408301846121a1565b949350505050565b60006001600160401b0382111561254a5761254a612631565b5060051b60200190565b6000821982111561256757612567612605565b500190565b60008282101561257e5761257e612605565b500390565b600181811c9082168061259757607f821691505b602082108114156125b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156125e3576125e3612631565b6040525050565b60006000198214156125fe576125fe612605565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126605760046000803e5060005160e01c5b90565b600060443d10156126715790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156126a057505050505090565b82850191508151818111156126b85750505050505090565b843d87010160208285010111156126d25750505050505090565b6126e1602082860101876125be565b509095945050505050565b8015158114610eac57600080fd5b6001600160e01b031981168114610eac57600080fdfea2646970667358221220c8b8c4923b352721dedb9e822f090d1ab63f08b45ba3682a226fc5e467908b5164736f6c634300080700330000000000000000000000005ba587a9927d5fac115cc0154045b29cb4df2839
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101405760003560e01c8063715018a6116100b8578063bc197c811161007c578063bc197c81146102fe578063e985e9c514610352578063f23a6e611461038e578063f242432a146103c7578063f2fde38b146103da578063fe18bff7146103ed57600080fd5b8063715018a61461029c57806375bba189146102a45780638da5cb5b146102b757806392a88fa2146102c8578063a22cb465146102eb57600080fd5b8063189556ec1161010a578063189556ec146101d6578063236ed8f3146102045780632eb2c2d61461021757806334b4e6251461022a5780634e1273f414610255578063571a26a01461027557600080fd5b8062f7db0c14610145578062fdd58e1461015a57806301ffc9a7146101805780630e89341c146101a357806313b02d23146101c3575b600080fd5b610158610153366004611eb9565b610400565b005b61016d610168366004611ef0565b61045e565b6040519081526020015b60405180910390f35b61019361018e366004612007565b6104f0565b6040519015158152602001610177565b6101b66101b1366004612041565b610542565b60405161017791906123f1565b6101586101d136600461207d565b6105a4565b6101936101e436600461205a565b600b60209081526000928352604080842090915290825290205460ff1681565b610158610212366004612041565b61095f565b610158610225366004611d35565b610a5c565b60045461023d906001600160a01b031681565b6040516001600160a01b039091168152602001610177565b610268610263366004611f1a565b610af3565b60405161017791906123b0565b610288610283366004612041565b610c1c565b604051610177989796959493929190612356565b610158610cfc565b6101586102b2366004611c2d565b610d32565b6003546001600160a01b031661023d565b6101936102d6366004611c2d565b600c6020526000908152604090205460ff1681565b6101586102f9366004611eb9565b610d7e565b61033961030c366004611c7b565b7fbc197c819b3e337a6f9652dd10becd7eef83032af3b9d958d3d42f669414662198975050505050505050565b6040516001600160e01b03199091168152602001610177565b610193610360366004611c48565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61033961039c366004611dde565b7ff23a6e612e1ff4830e658fe43f4e3cb4a5f8170bd5d9e69fb5d7a7fa9e4fdf979695505050505050565b6101586103d5366004611e55565b610d8d565b6101586103e8366004611c2d565b610e14565b6101586103fb3660046120ed565b610eaf565b6003546001600160a01b031633146104335760405162461bcd60e51b815260040161042a906124db565b60405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60006001600160a01b0383166104ca5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161042a565b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061052157506001600160e01b031982166303a24d0760e21b145b8061053c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600a602052604090208054606091906001600160a01b0316610579575050604080516020810190915260008152919050565b8060060160405160200161058d91906121fe565b604051602081830303815290604052915050919050565b6000868152600b6020908152604080832033845290915290205460ff16156106005760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e57d8db185a5b5959608a1b604482015260640161042a565b6000868152600a60205260409020600281015442116106525760405162461bcd60e51b815260206004820152600e60248201526d185d5d1a5bdb97db9bdd17d95b9960921b604482015260640161042a565b6040516bffffffffffffffffffffffff193360601b16602082015260348101889052605481018790526000906106e6906074015b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b9050600061070087876040516020016106869291906121ee565b9050336001600160a01b031661074c8389898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110f292505050565b6001600160a01b0316146107965760405162461bcd60e51b815260206004820152601160248201527018db1a595b9d17db9bdd17dcda59db9959607a1b604482015260640161042a565b600454604080516020601f88018190048102820181019092528681526001600160a01b03909216916107e59184919089908990819084018382808284376000920191909152506110f292505050565b6001600160a01b0316146108325760405162461bcd60e51b81526020600482015260146024820152731b5bd9195c985d1bdc97db9bdd17dcda59db995960621b604482015260640161042a565b6005830154610842906001611171565b60058401556000898152600b6020908152604080832033808552925291829020805460ff191660011790556007850154855492516323b872dd60e01b815260048101929092526001600160a01b039283166024830152604482018b905291909116906323b872dd90606401602060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190611fea565b5061091c338a600160405180602001604052806000815250611184565b604080518a81523360208201527fed1eba3863baacca567a3a707fe433cb3795babe317e89362468cea105a55e26910160405180910390a1505050505050505050565b6000818152600a6020526040902080546001600160a01b031633146109c65760405162461bcd60e51b815260206004820152601760248201527f6f6e6c795f63726561746f725f63616e5f63616e63656c000000000000000000604482015260640161042a565b6000828152600a6020526040812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905590610a1360068301826119be565b5060070180546001600160a01b03191690556040518281527fac4a907ec29adcc56774b757ecb1e1b4d597374fc9386107d05e2670259df7d39060200160405180910390a15050565b6001600160a01b038516331480610a785750610a788533610360565b610adf5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161042a565b610aec858585858561128e565b5050505050565b60608151835114610b585760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161042a565b600083516001600160401b03811115610b7357610b73612631565b604051908082528060200260200182016040528015610b9c578160200160208202803683370190505b50905060005b8451811015610c1457610be7858281518110610bc057610bc061261b565b6020026020010151858381518110610bda57610bda61261b565b602002602001015161045e565b828281518110610bf957610bf961261b565b6020908102919091010152610c0d816125ea565b9050610ba2565b509392505050565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870180546001600160a01b039097169795969495939492939192610c6a90612583565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9690612583565b8015610ce35780601f10610cb857610100808354040283529160200191610ce3565b820191906000526020600020905b815481529060010190602001808311610cc657829003601f168201915b505050600790930154919250506001600160a01b031688565b6003546001600160a01b03163314610d265760405162461bcd60e51b815260040161042a906124db565b610d3060006114b6565b565b6003546001600160a01b03163314610d5c5760405162461bcd60e51b815260040161042a906124db565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d89338383611508565b5050565b6001600160a01b038516331480610da95750610da98533610360565b610e075760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161042a565b610aec85858585856115e9565b6003546001600160a01b03163314610e3e5760405162461bcd60e51b815260040161042a906124db565b6001600160a01b038116610ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161042a565b610eac816114b6565b50565b336000908152600c602052604090205460ff161515600114610f005760405162461bcd60e51b815260206004820152600a6024820152692737ba103a3930b232b960b11b604482015260640161042a565b4285118015610f0e57508385105b8015610f1957508284105b610f545760405162461bcd60e51b815260206004820152600c60248201526b696e76616c69645f74696d6560a01b604482015260640161042a565b60048260ff1610610f995760405162461bcd60e51b815260206004820152600f60248201526e696e76616c69645f73657474696e6760881b604482015260640161042a565b600954610fa7906001612554565b600981905550604051806101000160405280336001600160a01b03168152602001868152602001858152602001848152602001600081526020016000815260200182815260200160058460ff16600481106110045761100461261b565b01546001600160a01b039081169091526009546000908152600a6020908152604091829020845181546001600160a01b0319169416939093178355838101516001840155908301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151805161108692600685019201906119f8565b5060e09190910151600790910180546001600160a01b0319166001600160a01b039092169190911790556009546040517f84dbbe572fcd8281f88fbf55359ad5039443609c2304288d3c8816dd3bb9fc21916110e3918490612510565b60405180910390a15050505050565b6000806000806111018561170f565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa15801561115c573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600061117d8284612554565b9392505050565b6001600160a01b0384166111e45760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161042a565b336111fe816000876111f58861173e565b610aec8861173e565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061122e908490612554565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610aec81600087878787611789565b81518351146112f05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161042a565b6001600160a01b0384166113165760405162461bcd60e51b815260040161042a9061244c565b3360005b84518110156114485760008582815181106113375761133761261b565b6020026020010151905060008583815181106113555761135561261b565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113a55760405162461bcd60e51b815260040161042a90612491565b6113af828261256c565b60008085815260200190815260200160002060008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055508160008085815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461142d9190612554565b9250508190555050505080611441906125ea565b905061131a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114989291906123c3565b60405180910390a46114ae8187878787876118f4565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561157c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161042a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661160f5760405162461bcd60e51b815260040161042a9061244c565b3361161f8187876111f58861173e565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156116605760405162461bcd60e51b815260040161042a90612491565b61166a848261256c565b6000868152602081815260408083206001600160a01b038c811685529252808320939093558816815290812080548692906116a6908490612554565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611706828888888888611789565b50505050505050565b6000806000835160411461172257600080fd5b5050506020810151604082015160609092015160001a92909190565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106117785761177861261b565b602090810291909101015292915050565b6001600160a01b0384163b156114ae5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117cd9089908990889088908890600401612311565b602060405180830381600087803b1580156117e757600080fd5b505af1925050508015611817575060408051601f3d908101601f1916820190925261181491810190612024565b60015b6118c457611823612647565b806308c379a0141561185d5750611838612663565b80611843575061185f565b8060405162461bcd60e51b815260040161042a91906123f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161042a565b6001600160e01b0319811663f23a6e6160e01b146117065760405162461bcd60e51b815260040161042a90612404565b6001600160a01b0384163b156114ae5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061193890899089908890889088906004016122b3565b602060405180830381600087803b15801561195257600080fd5b505af1925050508015611982575060408051601f3d908101601f1916820190925261197f91810190612024565b60015b61198e57611823612647565b6001600160e01b0319811663bc197c8160e01b146117065760405162461bcd60e51b815260040161042a90612404565b5080546119ca90612583565b6000825580601f106119da575050565b601f016020900490600052602060002090810190610eac9190611a7c565b828054611a0490612583565b90600052602060002090601f016020900481019282611a265760008555611a6c565b82601f10611a3f57805160ff1916838001178555611a6c565b82800160010185558215611a6c579182015b82811115611a6c578251825591602001919060010190611a51565b50611a78929150611a7c565b5090565b5b80821115611a785760008155600101611a7d565b60006001600160401b03831115611aaa57611aaa612631565b604051611ac1601f8501601f1916602001826125be565b809150838152848484011115611ad657600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611b0557600080fd5b919050565b60008083601f840112611b1c57600080fd5b5081356001600160401b03811115611b3357600080fd5b6020830191508360208260051b8501011115611b4e57600080fd5b9250929050565b600082601f830112611b6657600080fd5b81356020611b7382612531565b604051611b8082826125be565b8381528281019150858301600585901b87018401881015611ba057600080fd5b60005b85811015611bbf57813584529284019290840190600101611ba3565b5090979650505050505050565b60008083601f840112611bde57600080fd5b5081356001600160401b03811115611bf557600080fd5b602083019150836020828501011115611b4e57600080fd5b600082601f830112611c1e57600080fd5b61117d83833560208501611a91565b600060208284031215611c3f57600080fd5b61117d82611aee565b60008060408385031215611c5b57600080fd5b611c6483611aee565b9150611c7260208401611aee565b90509250929050565b60008060008060008060008060a0898b031215611c9757600080fd5b611ca089611aee565b9750611cae60208a01611aee565b965060408901356001600160401b0380821115611cca57600080fd5b611cd68c838d01611b0a565b909850965060608b0135915080821115611cef57600080fd5b611cfb8c838d01611b0a565b909650945060808b0135915080821115611d1457600080fd5b50611d218b828c01611bcc565b999c989b5096995094979396929594505050565b600080600080600060a08688031215611d4d57600080fd5b611d5686611aee565b9450611d6460208701611aee565b935060408601356001600160401b0380821115611d8057600080fd5b611d8c89838a01611b55565b94506060880135915080821115611da257600080fd5b611dae89838a01611b55565b93506080880135915080821115611dc457600080fd5b50611dd188828901611c0d565b9150509295509295909350565b60008060008060008060a08789031215611df757600080fd5b611e0087611aee565b9550611e0e60208801611aee565b9450604087013593506060870135925060808701356001600160401b03811115611e3757600080fd5b611e4389828a01611bcc565b979a9699509497509295939492505050565b600080600080600060a08688031215611e6d57600080fd5b611e7686611aee565b9450611e8460208701611aee565b9350604086013592506060860135915060808601356001600160401b03811115611ead57600080fd5b611dd188828901611c0d565b60008060408385031215611ecc57600080fd5b611ed583611aee565b91506020830135611ee5816126ec565b809150509250929050565b60008060408385031215611f0357600080fd5b611f0c83611aee565b946020939093013593505050565b60008060408385031215611f2d57600080fd5b82356001600160401b0380821115611f4457600080fd5b818501915085601f830112611f5857600080fd5b81356020611f6582612531565b604051611f7282826125be565b8381528281019150858301600585901b870184018b1015611f9257600080fd5b600096505b84871015611fbc57611fa881611aee565b835260019690960195918301918301611f97565b5096505086013592505080821115611fd357600080fd5b50611fe085828601611b55565b9150509250929050565b600060208284031215611ffc57600080fd5b815161117d816126ec565b60006020828403121561201957600080fd5b813561117d816126fa565b60006020828403121561203657600080fd5b815161117d816126fa565b60006020828403121561205357600080fd5b5035919050565b6000806040838503121561206d57600080fd5b82359150611c7260208401611aee565b6000806000806000806080878903121561209657600080fd5b863595506020870135945060408701356001600160401b03808211156120bb57600080fd5b6120c78a838b01611bcc565b909650945060608901359150808211156120e057600080fd5b50611e4389828a01611bcc565b600080600080600060a0868803121561210557600080fd5b853594506020860135935060408601359250606086013560ff8116811461212b57600080fd5b915060808601356001600160401b0381111561214657600080fd5b8601601f8101881361215757600080fd5b611dd188823560208401611a91565b600081518084526020808501945080840160005b838110156121965781518752958201959082019060010161217a565b509495945050505050565b6000815180845260005b818110156121c7576020818501810151868301820152016121ab565b818111156121d9576000602083870101525b50601f01601f19169290920160200192915050565b8183823760009101908152919050565b66697066733a2f2f60c81b8152600060076000845481600182811c91508083168061222a57607f831692505b602080841082141561224a57634e487b7160e01b86526022600452602486fd5b81801561225e5760018114612273576122a4565b60ff1986168a890152848a01880196506122a4565b60008b81526020902060005b8681101561229a5781548c82018b015290850190830161227f565b505087858b010196505b50949998505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122df90830186612166565b82810360608401526122f18186612166565b9050828103608084015261230581856121a1565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061234b908301846121a1565b979650505050505050565b600061010060018060a01b03808c1684528a60208501528960408501528860608501528760808501528660a08501528160c0850152612397828501876121a1565b925080851660e085015250509998505050505050505050565b60208152600061117d6020830184612166565b6040815260006123d66040830185612166565b82810360208401526123e88185612166565b95945050505050565b60208152600061117d60208301846121a1565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061252960408301846121a1565b949350505050565b60006001600160401b0382111561254a5761254a612631565b5060051b60200190565b6000821982111561256757612567612605565b500190565b60008282101561257e5761257e612605565b500390565b600181811c9082168061259757607f821691505b602082108114156125b857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156125e3576125e3612631565b6040525050565b60006000198214156125fe576125fe612605565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126605760046000803e5060005160e01c5b90565b600060443d10156126715790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156126a057505050505090565b82850191508151818111156126b85750505050505090565b843d87010160208285010111156126d25750505050505090565b6126e1602082860101876125be565b509095945050505050565b8015158114610eac57600080fd5b6001600160e01b031981168114610eac57600080fdfea2646970667358221220c8b8c4923b352721dedb9e822f090d1ab63f08b45ba3682a226fc5e467908b5164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005ba587a9927d5fac115cc0154045b29cb4df2839
-----Decoded View---------------
Arg [0] : _moderator (address): 0x5Ba587a9927d5fAC115CC0154045B29CB4Df2839
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005ba587a9927d5fac115cc0154045b29cb4df2839
Deployed Bytecode Sourcemap
47118:5708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51914:116;;;;;;:::i;:::-;;:::i;:::-;;23848:231;;;;;;:::i;:::-;;:::i;:::-;;;26948:25:1;;;26936:2;26921:18;23848:231:0;;;;;;;;22871:310;;;;;;:::i;:::-;;:::i;:::-;;;17896:14:1;;17889:22;17871:41;;17859:2;17844:18;22871:310:0;17731:187:1;52331:243:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49260:1124::-;;;;;;:::i;:::-;;:::i;47975:63::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;52036:245;;;;;;:::i;:::-;;:::i;25787:442::-;;;;;;:::i;:::-;;:::i;47202:24::-;;;;;-1:-1:-1;;;;;47202:24:0;;;;;;-1:-1:-1;;;;;14359:32:1;;;14341:51;;14329:2;14314:18;47202:24:0;14195:203:1;24245:524:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47926:43::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;46238:103::-;;;:::i;49157:97::-;;;;;;:::i;:::-;;:::i;45587:87::-;45660:6;;-1:-1:-1;;;;;45660:6:0;45587:87;;48043:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24842:155;;;;;;:::i;:::-;;:::i;51596:312::-;;;;;;:::i;:::-;51823:78;51596:312;;;;;;;;;;;;;;-1:-1:-1;;;;;;18488:33:1;;;18470:52;;18458:2;18443:18;51596:312:0;18326:202:1;25069:168:0;;;;;;:::i;:::-;-1:-1:-1;;;;;25192:27:0;;;25168:4;25192:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;25069:168;51328:262;;;;;;:::i;:::-;51514:69;51328:262;;;;;;;;;25309:401;;;;;;:::i;:::-;;:::i;46496:201::-;;;;;;:::i;:::-;;:::i;48379:772::-;;;;;;:::i;:::-;;:::i;51914:116::-;45660:6;;-1:-1:-1;;;;;45660:6:0;20618:10;45807:23;45799:68;;;;-1:-1:-1;;;45799:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;51996:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:28;;-1:-1:-1;;51996:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51914:116::o;23848:231::-;23934:7;-1:-1:-1;;;;;23962:21:0;;23954:77;;;;-1:-1:-1;;;23954:77:0;;20132:2:1;23954:77:0;;;20114:21:1;20171:2;20151:18;;;20144:30;20210:34;20190:18;;;20183:62;-1:-1:-1;;;20261:18:1;;;20254:41;20312:19;;23954:77:0;19930:407:1;23954:77:0;-1:-1:-1;24049:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24049:22:0;;;;;;;;;;;;23848:231::o;22871:310::-;22973:4;-1:-1:-1;;;;;;23010:41:0;;-1:-1:-1;;;23010:41:0;;:110;;-1:-1:-1;;;;;;;23068:52:0;;-1:-1:-1;;;23068:52:0;23010:110;:163;;;-1:-1:-1;;;;;;;;;;21739:40:0;;;23137:36;22990:183;22871:310;-1:-1:-1;;22871:310:0:o;52331:243::-;52417:17;52437:13;;;:8;:13;;;;;52461:9;;52395:13;;52437;-1:-1:-1;;;;;52461:9:0;52457:55;;-1:-1:-1;;52495:9:0;;;;;;;;;-1:-1:-1;52495:9:0;;;52331:243;-1:-1:-1;52331:243:0:o;52457:55::-;52560:1;:6;;52532:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;52518:50;;;52331:243;;;:::o;49260:1124::-;49448:19;;;;:11;:19;;;;;;;;49468:10;49448:31;;;;;;;;;;49447:32;49439:60;;;;-1:-1:-1;;;49439:60:0;;26660:2:1;49439:60:0;;;26642:21:1;26699:2;26679:18;;;26672:30;-1:-1:-1;;;26718:18:1;;;26711:45;26773:18;;49439:60:0;26458:339:1;49439:60:0;49552:17;49572:16;;;:8;:16;;;;;49603:9;;;;49615:15;-1:-1:-1;49595:54:0;;;;-1:-1:-1;;;49595:54:0;;19789:2:1;49595:54:0;;;19771:21:1;19828:2;19808:18;;;19801:30;-1:-1:-1;;;19847:18:1;;;19840:44;19901:18;;49595:54:0;19587:338:1;49595:54:0;49696:74;;-1:-1:-1;;49721:10:0;12083:2:1;12079:15;12075:53;49696:74:0;;;12063:66:1;12145:12;;;12138:28;;;12182:12;;;12175:28;;;49658:16:0;;49677:95;;12219:12:1;;49696:74:0;;;;-1:-1:-1;;49696:74:0;;;;;;;;;49686:85;;49696:74;49686:85;;;;12760:66:1;50478:80:0;;;12748:79:1;12843:12;;;;12836:28;;;;50478:80:0;;;;;;;;;;12880:12:1;;;;50478:80:0;;;50468:91;;;;;;50390:175;49677:95;49658:114;;49781:16;49800:63;49844:10;;49819:42;;;;;;;;;:::i;49800:63::-;49781:82;;49919:10;-1:-1:-1;;;;;49880:49:0;:35;49894:8;49904:10;;49880:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49880:13:0;;-1:-1:-1;;;49880:35:0:i;:::-;-1:-1:-1;;;;;49880:49:0;;49872:79;;;;-1:-1:-1;;;49872:79:0;;24344:2:1;49872:79:0;;;24326:21:1;24383:2;24363:18;;;24356:30;-1:-1:-1;;;24402:18:1;;;24395:47;24459:18;;49872:79:0;24142:341:1;49872:79:0;50005:9;;49966:35;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50005:9:0;;;;49966:35;;49980:8;;49966:35;49990:10;;;;;;49966:35;;49990:10;;;;49966:35;;;;;;;;;-1:-1:-1;49966:13:0;;-1:-1:-1;;;49966:35:0:i;:::-;-1:-1:-1;;;;;49966:48:0;;49958:81;;;;-1:-1:-1;;;49958:81:0;;20951:2:1;49958:81:0;;;20933:21:1;20990:2;20970:18;;;20963:30;-1:-1:-1;;;21009:18:1;;;21002:50;21069:18;;49958:81:0;20749:344:1;49958:81:0;50089:9;;;;:16;;50103:1;50089:13;:16::i;:::-;50077:9;;;:28;50114:19;;;;:11;:19;;;;;;;;50134:10;50114:31;;;;;;;;;:38;;-1:-1:-1;;50114:38:0;50148:4;50114:38;;;50187:10;;;;50223:9;;50187:54;;-1:-1:-1;;;50187:54:0;;;;;15474:34:1;;;;-1:-1:-1;;;;;50223:9:0;;;15524:18:1;;;15517:43;15576:18;;;15569:34;;;50187:10:0;;;;;:23;;15409:18:1;;50187:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50289:42;50304:10;50317:6;50325:1;50289:42;;;;;;;;;;;;:5;:42::i;:::-;50345:33;;;27158:25:1;;;50367:10:0;27214:2:1;27199:18;;27192:60;50345:33:0;;27131:18:1;50345:33:0;;;;;;;49403:981;;;49260:1124;;;;;;:::o;52036:245::-;52094:17;52114:20;;;:8;:20;;;;;52149:9;;-1:-1:-1;;;;;52149:9:0;52162:10;52149:23;52141:59;;;;-1:-1:-1;;;52141:59:0;;22054:2:1;52141:59:0;;;22036:21:1;22093:2;22073:18;;;22066:30;22132:25;22112:18;;;22105:53;22175:18;;52141:59:0;21852:347:1;52141:59:0;52216:20;;;;:8;:20;;;;;52209:27;;-1:-1:-1;;;;;;52209:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52216:20;52209:27;;;;52216:20;52209:27;:::i;:::-;-1:-1:-1;52209:27:0;;;;-1:-1:-1;;;;;;52209:27:0;;;52250:25;;26948::1;;;52250::0;;26936:2:1;26921:18;52250:25:0;;;;;;;52087:194;52036:245;:::o;25787:442::-;-1:-1:-1;;;;;26020:20:0;;20618:10;26020:20;;:60;;-1:-1:-1;26044:36:0;26061:4;20618:10;25069:168;:::i;26044:36::-;25998:160;;;;-1:-1:-1;;;25998:160:0;;22812:2:1;25998:160:0;;;22794:21:1;22851:2;22831:18;;;22824:30;22890:34;22870:18;;;22863:62;-1:-1:-1;;;22941:18:1;;;22934:48;22999:19;;25998:160:0;22610:414:1;25998:160:0;26169:52;26192:4;26198:2;26202:3;26207:7;26216:4;26169:22;:52::i;:::-;25787:442;;;;;:::o;24245:524::-;24401:16;24462:3;:10;24443:8;:15;:29;24435:83;;;;-1:-1:-1;;;24435:83:0;;25439:2:1;24435:83:0;;;25421:21:1;25478:2;25458:18;;;25451:30;25517:34;25497:18;;;25490:62;-1:-1:-1;;;25568:18:1;;;25561:39;25617:19;;24435:83:0;25237:405:1;24435:83:0;24531:30;24578:8;:15;-1:-1:-1;;;;;24564:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24564:30:0;;24531:63;;24612:9;24607:122;24631:8;:15;24627:1;:19;24607:122;;;24687:30;24697:8;24706:1;24697:11;;;;;;;;:::i;:::-;;;;;;;24710:3;24714:1;24710:6;;;;;;;;:::i;:::-;;;;;;;24687:9;:30::i;:::-;24668:13;24682:1;24668:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24648:3;;;:::i;:::-;;;24607:122;;;-1:-1:-1;24748:13:0;24245:524;-1:-1:-1;;;24245:524:0:o;47926:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47926:43:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;47926:43:0;;;;;;;-1:-1:-1;;;;;;;47926:43:0;;:::o;46238:103::-;45660:6;;-1:-1:-1;;;;;45660:6:0;20618:10;45807:23;45799:68;;;;-1:-1:-1;;;45799:68:0;;;;;;;:::i;:::-;46303:30:::1;46330:1;46303:18;:30::i;:::-;46238:103::o:0;49157:97::-;45660:6;;-1:-1:-1;;;;;45660:6:0;20618:10;45807:23;45799:68;;;;-1:-1:-1;;;45799:68:0;;;;;;;:::i;:::-;49226:9:::1;:22:::0;;-1:-1:-1;;;;;;49226:22:0::1;-1:-1:-1::0;;;;;49226:22:0;;;::::1;::::0;;;::::1;::::0;;49157:97::o;24842:155::-;24937:52;20618:10;24970:8;24980;24937:18;:52::i;:::-;24842:155;;:::o;25309:401::-;-1:-1:-1;;;;;25517:20:0;;20618:10;25517:20;;:60;;-1:-1:-1;25541:36:0;25558:4;20618:10;25069:168;:::i;25541:36::-;25495:151;;;;-1:-1:-1;;;25495:151:0;;21300:2:1;25495:151:0;;;21282:21:1;21339:2;21319:18;;;21312:30;21378:34;21358:18;;;21351:62;-1:-1:-1;;;21429:18:1;;;21422:39;21478:19;;25495:151:0;21098:405:1;25495:151:0;25657:45;25675:4;25681:2;25685;25689:6;25697:4;25657:17;:45::i;46496:201::-;45660:6;;-1:-1:-1;;;;;45660:6:0;20618:10;45807:23;45799:68;;;;-1:-1:-1;;;45799:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46585:22:0;::::1;46577:73;;;::::0;-1:-1:-1;;;46577:73:0;;20544:2:1;46577:73:0::1;::::0;::::1;20526:21:1::0;20583:2;20563:18;;;20556:30;20622:34;20602:18;;;20595:62;-1:-1:-1;;;20673:18:1;;;20666:36;20719:19;;46577:73:0::1;20342:402:1::0;46577:73:0::1;46661:28;46680:8;46661:18;:28::i;:::-;46496:201:::0;:::o;48379:772::-;52625:10;52617:19;;;;:7;:19;;;;;;;;:27;;:19;:27;52609:50;;;;-1:-1:-1;;;52609:50:0;;24690:2:1;52609:50:0;;;24672:21:1;24729:2;24709:18;;;24702:30;-1:-1:-1;;;24748:18:1;;;24741:40;24798:18;;52609:50:0;24488:334:1;52609:50:0;48629:15:::1;48616:10;:28;:60;;;;;48668:8;48655:10;:21;48616:60;:95;;;;;48698:13;48687:8;:24;48616:95;48600:142;;;::::0;-1:-1:-1;;;48600:142:0;;24003:2:1;48600:142:0::1;::::0;::::1;23985:21:1::0;24042:2;24022:18;;;24015:30;-1:-1:-1;;;24061:18:1;;;24054:42;24113:18;;48600:142:0::1;23801:336:1::0;48600:142:0::1;48782:27;48767:12;:42;;;48751:92;;;::::0;-1:-1:-1;;;48751:92:0;;21710:2:1;48751:92:0::1;::::0;::::1;21692:21:1::0;21749:2;21729:18;;;21722:30;-1:-1:-1;;;21768:18:1;;;21761:45;21823:18;;48751:92:0::1;21508:339:1::0;48751:92:0::1;48890:6;::::0;:10:::1;::::0;48899:1:::1;48890:10;:::i;:::-;48881:6;:19;;;;48926:176;;;;;;;;48942:10;-1:-1:-1::0;;;;;48926:176:0::1;;;;;48961:10;48926:176;;;;48980:8;48926:176;;;;48997:13;48926:176;;;;49019:1;48926:176;;;;49029:1;48926:176;;;;49039:5;48926:176;;;;49060:20;49081:12;49060:34;;;;;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;49060:34:0;;::::1;48926:176:::0;;;48916:6:::1;::::0;49060:34:::1;48907:16:::0;;;:8:::1;:16;::::0;;;;;;;;:195;;;;-1:-1:-1;;;;;;48907:195:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;-1:-1:-1;48907:195:0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;48907:195:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;48907:195:0::1;-1:-1:-1::0;;;;;48907:195:0;;::::1;::::0;;;::::1;::::0;;49131:6:::1;::::0;49116:29:::1;::::0;::::1;::::0;::::1;::::0;49139:5;;49116:29:::1;:::i;:::-;;;;;;;;48379:772:::0;;;;;:::o;50571:247::-;50667:7;50686;50700:9;50716;50748:19;50763:3;50748:14;:19::i;:::-;50785:27;;;;;;;;;;;;18150:25:1;;;18223:4;18211:17;;18191:18;;;18184:45;;;;18245:18;;;18238:34;;;18288:18;;;18281:34;;;50736:31:0;;-1:-1:-1;50736:31:0;;-1:-1:-1;50736:31:0;-1:-1:-1;50785:27:0;;18122:19:1;;50785:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50785:27:0;;-1:-1:-1;;50785:27:0;;;50571:247;-1:-1:-1;;;;;;;50571:247:0:o;40342:98::-;40400:7;40427:5;40431:1;40427;:5;:::i;:::-;40420:12;40342:98;-1:-1:-1;;;40342:98:0:o;30275:569::-;-1:-1:-1;;;;;30428:16:0;;30420:62;;;;-1:-1:-1;;;30420:62:0;;26258:2:1;30420:62:0;;;26240:21:1;26297:2;26277:18;;;26270:30;26336:34;26316:18;;;26309:62;-1:-1:-1;;;26387:18:1;;;26380:31;26428:19;;30420:62:0;26056:397:1;30420:62:0;20618:10;30539:102;20618:10;30495:16;30582:2;30586:21;30604:2;30586:17;:21::i;:::-;30609:25;30627:6;30609:17;:25::i;30539:102::-;30654:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30654:17:0;;;;;;;;;:27;;30675:6;;30654:9;:27;;30675:6;;30654:27;:::i;:::-;;;;-1:-1:-1;;30697:52:0;;;27732:25:1;;;27788:2;27773:18;;27766:34;;;-1:-1:-1;;;;;30697:52:0;;;;30730:1;;30697:52;;;;;;27705:18:1;30697:52:0;;;;;;;30762:74;30793:8;30811:1;30815:2;30819;30823:6;30831:4;30762:30;:74::i;27877:1080::-;28104:7;:14;28090:3;:10;:28;28082:81;;;;-1:-1:-1;;;28082:81:0;;25849:2:1;28082:81:0;;;25831:21:1;25888:2;25868:18;;;25861:30;25927:34;25907:18;;;25900:62;-1:-1:-1;;;25978:18:1;;;25971:38;26026:19;;28082:81:0;25647:404:1;28082:81:0;-1:-1:-1;;;;;28182:16:0;;28174:66;;;;-1:-1:-1;;;28174:66:0;;;;;;;:::i;:::-;20618:10;28253:16;28370:427;28394:3;:10;28390:1;:14;28370:427;;;28426:10;28439:3;28443:1;28439:6;;;;;;;;:::i;:::-;;;;;;;28426:19;;28460:14;28477:7;28485:1;28477:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28504:19;28526:13;;;;;;;;;;-1:-1:-1;;;;;28526:19:0;;;;;;;;;;;;28477:10;;-1:-1:-1;28568:21:0;;;;28560:76;;;;-1:-1:-1;;;28560:76:0;;;;;;;:::i;:::-;28705:20;28719:6;28705:11;:20;:::i;:::-;28683:9;:13;28693:2;28683:13;;;;;;;;;;;:19;28697:4;-1:-1:-1;;;;;28683:19:0;-1:-1:-1;;;;;28683:19:0;;;;;;;;;;;;:42;;;;28779:6;28758:9;:13;28768:2;28758:13;;;;;;;;;;;:17;28772:2;-1:-1:-1;;;;;28758:17:0;-1:-1:-1;;;;;28758:17:0;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28411:386;;;28406:3;;;;:::i;:::-;;;28370:427;;;;28844:2;-1:-1:-1;;;;;28814:47:0;28838:4;-1:-1:-1;;;;;28814:47:0;28828:8;-1:-1:-1;;;;;28814:47:0;;28848:3;28853:7;28814:47;;;;;;;:::i;:::-;;;;;;;;28874:75;28910:8;28920:4;28926:2;28930:3;28935:7;28944:4;28874:35;:75::i;:::-;28071:886;27877:1080;;;;;:::o;46857:191::-;46950:6;;;-1:-1:-1;;;;;46967:17:0;;;-1:-1:-1;;;;;;46967:17:0;;;;;;;47000:40;;46950:6;;;46967:17;46950:6;;47000:40;;46931:16;;47000:40;46920:128;46857:191;:::o;34081:331::-;34236:8;-1:-1:-1;;;;;34227:17:0;:5;-1:-1:-1;;;;;34227:17:0;;;34219:71;;;;-1:-1:-1;;;34219:71:0;;25029:2:1;34219:71:0;;;25011:21:1;25068:2;25048:18;;;25041:30;25107:34;25087:18;;;25080:62;-1:-1:-1;;;25158:18:1;;;25151:39;25207:19;;34219:71:0;24827:405:1;34219:71:0;-1:-1:-1;;;;;34301:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34301:46:0;;;;;;;;;;34363:41;;17871::1;;;34363::0;;17844:18:1;34363:41:0;;;;;;;34081:331;;;:::o;26693:826::-;-1:-1:-1;;;;;26881:16:0;;26873:66;;;;-1:-1:-1;;;26873:66:0;;;;;;;:::i;:::-;20618:10;26996:96;20618:10;27027:4;27033:2;27037:21;27055:2;27037:17;:21::i;26996:96::-;27105:19;27127:13;;;;;;;;;;;-1:-1:-1;;;;;27127:19:0;;;;;;;;;;27165:21;;;;27157:76;;;;-1:-1:-1;;;27157:76:0;;;;;;;:::i;:::-;27294:20;27308:6;27294:11;:20;:::i;:::-;27272:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27272:19:0;;;;;;;;;;:42;;;;27339:17;;;;;;;:27;;27360:6;;27272:9;27339:27;;27360:6;;27339:27;:::i;:::-;;;;-1:-1:-1;;27384:46:0;;;27732:25:1;;;27788:2;27773:18;;27766:34;;;-1:-1:-1;;;;;27384:46:0;;;;;;;;;;;;;;27705:18:1;27384:46:0;;;;;;;27443:68;27474:8;27484:4;27490:2;27494;27498:6;27506:4;27443:30;:68::i;:::-;26862:657;;26693:826;;;;;:::o;50824:498::-;50904:5;50911:7;50920;50947:3;:10;50961:2;50947:16;50939:25;;;;;;-1:-1:-1;;;51117:2:0;51108:12;;51102:19;51179:2;51170:12;;51164:19;51278:2;51269:12;;;51263:19;50975:9;51255:28;;51102:19;;51164;50824:498::o;37170:198::-;37290:16;;;37304:1;37290:16;;;;;;;;;37236;;37265:22;;37290:16;;;;;;;;;;;;-1:-1:-1;37290:16:0;37265:41;;37328:7;37317:5;37323:1;37317:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;37355:5;37170:198;-1:-1:-1;;37170:198:0:o;35597:744::-;-1:-1:-1;;;;;35812:13:0;;12871:19;:23;35808:526;;35848:72;;-1:-1:-1;;;35848:72:0;;-1:-1:-1;;;;;35848:38:0;;;;;:72;;35887:8;;35897:4;;35903:2;;35907:6;;35915:4;;35848:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35848:72:0;;;;;;;;-1:-1:-1;;35848:72:0;;;;;;;;;;;;:::i;:::-;;;35844:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36196:6;36189:14;;-1:-1:-1;;;36189:14:0;;;;;;;;:::i;35844:479::-;;;36245:62;;-1:-1:-1;;;36245:62:0;;18959:2:1;36245:62:0;;;18941:21:1;18998:2;18978:18;;;18971:30;19037:34;19017:18;;;19010:62;-1:-1:-1;;;19088:18:1;;;19081:50;19148:19;;36245:62:0;18757:416:1;35844:479:0;-1:-1:-1;;;;;;35970:55:0;;-1:-1:-1;;;35970:55:0;35966:154;;36050:50;;-1:-1:-1;;;36050:50:0;;;;;;;:::i;36349:813::-;-1:-1:-1;;;;;36589:13:0;;12871:19;:23;36585:570;;36625:79;;-1:-1:-1;;;36625:79:0;;-1:-1:-1;;;;;36625:43:0;;;;;:79;;36669:8;;36679:4;;36685:3;;36690:7;;36699:4;;36625:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36625:79:0;;;;;;;;-1:-1:-1;;36625:79:0;;;;;;;;;;;;:::i;:::-;;;36621:523;;;;:::i;:::-;-1:-1:-1;;;;;;36786:60:0;;-1:-1:-1;;;36786:60:0;36782:159;;36871:50;;-1:-1:-1;;;36871:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:367::-;728:8;738:6;792:3;785:4;777:6;773:17;769:27;759:55;;810:1;807;800:12;759:55;-1:-1:-1;833:20:1;;-1:-1:-1;;;;;865:30:1;;862:50;;;908:1;905;898:12;862:50;945:4;937:6;933:17;921:29;;1005:3;998:4;988:6;985:1;981:14;973:6;969:27;965:38;962:47;959:67;;;1022:1;1019;1012:12;959:67;665:367;;;;;:::o;1037:735::-;1091:5;1144:3;1137:4;1129:6;1125:17;1121:27;1111:55;;1162:1;1159;1152:12;1111:55;1198:6;1185:20;1224:4;1247:43;1287:2;1247:43;:::i;:::-;1319:2;1313:9;1331:31;1359:2;1351:6;1331:31;:::i;:::-;1397:18;;;1431:15;;;;-1:-1:-1;1466:15:1;;;1516:1;1512:10;;;1500:23;;1496:32;;1493:41;-1:-1:-1;1490:61:1;;;1547:1;1544;1537:12;1490:61;1569:1;1579:163;1593:2;1590:1;1587:9;1579:163;;;1650:17;;1638:30;;1688:12;;;;1720;;;;1611:1;1604:9;1579:163;;;-1:-1:-1;1760:6:1;;1037:735;-1:-1:-1;;;;;;;1037:735:1:o;1777:347::-;1828:8;1838:6;1892:3;1885:4;1877:6;1873:17;1869:27;1859:55;;1910:1;1907;1900:12;1859:55;-1:-1:-1;1933:20:1;;-1:-1:-1;;;;;1965:30:1;;1962:50;;;2008:1;2005;1998:12;1962:50;2045:4;2037:6;2033:17;2021:29;;2097:3;2090:4;2081:6;2073;2069:19;2065:30;2062:39;2059:59;;;2114:1;2111;2104:12;2129:220;2171:5;2224:3;2217:4;2209:6;2205:17;2201:27;2191:55;;2242:1;2239;2232:12;2191:55;2264:79;2339:3;2330:6;2317:20;2310:4;2302:6;2298:17;2264:79;:::i;2354:186::-;2413:6;2466:2;2454:9;2445:7;2441:23;2437:32;2434:52;;;2482:1;2479;2472:12;2434:52;2505:29;2524:9;2505:29;:::i;2545:260::-;2613:6;2621;2674:2;2662:9;2653:7;2649:23;2645:32;2642:52;;;2690:1;2687;2680:12;2642:52;2713:29;2732:9;2713:29;:::i;:::-;2703:39;;2761:38;2795:2;2784:9;2780:18;2761:38;:::i;:::-;2751:48;;2545:260;;;;;:::o;2810:1210::-;2970:6;2978;2986;2994;3002;3010;3018;3026;3079:3;3067:9;3058:7;3054:23;3050:33;3047:53;;;3096:1;3093;3086:12;3047:53;3119:29;3138:9;3119:29;:::i;:::-;3109:39;;3167:38;3201:2;3190:9;3186:18;3167:38;:::i;:::-;3157:48;;3256:2;3245:9;3241:18;3228:32;-1:-1:-1;;;;;3320:2:1;3312:6;3309:14;3306:34;;;3336:1;3333;3326:12;3306:34;3375:70;3437:7;3428:6;3417:9;3413:22;3375:70;:::i;:::-;3464:8;;-1:-1:-1;3349:96:1;-1:-1:-1;3552:2:1;3537:18;;3524:32;;-1:-1:-1;3568:16:1;;;3565:36;;;3597:1;3594;3587:12;3565:36;3636:72;3700:7;3689:8;3678:9;3674:24;3636:72;:::i;:::-;3727:8;;-1:-1:-1;3610:98:1;-1:-1:-1;3815:3:1;3800:19;;3787:33;;-1:-1:-1;3832:16:1;;;3829:36;;;3861:1;3858;3851:12;3829:36;;3900:60;3952:7;3941:8;3930:9;3926:24;3900:60;:::i;:::-;2810:1210;;;;-1:-1:-1;2810:1210:1;;-1:-1:-1;2810:1210:1;;;;;;3979:8;-1:-1:-1;;;2810:1210:1:o;4025:943::-;4179:6;4187;4195;4203;4211;4264:3;4252:9;4243:7;4239:23;4235:33;4232:53;;;4281:1;4278;4271:12;4232:53;4304:29;4323:9;4304:29;:::i;:::-;4294:39;;4352:38;4386:2;4375:9;4371:18;4352:38;:::i;:::-;4342:48;;4441:2;4430:9;4426:18;4413:32;-1:-1:-1;;;;;4505:2:1;4497:6;4494:14;4491:34;;;4521:1;4518;4511:12;4491:34;4544:61;4597:7;4588:6;4577:9;4573:22;4544:61;:::i;:::-;4534:71;;4658:2;4647:9;4643:18;4630:32;4614:48;;4687:2;4677:8;4674:16;4671:36;;;4703:1;4700;4693:12;4671:36;4726:63;4781:7;4770:8;4759:9;4755:24;4726:63;:::i;:::-;4716:73;;4842:3;4831:9;4827:19;4814:33;4798:49;;4872:2;4862:8;4859:16;4856:36;;;4888:1;4885;4878:12;4856:36;;4911:51;4954:7;4943:8;4932:9;4928:24;4911:51;:::i;:::-;4901:61;;;4025:943;;;;;;;;:::o;4973:695::-;5079:6;5087;5095;5103;5111;5119;5172:3;5160:9;5151:7;5147:23;5143:33;5140:53;;;5189:1;5186;5179:12;5140:53;5212:29;5231:9;5212:29;:::i;:::-;5202:39;;5260:38;5294:2;5283:9;5279:18;5260:38;:::i;:::-;5250:48;;5345:2;5334:9;5330:18;5317:32;5307:42;;5396:2;5385:9;5381:18;5368:32;5358:42;;5451:3;5440:9;5436:19;5423:33;-1:-1:-1;;;;;5471:6:1;5468:30;5465:50;;;5511:1;5508;5501:12;5465:50;5550:58;5600:7;5591:6;5580:9;5576:22;5550:58;:::i;:::-;4973:695;;;;-1:-1:-1;4973:695:1;;-1:-1:-1;4973:695:1;;5627:8;;4973:695;-1:-1:-1;;;4973:695:1:o;5673:606::-;5777:6;5785;5793;5801;5809;5862:3;5850:9;5841:7;5837:23;5833:33;5830:53;;;5879:1;5876;5869:12;5830:53;5902:29;5921:9;5902:29;:::i;:::-;5892:39;;5950:38;5984:2;5973:9;5969:18;5950:38;:::i;:::-;5940:48;;6035:2;6024:9;6020:18;6007:32;5997:42;;6086:2;6075:9;6071:18;6058:32;6048:42;;6141:3;6130:9;6126:19;6113:33;-1:-1:-1;;;;;6161:6:1;6158:30;6155:50;;;6201:1;6198;6191:12;6155:50;6224:49;6265:7;6256:6;6245:9;6241:22;6224:49;:::i;6284:315::-;6349:6;6357;6410:2;6398:9;6389:7;6385:23;6381:32;6378:52;;;6426:1;6423;6416:12;6378:52;6449:29;6468:9;6449:29;:::i;:::-;6439:39;;6528:2;6517:9;6513:18;6500:32;6541:28;6563:5;6541:28;:::i;:::-;6588:5;6578:15;;;6284:315;;;;;:::o;6604:254::-;6672:6;6680;6733:2;6721:9;6712:7;6708:23;6704:32;6701:52;;;6749:1;6746;6739:12;6701:52;6772:29;6791:9;6772:29;:::i;:::-;6762:39;6848:2;6833:18;;;;6820:32;;-1:-1:-1;;;6604:254:1:o;6863:1219::-;6981:6;6989;7042:2;7030:9;7021:7;7017:23;7013:32;7010:52;;;7058:1;7055;7048:12;7010:52;7098:9;7085:23;-1:-1:-1;;;;;7168:2:1;7160:6;7157:14;7154:34;;;7184:1;7181;7174:12;7154:34;7222:6;7211:9;7207:22;7197:32;;7267:7;7260:4;7256:2;7252:13;7248:27;7238:55;;7289:1;7286;7279:12;7238:55;7325:2;7312:16;7347:4;7370:43;7410:2;7370:43;:::i;:::-;7442:2;7436:9;7454:31;7482:2;7474:6;7454:31;:::i;:::-;7520:18;;;7554:15;;;;-1:-1:-1;7589:11:1;;;7631:1;7627:10;;;7619:19;;7615:28;;7612:41;-1:-1:-1;7609:61:1;;;7666:1;7663;7656:12;7609:61;7688:1;7679:10;;7698:169;7712:2;7709:1;7706:9;7698:169;;;7769:23;7788:3;7769:23;:::i;:::-;7757:36;;7730:1;7723:9;;;;;7813:12;;;;7845;;7698:169;;;-1:-1:-1;7886:6:1;-1:-1:-1;;7930:18:1;;7917:32;;-1:-1:-1;;7961:16:1;;;7958:36;;;7990:1;7987;7980:12;7958:36;;8013:63;8068:7;8057:8;8046:9;8042:24;8013:63;:::i;:::-;8003:73;;;6863:1219;;;;;:::o;8087:245::-;8154:6;8207:2;8195:9;8186:7;8182:23;8178:32;8175:52;;;8223:1;8220;8213:12;8175:52;8255:9;8249:16;8274:28;8296:5;8274:28;:::i;8337:245::-;8395:6;8448:2;8436:9;8427:7;8423:23;8419:32;8416:52;;;8464:1;8461;8454:12;8416:52;8503:9;8490:23;8522:30;8546:5;8522:30;:::i;8587:249::-;8656:6;8709:2;8697:9;8688:7;8684:23;8680:32;8677:52;;;8725:1;8722;8715:12;8677:52;8757:9;8751:16;8776:30;8800:5;8776:30;:::i;8841:180::-;8900:6;8953:2;8941:9;8932:7;8928:23;8924:32;8921:52;;;8969:1;8966;8959:12;8921:52;-1:-1:-1;8992:23:1;;8841:180;-1:-1:-1;8841:180:1:o;9026:254::-;9094:6;9102;9155:2;9143:9;9134:7;9130:23;9126:32;9123:52;;;9171:1;9168;9161:12;9123:52;9207:9;9194:23;9184:33;;9236:38;9270:2;9259:9;9255:18;9236:38;:::i;9285:854::-;9393:6;9401;9409;9417;9425;9433;9486:3;9474:9;9465:7;9461:23;9457:33;9454:53;;;9503:1;9500;9493:12;9454:53;9539:9;9526:23;9516:33;;9596:2;9585:9;9581:18;9568:32;9558:42;;9651:2;9640:9;9636:18;9623:32;-1:-1:-1;;;;;9715:2:1;9707:6;9704:14;9701:34;;;9731:1;9728;9721:12;9701:34;9770:58;9820:7;9811:6;9800:9;9796:22;9770:58;:::i;:::-;9847:8;;-1:-1:-1;9744:84:1;-1:-1:-1;9935:2:1;9920:18;;9907:32;;-1:-1:-1;9951:16:1;;;9948:36;;;9980:1;9977;9970:12;9948:36;;10019:60;10071:7;10060:8;10049:9;10045:24;10019:60;:::i;10144:813::-;10247:6;10255;10263;10271;10279;10332:3;10320:9;10311:7;10307:23;10303:33;10300:53;;;10349:1;10346;10339:12;10300:53;10385:9;10372:23;10362:33;;10442:2;10431:9;10427:18;10414:32;10404:42;;10493:2;10482:9;10478:18;10465:32;10455:42;;10547:2;10536:9;10532:18;10519:32;10591:4;10584:5;10580:16;10573:5;10570:27;10560:55;;10611:1;10608;10601:12;10560:55;10634:5;-1:-1:-1;10690:3:1;10675:19;;10662:33;-1:-1:-1;;;;;10707:30:1;;10704:50;;;10750:1;10747;10740:12;10704:50;10773:22;;10826:4;10818:13;;10814:27;-1:-1:-1;10804:55:1;;10855:1;10852;10845:12;10804:55;10878:73;10943:7;10938:2;10925:16;10920:2;10916;10912:11;10878:73;:::i;10962:435::-;11015:3;11053:5;11047:12;11080:6;11075:3;11068:19;11106:4;11135:2;11130:3;11126:12;11119:19;;11172:2;11165:5;11161:14;11193:1;11203:169;11217:6;11214:1;11211:13;11203:169;;;11278:13;;11266:26;;11312:12;;;;11347:15;;;;11239:1;11232:9;11203:169;;;-1:-1:-1;11388:3:1;;10962:435;-1:-1:-1;;;;;10962:435:1:o;11402:471::-;11443:3;11481:5;11475:12;11508:6;11503:3;11496:19;11533:1;11543:162;11557:6;11554:1;11551:13;11543:162;;;11619:4;11675:13;;;11671:22;;11665:29;11647:11;;;11643:20;;11636:59;11572:12;11543:162;;;11723:6;11720:1;11717:13;11714:87;;;11789:1;11782:4;11773:6;11768:3;11764:16;11760:27;11753:38;11714:87;-1:-1:-1;11855:2:1;11834:15;-1:-1:-1;;11830:29:1;11821:39;;;;11862:4;11817:50;;11402:471;-1:-1:-1;;11402:471:1:o;12242:271::-;12425:6;12417;12412:3;12399:33;12381:3;12451:16;;12476:13;;;12451:16;12242:271;-1:-1:-1;12242:271:1:o;12903:1287::-;-1:-1:-1;;;13157:3:1;13150:22;13132:3;13191:1;13212;13245:6;13239:13;13275:3;13297:1;13325:9;13321:2;13317:18;13307:28;;13385:2;13374:9;13370:18;13407;13397:61;;13451:4;13443:6;13439:17;13429:27;;13397:61;13477:2;13525;13517:6;13514:14;13494:18;13491:38;13488:165;;;-1:-1:-1;;;13552:33:1;;13608:4;13605:1;13598:15;13638:4;13559:3;13626:17;13488:165;13669:18;13696:122;;;;13832:1;13827:338;;;;13662:503;;13696:122;-1:-1:-1;;13738:24:1;;13724:12;;;13717:46;13787:16;;;13783:25;;;-1:-1:-1;13696:122:1;;13827:338;28072:1;28065:14;;;28109:4;28096:18;;13922:1;13936:174;13950:6;13947:1;13944:13;13936:174;;;14037:14;;14019:11;;;14015:20;;14008:44;14080:16;;;;13965:10;;13936:174;;;13940:3;;14152:2;14143:6;14138:3;14134:16;14130:25;14123:32;;13662:503;-1:-1:-1;14181:3:1;;12903:1287;-1:-1:-1;;;;;;;;;12903:1287:1:o;14403:826::-;-1:-1:-1;;;;;14800:15:1;;;14782:34;;14852:15;;14847:2;14832:18;;14825:43;14762:3;14899:2;14884:18;;14877:31;;;14725:4;;14931:57;;14968:19;;14960:6;14931:57;:::i;:::-;15036:9;15028:6;15024:22;15019:2;15008:9;15004:18;14997:50;15070:44;15107:6;15099;15070:44;:::i;:::-;15056:58;;15163:9;15155:6;15151:22;15145:3;15134:9;15130:19;15123:51;15191:32;15216:6;15208;15191:32;:::i;:::-;15183:40;14403:826;-1:-1:-1;;;;;;;;14403:826:1:o;15614:560::-;-1:-1:-1;;;;;15911:15:1;;;15893:34;;15963:15;;15958:2;15943:18;;15936:43;16010:2;15995:18;;15988:34;;;16053:2;16038:18;;16031:34;;;15873:3;16096;16081:19;;16074:32;;;15836:4;;16123:45;;16148:19;;16140:6;16123:45;:::i;:::-;16115:53;15614:560;-1:-1:-1;;;;;;;15614:560:1:o;16179:811::-;16500:4;16529:3;16568:1;16564;16559:3;16555:11;16551:19;16609:2;16601:6;16597:15;16586:9;16579:34;16649:6;16644:2;16633:9;16629:18;16622:34;16692:6;16687:2;16676:9;16672:18;16665:34;16735:6;16730:2;16719:9;16715:18;16708:34;16779:6;16773:3;16762:9;16758:19;16751:35;16823:6;16817:3;16806:9;16802:19;16795:35;16867:2;16861:3;16850:9;16846:19;16839:31;16887:44;16927:2;16916:9;16912:18;16904:6;16887:44;:::i;:::-;16879:52;;16980:2;16972:6;16968:15;16962:3;16951:9;16947:19;16940:44;;;16179:811;;;;;;;;;;;:::o;16995:261::-;17174:2;17163:9;17156:21;17137:4;17194:56;17246:2;17235:9;17231:18;17223:6;17194:56;:::i;17261:465::-;17518:2;17507:9;17500:21;17481:4;17544:56;17596:2;17585:9;17581:18;17573:6;17544:56;:::i;:::-;17648:9;17640:6;17636:22;17631:2;17620:9;17616:18;17609:50;17676:44;17713:6;17705;17676:44;:::i;:::-;17668:52;17261:465;-1:-1:-1;;;;;17261:465:1:o;18533:219::-;18682:2;18671:9;18664:21;18645:4;18702:44;18742:2;18731:9;18727:18;18719:6;18702:44;:::i;19178:404::-;19380:2;19362:21;;;19419:2;19399:18;;;19392:30;19458:34;19453:2;19438:18;;19431:62;-1:-1:-1;;;19524:2:1;19509:18;;19502:38;19572:3;19557:19;;19178:404::o;22204:401::-;22406:2;22388:21;;;22445:2;22425:18;;;22418:30;22484:34;22479:2;22464:18;;22457:62;-1:-1:-1;;;22550:2:1;22535:18;;22528:35;22595:3;22580:19;;22204:401::o;23029:406::-;23231:2;23213:21;;;23270:2;23250:18;;;23243:30;23309:34;23304:2;23289:18;;23282:62;-1:-1:-1;;;23375:2:1;23360:18;;23353:40;23425:3;23410:19;;23029:406::o;23440:356::-;23642:2;23624:21;;;23661:18;;;23654:30;23720:34;23715:2;23700:18;;23693:62;23787:2;23772:18;;23440:356::o;27263:290::-;27440:6;27429:9;27422:25;27483:2;27478;27467:9;27463:18;27456:30;27403:4;27503:44;27543:2;27532:9;27528:18;27520:6;27503:44;:::i;:::-;27495:52;27263:290;-1:-1:-1;;;;27263:290:1:o;27811:183::-;27871:4;-1:-1:-1;;;;;27896:6:1;27893:30;27890:56;;;27926:18;;:::i;:::-;-1:-1:-1;27971:1:1;27967:14;27983:4;27963:25;;27811:183::o;28125:128::-;28165:3;28196:1;28192:6;28189:1;28186:13;28183:39;;;28202:18;;:::i;:::-;-1:-1:-1;28238:9:1;;28125:128::o;28258:125::-;28298:4;28326:1;28323;28320:8;28317:34;;;28331:18;;:::i;:::-;-1:-1:-1;28368:9:1;;28258:125::o;28388:380::-;28467:1;28463:12;;;;28510;;;28531:61;;28585:4;28577:6;28573:17;28563:27;;28531:61;28638:2;28630:6;28627:14;28607:18;28604:38;28601:161;;;28684:10;28679:3;28675:20;28672:1;28665:31;28719:4;28716:1;28709:15;28747:4;28744:1;28737:15;28601:161;;28388:380;;;:::o;28773:249::-;28883:2;28864:13;;-1:-1:-1;;28860:27:1;28848:40;;-1:-1:-1;;;;;28903:34:1;;28939:22;;;28900:62;28897:88;;;28965:18;;:::i;:::-;29001:2;28994:22;-1:-1:-1;;28773:249:1:o;29027:135::-;29066:3;-1:-1:-1;;29087:17:1;;29084:43;;;29107:18;;:::i;:::-;-1:-1:-1;29154:1:1;29143:13;;29027:135::o;29167:127::-;29228:10;29223:3;29219:20;29216:1;29209:31;29259:4;29256:1;29249:15;29283:4;29280:1;29273:15;29299:127;29360:10;29355:3;29351:20;29348:1;29341:31;29391:4;29388:1;29381:15;29415:4;29412:1;29405:15;29431:127;29492:10;29487:3;29483:20;29480:1;29473:31;29523:4;29520:1;29513:15;29547:4;29544:1;29537:15;29563:179;29598:3;29640:1;29622:16;29619:23;29616:120;;;29686:1;29683;29680;29665:23;-1:-1:-1;29723:1:1;29717:8;29712:3;29708:18;29616:120;29563:179;:::o;29747:671::-;29786:3;29828:4;29810:16;29807:26;29804:39;;;29747:671;:::o;29804:39::-;29870:2;29864:9;-1:-1:-1;;29935:16:1;29931:25;;29928:1;29864:9;29907:50;29986:4;29980:11;30010:16;-1:-1:-1;;;;;30116:2:1;30109:4;30101:6;30097:17;30094:25;30089:2;30081:6;30078:14;30075:45;30072:58;;;30123:5;;;;;29747:671;:::o;30072:58::-;30160:6;30154:4;30150:17;30139:28;;30196:3;30190:10;30223:2;30215:6;30212:14;30209:27;;;30229:5;;;;;;29747:671;:::o;30209:27::-;30313:2;30294:16;30288:4;30284:27;30280:36;30273:4;30264:6;30259:3;30255:16;30251:27;30248:69;30245:82;;;30320:5;;;;;;29747:671;:::o;30245:82::-;30336:57;30387:4;30378:6;30370;30366:19;30362:30;30356:4;30336:57;:::i;:::-;-1:-1:-1;30409:3:1;;29747:671;-1:-1:-1;;;;;29747:671:1:o;30423:118::-;30509:5;30502:13;30495:21;30488:5;30485:32;30475:60;;30531:1;30528;30521:12;30546:131;-1:-1:-1;;;;;;30620:32:1;;30610:43;;30600:71;;30667:1;30664;30657:12
Swarm Source
ipfs://c8b8c4923b352721dedb9e822f090d1ab63f08b45ba3682a226fc5e467908b51
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.