ERC-1155
Source Code
Overview
Max Total Supply
0 RECORD
Holders
21,135
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RECORD
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2023-08-12
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.9.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
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/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: @openzeppelin/contracts/token/ERC1155/IERC1155.sol
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(
address[] calldata accounts,
uint256[] calldata ids
) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC1155/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: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol
// OpenZeppelin Contracts (last updated v4.9.0) (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: address zero is not a valid owner");
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 token owner or 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: caller is not token owner or 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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, to, ids, amounts, 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);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_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);
_afterTokenTransfer(operator, from, to, ids, amounts, data);
_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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
_balances[id][to] += amount;
emit TransferSingle(operator, address(0), to, id, amount);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* 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 _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);
_afterTokenTransfer(operator, address(0), to, ids, amounts, data);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `from`
*
* Emits a {TransferSingle} event.
*
* 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();
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
_beforeTokenTransfer(operator, from, address(0), ids, amounts, "");
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);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Emits a {TransferBatch} event.
*
* 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);
_afterTokenTransfer(operator, from, address(0), ids, amounts, "");
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
require(owner != operator, "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 `ids` and `amounts` 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 {}
/**
* @dev Hook that is called after 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 _afterTokenTransfer(
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/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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/RECORD.sol
pragma solidity ^0.8.9;
contract RECORD is ERC1155, Ownable {
string public metadata;
string public symbol = "RECORD";
string public name = "BASE MINT RECORD";
uint256 public startTime;
uint256 public duration = 24 hours;
uint256 public currentSupply = 0;
uint256 public maxSupply = 1000000;
constructor() ERC1155("") {
startTime = block.timestamp;
}
function mint(uint256 amount) public payable {
if (currentSupply == maxSupply) revert();
if (currentSupply + amount > maxSupply) revert();
if (block.timestamp > startTime + duration) revert();
if (amount == 1 && msg.value != 0.0001 ether) revert();
if (amount == 10 && msg.value != 0.001 ether) revert();
if (amount == 100 && msg.value != 0.0069 ether) revert();
if (amount != 1 && amount != 10 && amount != 100) revert();
_mint(msg.sender, 1, amount, "");
currentSupply += amount;
}
function uri(uint256) public view override returns (string memory) {
return metadata;
}
function setMetadata(string memory _metadata) public onlyOwner {
metadata = _metadata;
}
function withdraw() public onlyOwner {
require(payable(msg.sender).send(address(this).balance));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":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"},{"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":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"string","name":"_metadata","type":"string"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060400160405280600681526020017f5245434f52440000000000000000000000000000000000000000000000000000815250600590816200004a91906200045f565b506040518060400160405280601081526020017f42415345204d494e54205245434f524400000000000000000000000000000000815250600690816200009191906200045f565b50620151806008556000600955620f4240600a55348015620000b257600080fd5b5060405180602001604052806000815250620000d4816200010260201b60201c565b50620000f5620000e96200011760201b60201c565b6200011f60201b60201c565b4260078190555062000546565b80600290816200011391906200045f565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026757607f821691505b6020821081036200027d576200027c6200021f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a8565b620002f38683620002a8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003406200033a62000334846200030b565b62000315565b6200030b565b9050919050565b6000819050919050565b6200035c836200031f565b620003746200036b8262000347565b848454620002b5565b825550505050565b600090565b6200038b6200037c565b6200039881848462000351565b505050565b5b81811015620003c057620003b460008262000381565b6001810190506200039e565b5050565b601f8211156200040f57620003d98162000283565b620003e48462000298565b81016020851015620003f4578190505b6200040c620004038562000298565b8301826200039d565b50505b505050565b600082821c905092915050565b6000620004346000198460080262000414565b1980831691505092915050565b60006200044f838362000421565b9150826002028217905092915050565b6200046a82620001e5565b67ffffffffffffffff811115620004865762000485620001f0565b5b6200049282546200024e565b6200049f828285620003c4565b600060209050601f831160018114620004d75760008415620004c2578287015190505b620004ce858262000441565b8655506200053e565b601f198416620004e78662000283565b60005b828110156200051157848901518255600182019150602085019450602081019050620004ea565b868310156200053157848901516200052d601f89168262000421565b8355505b6001600288020188555050505b505050505050565b61341a80620005566000396000f3fe6080604052600436106101295760003560e01c8063771282f6116100ab578063a22cb4651161006f578063a22cb465146103c2578063a49a1e7d146103eb578063d5abeb0114610414578063e985e9c51461043f578063f242432a1461047c578063f2fde38b146104a557610129565b8063771282f6146102fa57806378e97925146103255780638da5cb5b1461035057806395d89b411461037b578063a0712d68146103a657610129565b80632eb2c2d6116100f25780632eb2c2d61461023b578063392f37e9146102645780633ccfd60b1461028f5780634e1273f4146102a6578063715018a6146102e357610129565b8062fdd58e1461012e57806301ffc9a71461016b57806306fdde03146101a85780630e89341c146101d35780630fb5a6b414610210575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190611d93565b6104ce565b6040516101629190611de2565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611e55565b610596565b60405161019f9190611e9d565b60405180910390f35b3480156101b457600080fd5b506101bd610678565b6040516101ca9190611f48565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611f6a565b610706565b6040516102079190611f48565b60405180910390f35b34801561021c57600080fd5b5061022561079a565b6040516102329190611de2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612194565b6107a0565b005b34801561027057600080fd5b50610279610841565b6040516102869190611f48565b60405180910390f35b34801561029b57600080fd5b506102a46108cf565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612326565b610917565b6040516102da919061245c565b60405180910390f35b3480156102ef57600080fd5b506102f8610a30565b005b34801561030657600080fd5b5061030f610a44565b60405161031c9190611de2565b60405180910390f35b34801561033157600080fd5b5061033a610a4a565b6040516103479190611de2565b60405180910390f35b34801561035c57600080fd5b50610365610a50565b604051610372919061248d565b60405180910390f35b34801561038757600080fd5b50610390610a7a565b60405161039d9190611f48565b60405180910390f35b6103c060048036038101906103bb9190611f6a565b610b08565b005b3480156103ce57600080fd5b506103e960048036038101906103e491906124d4565b610c13565b005b3480156103f757600080fd5b50610412600480360381019061040d91906125b5565b610c29565b005b34801561042057600080fd5b50610429610c44565b6040516104369190611de2565b60405180910390f35b34801561044b57600080fd5b50610466600480360381019061046191906125fe565b610c4a565b6040516104739190611e9d565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061263e565b610cde565b005b3480156104b157600080fd5b506104cc60048036038101906104c791906126d5565b610d7f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053590612774565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610671575061067082610e02565b5b9050919050565b60068054610685906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546106b1906127c3565b80156106fe5780601f106106d3576101008083540402835291602001916106fe565b820191906000526020600020905b8154815290600101906020018083116106e157829003601f168201915b505050505081565b606060048054610715906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906127c3565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b50505050509050919050565b60085481565b6107a8610e6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ee57506107ed856107e8610e6c565b610c4a565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612866565b60405180910390fd5b61083a8585858585610e74565b5050505050565b6004805461084e906127c3565b80601f016020809104026020016040519081016040528092919081815260200182805461087a906127c3565b80156108c75780601f1061089c576101008083540402835291602001916108c7565b820191906000526020600020905b8154815290600101906020018083116108aa57829003601f168201915b505050505081565b6108d7611195565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061091557600080fd5b565b6060815183511461095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610954906128f8565b60405180910390fd5b6000835167ffffffffffffffff81111561097a57610979611f9c565b5b6040519080825280602002602001820160405280156109a85781602001602082028036833780820191505090505b50905060005b8451811015610a25576109f58582815181106109cd576109cc612918565b5b60200260200101518583815181106109e8576109e7612918565b5b60200260200101516104ce565b828281518110610a0857610a07612918565b5b60200260200101818152505080610a1e90612976565b90506109ae565b508091505092915050565b610a38611195565b610a426000611213565b565b60095481565b60075481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a87906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab3906127c3565b8015610b005780601f10610ad557610100808354040283529160200191610b00565b820191906000526020600020905b815481529060010190602001808311610ae357829003601f168201915b505050505081565b600a5460095403610b1857600080fd5b600a5481600954610b2991906129be565b1115610b3457600080fd5b600854600754610b4491906129be565b421115610b5057600080fd5b600181148015610b665750655af3107a40003414155b15610b7057600080fd5b600a81148015610b87575066038d7ea4c680003414155b15610b9157600080fd5b606481148015610ba857506618838370f340003414155b15610bb257600080fd5b60018114158015610bc45750600a8114155b8015610bd1575060648114155b15610bdb57600080fd5b610bf733600183604051806020016040528060008152506112d9565b8060096000828254610c0991906129be565b9250508190555050565b610c25610c1e610e6c565b8383611489565b5050565b610c31611195565b8060049081610c409190612b9e565b5050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ce6610e6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d2c5750610d2b85610d26610e6c565b610c4a565b5b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290612866565b60405180910390fd5b610d7885858585856115f5565b5050505050565b610d87611195565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90612ce2565b60405180910390fd5b610dff81611213565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612d74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612e06565b60405180910390fd5b6000610f31610e6c565b9050610f41818787878787611890565b60005b84518110156110f2576000858281518110610f6257610f61612918565b5b602002602001015190506000858381518110610f8157610f80612918565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990612e98565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d791906129be565b92505081905550505050806110eb90612976565b9050610f44565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611169929190612eb8565b60405180910390a461117f818787878787611898565b61118d8187878787876118a0565b505050505050565b61119d610e6c565b73ffffffffffffffffffffffffffffffffffffffff166111bb610a50565b73ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f3b565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612fcd565b60405180910390fd5b6000611352610e6c565b9050600061135f85611a77565b9050600061136c85611a77565b905061137d83600089858589611890565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dc91906129be565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161145a929190612fed565b60405180910390a461147183600089858589611898565b61148083600089898989611af1565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613088565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e89190611e9d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90612e06565b60405180910390fd5b600061166e610e6c565b9050600061167b85611a77565b9050600061168885611a77565b9050611698838989858589611890565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690612e98565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e491906129be565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611861929190612fed565b60405180910390a4611877848a8a86868a611898565b611885848a8a8a8a8a611af1565b505050505050505050565b505050505050565b505050505050565b6118bf8473ffffffffffffffffffffffffffffffffffffffff16611cc8565b15611a6f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016119059594939291906130fd565b6020604051808303816000875af192505050801561194157506040513d601f19601f8201168201806040525081019061193e919061317a565b60015b6119e65761194d6131b4565b806308c379a0036119a957506119616131d6565b8061196c57506119ab565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09190611f48565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906132d8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a649061336a565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611a9657611a95611f9c565b5b604051908082528060200260200182016040528015611ac45781602001602082028036833780820191505090505b5090508281600081518110611adc57611adb612918565b5b60200260200101818152505080915050919050565b611b108473ffffffffffffffffffffffffffffffffffffffff16611cc8565b15611cc0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b5695949392919061338a565b6020604051808303816000875af1925050508015611b9257506040513d601f19601f82011682018060405250810190611b8f919061317a565b60015b611c3757611b9e6131b4565b806308c379a003611bfa5750611bb26131d6565b80611bbd5750611bfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf19190611f48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906132d8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb59061336a565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d2a82611cff565b9050919050565b611d3a81611d1f565b8114611d4557600080fd5b50565b600081359050611d5781611d31565b92915050565b6000819050919050565b611d7081611d5d565b8114611d7b57600080fd5b50565b600081359050611d8d81611d67565b92915050565b60008060408385031215611daa57611da9611cf5565b5b6000611db885828601611d48565b9250506020611dc985828601611d7e565b9150509250929050565b611ddc81611d5d565b82525050565b6000602082019050611df76000830184611dd3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e3281611dfd565b8114611e3d57600080fd5b50565b600081359050611e4f81611e29565b92915050565b600060208284031215611e6b57611e6a611cf5565b5b6000611e7984828501611e40565b91505092915050565b60008115159050919050565b611e9781611e82565b82525050565b6000602082019050611eb26000830184611e8e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ef2578082015181840152602081019050611ed7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f1a82611eb8565b611f248185611ec3565b9350611f34818560208601611ed4565b611f3d81611efe565b840191505092915050565b60006020820190508181036000830152611f628184611f0f565b905092915050565b600060208284031215611f8057611f7f611cf5565b5b6000611f8e84828501611d7e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fd482611efe565b810181811067ffffffffffffffff82111715611ff357611ff2611f9c565b5b80604052505050565b6000612006611ceb565b90506120128282611fcb565b919050565b600067ffffffffffffffff82111561203257612031611f9c565b5b602082029050602081019050919050565b600080fd5b600061205b61205684612017565b611ffc565b9050808382526020820190506020840283018581111561207e5761207d612043565b5b835b818110156120a757806120938882611d7e565b845260208401935050602081019050612080565b5050509392505050565b600082601f8301126120c6576120c5611f97565b5b81356120d6848260208601612048565b91505092915050565b600080fd5b600067ffffffffffffffff8211156120ff576120fe611f9c565b5b61210882611efe565b9050602081019050919050565b82818337600083830152505050565b6000612137612132846120e4565b611ffc565b905082815260208101848484011115612153576121526120df565b5b61215e848285612115565b509392505050565b600082601f83011261217b5761217a611f97565b5b813561218b848260208601612124565b91505092915050565b600080600080600060a086880312156121b0576121af611cf5565b5b60006121be88828901611d48565b95505060206121cf88828901611d48565b945050604086013567ffffffffffffffff8111156121f0576121ef611cfa565b5b6121fc888289016120b1565b935050606086013567ffffffffffffffff81111561221d5761221c611cfa565b5b612229888289016120b1565b925050608086013567ffffffffffffffff81111561224a57612249611cfa565b5b61225688828901612166565b9150509295509295909350565b600067ffffffffffffffff82111561227e5761227d611f9c565b5b602082029050602081019050919050565b60006122a261229d84612263565b611ffc565b905080838252602082019050602084028301858111156122c5576122c4612043565b5b835b818110156122ee57806122da8882611d48565b8452602084019350506020810190506122c7565b5050509392505050565b600082601f83011261230d5761230c611f97565b5b813561231d84826020860161228f565b91505092915050565b6000806040838503121561233d5761233c611cf5565b5b600083013567ffffffffffffffff81111561235b5761235a611cfa565b5b612367858286016122f8565b925050602083013567ffffffffffffffff81111561238857612387611cfa565b5b612394858286016120b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123d381611d5d565b82525050565b60006123e583836123ca565b60208301905092915050565b6000602082019050919050565b60006124098261239e565b61241381856123a9565b935061241e836123ba565b8060005b8381101561244f57815161243688826123d9565b9750612441836123f1565b925050600181019050612422565b5085935050505092915050565b6000602082019050818103600083015261247681846123fe565b905092915050565b61248781611d1f565b82525050565b60006020820190506124a2600083018461247e565b92915050565b6124b181611e82565b81146124bc57600080fd5b50565b6000813590506124ce816124a8565b92915050565b600080604083850312156124eb576124ea611cf5565b5b60006124f985828601611d48565b925050602061250a858286016124bf565b9150509250929050565b600067ffffffffffffffff82111561252f5761252e611f9c565b5b61253882611efe565b9050602081019050919050565b600061255861255384612514565b611ffc565b905082815260208101848484011115612574576125736120df565b5b61257f848285612115565b509392505050565b600082601f83011261259c5761259b611f97565b5b81356125ac848260208601612545565b91505092915050565b6000602082840312156125cb576125ca611cf5565b5b600082013567ffffffffffffffff8111156125e9576125e8611cfa565b5b6125f584828501612587565b91505092915050565b6000806040838503121561261557612614611cf5565b5b600061262385828601611d48565b925050602061263485828601611d48565b9150509250929050565b600080600080600060a0868803121561265a57612659611cf5565b5b600061266888828901611d48565b955050602061267988828901611d48565b945050604061268a88828901611d7e565b935050606061269b88828901611d7e565b925050608086013567ffffffffffffffff8111156126bc576126bb611cfa565b5b6126c888828901612166565b9150509295509295909350565b6000602082840312156126eb576126ea611cf5565b5b60006126f984828501611d48565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061275e602a83611ec3565b915061276982612702565b604082019050919050565b6000602082019050818103600083015261278d81612751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127db57607f821691505b6020821081036127ee576127ed612794565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612850602e83611ec3565b915061285b826127f4565b604082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006128e2602983611ec3565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061298182611d5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129b3576129b2612947565b5b600182019050919050565b60006129c982611d5d565b91506129d483611d5d565b92508282019050808211156129ec576129eb612947565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a17565b612a5e8683612a17565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612a9b612a96612a9184611d5d565b612a76565b611d5d565b9050919050565b6000819050919050565b612ab583612a80565b612ac9612ac182612aa2565b848454612a24565b825550505050565b600090565b612ade612ad1565b612ae9818484612aac565b505050565b5b81811015612b0d57612b02600082612ad6565b600181019050612aef565b5050565b601f821115612b5257612b23816129f2565b612b2c84612a07565b81016020851015612b3b578190505b612b4f612b4785612a07565b830182612aee565b50505b505050565b600082821c905092915050565b6000612b7560001984600802612b57565b1980831691505092915050565b6000612b8e8383612b64565b9150826002028217905092915050565b612ba782611eb8565b67ffffffffffffffff811115612bc057612bbf611f9c565b5b612bca82546127c3565b612bd5828285612b11565b600060209050601f831160018114612c085760008415612bf6578287015190505b612c008582612b82565b865550612c68565b601f198416612c16866129f2565b60005b82811015612c3e57848901518255600182019150602085019450602081019050612c19565b86831015612c5b5784890151612c57601f891682612b64565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ccc602683611ec3565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612d5e602883611ec3565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612df0602583611ec3565b9150612dfb82612d94565b604082019050919050565b60006020820190508181036000830152612e1f81612de3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612e82602a83611ec3565b9150612e8d82612e26565b604082019050919050565b60006020820190508181036000830152612eb181612e75565b9050919050565b60006040820190508181036000830152612ed281856123fe565b90508181036020830152612ee681846123fe565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f25602083611ec3565b9150612f3082612eef565b602082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb7602183611ec3565b9150612fc282612f5b565b604082019050919050565b60006020820190508181036000830152612fe681612faa565b9050919050565b60006040820190506130026000830185611dd3565b61300f6020830184611dd3565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613072602983611ec3565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006130cf826130a8565b6130d981856130b3565b93506130e9818560208601611ed4565b6130f281611efe565b840191505092915050565b600060a082019050613112600083018861247e565b61311f602083018761247e565b818103604083015261313181866123fe565b9050818103606083015261314581856123fe565b9050818103608083015261315981846130c4565b90509695505050505050565b60008151905061317481611e29565b92915050565b6000602082840312156131905761318f611cf5565b5b600061319e84828501613165565b91505092915050565b60008160e01c9050919050565b600060033d11156131d35760046000803e6131d06000516131a7565b90505b90565b600060443d10613263576131e8611ceb565b60043d036004823e80513d602482011167ffffffffffffffff82111715613210575050613263565b808201805167ffffffffffffffff81111561322e5750505050613263565b80602083010160043d03850181111561324b575050505050613263565b61325a82602001850186611fcb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006132c2603483611ec3565b91506132cd82613266565b604082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613354602883611ec3565b915061335f826132f8565b604082019050919050565b6000602082019050818103600083015261338381613347565b9050919050565b600060a08201905061339f600083018861247e565b6133ac602083018761247e565b6133b96040830186611dd3565b6133c66060830185611dd3565b81810360808301526133d881846130c4565b9050969550505050505056fea26469706673582212206862de9ae3ff67e78949ccf6e423c35698c9799f34ef0ec2bcc3903ff61c231e64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101295760003560e01c8063771282f6116100ab578063a22cb4651161006f578063a22cb465146103c2578063a49a1e7d146103eb578063d5abeb0114610414578063e985e9c51461043f578063f242432a1461047c578063f2fde38b146104a557610129565b8063771282f6146102fa57806378e97925146103255780638da5cb5b1461035057806395d89b411461037b578063a0712d68146103a657610129565b80632eb2c2d6116100f25780632eb2c2d61461023b578063392f37e9146102645780633ccfd60b1461028f5780634e1273f4146102a6578063715018a6146102e357610129565b8062fdd58e1461012e57806301ffc9a71461016b57806306fdde03146101a85780630e89341c146101d35780630fb5a6b414610210575b600080fd5b34801561013a57600080fd5b5061015560048036038101906101509190611d93565b6104ce565b6040516101629190611de2565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d9190611e55565b610596565b60405161019f9190611e9d565b60405180910390f35b3480156101b457600080fd5b506101bd610678565b6040516101ca9190611f48565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190611f6a565b610706565b6040516102079190611f48565b60405180910390f35b34801561021c57600080fd5b5061022561079a565b6040516102329190611de2565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612194565b6107a0565b005b34801561027057600080fd5b50610279610841565b6040516102869190611f48565b60405180910390f35b34801561029b57600080fd5b506102a46108cf565b005b3480156102b257600080fd5b506102cd60048036038101906102c89190612326565b610917565b6040516102da919061245c565b60405180910390f35b3480156102ef57600080fd5b506102f8610a30565b005b34801561030657600080fd5b5061030f610a44565b60405161031c9190611de2565b60405180910390f35b34801561033157600080fd5b5061033a610a4a565b6040516103479190611de2565b60405180910390f35b34801561035c57600080fd5b50610365610a50565b604051610372919061248d565b60405180910390f35b34801561038757600080fd5b50610390610a7a565b60405161039d9190611f48565b60405180910390f35b6103c060048036038101906103bb9190611f6a565b610b08565b005b3480156103ce57600080fd5b506103e960048036038101906103e491906124d4565b610c13565b005b3480156103f757600080fd5b50610412600480360381019061040d91906125b5565b610c29565b005b34801561042057600080fd5b50610429610c44565b6040516104369190611de2565b60405180910390f35b34801561044b57600080fd5b50610466600480360381019061046191906125fe565b610c4a565b6040516104739190611e9d565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061263e565b610cde565b005b3480156104b157600080fd5b506104cc60048036038101906104c791906126d5565b610d7f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361053e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053590612774565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610671575061067082610e02565b5b9050919050565b60068054610685906127c3565b80601f01602080910402602001604051908101604052809291908181526020018280546106b1906127c3565b80156106fe5780601f106106d3576101008083540402835291602001916106fe565b820191906000526020600020905b8154815290600101906020018083116106e157829003601f168201915b505050505081565b606060048054610715906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906127c3565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b50505050509050919050565b60085481565b6107a8610e6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107ee57506107ed856107e8610e6c565b610c4a565b5b61082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612866565b60405180910390fd5b61083a8585858585610e74565b5050505050565b6004805461084e906127c3565b80601f016020809104026020016040519081016040528092919081815260200182805461087a906127c3565b80156108c75780601f1061089c576101008083540402835291602001916108c7565b820191906000526020600020905b8154815290600101906020018083116108aa57829003601f168201915b505050505081565b6108d7611195565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061091557600080fd5b565b6060815183511461095d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610954906128f8565b60405180910390fd5b6000835167ffffffffffffffff81111561097a57610979611f9c565b5b6040519080825280602002602001820160405280156109a85781602001602082028036833780820191505090505b50905060005b8451811015610a25576109f58582815181106109cd576109cc612918565b5b60200260200101518583815181106109e8576109e7612918565b5b60200260200101516104ce565b828281518110610a0857610a07612918565b5b60200260200101818152505080610a1e90612976565b90506109ae565b508091505092915050565b610a38611195565b610a426000611213565b565b60095481565b60075481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a87906127c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab3906127c3565b8015610b005780601f10610ad557610100808354040283529160200191610b00565b820191906000526020600020905b815481529060010190602001808311610ae357829003601f168201915b505050505081565b600a5460095403610b1857600080fd5b600a5481600954610b2991906129be565b1115610b3457600080fd5b600854600754610b4491906129be565b421115610b5057600080fd5b600181148015610b665750655af3107a40003414155b15610b7057600080fd5b600a81148015610b87575066038d7ea4c680003414155b15610b9157600080fd5b606481148015610ba857506618838370f340003414155b15610bb257600080fd5b60018114158015610bc45750600a8114155b8015610bd1575060648114155b15610bdb57600080fd5b610bf733600183604051806020016040528060008152506112d9565b8060096000828254610c0991906129be565b9250508190555050565b610c25610c1e610e6c565b8383611489565b5050565b610c31611195565b8060049081610c409190612b9e565b5050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ce6610e6c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d2c5750610d2b85610d26610e6c565b610c4a565b5b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290612866565b60405180910390fd5b610d7885858585856115f5565b5050505050565b610d87611195565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90612ce2565b60405180910390fd5b610dff81611213565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612d74565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90612e06565b60405180910390fd5b6000610f31610e6c565b9050610f41818787878787611890565b60005b84518110156110f2576000858281518110610f6257610f61612918565b5b602002602001015190506000858381518110610f8157610f80612918565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990612e98565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d791906129be565b92505081905550505050806110eb90612976565b9050610f44565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611169929190612eb8565b60405180910390a461117f818787878787611898565b61118d8187878787876118a0565b505050505050565b61119d610e6c565b73ffffffffffffffffffffffffffffffffffffffff166111bb610a50565b73ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f3b565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f90612fcd565b60405180910390fd5b6000611352610e6c565b9050600061135f85611a77565b9050600061136c85611a77565b905061137d83600089858589611890565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dc91906129be565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161145a929190612fed565b60405180910390a461147183600089858589611898565b61148083600089898989611af1565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613088565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e89190611e9d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90612e06565b60405180910390fd5b600061166e610e6c565b9050600061167b85611a77565b9050600061168885611a77565b9050611698838989858589611890565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690612e98565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e491906129be565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611861929190612fed565b60405180910390a4611877848a8a86868a611898565b611885848a8a8a8a8a611af1565b505050505050505050565b505050505050565b505050505050565b6118bf8473ffffffffffffffffffffffffffffffffffffffff16611cc8565b15611a6f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016119059594939291906130fd565b6020604051808303816000875af192505050801561194157506040513d601f19601f8201168201806040525081019061193e919061317a565b60015b6119e65761194d6131b4565b806308c379a0036119a957506119616131d6565b8061196c57506119ab565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09190611f48565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906132d8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a649061336a565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611a9657611a95611f9c565b5b604051908082528060200260200182016040528015611ac45781602001602082028036833780820191505090505b5090508281600081518110611adc57611adb612918565b5b60200260200101818152505080915050919050565b611b108473ffffffffffffffffffffffffffffffffffffffff16611cc8565b15611cc0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b5695949392919061338a565b6020604051808303816000875af1925050508015611b9257506040513d601f19601f82011682018060405250810190611b8f919061317a565b60015b611c3757611b9e6131b4565b806308c379a003611bfa5750611bb26131d6565b80611bbd5750611bfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf19190611f48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906132d8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb59061336a565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d2a82611cff565b9050919050565b611d3a81611d1f565b8114611d4557600080fd5b50565b600081359050611d5781611d31565b92915050565b6000819050919050565b611d7081611d5d565b8114611d7b57600080fd5b50565b600081359050611d8d81611d67565b92915050565b60008060408385031215611daa57611da9611cf5565b5b6000611db885828601611d48565b9250506020611dc985828601611d7e565b9150509250929050565b611ddc81611d5d565b82525050565b6000602082019050611df76000830184611dd3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e3281611dfd565b8114611e3d57600080fd5b50565b600081359050611e4f81611e29565b92915050565b600060208284031215611e6b57611e6a611cf5565b5b6000611e7984828501611e40565b91505092915050565b60008115159050919050565b611e9781611e82565b82525050565b6000602082019050611eb26000830184611e8e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ef2578082015181840152602081019050611ed7565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f1a82611eb8565b611f248185611ec3565b9350611f34818560208601611ed4565b611f3d81611efe565b840191505092915050565b60006020820190508181036000830152611f628184611f0f565b905092915050565b600060208284031215611f8057611f7f611cf5565b5b6000611f8e84828501611d7e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611fd482611efe565b810181811067ffffffffffffffff82111715611ff357611ff2611f9c565b5b80604052505050565b6000612006611ceb565b90506120128282611fcb565b919050565b600067ffffffffffffffff82111561203257612031611f9c565b5b602082029050602081019050919050565b600080fd5b600061205b61205684612017565b611ffc565b9050808382526020820190506020840283018581111561207e5761207d612043565b5b835b818110156120a757806120938882611d7e565b845260208401935050602081019050612080565b5050509392505050565b600082601f8301126120c6576120c5611f97565b5b81356120d6848260208601612048565b91505092915050565b600080fd5b600067ffffffffffffffff8211156120ff576120fe611f9c565b5b61210882611efe565b9050602081019050919050565b82818337600083830152505050565b6000612137612132846120e4565b611ffc565b905082815260208101848484011115612153576121526120df565b5b61215e848285612115565b509392505050565b600082601f83011261217b5761217a611f97565b5b813561218b848260208601612124565b91505092915050565b600080600080600060a086880312156121b0576121af611cf5565b5b60006121be88828901611d48565b95505060206121cf88828901611d48565b945050604086013567ffffffffffffffff8111156121f0576121ef611cfa565b5b6121fc888289016120b1565b935050606086013567ffffffffffffffff81111561221d5761221c611cfa565b5b612229888289016120b1565b925050608086013567ffffffffffffffff81111561224a57612249611cfa565b5b61225688828901612166565b9150509295509295909350565b600067ffffffffffffffff82111561227e5761227d611f9c565b5b602082029050602081019050919050565b60006122a261229d84612263565b611ffc565b905080838252602082019050602084028301858111156122c5576122c4612043565b5b835b818110156122ee57806122da8882611d48565b8452602084019350506020810190506122c7565b5050509392505050565b600082601f83011261230d5761230c611f97565b5b813561231d84826020860161228f565b91505092915050565b6000806040838503121561233d5761233c611cf5565b5b600083013567ffffffffffffffff81111561235b5761235a611cfa565b5b612367858286016122f8565b925050602083013567ffffffffffffffff81111561238857612387611cfa565b5b612394858286016120b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123d381611d5d565b82525050565b60006123e583836123ca565b60208301905092915050565b6000602082019050919050565b60006124098261239e565b61241381856123a9565b935061241e836123ba565b8060005b8381101561244f57815161243688826123d9565b9750612441836123f1565b925050600181019050612422565b5085935050505092915050565b6000602082019050818103600083015261247681846123fe565b905092915050565b61248781611d1f565b82525050565b60006020820190506124a2600083018461247e565b92915050565b6124b181611e82565b81146124bc57600080fd5b50565b6000813590506124ce816124a8565b92915050565b600080604083850312156124eb576124ea611cf5565b5b60006124f985828601611d48565b925050602061250a858286016124bf565b9150509250929050565b600067ffffffffffffffff82111561252f5761252e611f9c565b5b61253882611efe565b9050602081019050919050565b600061255861255384612514565b611ffc565b905082815260208101848484011115612574576125736120df565b5b61257f848285612115565b509392505050565b600082601f83011261259c5761259b611f97565b5b81356125ac848260208601612545565b91505092915050565b6000602082840312156125cb576125ca611cf5565b5b600082013567ffffffffffffffff8111156125e9576125e8611cfa565b5b6125f584828501612587565b91505092915050565b6000806040838503121561261557612614611cf5565b5b600061262385828601611d48565b925050602061263485828601611d48565b9150509250929050565b600080600080600060a0868803121561265a57612659611cf5565b5b600061266888828901611d48565b955050602061267988828901611d48565b945050604061268a88828901611d7e565b935050606061269b88828901611d7e565b925050608086013567ffffffffffffffff8111156126bc576126bb611cfa565b5b6126c888828901612166565b9150509295509295909350565b6000602082840312156126eb576126ea611cf5565b5b60006126f984828501611d48565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061275e602a83611ec3565b915061276982612702565b604082019050919050565b6000602082019050818103600083015261278d81612751565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127db57607f821691505b6020821081036127ee576127ed612794565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612850602e83611ec3565b915061285b826127f4565b604082019050919050565b6000602082019050818103600083015261287f81612843565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006128e2602983611ec3565b91506128ed82612886565b604082019050919050565b60006020820190508181036000830152612911816128d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061298182611d5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129b3576129b2612947565b5b600182019050919050565b60006129c982611d5d565b91506129d483611d5d565b92508282019050808211156129ec576129eb612947565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a17565b612a5e8683612a17565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612a9b612a96612a9184611d5d565b612a76565b611d5d565b9050919050565b6000819050919050565b612ab583612a80565b612ac9612ac182612aa2565b848454612a24565b825550505050565b600090565b612ade612ad1565b612ae9818484612aac565b505050565b5b81811015612b0d57612b02600082612ad6565b600181019050612aef565b5050565b601f821115612b5257612b23816129f2565b612b2c84612a07565b81016020851015612b3b578190505b612b4f612b4785612a07565b830182612aee565b50505b505050565b600082821c905092915050565b6000612b7560001984600802612b57565b1980831691505092915050565b6000612b8e8383612b64565b9150826002028217905092915050565b612ba782611eb8565b67ffffffffffffffff811115612bc057612bbf611f9c565b5b612bca82546127c3565b612bd5828285612b11565b600060209050601f831160018114612c085760008415612bf6578287015190505b612c008582612b82565b865550612c68565b601f198416612c16866129f2565b60005b82811015612c3e57848901518255600182019150602085019450602081019050612c19565b86831015612c5b5784890151612c57601f891682612b64565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ccc602683611ec3565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612d5e602883611ec3565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612df0602583611ec3565b9150612dfb82612d94565b604082019050919050565b60006020820190508181036000830152612e1f81612de3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612e82602a83611ec3565b9150612e8d82612e26565b604082019050919050565b60006020820190508181036000830152612eb181612e75565b9050919050565b60006040820190508181036000830152612ed281856123fe565b90508181036020830152612ee681846123fe565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f25602083611ec3565b9150612f3082612eef565b602082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612fb7602183611ec3565b9150612fc282612f5b565b604082019050919050565b60006020820190508181036000830152612fe681612faa565b9050919050565b60006040820190506130026000830185611dd3565b61300f6020830184611dd3565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613072602983611ec3565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006130cf826130a8565b6130d981856130b3565b93506130e9818560208601611ed4565b6130f281611efe565b840191505092915050565b600060a082019050613112600083018861247e565b61311f602083018761247e565b818103604083015261313181866123fe565b9050818103606083015261314581856123fe565b9050818103608083015261315981846130c4565b90509695505050505050565b60008151905061317481611e29565b92915050565b6000602082840312156131905761318f611cf5565b5b600061319e84828501613165565b91505092915050565b60008160e01c9050919050565b600060033d11156131d35760046000803e6131d06000516131a7565b90505b90565b600060443d10613263576131e8611ceb565b60043d036004823e80513d602482011167ffffffffffffffff82111715613210575050613263565b808201805167ffffffffffffffff81111561322e5750505050613263565b80602083010160043d03850181111561324b575050505050613263565b61325a82602001850186611fcb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006132c2603483611ec3565b91506132cd82613266565b604082019050919050565b600060208201905081810360008301526132f1816132b5565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613354602883611ec3565b915061335f826132f8565b604082019050919050565b6000602082019050818103600083015261338381613347565b9050919050565b600060a08201905061339f600083018861247e565b6133ac602083018761247e565b6133b96040830186611dd3565b6133c66060830185611dd3565b81810360808301526133d881846130c4565b9050969550505050505056fea26469706673582212206862de9ae3ff67e78949ccf6e423c35698c9799f34ef0ec2bcc3903ff61c231e64736f6c63430008120033
Deployed Bytecode Sourcemap
40097:1303:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21983:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21006:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40207:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41066:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40286:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23901:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40140:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41285:112;;;;;;;;;;;;;:::i;:::-;;22379:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39214:103;;;;;;;;;;;;;:::i;:::-;;40327:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40255:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38573:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40169:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40489:569;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22951:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41175:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40366:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23178:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23418:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39472:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21983:230;22069:7;22116:1;22097:21;;:7;:21;;;22089:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22183:9;:13;22193:2;22183:13;;;;;;;;;;;:22;22197:7;22183:22;;;;;;;;;;;;;;;;22176:29;;21983:230;;;;:::o;21006:310::-;21108:4;21160:26;21145:41;;;:11;:41;;;;:110;;;;21218:37;21203:52;;;:11;:52;;;;21145:110;:163;;;;21272:36;21296:11;21272:23;:36::i;:::-;21145:163;21125:183;;21006:310;;;:::o;40207:39::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41066:101::-;41118:13;41151:8;41144:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41066:101;;;:::o;40286:34::-;;;;:::o;23901:438::-;24142:12;:10;:12::i;:::-;24134:20;;:4;:20;;;:60;;;;24158:36;24175:4;24181:12;:10;:12::i;:::-;24158:16;:36::i;:::-;24134:60;24112:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;24279:52;24302:4;24308:2;24312:3;24317:7;24326:4;24279:22;:52::i;:::-;23901:438;;;;;:::o;40140:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41285:112::-;38459:13;:11;:13::i;:::-;41349:10:::1;41341:24;;:47;41366:21;41341:47;;;;;;;;;;;;;;;;;;;;;;;41333:56;;;::::0;::::1;;41285:112::o:0;22379:499::-;22515:16;22571:3;:10;22552:8;:15;:29;22544:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22640:30;22687:8;:15;22673:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22640:63;;22721:9;22716:122;22740:8;:15;22736:1;:19;22716:122;;;22796:30;22806:8;22815:1;22806:11;;;;;;;;:::i;:::-;;;;;;;;22819:3;22823:1;22819:6;;;;;;;;:::i;:::-;;;;;;;;22796:9;:30::i;:::-;22777:13;22791:1;22777:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;22757:3;;;;:::i;:::-;;;22716:122;;;;22857:13;22850:20;;;22379:499;;;;:::o;39214:103::-;38459:13;:11;:13::i;:::-;39279:30:::1;39306:1;39279:18;:30::i;:::-;39214:103::o:0;40327:32::-;;;;:::o;40255:24::-;;;;:::o;38573:87::-;38619:7;38646:6;;;;;;;;;;;38639:13;;38573:87;:::o;40169:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40489:569::-;40566:9;;40549:13;;:26;40545:40;;40577:8;;;40545:40;40625:9;;40616:6;40600:13;;:22;;;;:::i;:::-;:34;40596:48;;;40636:8;;;40596:48;40689:8;;40677:9;;:20;;;;:::i;:::-;40659:15;:38;40655:52;;;40699:8;;;40655:52;40732:1;40722:6;:11;:40;;;;;40750:12;40737:9;:25;;40722:40;40718:54;;;40764:8;;;40718:54;40797:2;40787:6;:12;:40;;;;;40816:11;40803:9;:24;;40787:40;40783:54;;;40829:8;;;40783:54;40862:3;40852:6;:13;:42;;;;;40882:12;40869:9;:25;;40852:42;40848:56;;;40896:8;;;40848:56;40929:1;40919:6;:11;;:27;;;;;40944:2;40934:6;:12;;40919:27;:44;;;;;40960:3;40950:6;:13;;40919:44;40915:58;;;40965:8;;;40915:58;40984:32;40990:10;41002:1;41005:6;40984:32;;;;;;;;;;;;:5;:32::i;:::-;41044:6;41027:13;;:23;;;;;;;:::i;:::-;;;;;;;;40489:569;:::o;22951:155::-;23046:52;23065:12;:10;:12::i;:::-;23079:8;23089;23046:18;:52::i;:::-;22951:155;;:::o;41175:102::-;38459:13;:11;:13::i;:::-;41260:9:::1;41249:8;:20;;;;;;:::i;:::-;;41175:102:::0;:::o;40366:34::-;;;;:::o;23178:168::-;23277:4;23301:18;:27;23320:7;23301:27;;;;;;;;;;;;;;;:37;23329:8;23301:37;;;;;;;;;;;;;;;;;;;;;;;;;23294:44;;23178:168;;;;:::o;23418:406::-;23634:12;:10;:12::i;:::-;23626:20;;:4;:20;;;:60;;;;23650:36;23667:4;23673:12;:10;:12::i;:::-;23650:16;:36::i;:::-;23626:60;23604:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;23771:45;23789:4;23795:2;23799;23803:6;23811:4;23771:17;:45::i;:::-;23418:406;;;;;:::o;39472:201::-;38459:13;:11;:13::i;:::-;39581:1:::1;39561:22;;:8;:22;;::::0;39553:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39637:28;39656:8;39637:18;:28::i;:::-;39472:201:::0;:::o;11448:157::-;11533:4;11572:25;11557:40;;;:11;:40;;;;11550:47;;11448:157;;;:::o;19700:98::-;19753:7;19780:10;19773:17;;19700:98;:::o;26135:1146::-;26362:7;:14;26348:3;:10;:28;26340:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26454:1;26440:16;;:2;:16;;;26432:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26511:16;26530:12;:10;:12::i;:::-;26511:31;;26555:60;26576:8;26586:4;26592:2;26596:3;26601:7;26610:4;26555:20;:60::i;:::-;26633:9;26628:421;26652:3;:10;26648:1;:14;26628:421;;;26684:10;26697:3;26701:1;26697:6;;;;;;;;:::i;:::-;;;;;;;;26684:19;;26718:14;26735:7;26743:1;26735:10;;;;;;;;:::i;:::-;;;;;;;;26718:27;;26762:19;26784:9;:13;26794:2;26784:13;;;;;;;;;;;:19;26798:4;26784:19;;;;;;;;;;;;;;;;26762:41;;26841:6;26826:11;:21;;26818:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26974:6;26960:11;:20;26938:9;:13;26948:2;26938:13;;;;;;;;;;;:19;26952:4;26938:19;;;;;;;;;;;;;;;:42;;;;27031:6;27010:9;:13;27020:2;27010:13;;;;;;;;;;;:17;27024:2;27010:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26669:380;;;26664:3;;;;:::i;:::-;;;26628:421;;;;27096:2;27066:47;;27090:4;27066:47;;27080:8;27066:47;;;27100:3;27105:7;27066:47;;;;;;;:::i;:::-;;;;;;;;27126:59;27146:8;27156:4;27162:2;27166:3;27171:7;27180:4;27126:19;:59::i;:::-;27198:75;27234:8;27244:4;27250:2;27254:3;27259:7;27268:4;27198:35;:75::i;:::-;26329:952;26135:1146;;;;;:::o;38738:132::-;38813:12;:10;:12::i;:::-;38802:23;;:7;:5;:7::i;:::-;:23;;;38794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38738:132::o;39833:191::-;39907:16;39926:6;;;;;;;;;;;39907:25;;39952:8;39943:6;;:17;;;;;;;;;;;;;;;;;;40007:8;39976:40;;39997:8;39976:40;;;;;;;;;;;;39896:128;39833:191;:::o;28599:686::-;28723:1;28709:16;;:2;:16;;;28701:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28776:16;28795:12;:10;:12::i;:::-;28776:31;;28818:20;28841:21;28859:2;28841:17;:21::i;:::-;28818:44;;28873:24;28900:25;28918:6;28900:17;:25::i;:::-;28873:52;;28938:66;28959:8;28977:1;28981:2;28985:3;28990:7;28999:4;28938:20;:66::i;:::-;29038:6;29017:9;:13;29027:2;29017:13;;;;;;;;;;;:17;29031:2;29017:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29097:2;29060:52;;29093:1;29060:52;;29075:8;29060:52;;;29101:2;29105:6;29060:52;;;;;;;:::i;:::-;;;;;;;;29125:65;29145:8;29163:1;29167:2;29171:3;29176:7;29185:4;29125:19;:65::i;:::-;29203:74;29234:8;29252:1;29256:2;29260;29264:6;29272:4;29203:30;:74::i;:::-;28690:595;;;28599:686;;;;:::o;32901:297::-;33022:8;33013:17;;:5;:17;;;33005:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33125:8;33087:18;:25;33106:5;33087:25;;;;;;;;;;;;;;;:35;33113:8;33087:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33171:8;33149:41;;33164:5;33149:41;;;33181:8;33149:41;;;;;;:::i;:::-;;;;;;;;32901:297;;;:::o;24803:974::-;25005:1;24991:16;;:2;:16;;;24983:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25062:16;25081:12;:10;:12::i;:::-;25062:31;;25104:20;25127:21;25145:2;25127:17;:21::i;:::-;25104:44;;25159:24;25186:25;25204:6;25186:17;:25::i;:::-;25159:52;;25224:60;25245:8;25255:4;25261:2;25265:3;25270:7;25279:4;25224:20;:60::i;:::-;25297:19;25319:9;:13;25329:2;25319:13;;;;;;;;;;;:19;25333:4;25319:19;;;;;;;;;;;;;;;;25297:41;;25372:6;25357:11;:21;;25349:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25497:6;25483:11;:20;25461:9;:13;25471:2;25461:13;;;;;;;;;;;:19;25475:4;25461:19;;;;;;;;;;;;;;;:42;;;;25546:6;25525:9;:13;25535:2;25525:13;;;;;;;;;;;:17;25539:2;25525:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25601:2;25570:46;;25595:4;25570:46;;25585:8;25570:46;;;25605:2;25609:6;25570:46;;;;;;;:::i;:::-;;;;;;;;25629:59;25649:8;25659:4;25665:2;25669:3;25674:7;25683:4;25629:19;:59::i;:::-;25701:68;25732:8;25742:4;25748:2;25752;25756:6;25764:4;25701:30;:68::i;:::-;24972:805;;;;24803:974;;;;;:::o;34156:221::-;;;;;;;:::o;35332:220::-;;;;;;;:::o;36312:813::-;36552:15;:2;:13;;;:15::i;:::-;36548:570;;;36605:2;36588:43;;;36632:8;36642:4;36648:3;36653:7;36662:4;36588:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36584:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36980:6;36973:14;;;;;;;;;;;:::i;:::-;;;;;;;;36584:523;;;37029:62;;;;;;;;;;:::i;:::-;;;;;;;;36584:523;36761:48;;;36749:60;;;:8;:60;;;;36745:159;;36834:50;;;;;;;;;;:::i;:::-;;;;;;;;36745:159;36668:251;36548:570;36312:813;;;;;;:::o;37133:198::-;37199:16;37228:22;37267:1;37253:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37228:41;;37291:7;37280:5;37286:1;37280:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37318:5;37311:12;;;37133:198;;;:::o;35560:744::-;35775:15;:2;:13;;;:15::i;:::-;35771:526;;;35828:2;35811:38;;;35850:8;35860:4;35866:2;35870:6;35878:4;35811:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35807:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36159:6;36152:14;;;;;;;;;;;:::i;:::-;;;;;;;;35807:479;;;36208:62;;;;;;;;;;:::i;:::-;;;;;;;;35807:479;35945:43;;;35933:55;;;:8;:55;;;;35929:154;;36013:50;;;;;;;;;;:::i;:::-;;;;;;;;35929:154;35884:214;35771:526;35560:744;;;;;;:::o;1507:326::-;1567:4;1824:1;1802:7;:19;;;:23;1795:30;;1507:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10410:710::-;10506:5;10531:81;10547:64;10604:6;10547:64;:::i;:::-;10531:81;:::i;:::-;10522:90;;10632:5;10661:6;10654:5;10647:21;10695:4;10688:5;10684:16;10677:23;;10748:4;10740:6;10736:17;10728:6;10724:30;10777:3;10769:6;10766:15;10763:122;;;10796:79;;:::i;:::-;10763:122;10911:6;10894:220;10928:6;10923:3;10920:15;10894:220;;;11003:3;11032:37;11065:3;11053:10;11032:37;:::i;:::-;11027:3;11020:50;11099:4;11094:3;11090:14;11083:21;;10970:144;10954:4;10949:3;10945:14;10938:21;;10894:220;;;10898:21;10512:608;;10410:710;;;;;:::o;11143:370::-;11214:5;11263:3;11256:4;11248:6;11244:17;11240:27;11230:122;;11271:79;;:::i;:::-;11230:122;11388:6;11375:20;11413:94;11503:3;11495:6;11488:4;11480:6;11476:17;11413:94;:::i;:::-;11404:103;;11220:293;11143:370;;;;:::o;11519:894::-;11637:6;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;11519:894;;;;;:::o;12419:114::-;12486:6;12520:5;12514:12;12504:22;;12419:114;;;:::o;12539:184::-;12638:11;12672:6;12667:3;12660:19;12712:4;12707:3;12703:14;12688:29;;12539:184;;;;:::o;12729:132::-;12796:4;12819:3;12811:11;;12849:4;12844:3;12840:14;12832:22;;12729:132;;;:::o;12867:108::-;12944:24;12962:5;12944:24;:::i;:::-;12939:3;12932:37;12867:108;;:::o;12981:179::-;13050:10;13071:46;13113:3;13105:6;13071:46;:::i;:::-;13149:4;13144:3;13140:14;13126:28;;12981:179;;;;:::o;13166:113::-;13236:4;13268;13263:3;13259:14;13251:22;;13166:113;;;:::o;13315:732::-;13434:3;13463:54;13511:5;13463:54;:::i;:::-;13533:86;13612:6;13607:3;13533:86;:::i;:::-;13526:93;;13643:56;13693:5;13643:56;:::i;:::-;13722:7;13753:1;13738:284;13763:6;13760:1;13757:13;13738:284;;;13839:6;13833:13;13866:63;13925:3;13910:13;13866:63;:::i;:::-;13859:70;;13952:60;14005:6;13952:60;:::i;:::-;13942:70;;13798:224;13785:1;13782;13778:9;13773:14;;13738:284;;;13742:14;14038:3;14031:10;;13439:608;;;13315:732;;;;:::o;14053:373::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:108;14414:4;14405:6;14311:108;:::i;:::-;14303:116;;14053:373;;;;:::o;14432:118::-;14519:24;14537:5;14519:24;:::i;:::-;14514:3;14507:37;14432:118;;:::o;14556:222::-;14649:4;14687:2;14676:9;14672:18;14664:26;;14700:71;14768:1;14757:9;14753:17;14744:6;14700:71;:::i;:::-;14556:222;;;;:::o;14784:116::-;14854:21;14869:5;14854:21;:::i;:::-;14847:5;14844:32;14834:60;;14890:1;14887;14880:12;14834:60;14784:116;:::o;14906:133::-;14949:5;14987:6;14974:20;14965:29;;15003:30;15027:5;15003:30;:::i;:::-;14906:133;;;;:::o;15045:468::-;15110:6;15118;15167:2;15155:9;15146:7;15142:23;15138:32;15135:119;;;15173:79;;:::i;:::-;15135:119;15293:1;15318:53;15363:7;15354:6;15343:9;15339:22;15318:53;:::i;:::-;15308:63;;15264:117;15420:2;15446:50;15488:7;15479:6;15468:9;15464:22;15446:50;:::i;:::-;15436:60;;15391:115;15045:468;;;;;:::o;15519:308::-;15581:4;15671:18;15663:6;15660:30;15657:56;;;15693:18;;:::i;:::-;15657:56;15731:29;15753:6;15731:29;:::i;:::-;15723:37;;15815:4;15809;15805:15;15797:23;;15519:308;;;:::o;15833:425::-;15911:5;15936:66;15952:49;15994:6;15952:49;:::i;:::-;15936:66;:::i;:::-;15927:75;;16025:6;16018:5;16011:21;16063:4;16056:5;16052:16;16101:3;16092:6;16087:3;16083:16;16080:25;16077:112;;;16108:79;;:::i;:::-;16077:112;16198:54;16245:6;16240:3;16235;16198:54;:::i;:::-;15917:341;15833:425;;;;;:::o;16278:340::-;16334:5;16383:3;16376:4;16368:6;16364:17;16360:27;16350:122;;16391:79;;:::i;:::-;16350:122;16508:6;16495:20;16533:79;16608:3;16600:6;16593:4;16585:6;16581:17;16533:79;:::i;:::-;16524:88;;16340:278;16278:340;;;;:::o;16624:509::-;16693:6;16742:2;16730:9;16721:7;16717:23;16713:32;16710:119;;;16748:79;;:::i;:::-;16710:119;16896:1;16885:9;16881:17;16868:31;16926:18;16918:6;16915:30;16912:117;;;16948:79;;:::i;:::-;16912:117;17053:63;17108:7;17099:6;17088:9;17084:22;17053:63;:::i;:::-;17043:73;;16839:287;16624:509;;;;:::o;17139:474::-;17207:6;17215;17264:2;17252:9;17243:7;17239:23;17235:32;17232:119;;;17270:79;;:::i;:::-;17232:119;17390:1;17415:53;17460:7;17451:6;17440:9;17436:22;17415:53;:::i;:::-;17405:63;;17361:117;17517:2;17543:53;17588:7;17579:6;17568:9;17564:22;17543:53;:::i;:::-;17533:63;;17488:118;17139:474;;;;;:::o;17619:1089::-;17723:6;17731;17739;17747;17755;17804:3;17792:9;17783:7;17779:23;17775:33;17772:120;;;17811:79;;:::i;:::-;17772:120;17931:1;17956:53;18001:7;17992:6;17981:9;17977:22;17956:53;:::i;:::-;17946:63;;17902:117;18058:2;18084:53;18129:7;18120:6;18109:9;18105:22;18084:53;:::i;:::-;18074:63;;18029:118;18186:2;18212:53;18257:7;18248:6;18237:9;18233:22;18212:53;:::i;:::-;18202:63;;18157:118;18314:2;18340:53;18385:7;18376:6;18365:9;18361:22;18340:53;:::i;:::-;18330:63;;18285:118;18470:3;18459:9;18455:19;18442:33;18502:18;18494:6;18491:30;18488:117;;;18524:79;;:::i;:::-;18488:117;18629:62;18683:7;18674:6;18663:9;18659:22;18629:62;:::i;:::-;18619:72;;18413:288;17619:1089;;;;;;;;:::o;18714:329::-;18773:6;18822:2;18810:9;18801:7;18797:23;18793:32;18790:119;;;18828:79;;:::i;:::-;18790:119;18948:1;18973:53;19018:7;19009:6;18998:9;18994:22;18973:53;:::i;:::-;18963:63;;18919:117;18714:329;;;;:::o;19049:229::-;19189:34;19185:1;19177:6;19173:14;19166:58;19258:12;19253:2;19245:6;19241:15;19234:37;19049:229;:::o;19284:366::-;19426:3;19447:67;19511:2;19506:3;19447:67;:::i;:::-;19440:74;;19523:93;19612:3;19523:93;:::i;:::-;19641:2;19636:3;19632:12;19625:19;;19284:366;;;:::o;19656:419::-;19822:4;19860:2;19849:9;19845:18;19837:26;;19909:9;19903:4;19899:20;19895:1;19884:9;19880:17;19873:47;19937:131;20063:4;19937:131;:::i;:::-;19929:139;;19656:419;;;:::o;20081:180::-;20129:77;20126:1;20119:88;20226:4;20223:1;20216:15;20250:4;20247:1;20240:15;20267:320;20311:6;20348:1;20342:4;20338:12;20328:22;;20395:1;20389:4;20385:12;20416:18;20406:81;;20472:4;20464:6;20460:17;20450:27;;20406:81;20534:2;20526:6;20523:14;20503:18;20500:38;20497:84;;20553:18;;:::i;:::-;20497:84;20318:269;20267:320;;;:::o;20593:233::-;20733:34;20729:1;20721:6;20717:14;20710:58;20802:16;20797:2;20789:6;20785:15;20778:41;20593:233;:::o;20832:366::-;20974:3;20995:67;21059:2;21054:3;20995:67;:::i;:::-;20988:74;;21071:93;21160:3;21071:93;:::i;:::-;21189:2;21184:3;21180:12;21173:19;;20832:366;;;:::o;21204:419::-;21370:4;21408:2;21397:9;21393:18;21385:26;;21457:9;21451:4;21447:20;21443:1;21432:9;21428:17;21421:47;21485:131;21611:4;21485:131;:::i;:::-;21477:139;;21204:419;;;:::o;21629:228::-;21769:34;21765:1;21757:6;21753:14;21746:58;21838:11;21833:2;21825:6;21821:15;21814:36;21629:228;:::o;21863:366::-;22005:3;22026:67;22090:2;22085:3;22026:67;:::i;:::-;22019:74;;22102:93;22191:3;22102:93;:::i;:::-;22220:2;22215:3;22211:12;22204:19;;21863:366;;;:::o;22235:419::-;22401:4;22439:2;22428:9;22424:18;22416:26;;22488:9;22482:4;22478:20;22474:1;22463:9;22459:17;22452:47;22516:131;22642:4;22516:131;:::i;:::-;22508:139;;22235:419;;;:::o;22660:180::-;22708:77;22705:1;22698:88;22805:4;22802:1;22795:15;22829:4;22826:1;22819:15;22846:180;22894:77;22891:1;22884:88;22991:4;22988:1;22981:15;23015:4;23012:1;23005:15;23032:233;23071:3;23094:24;23112:5;23094:24;:::i;:::-;23085:33;;23140:66;23133:5;23130:77;23127:103;;23210:18;;:::i;:::-;23127:103;23257:1;23250:5;23246:13;23239:20;;23032:233;;;:::o;23271:191::-;23311:3;23330:20;23348:1;23330:20;:::i;:::-;23325:25;;23364:20;23382:1;23364:20;:::i;:::-;23359:25;;23407:1;23404;23400:9;23393:16;;23428:3;23425:1;23422:10;23419:36;;;23435:18;;:::i;:::-;23419:36;23271:191;;;;:::o;23468:141::-;23517:4;23540:3;23532:11;;23563:3;23560:1;23553:14;23597:4;23594:1;23584:18;23576:26;;23468:141;;;:::o;23615:93::-;23652:6;23699:2;23694;23687:5;23683:14;23679:23;23669:33;;23615:93;;;:::o;23714:107::-;23758:8;23808:5;23802:4;23798:16;23777:37;;23714:107;;;;:::o;23827:393::-;23896:6;23946:1;23934:10;23930:18;23969:97;23999:66;23988:9;23969:97;:::i;:::-;24087:39;24117:8;24106:9;24087:39;:::i;:::-;24075:51;;24159:4;24155:9;24148:5;24144:21;24135:30;;24208:4;24198:8;24194:19;24187:5;24184:30;24174:40;;23903:317;;23827:393;;;;;:::o;24226:60::-;24254:3;24275:5;24268:12;;24226:60;;;:::o;24292:142::-;24342:9;24375:53;24393:34;24402:24;24420:5;24402:24;:::i;:::-;24393:34;:::i;:::-;24375:53;:::i;:::-;24362:66;;24292:142;;;:::o;24440:75::-;24483:3;24504:5;24497:12;;24440:75;;;:::o;24521:269::-;24631:39;24662:7;24631:39;:::i;:::-;24692:91;24741:41;24765:16;24741:41;:::i;:::-;24733:6;24726:4;24720:11;24692:91;:::i;:::-;24686:4;24679:105;24597:193;24521:269;;;:::o;24796:73::-;24841:3;24796:73;:::o;24875:189::-;24952:32;;:::i;:::-;24993:65;25051:6;25043;25037:4;24993:65;:::i;:::-;24928:136;24875:189;;:::o;25070:186::-;25130:120;25147:3;25140:5;25137:14;25130:120;;;25201:39;25238:1;25231:5;25201:39;:::i;:::-;25174:1;25167:5;25163:13;25154:22;;25130:120;;;25070:186;;:::o;25262:543::-;25363:2;25358:3;25355:11;25352:446;;;25397:38;25429:5;25397:38;:::i;:::-;25481:29;25499:10;25481:29;:::i;:::-;25471:8;25467:44;25664:2;25652:10;25649:18;25646:49;;;25685:8;25670:23;;25646:49;25708:80;25764:22;25782:3;25764:22;:::i;:::-;25754:8;25750:37;25737:11;25708:80;:::i;:::-;25367:431;;25352:446;25262:543;;;:::o;25811:117::-;25865:8;25915:5;25909:4;25905:16;25884:37;;25811:117;;;;:::o;25934:169::-;25978:6;26011:51;26059:1;26055:6;26047:5;26044:1;26040:13;26011:51;:::i;:::-;26007:56;26092:4;26086;26082:15;26072:25;;25985:118;25934:169;;;;:::o;26108:295::-;26184:4;26330:29;26355:3;26349:4;26330:29;:::i;:::-;26322:37;;26392:3;26389:1;26385:11;26379:4;26376:21;26368:29;;26108:295;;;;:::o;26408:1395::-;26525:37;26558:3;26525:37;:::i;:::-;26627:18;26619:6;26616:30;26613:56;;;26649:18;;:::i;:::-;26613:56;26693:38;26725:4;26719:11;26693:38;:::i;:::-;26778:67;26838:6;26830;26824:4;26778:67;:::i;:::-;26872:1;26896:4;26883:17;;26928:2;26920:6;26917:14;26945:1;26940:618;;;;27602:1;27619:6;27616:77;;;27668:9;27663:3;27659:19;27653:26;27644:35;;27616:77;27719:67;27779:6;27772:5;27719:67;:::i;:::-;27713:4;27706:81;27575:222;26910:887;;26940:618;26992:4;26988:9;26980:6;26976:22;27026:37;27058:4;27026:37;:::i;:::-;27085:1;27099:208;27113:7;27110:1;27107:14;27099:208;;;27192:9;27187:3;27183:19;27177:26;27169:6;27162:42;27243:1;27235:6;27231:14;27221:24;;27290:2;27279:9;27275:18;27262:31;;27136:4;27133:1;27129:12;27124:17;;27099:208;;;27335:6;27326:7;27323:19;27320:179;;;27393:9;27388:3;27384:19;27378:26;27436:48;27478:4;27470:6;27466:17;27455:9;27436:48;:::i;:::-;27428:6;27421:64;27343:156;27320:179;27545:1;27541;27533:6;27529:14;27525:22;27519:4;27512:36;26947:611;;;26910:887;;26500:1303;;;26408:1395;;:::o;27809:225::-;27949:34;27945:1;27937:6;27933:14;27926:58;28018:8;28013:2;28005:6;28001:15;27994:33;27809:225;:::o;28040:366::-;28182:3;28203:67;28267:2;28262:3;28203:67;:::i;:::-;28196:74;;28279:93;28368:3;28279:93;:::i;:::-;28397:2;28392:3;28388:12;28381:19;;28040:366;;;:::o;28412:419::-;28578:4;28616:2;28605:9;28601:18;28593:26;;28665:9;28659:4;28655:20;28651:1;28640:9;28636:17;28629:47;28693:131;28819:4;28693:131;:::i;:::-;28685:139;;28412:419;;;:::o;28837:227::-;28977:34;28973:1;28965:6;28961:14;28954:58;29046:10;29041:2;29033:6;29029:15;29022:35;28837:227;:::o;29070:366::-;29212:3;29233:67;29297:2;29292:3;29233:67;:::i;:::-;29226:74;;29309:93;29398:3;29309:93;:::i;:::-;29427:2;29422:3;29418:12;29411:19;;29070:366;;;:::o;29442:419::-;29608:4;29646:2;29635:9;29631:18;29623:26;;29695:9;29689:4;29685:20;29681:1;29670:9;29666:17;29659:47;29723:131;29849:4;29723:131;:::i;:::-;29715:139;;29442:419;;;:::o;29867:224::-;30007:34;30003:1;29995:6;29991:14;29984:58;30076:7;30071:2;30063:6;30059:15;30052:32;29867:224;:::o;30097:366::-;30239:3;30260:67;30324:2;30319:3;30260:67;:::i;:::-;30253:74;;30336:93;30425:3;30336:93;:::i;:::-;30454:2;30449:3;30445:12;30438:19;;30097:366;;;:::o;30469:419::-;30635:4;30673:2;30662:9;30658:18;30650:26;;30722:9;30716:4;30712:20;30708:1;30697:9;30693:17;30686:47;30750:131;30876:4;30750:131;:::i;:::-;30742:139;;30469:419;;;:::o;30894:229::-;31034:34;31030:1;31022:6;31018:14;31011:58;31103:12;31098:2;31090:6;31086:15;31079:37;30894:229;:::o;31129:366::-;31271:3;31292:67;31356:2;31351:3;31292:67;:::i;:::-;31285:74;;31368:93;31457:3;31368:93;:::i;:::-;31486:2;31481:3;31477:12;31470:19;;31129:366;;;:::o;31501:419::-;31667:4;31705:2;31694:9;31690:18;31682:26;;31754:9;31748:4;31744:20;31740:1;31729:9;31725:17;31718:47;31782:131;31908:4;31782:131;:::i;:::-;31774:139;;31501:419;;;:::o;31926:634::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:108;32365:4;32356:6;32262:108;:::i;:::-;32254:116;;32417:9;32411:4;32407:20;32402:2;32391:9;32387:18;32380:48;32445:108;32548:4;32539:6;32445:108;:::i;:::-;32437:116;;31926:634;;;;;:::o;32566:182::-;32706:34;32702:1;32694:6;32690:14;32683:58;32566:182;:::o;32754:366::-;32896:3;32917:67;32981:2;32976:3;32917:67;:::i;:::-;32910:74;;32993:93;33082:3;32993:93;:::i;:::-;33111:2;33106:3;33102:12;33095:19;;32754:366;;;:::o;33126:419::-;33292:4;33330:2;33319:9;33315:18;33307:26;;33379:9;33373:4;33369:20;33365:1;33354:9;33350:17;33343:47;33407:131;33533:4;33407:131;:::i;:::-;33399:139;;33126:419;;;:::o;33551:220::-;33691:34;33687:1;33679:6;33675:14;33668:58;33760:3;33755:2;33747:6;33743:15;33736:28;33551:220;:::o;33777:366::-;33919:3;33940:67;34004:2;33999:3;33940:67;:::i;:::-;33933:74;;34016:93;34105:3;34016:93;:::i;:::-;34134:2;34129:3;34125:12;34118:19;;33777:366;;;:::o;34149:419::-;34315:4;34353:2;34342:9;34338:18;34330:26;;34402:9;34396:4;34392:20;34388:1;34377:9;34373:17;34366:47;34430:131;34556:4;34430:131;:::i;:::-;34422:139;;34149:419;;;:::o;34574:332::-;34695:4;34733:2;34722:9;34718:18;34710:26;;34746:71;34814:1;34803:9;34799:17;34790:6;34746:71;:::i;:::-;34827:72;34895:2;34884:9;34880:18;34871:6;34827:72;:::i;:::-;34574:332;;;;;:::o;34912:228::-;35052:34;35048:1;35040:6;35036:14;35029:58;35121:11;35116:2;35108:6;35104:15;35097:36;34912:228;:::o;35146:366::-;35288:3;35309:67;35373:2;35368:3;35309:67;:::i;:::-;35302:74;;35385:93;35474:3;35385:93;:::i;:::-;35503:2;35498:3;35494:12;35487:19;;35146:366;;;:::o;35518:419::-;35684:4;35722:2;35711:9;35707:18;35699:26;;35771:9;35765:4;35761:20;35757:1;35746:9;35742:17;35735:47;35799:131;35925:4;35799:131;:::i;:::-;35791:139;;35518:419;;;:::o;35943:98::-;35994:6;36028:5;36022:12;36012:22;;35943:98;;;:::o;36047:168::-;36130:11;36164:6;36159:3;36152:19;36204:4;36199:3;36195:14;36180:29;;36047:168;;;;:::o;36221:373::-;36307:3;36335:38;36367:5;36335:38;:::i;:::-;36389:70;36452:6;36447:3;36389:70;:::i;:::-;36382:77;;36468:65;36526:6;36521:3;36514:4;36507:5;36503:16;36468:65;:::i;:::-;36558:29;36580:6;36558:29;:::i;:::-;36553:3;36549:39;36542:46;;36311:283;36221:373;;;;:::o;36600:1053::-;36923:4;36961:3;36950:9;36946:19;36938:27;;36975:71;37043:1;37032:9;37028:17;37019:6;36975:71;:::i;:::-;37056:72;37124:2;37113:9;37109:18;37100:6;37056:72;:::i;:::-;37175:9;37169:4;37165:20;37160:2;37149:9;37145:18;37138:48;37203:108;37306:4;37297:6;37203:108;:::i;:::-;37195:116;;37358:9;37352:4;37348:20;37343:2;37332:9;37328:18;37321:48;37386:108;37489:4;37480:6;37386:108;:::i;:::-;37378:116;;37542:9;37536:4;37532:20;37526:3;37515:9;37511:19;37504:49;37570:76;37641:4;37632:6;37570:76;:::i;:::-;37562:84;;36600:1053;;;;;;;;:::o;37659:141::-;37715:5;37746:6;37740:13;37731:22;;37762:32;37788:5;37762:32;:::i;:::-;37659:141;;;;:::o;37806:349::-;37875:6;37924:2;37912:9;37903:7;37899:23;37895:32;37892:119;;;37930:79;;:::i;:::-;37892:119;38050:1;38075:63;38130:7;38121:6;38110:9;38106:22;38075:63;:::i;:::-;38065:73;;38021:127;37806:349;;;;:::o;38161:106::-;38205:8;38254:5;38249:3;38245:15;38224:36;;38161:106;;;:::o;38273:183::-;38308:3;38346:1;38328:16;38325:23;38322:128;;;38384:1;38381;38378;38363:23;38406:34;38437:1;38431:8;38406:34;:::i;:::-;38399:41;;38322:128;38273:183;:::o;38462:711::-;38501:3;38539:4;38521:16;38518:26;38547:5;38515:39;38576:20;;:::i;:::-;38651:1;38633:16;38629:24;38626:1;38620:4;38605:49;38684:4;38678:11;38783:16;38776:4;38768:6;38764:17;38761:39;38728:18;38720:6;38717:30;38701:113;38698:146;;;38829:5;;;;38698:146;38875:6;38869:4;38865:17;38911:3;38905:10;38938:18;38930:6;38927:30;38924:43;;;38960:5;;;;;;38924:43;39008:6;39001:4;38996:3;38992:14;38988:27;39067:1;39049:16;39045:24;39039:4;39035:35;39030:3;39027:44;39024:57;;;39074:5;;;;;;;39024:57;39091;39139:6;39133:4;39129:17;39121:6;39117:30;39111:4;39091:57;:::i;:::-;39164:3;39157:10;;38505:668;;;;;38462:711;;:::o;39179:239::-;39319:34;39315:1;39307:6;39303:14;39296:58;39388:22;39383:2;39375:6;39371:15;39364:47;39179:239;:::o;39424:366::-;39566:3;39587:67;39651:2;39646:3;39587:67;:::i;:::-;39580:74;;39663:93;39752:3;39663:93;:::i;:::-;39781:2;39776:3;39772:12;39765:19;;39424:366;;;:::o;39796:419::-;39962:4;40000:2;39989:9;39985:18;39977:26;;40049:9;40043:4;40039:20;40035:1;40024:9;40020:17;40013:47;40077:131;40203:4;40077:131;:::i;:::-;40069:139;;39796:419;;;:::o;40221:227::-;40361:34;40357:1;40349:6;40345:14;40338:58;40430:10;40425:2;40417:6;40413:15;40406:35;40221:227;:::o;40454:366::-;40596:3;40617:67;40681:2;40676:3;40617:67;:::i;:::-;40610:74;;40693:93;40782:3;40693:93;:::i;:::-;40811:2;40806:3;40802:12;40795:19;;40454:366;;;:::o;40826:419::-;40992:4;41030:2;41019:9;41015:18;41007:26;;41079:9;41073:4;41069:20;41065:1;41054:9;41050:17;41043:47;41107:131;41233:4;41107:131;:::i;:::-;41099:139;;40826:419;;;:::o;41251:751::-;41474:4;41512:3;41501:9;41497:19;41489:27;;41526:71;41594:1;41583:9;41579:17;41570:6;41526:71;:::i;:::-;41607:72;41675:2;41664:9;41660:18;41651:6;41607:72;:::i;:::-;41689;41757:2;41746:9;41742:18;41733:6;41689:72;:::i;:::-;41771;41839:2;41828:9;41824:18;41815:6;41771:72;:::i;:::-;41891:9;41885:4;41881:20;41875:3;41864:9;41860:19;41853:49;41919:76;41990:4;41981:6;41919:76;:::i;:::-;41911:84;;41251:751;;;;;;;;:::o
Swarm Source
ipfs://6862de9ae3ff67e78949ccf6e423c35698c9799f34ef0ec2bcc3903ff61c231e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.