Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Reveal | 14700402 | 1407 days ago | IN | 0 ETH | 0.00493957 | ||||
| Set Base URI | 14700397 | 1407 days ago | IN | 0 ETH | 0.00565105 | ||||
| Transfer From | 14648930 | 1415 days ago | IN | 0 ETH | 0.00526007 | ||||
| Transfer From | 14609966 | 1421 days ago | IN | 0 ETH | 0.00414143 | ||||
| Paused | 14609813 | 1421 days ago | IN | 0 ETH | 0.00070599 | ||||
| Set Not Revealed... | 14600659 | 1422 days ago | IN | 0 ETH | 0.00092302 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
tobOrigins
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-04-17
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/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/utils/Strings.sol
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/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/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens whiteListedUsers
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens whiteListedUsers.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens whiteListedUsers, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the whiteListedUsers
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens whiteListedUsers.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens whiteListedUsers, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the whiteListedUsers
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: @openzeppelin/contracts/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() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(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");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
pragma solidity >=0.7.0 <0.9.0;
contract tobOrigins is ERC721Enumerable, Ownable {
using Strings for uint256;
address[] public whiteListedUsers;
string baseURI;
string public baseExtension = ".json";
string public notRevealedUri;
uint256 public cost = 0.1 ether;
uint256 public maxSupply = 5555;
uint256 public maxMintAmount = 2;
bool public pause = true;
bool public revealed = false;
bool public onlyWhitelisted = false;
constructor(
string memory _name,
string memory _symbol,
string memory _initBaseURI,
string memory _initNotRevealedUri
) ERC721(_name, _symbol) {
setBaseURI(_initBaseURI);
setNotRevealedURI(_initNotRevealedUri);
teamMint();
}
// internal
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
// public
function mint(uint256 _mintAmount) public payable {
require(!pause);
uint256 supply = totalSupply();
require(_mintAmount > 0);
require(_mintAmount <= maxMintAmount);
require(supply + _mintAmount <= maxSupply);
if (msg.sender != owner()) {
if (onlyWhitelisted){
require(isWhiteListed(msg.sender), "User is not whitelisted");
}
require(msg.value >= cost * _mintAmount);
}
for (uint256 i=0; i <= _mintAmount-1; i++) {
_safeMint(msg.sender, supply+i);
}
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++) {
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokenIds;
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
if(revealed == false) {
return notRevealedUri;
}
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, tokenId.toString()))
: "";
}
//only owner
function reveal() public onlyOwner {
revealed = true;
}
function setCost(uint256 _newCost) public onlyOwner {
cost = _newCost;
}
function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
maxMintAmount = _newmaxMintAmount;
}
function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
notRevealedUri = _notRevealedURI;
}
function setBaseURI(string memory _newBaseURI) public onlyOwner {
baseURI = _newBaseURI;
}
function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
baseExtension = _newBaseExtension;
}
function paused(bool _state) public onlyOwner {
pause = _state;
}
function withdraw() public onlyOwner {
payable(msg.sender).transfer(address(this).balance);
}
function teamMint() public onlyOwner {
uint256 supply = totalSupply();
for (uint256 i=0; i <= 111; i++) {
_safeMint(msg.sender, supply+i);
}
}
function whiteListUsers(address [] calldata _users) public onlyOwner{
delete whiteListedUsers;
whiteListedUsers = _users;
}
function isWhiteListed (address _user) internal returns (bool){
for(uint256 i = 0; i < whiteListedUsers.length; i++){
if (whiteListedUsers[i] == _user){
delete whiteListedUsers[i];
return true;
}
}
return false;
}
function setOnlyWhitelistedState (bool _state) public onlyOwner{
onlyWhitelisted = _state;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"paused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelistedState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whiteListUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whiteListedUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200005192919062000eaa565b5067016345785d8a0000600f556115b360105560026011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff021916908315150217905550348015620000c757600080fd5b506040516200615d3803806200615d8339818101604052810190620000ed919062001021565b838381600090805190602001906200010792919062000eaa565b5080600190805190602001906200012092919062000eaa565b50505062000143620001376200017f60201b60201c565b6200018760201b60201c565b62000154826200024d60201b60201c565b6200016581620002f860201b60201c565b62000175620003a360201b60201c565b50505050620017f4565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200025d6200017f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002836200048b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d39062001311565b60405180910390fd5b80600c9080519060200190620002f492919062000eaa565b5050565b620003086200017f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032e6200048b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000387576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037e9062001311565b60405180910390fd5b80600e90805190602001906200039f92919062000eaa565b5050565b620003b36200017f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003d96200048b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004299062001311565b60405180910390fd5b600062000444620004b560201b60201c565b905060005b606f8111620004875762000471338284620004659190620013bf565b620004c260201b60201c565b80806200047e9062001563565b91505062000449565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004e4828260405180602001604052806000815250620004e860201b60201c565b5050565b620004fa83836200055660201b60201c565b6200050f60008484846200073c60201b60201c565b62000551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005489062001289565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c090620012ef565b60405180910390fd5b620005da81620008f660201b60201c565b156200061d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200061490620012ab565b60405180910390fd5b62000631600083836200096260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006839190620013bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200076a8473ffffffffffffffffffffffffffffffffffffffff1662000aa960201b62001f891760201c565b15620008e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079c6200017f60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007c0949392919062001235565b602060405180830381600087803b158015620007db57600080fd5b505af19250505080156200080f57506040513d601f19601f820116820180604052508101906200080c919062000fef565b60015b62000898573d806000811462000842576040519150601f19603f3d011682016040523d82523d6000602084013e62000847565b606091505b5060008151141562000890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008879062001289565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008ee565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200097a83838362000abc60201b62001f9c1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009c757620009c18162000ac160201b60201c565b62000a0f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000a0e5762000a0d838262000b0a60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a5c5762000a568162000c8760201b60201c565b62000aa4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000aa35762000aa2828262000d6360201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b248462000def60201b620012801760201c565b62000b3091906200141c565b905060006007600084815260200190815260200160002054905081811462000c16576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c9d91906200141c565b905060006009600084815260200190815260200160002054905060006008838154811062000cd05762000ccf6200163e565b5b90600052602060002001549050806008838154811062000cf55762000cf46200163e565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d475762000d466200160f565b5b6001900381819060005260206000200160009055905550505050565b600062000d7b8362000def60201b620012801760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5a90620012cd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000eb890620014f7565b90600052602060002090601f01602090048101928262000edc576000855562000f28565b82601f1062000ef757805160ff191683800117855562000f28565b8280016001018555821562000f28579182015b8281111562000f2757825182559160200191906001019062000f0a565b5b50905062000f37919062000f3b565b5090565b5b8082111562000f5657600081600090555060010162000f3c565b5090565b600062000f7162000f6b846200135c565b62001333565b90508281526020810184848401111562000f905762000f8f620016a1565b5b62000f9d848285620014c1565b509392505050565b60008151905062000fb681620017da565b92915050565b600082601f83011262000fd45762000fd36200169c565b5b815162000fe684826020860162000f5a565b91505092915050565b600060208284031215620010085762001007620016ab565b5b6000620010188482850162000fa5565b91505092915050565b600080600080608085870312156200103e576200103d620016ab565b5b600085015167ffffffffffffffff8111156200105f576200105e620016a6565b5b6200106d8782880162000fbc565b945050602085015167ffffffffffffffff811115620010915762001090620016a6565b5b6200109f8782880162000fbc565b935050604085015167ffffffffffffffff811115620010c357620010c2620016a6565b5b620010d18782880162000fbc565b925050606085015167ffffffffffffffff811115620010f557620010f4620016a6565b5b620011038782880162000fbc565b91505092959194509250565b6200111a8162001457565b82525050565b60006200112d8262001392565b6200113981856200139d565b93506200114b818560208601620014c1565b6200115681620016b0565b840191505092915050565b600062001170603283620013ae565b91506200117d82620016c1565b604082019050919050565b600062001197601c83620013ae565b9150620011a48262001710565b602082019050919050565b6000620011be602a83620013ae565b9150620011cb8262001739565b604082019050919050565b6000620011e5602083620013ae565b9150620011f28262001788565b602082019050919050565b60006200120c602083620013ae565b91506200121982620017b1565b602082019050919050565b6200122f81620014b7565b82525050565b60006080820190506200124c60008301876200110f565b6200125b60208301866200110f565b6200126a604083018562001224565b81810360608301526200127e818462001120565b905095945050505050565b60006020820190508181036000830152620012a48162001161565b9050919050565b60006020820190508181036000830152620012c68162001188565b9050919050565b60006020820190508181036000830152620012e881620011af565b9050919050565b600060208201905081810360008301526200130a81620011d6565b9050919050565b600060208201905081810360008301526200132c81620011fd565b9050919050565b60006200133f62001352565b90506200134d82826200152d565b919050565b6000604051905090565b600067ffffffffffffffff8211156200137a57620013796200166d565b5b6200138582620016b0565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620013cc82620014b7565b9150620013d983620014b7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620014115762001410620015b1565b5b828201905092915050565b60006200142982620014b7565b91506200143683620014b7565b9250828210156200144c576200144b620015b1565b5b828203905092915050565b6000620014648262001497565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620014e1578082015181840152602081019050620014c4565b83811115620014f1576000848401525b50505050565b600060028204905060018216806200151057607f821691505b60208210811415620015275762001526620015e0565b5b50919050565b6200153882620016b0565b810181811067ffffffffffffffff821117156200155a57620015596200166d565b5b80604052505050565b60006200157082620014b7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620015a657620015a5620015b1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620017e5816200146b565b8114620017f157600080fd5b50565b61495980620018046000396000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb011461085b578063da3ef23f14610886578063e985e9c5146108af578063ed7317eb146108ec578063f2c4ce1e14610915578063f2fde38b1461093e57610246565b8063a475b5dd1461079c578063b88d4fde146107b3578063ba7a86b8146107dc578063c6682862146107f3578063c87b56dd1461081e57610246565b80638da5cb5b116100fd5780638da5cb5b146106d657806395d89b41146107015780639c70b5121461072c578063a0712d6814610757578063a22cb4651461077357610246565b806370a0823114610605578063715018a6146106425780637f00c7a614610659578063837150cf146106825780638456cb59146106ab57610246565b80633ccfd60b116101c75780634f6ccce71161018b5780634f6ccce7146104fa578063518302271461053757806355f804b31461056257806358720d931461058b5780636352211e146105c857610246565b80633ccfd60b1461042b57806342842e0e14610442578063438b63001461046b57806344a0d68a146104a8578063475fda0e146104d157610246565b806313faede61161020e57806313faede61461034457806318160ddd1461036f578063239c70ae1461039a57806323b872dd146103c55780632f745c59146103ee57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063081c8c44146102f0578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613691565b610967565b60405161027f9190613bfc565b60405180910390f35b34801561029457600080fd5b5061029d6109e1565b6040516102aa9190613c17565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613734565b610a73565b6040516102e79190613b73565b60405180910390f35b3480156102fc57600080fd5b50610305610af8565b6040516103129190613c17565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906135d7565b610b86565b005b34801561035057600080fd5b50610359610c9e565b6040516103669190613e99565b60405180910390f35b34801561037b57600080fd5b50610384610ca4565b6040516103919190613e99565b60405180910390f35b3480156103a657600080fd5b506103af610cb1565b6040516103bc9190613e99565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e791906134c1565b610cb7565b005b3480156103fa57600080fd5b50610415600480360381019061041091906135d7565b610d17565b6040516104229190613e99565b60405180910390f35b34801561043757600080fd5b50610440610dbc565b005b34801561044e57600080fd5b50610469600480360381019061046491906134c1565b610e81565b005b34801561047757600080fd5b50610492600480360381019061048d9190613454565b610ea1565b60405161049f9190613bda565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613734565b610f4f565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613617565b610fd5565b005b34801561050657600080fd5b50610521600480360381019061051c9190613734565b611075565b60405161052e9190613e99565b60405180910390f35b34801561054357600080fd5b5061054c6110e6565b6040516105599190613bfc565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906136eb565b6110f9565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613734565b61118f565b6040516105bf9190613b73565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613734565b6111ce565b6040516105fc9190613b73565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613454565b611280565b6040516106399190613e99565b60405180910390f35b34801561064e57600080fd5b50610657611338565b005b34801561066557600080fd5b50610680600480360381019061067b9190613734565b6113c0565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613664565b611446565b005b3480156106b757600080fd5b506106c06114df565b6040516106cd9190613bfc565b60405180910390f35b3480156106e257600080fd5b506106eb6114f2565b6040516106f89190613b73565b60405180910390f35b34801561070d57600080fd5b5061071661151c565b6040516107239190613c17565b60405180910390f35b34801561073857600080fd5b506107416115ae565b60405161074e9190613bfc565b60405180910390f35b610771600480360381019061076c9190613734565b6115c1565b005b34801561077f57600080fd5b5061079a60048036038101906107959190613597565b611713565b005b3480156107a857600080fd5b506107b1611894565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613514565b61192d565b005b3480156107e857600080fd5b506107f161198f565b005b3480156107ff57600080fd5b50610808611a4e565b6040516108159190613c17565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613734565b611adc565b6040516108529190613c17565b60405180910390f35b34801561086757600080fd5b50610870611c32565b60405161087d9190613e99565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906136eb565b611c38565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613481565b611cce565b6040516108e39190613bfc565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613664565b611d62565b005b34801561092157600080fd5b5061093c600480360381019061093791906136eb565b611dfb565b005b34801561094a57600080fd5b5061096560048036038101906109609190613454565b611e91565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109da57506109d982611fa1565b5b9050919050565b6060600080546109f090614182565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90614182565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050905090565b6000610a7e82612083565b610abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab490613db9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610b0590614182565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3190614182565b8015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b505050505081565b6000610b91826111ce565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613e39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c216120ef565b73ffffffffffffffffffffffffffffffffffffffff161480610c505750610c4f81610c4a6120ef565b611cce565b5b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690613d39565b60405180910390fd5b610c9983836120f7565b505050565b600f5481565b6000600880549050905090565b60115481565b610cc8610cc26120ef565b826121b0565b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613e59565b60405180910390fd5b610d1283838361228e565b505050565b6000610d2283611280565b8210610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613c39565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dc46120ef565b73ffffffffffffffffffffffffffffffffffffffff16610de26114f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613dd9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e7e573d6000803e3d6000fd5b50565b610e9c8383836040518060200160405280600081525061192d565b505050565b60606000610eae83611280565b905060008167ffffffffffffffff811115610ecc57610ecb61434a565b5b604051908082528060200260200182016040528015610efa5781602001602082028036833780820191505090505b50905060005b82811015610f4457610f128582610d17565b828281518110610f2557610f2461431b565b5b6020026020010181815250508080610f3c906141e5565b915050610f00565b508092505050919050565b610f576120ef565b73ffffffffffffffffffffffffffffffffffffffff16610f756114f2565b73ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613dd9565b60405180910390fd5b80600f8190555050565b610fdd6120ef565b73ffffffffffffffffffffffffffffffffffffffff16610ffb6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613dd9565b60405180910390fd5b600b600061105f9190613151565b8181600b9190611070929190613172565b505050565b600061107f610ca4565b82106110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613e79565b60405180910390fd5b600882815481106110d4576110d361431b565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6111016120ef565b73ffffffffffffffffffffffffffffffffffffffff1661111f6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613dd9565b60405180910390fd5b80600c908051906020019061118b929190613212565b5050565b600b818154811061119f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90613d79565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613d59565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113406120ef565b73ffffffffffffffffffffffffffffffffffffffff1661135e6114f2565b73ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613dd9565b60405180910390fd5b6113be60006124ea565b565b6113c86120ef565b73ffffffffffffffffffffffffffffffffffffffff166113e66114f2565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390613dd9565b60405180910390fd5b8060118190555050565b61144e6120ef565b73ffffffffffffffffffffffffffffffffffffffff1661146c6114f2565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613dd9565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601260009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461152b90614182565b80601f016020809104026020016040519081016040528092919081815260200182805461155790614182565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156115db57600080fd5b60006115e5610ca4565b9050600082116115f457600080fd5b60115482111561160357600080fd5b60105482826116129190613fb7565b111561161d57600080fd5b6116256114f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d057601260029054906101000a900460ff16156116b557611675336125b0565b6116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613d19565b60405180910390fd5b5b81600f546116c3919061403e565b3410156116cf57600080fd5b5b60005b6001836116e09190614098565b811161170e576116fb3382846116f69190613fb7565b6126a0565b8080611706906141e5565b9150506116d3565b505050565b61171b6120ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090613cd9565b60405180910390fd5b80600560006117966120ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118436120ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118889190613bfc565b60405180910390a35050565b61189c6120ef565b73ffffffffffffffffffffffffffffffffffffffff166118ba6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613dd9565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b61193e6119386120ef565b836121b0565b61197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490613e59565b60405180910390fd5b611989848484846126be565b50505050565b6119976120ef565b73ffffffffffffffffffffffffffffffffffffffff166119b56114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290613dd9565b60405180910390fd5b6000611a15610ca4565b905060005b606f8111611a4a57611a37338284611a329190613fb7565b6126a0565b8080611a42906141e5565b915050611a1a565b5050565b600d8054611a5b90614182565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8790614182565b8015611ad45780601f10611aa957610100808354040283529160200191611ad4565b820191906000526020600020905b815481529060010190602001808311611ab757829003601f168201915b505050505081565b6060611ae782612083565b611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613e19565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611bd457600e8054611b4f90614182565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7b90614182565b8015611bc85780601f10611b9d57610100808354040283529160200191611bc8565b820191906000526020600020905b815481529060010190602001808311611bab57829003601f168201915b50505050509050611c2d565b6000611bde61271a565b90506000815111611bfe5760405180602001604052806000815250611c29565b80611c08846127ac565b604051602001611c19929190613b4f565b6040516020818303038152906040525b9150505b919050565b60105481565b611c406120ef565b73ffffffffffffffffffffffffffffffffffffffff16611c5e6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90613dd9565b60405180910390fd5b80600d9080519060200190611cca929190613212565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6a6120ef565b73ffffffffffffffffffffffffffffffffffffffff16611d886114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590613dd9565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b611e036120ef565b73ffffffffffffffffffffffffffffffffffffffff16611e216114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e90613dd9565b60405180910390fd5b80600e9080519060200190611e8d929190613212565b5050565b611e996120ef565b73ffffffffffffffffffffffffffffffffffffffff16611eb76114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613c79565b60405180910390fd5b611f86816124ea565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061206c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061207c575061207b8261290d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661216a836111ce565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121bb82612083565b6121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190613cf9565b60405180910390fd5b6000612205836111ce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061227457508373ffffffffffffffffffffffffffffffffffffffff1661225c84610a73565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228557506122848185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122ae826111ce565b73ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90613df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613cb9565b60405180910390fd5b61237f838383612977565b61238a6000826120f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123da9190614098565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124319190613fb7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b600b80549050811015612695578273ffffffffffffffffffffffffffffffffffffffff16600b82815481106125f0576125ef61431b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561268257600b818154811061264b5761264a61431b565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600191505061269b565b808061268d906141e5565b9150506125b8565b50600090505b919050565b6126ba828260405180602001604052806000815250612a8b565b5050565b6126c984848461228e565b6126d584848484612ae6565b612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90613c59565b60405180910390fd5b50505050565b6060600c805461272990614182565b80601f016020809104026020016040519081016040528092919081815260200182805461275590614182565b80156127a25780601f10612777576101008083540402835291602001916127a2565b820191906000526020600020905b81548152906001019060200180831161278557829003601f168201915b5050505050905090565b606060008214156127f4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612908565b600082905060005b6000821461282657808061280f906141e5565b915050600a8261281f919061400d565b91506127fc565b60008167ffffffffffffffff8111156128425761284161434a565b5b6040519080825280601f01601f1916602001820160405280156128745781602001600182028036833780820191505090505b5090505b600085146129015760018261288d9190614098565b9150600a8561289c919061422e565b60306128a89190613fb7565b60f81b8183815181106128be576128bd61431b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128fa919061400d565b9450612878565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612982838383611f9c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c5576129c081612c7d565b612a04565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a0357612a028382612cc6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4757612a4281612e33565b612a86565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8557612a848282612f04565b5b5b505050565b612a958383612f83565b612aa26000848484612ae6565b612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890613c59565b60405180910390fd5b505050565b6000612b078473ffffffffffffffffffffffffffffffffffffffff16611f89565b15612c70578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b306120ef565b8786866040518563ffffffff1660e01b8152600401612b529493929190613b8e565b602060405180830381600087803b158015612b6c57600080fd5b505af1925050508015612b9d57506040513d601f19601f82011682018060405250810190612b9a91906136be565b60015b612c20573d8060008114612bcd576040519150601f19603f3d011682016040523d82523d6000602084013e612bd2565b606091505b50600081511415612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f90613c59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c75565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cd384611280565b612cdd9190614098565b9050600060076000848152602001908152602001600020549050818114612dc2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e479190614098565b9050600060096000848152602001908152602001600020549050600060088381548110612e7757612e7661431b565b5b906000526020600020015490508060088381548110612e9957612e9861431b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ee857612ee76142ec565b5b6001900381819060005260206000200160009055905550505050565b6000612f0f83611280565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fea90613d99565b60405180910390fd5b612ffc81612083565b1561303c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303390613c99565b60405180910390fd5b61304860008383612977565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130989190613fb7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b508054600082559060005260206000209081019061316f9190613298565b50565b828054828255906000526020600020908101928215613201579160200282015b8281111561320057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613192565b5b50905061320e9190613298565b5090565b82805461321e90614182565b90600052602060002090601f0160209004810192826132405760008555613287565b82601f1061325957805160ff1916838001178555613287565b82800160010185558215613287579182015b8281111561328657825182559160200191906001019061326b565b5b5090506132949190613298565b5090565b5b808211156132b1576000816000905550600101613299565b5090565b60006132c86132c384613ed9565b613eb4565b9050828152602081018484840111156132e4576132e3614388565b5b6132ef848285614140565b509392505050565b600061330a61330584613f0a565b613eb4565b90508281526020810184848401111561332657613325614388565b5b613331848285614140565b509392505050565b600081359050613348816148c7565b92915050565b60008083601f8401126133645761336361437e565b5b8235905067ffffffffffffffff81111561338157613380614379565b5b60208301915083602082028301111561339d5761339c614383565b5b9250929050565b6000813590506133b3816148de565b92915050565b6000813590506133c8816148f5565b92915050565b6000815190506133dd816148f5565b92915050565b600082601f8301126133f8576133f761437e565b5b81356134088482602086016132b5565b91505092915050565b600082601f8301126134265761342561437e565b5b81356134368482602086016132f7565b91505092915050565b60008135905061344e8161490c565b92915050565b60006020828403121561346a57613469614392565b5b600061347884828501613339565b91505092915050565b6000806040838503121561349857613497614392565b5b60006134a685828601613339565b92505060206134b785828601613339565b9150509250929050565b6000806000606084860312156134da576134d9614392565b5b60006134e886828701613339565b93505060206134f986828701613339565b925050604061350a8682870161343f565b9150509250925092565b6000806000806080858703121561352e5761352d614392565b5b600061353c87828801613339565b945050602061354d87828801613339565b935050604061355e8782880161343f565b925050606085013567ffffffffffffffff81111561357f5761357e61438d565b5b61358b878288016133e3565b91505092959194509250565b600080604083850312156135ae576135ad614392565b5b60006135bc85828601613339565b92505060206135cd858286016133a4565b9150509250929050565b600080604083850312156135ee576135ed614392565b5b60006135fc85828601613339565b925050602061360d8582860161343f565b9150509250929050565b6000806020838503121561362e5761362d614392565b5b600083013567ffffffffffffffff81111561364c5761364b61438d565b5b6136588582860161334e565b92509250509250929050565b60006020828403121561367a57613679614392565b5b6000613688848285016133a4565b91505092915050565b6000602082840312156136a7576136a6614392565b5b60006136b5848285016133b9565b91505092915050565b6000602082840312156136d4576136d3614392565b5b60006136e2848285016133ce565b91505092915050565b60006020828403121561370157613700614392565b5b600082013567ffffffffffffffff81111561371f5761371e61438d565b5b61372b84828501613411565b91505092915050565b60006020828403121561374a57613749614392565b5b60006137588482850161343f565b91505092915050565b600061376d8383613b31565b60208301905092915050565b613782816140cc565b82525050565b600061379382613f4b565b61379d8185613f79565b93506137a883613f3b565b8060005b838110156137d95781516137c08882613761565b97506137cb83613f6c565b9250506001810190506137ac565b5085935050505092915050565b6137ef816140de565b82525050565b600061380082613f56565b61380a8185613f8a565b935061381a81856020860161414f565b61382381614397565b840191505092915050565b600061383982613f61565b6138438185613f9b565b935061385381856020860161414f565b61385c81614397565b840191505092915050565b600061387282613f61565b61387c8185613fac565b935061388c81856020860161414f565b80840191505092915050565b60006138a5602b83613f9b565b91506138b0826143a8565b604082019050919050565b60006138c8603283613f9b565b91506138d3826143f7565b604082019050919050565b60006138eb602683613f9b565b91506138f682614446565b604082019050919050565b600061390e601c83613f9b565b915061391982614495565b602082019050919050565b6000613931602483613f9b565b915061393c826144be565b604082019050919050565b6000613954601983613f9b565b915061395f8261450d565b602082019050919050565b6000613977602c83613f9b565b915061398282614536565b604082019050919050565b600061399a601783613f9b565b91506139a582614585565b602082019050919050565b60006139bd603883613f9b565b91506139c8826145ae565b604082019050919050565b60006139e0602a83613f9b565b91506139eb826145fd565b604082019050919050565b6000613a03602983613f9b565b9150613a0e8261464c565b604082019050919050565b6000613a26602083613f9b565b9150613a318261469b565b602082019050919050565b6000613a49602c83613f9b565b9150613a54826146c4565b604082019050919050565b6000613a6c602083613f9b565b9150613a7782614713565b602082019050919050565b6000613a8f602983613f9b565b9150613a9a8261473c565b604082019050919050565b6000613ab2602f83613f9b565b9150613abd8261478b565b604082019050919050565b6000613ad5602183613f9b565b9150613ae0826147da565b604082019050919050565b6000613af8603183613f9b565b9150613b0382614829565b604082019050919050565b6000613b1b602c83613f9b565b9150613b2682614878565b604082019050919050565b613b3a81614136565b82525050565b613b4981614136565b82525050565b6000613b5b8285613867565b9150613b678284613867565b91508190509392505050565b6000602082019050613b886000830184613779565b92915050565b6000608082019050613ba36000830187613779565b613bb06020830186613779565b613bbd6040830185613b40565b8181036060830152613bcf81846137f5565b905095945050505050565b60006020820190508181036000830152613bf48184613788565b905092915050565b6000602082019050613c1160008301846137e6565b92915050565b60006020820190508181036000830152613c31818461382e565b905092915050565b60006020820190508181036000830152613c5281613898565b9050919050565b60006020820190508181036000830152613c72816138bb565b9050919050565b60006020820190508181036000830152613c92816138de565b9050919050565b60006020820190508181036000830152613cb281613901565b9050919050565b60006020820190508181036000830152613cd281613924565b9050919050565b60006020820190508181036000830152613cf281613947565b9050919050565b60006020820190508181036000830152613d128161396a565b9050919050565b60006020820190508181036000830152613d328161398d565b9050919050565b60006020820190508181036000830152613d52816139b0565b9050919050565b60006020820190508181036000830152613d72816139d3565b9050919050565b60006020820190508181036000830152613d92816139f6565b9050919050565b60006020820190508181036000830152613db281613a19565b9050919050565b60006020820190508181036000830152613dd281613a3c565b9050919050565b60006020820190508181036000830152613df281613a5f565b9050919050565b60006020820190508181036000830152613e1281613a82565b9050919050565b60006020820190508181036000830152613e3281613aa5565b9050919050565b60006020820190508181036000830152613e5281613ac8565b9050919050565b60006020820190508181036000830152613e7281613aeb565b9050919050565b60006020820190508181036000830152613e9281613b0e565b9050919050565b6000602082019050613eae6000830184613b40565b92915050565b6000613ebe613ecf565b9050613eca82826141b4565b919050565b6000604051905090565b600067ffffffffffffffff821115613ef457613ef361434a565b5b613efd82614397565b9050602081019050919050565b600067ffffffffffffffff821115613f2557613f2461434a565b5b613f2e82614397565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fc282614136565b9150613fcd83614136565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140025761400161425f565b5b828201905092915050565b600061401882614136565b915061402383614136565b9250826140335761403261428e565b5b828204905092915050565b600061404982614136565b915061405483614136565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561408d5761408c61425f565b5b828202905092915050565b60006140a382614136565b91506140ae83614136565b9250828210156140c1576140c061425f565b5b828203905092915050565b60006140d782614116565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561416d578082015181840152602081019050614152565b8381111561417c576000848401525b50505050565b6000600282049050600182168061419a57607f821691505b602082108114156141ae576141ad6142bd565b5b50919050565b6141bd82614397565b810181811067ffffffffffffffff821117156141dc576141db61434a565b5b80604052505050565b60006141f082614136565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142235761422261425f565b5b600182019050919050565b600061423982614136565b915061424483614136565b9250826142545761425361428e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6148d0816140cc565b81146148db57600080fd5b50565b6148e7816140de565b81146148f257600080fd5b50565b6148fe816140ea565b811461490957600080fd5b50565b61491581614136565b811461492057600080fd5b5056fea2646970667358221220c77be0a3c7bb6fd58f281e3b2d25c80028d2d226cec442f5518406cb27f538b164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000b546f42204f726967696e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004546f424f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e6972365044447978354c5238324b735a455a656b5772333174637859696b527345577935684a57597561752f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e61576d7a33554e5537753934453145464875415946527365335a7873625258397933564d535655714756762f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb011461085b578063da3ef23f14610886578063e985e9c5146108af578063ed7317eb146108ec578063f2c4ce1e14610915578063f2fde38b1461093e57610246565b8063a475b5dd1461079c578063b88d4fde146107b3578063ba7a86b8146107dc578063c6682862146107f3578063c87b56dd1461081e57610246565b80638da5cb5b116100fd5780638da5cb5b146106d657806395d89b41146107015780639c70b5121461072c578063a0712d6814610757578063a22cb4651461077357610246565b806370a0823114610605578063715018a6146106425780637f00c7a614610659578063837150cf146106825780638456cb59146106ab57610246565b80633ccfd60b116101c75780634f6ccce71161018b5780634f6ccce7146104fa578063518302271461053757806355f804b31461056257806358720d931461058b5780636352211e146105c857610246565b80633ccfd60b1461042b57806342842e0e14610442578063438b63001461046b57806344a0d68a146104a8578063475fda0e146104d157610246565b806313faede61161020e57806313faede61461034457806318160ddd1461036f578063239c70ae1461039a57806323b872dd146103c55780632f745c59146103ee57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063081c8c44146102f0578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613691565b610967565b60405161027f9190613bfc565b60405180910390f35b34801561029457600080fd5b5061029d6109e1565b6040516102aa9190613c17565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613734565b610a73565b6040516102e79190613b73565b60405180910390f35b3480156102fc57600080fd5b50610305610af8565b6040516103129190613c17565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906135d7565b610b86565b005b34801561035057600080fd5b50610359610c9e565b6040516103669190613e99565b60405180910390f35b34801561037b57600080fd5b50610384610ca4565b6040516103919190613e99565b60405180910390f35b3480156103a657600080fd5b506103af610cb1565b6040516103bc9190613e99565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e791906134c1565b610cb7565b005b3480156103fa57600080fd5b50610415600480360381019061041091906135d7565b610d17565b6040516104229190613e99565b60405180910390f35b34801561043757600080fd5b50610440610dbc565b005b34801561044e57600080fd5b50610469600480360381019061046491906134c1565b610e81565b005b34801561047757600080fd5b50610492600480360381019061048d9190613454565b610ea1565b60405161049f9190613bda565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca9190613734565b610f4f565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613617565b610fd5565b005b34801561050657600080fd5b50610521600480360381019061051c9190613734565b611075565b60405161052e9190613e99565b60405180910390f35b34801561054357600080fd5b5061054c6110e6565b6040516105599190613bfc565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906136eb565b6110f9565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613734565b61118f565b6040516105bf9190613b73565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613734565b6111ce565b6040516105fc9190613b73565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613454565b611280565b6040516106399190613e99565b60405180910390f35b34801561064e57600080fd5b50610657611338565b005b34801561066557600080fd5b50610680600480360381019061067b9190613734565b6113c0565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613664565b611446565b005b3480156106b757600080fd5b506106c06114df565b6040516106cd9190613bfc565b60405180910390f35b3480156106e257600080fd5b506106eb6114f2565b6040516106f89190613b73565b60405180910390f35b34801561070d57600080fd5b5061071661151c565b6040516107239190613c17565b60405180910390f35b34801561073857600080fd5b506107416115ae565b60405161074e9190613bfc565b60405180910390f35b610771600480360381019061076c9190613734565b6115c1565b005b34801561077f57600080fd5b5061079a60048036038101906107959190613597565b611713565b005b3480156107a857600080fd5b506107b1611894565b005b3480156107bf57600080fd5b506107da60048036038101906107d59190613514565b61192d565b005b3480156107e857600080fd5b506107f161198f565b005b3480156107ff57600080fd5b50610808611a4e565b6040516108159190613c17565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613734565b611adc565b6040516108529190613c17565b60405180910390f35b34801561086757600080fd5b50610870611c32565b60405161087d9190613e99565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a891906136eb565b611c38565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613481565b611cce565b6040516108e39190613bfc565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613664565b611d62565b005b34801561092157600080fd5b5061093c600480360381019061093791906136eb565b611dfb565b005b34801561094a57600080fd5b5061096560048036038101906109609190613454565b611e91565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109da57506109d982611fa1565b5b9050919050565b6060600080546109f090614182565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90614182565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b5050505050905090565b6000610a7e82612083565b610abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab490613db9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610b0590614182565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3190614182565b8015610b7e5780601f10610b5357610100808354040283529160200191610b7e565b820191906000526020600020905b815481529060010190602001808311610b6157829003601f168201915b505050505081565b6000610b91826111ce565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613e39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c216120ef565b73ffffffffffffffffffffffffffffffffffffffff161480610c505750610c4f81610c4a6120ef565b611cce565b5b610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690613d39565b60405180910390fd5b610c9983836120f7565b505050565b600f5481565b6000600880549050905090565b60115481565b610cc8610cc26120ef565b826121b0565b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613e59565b60405180910390fd5b610d1283838361228e565b505050565b6000610d2283611280565b8210610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613c39565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dc46120ef565b73ffffffffffffffffffffffffffffffffffffffff16610de26114f2565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613dd9565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e7e573d6000803e3d6000fd5b50565b610e9c8383836040518060200160405280600081525061192d565b505050565b60606000610eae83611280565b905060008167ffffffffffffffff811115610ecc57610ecb61434a565b5b604051908082528060200260200182016040528015610efa5781602001602082028036833780820191505090505b50905060005b82811015610f4457610f128582610d17565b828281518110610f2557610f2461431b565b5b6020026020010181815250508080610f3c906141e5565b915050610f00565b508092505050919050565b610f576120ef565b73ffffffffffffffffffffffffffffffffffffffff16610f756114f2565b73ffffffffffffffffffffffffffffffffffffffff1614610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc290613dd9565b60405180910390fd5b80600f8190555050565b610fdd6120ef565b73ffffffffffffffffffffffffffffffffffffffff16610ffb6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613dd9565b60405180910390fd5b600b600061105f9190613151565b8181600b9190611070929190613172565b505050565b600061107f610ca4565b82106110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b790613e79565b60405180910390fd5b600882815481106110d4576110d361431b565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6111016120ef565b73ffffffffffffffffffffffffffffffffffffffff1661111f6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613dd9565b60405180910390fd5b80600c908051906020019061118b929190613212565b5050565b600b818154811061119f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90613d79565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e890613d59565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113406120ef565b73ffffffffffffffffffffffffffffffffffffffff1661135e6114f2565b73ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613dd9565b60405180910390fd5b6113be60006124ea565b565b6113c86120ef565b73ffffffffffffffffffffffffffffffffffffffff166113e66114f2565b73ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390613dd9565b60405180910390fd5b8060118190555050565b61144e6120ef565b73ffffffffffffffffffffffffffffffffffffffff1661146c6114f2565b73ffffffffffffffffffffffffffffffffffffffff16146114c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b990613dd9565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601260009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461152b90614182565b80601f016020809104026020016040519081016040528092919081815260200182805461155790614182565b80156115a45780601f10611579576101008083540402835291602001916115a4565b820191906000526020600020905b81548152906001019060200180831161158757829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156115db57600080fd5b60006115e5610ca4565b9050600082116115f457600080fd5b60115482111561160357600080fd5b60105482826116129190613fb7565b111561161d57600080fd5b6116256114f2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d057601260029054906101000a900460ff16156116b557611675336125b0565b6116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90613d19565b60405180910390fd5b5b81600f546116c3919061403e565b3410156116cf57600080fd5b5b60005b6001836116e09190614098565b811161170e576116fb3382846116f69190613fb7565b6126a0565b8080611706906141e5565b9150506116d3565b505050565b61171b6120ef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090613cd9565b60405180910390fd5b80600560006117966120ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118436120ef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118889190613bfc565b60405180910390a35050565b61189c6120ef565b73ffffffffffffffffffffffffffffffffffffffff166118ba6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613dd9565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b61193e6119386120ef565b836121b0565b61197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197490613e59565b60405180910390fd5b611989848484846126be565b50505050565b6119976120ef565b73ffffffffffffffffffffffffffffffffffffffff166119b56114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290613dd9565b60405180910390fd5b6000611a15610ca4565b905060005b606f8111611a4a57611a37338284611a329190613fb7565b6126a0565b8080611a42906141e5565b915050611a1a565b5050565b600d8054611a5b90614182565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8790614182565b8015611ad45780601f10611aa957610100808354040283529160200191611ad4565b820191906000526020600020905b815481529060010190602001808311611ab757829003601f168201915b505050505081565b6060611ae782612083565b611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613e19565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611bd457600e8054611b4f90614182565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7b90614182565b8015611bc85780601f10611b9d57610100808354040283529160200191611bc8565b820191906000526020600020905b815481529060010190602001808311611bab57829003601f168201915b50505050509050611c2d565b6000611bde61271a565b90506000815111611bfe5760405180602001604052806000815250611c29565b80611c08846127ac565b604051602001611c19929190613b4f565b6040516020818303038152906040525b9150505b919050565b60105481565b611c406120ef565b73ffffffffffffffffffffffffffffffffffffffff16611c5e6114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90613dd9565b60405180910390fd5b80600d9080519060200190611cca929190613212565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d6a6120ef565b73ffffffffffffffffffffffffffffffffffffffff16611d886114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590613dd9565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b611e036120ef565b73ffffffffffffffffffffffffffffffffffffffff16611e216114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e90613dd9565b60405180910390fd5b80600e9080519060200190611e8d929190613212565b5050565b611e996120ef565b73ffffffffffffffffffffffffffffffffffffffff16611eb76114f2565b73ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490613dd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613c79565b60405180910390fd5b611f86816124ea565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061206c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061207c575061207b8261290d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661216a836111ce565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121bb82612083565b6121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190613cf9565b60405180910390fd5b6000612205836111ce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061227457508373ffffffffffffffffffffffffffffffffffffffff1661225c84610a73565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228557506122848185611cce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122ae826111ce565b73ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90613df9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613cb9565b60405180910390fd5b61237f838383612977565b61238a6000826120f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123da9190614098565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124319190613fb7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b600b80549050811015612695578273ffffffffffffffffffffffffffffffffffffffff16600b82815481106125f0576125ef61431b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561268257600b818154811061264b5761264a61431b565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600191505061269b565b808061268d906141e5565b9150506125b8565b50600090505b919050565b6126ba828260405180602001604052806000815250612a8b565b5050565b6126c984848461228e565b6126d584848484612ae6565b612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90613c59565b60405180910390fd5b50505050565b6060600c805461272990614182565b80601f016020809104026020016040519081016040528092919081815260200182805461275590614182565b80156127a25780601f10612777576101008083540402835291602001916127a2565b820191906000526020600020905b81548152906001019060200180831161278557829003601f168201915b5050505050905090565b606060008214156127f4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612908565b600082905060005b6000821461282657808061280f906141e5565b915050600a8261281f919061400d565b91506127fc565b60008167ffffffffffffffff8111156128425761284161434a565b5b6040519080825280601f01601f1916602001820160405280156128745781602001600182028036833780820191505090505b5090505b600085146129015760018261288d9190614098565b9150600a8561289c919061422e565b60306128a89190613fb7565b60f81b8183815181106128be576128bd61431b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128fa919061400d565b9450612878565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612982838383611f9c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c5576129c081612c7d565b612a04565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a0357612a028382612cc6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a4757612a4281612e33565b612a86565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8557612a848282612f04565b5b5b505050565b612a958383612f83565b612aa26000848484612ae6565b612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890613c59565b60405180910390fd5b505050565b6000612b078473ffffffffffffffffffffffffffffffffffffffff16611f89565b15612c70578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b306120ef565b8786866040518563ffffffff1660e01b8152600401612b529493929190613b8e565b602060405180830381600087803b158015612b6c57600080fd5b505af1925050508015612b9d57506040513d601f19601f82011682018060405250810190612b9a91906136be565b60015b612c20573d8060008114612bcd576040519150601f19603f3d011682016040523d82523d6000602084013e612bd2565b606091505b50600081511415612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f90613c59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c75565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cd384611280565b612cdd9190614098565b9050600060076000848152602001908152602001600020549050818114612dc2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e479190614098565b9050600060096000848152602001908152602001600020549050600060088381548110612e7757612e7661431b565b5b906000526020600020015490508060088381548110612e9957612e9861431b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ee857612ee76142ec565b5b6001900381819060005260206000200160009055905550505050565b6000612f0f83611280565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fea90613d99565b60405180910390fd5b612ffc81612083565b1561303c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303390613c99565b60405180910390fd5b61304860008383612977565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130989190613fb7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b508054600082559060005260206000209081019061316f9190613298565b50565b828054828255906000526020600020908101928215613201579160200282015b8281111561320057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613192565b5b50905061320e9190613298565b5090565b82805461321e90614182565b90600052602060002090601f0160209004810192826132405760008555613287565b82601f1061325957805160ff1916838001178555613287565b82800160010185558215613287579182015b8281111561328657825182559160200191906001019061326b565b5b5090506132949190613298565b5090565b5b808211156132b1576000816000905550600101613299565b5090565b60006132c86132c384613ed9565b613eb4565b9050828152602081018484840111156132e4576132e3614388565b5b6132ef848285614140565b509392505050565b600061330a61330584613f0a565b613eb4565b90508281526020810184848401111561332657613325614388565b5b613331848285614140565b509392505050565b600081359050613348816148c7565b92915050565b60008083601f8401126133645761336361437e565b5b8235905067ffffffffffffffff81111561338157613380614379565b5b60208301915083602082028301111561339d5761339c614383565b5b9250929050565b6000813590506133b3816148de565b92915050565b6000813590506133c8816148f5565b92915050565b6000815190506133dd816148f5565b92915050565b600082601f8301126133f8576133f761437e565b5b81356134088482602086016132b5565b91505092915050565b600082601f8301126134265761342561437e565b5b81356134368482602086016132f7565b91505092915050565b60008135905061344e8161490c565b92915050565b60006020828403121561346a57613469614392565b5b600061347884828501613339565b91505092915050565b6000806040838503121561349857613497614392565b5b60006134a685828601613339565b92505060206134b785828601613339565b9150509250929050565b6000806000606084860312156134da576134d9614392565b5b60006134e886828701613339565b93505060206134f986828701613339565b925050604061350a8682870161343f565b9150509250925092565b6000806000806080858703121561352e5761352d614392565b5b600061353c87828801613339565b945050602061354d87828801613339565b935050604061355e8782880161343f565b925050606085013567ffffffffffffffff81111561357f5761357e61438d565b5b61358b878288016133e3565b91505092959194509250565b600080604083850312156135ae576135ad614392565b5b60006135bc85828601613339565b92505060206135cd858286016133a4565b9150509250929050565b600080604083850312156135ee576135ed614392565b5b60006135fc85828601613339565b925050602061360d8582860161343f565b9150509250929050565b6000806020838503121561362e5761362d614392565b5b600083013567ffffffffffffffff81111561364c5761364b61438d565b5b6136588582860161334e565b92509250509250929050565b60006020828403121561367a57613679614392565b5b6000613688848285016133a4565b91505092915050565b6000602082840312156136a7576136a6614392565b5b60006136b5848285016133b9565b91505092915050565b6000602082840312156136d4576136d3614392565b5b60006136e2848285016133ce565b91505092915050565b60006020828403121561370157613700614392565b5b600082013567ffffffffffffffff81111561371f5761371e61438d565b5b61372b84828501613411565b91505092915050565b60006020828403121561374a57613749614392565b5b60006137588482850161343f565b91505092915050565b600061376d8383613b31565b60208301905092915050565b613782816140cc565b82525050565b600061379382613f4b565b61379d8185613f79565b93506137a883613f3b565b8060005b838110156137d95781516137c08882613761565b97506137cb83613f6c565b9250506001810190506137ac565b5085935050505092915050565b6137ef816140de565b82525050565b600061380082613f56565b61380a8185613f8a565b935061381a81856020860161414f565b61382381614397565b840191505092915050565b600061383982613f61565b6138438185613f9b565b935061385381856020860161414f565b61385c81614397565b840191505092915050565b600061387282613f61565b61387c8185613fac565b935061388c81856020860161414f565b80840191505092915050565b60006138a5602b83613f9b565b91506138b0826143a8565b604082019050919050565b60006138c8603283613f9b565b91506138d3826143f7565b604082019050919050565b60006138eb602683613f9b565b91506138f682614446565b604082019050919050565b600061390e601c83613f9b565b915061391982614495565b602082019050919050565b6000613931602483613f9b565b915061393c826144be565b604082019050919050565b6000613954601983613f9b565b915061395f8261450d565b602082019050919050565b6000613977602c83613f9b565b915061398282614536565b604082019050919050565b600061399a601783613f9b565b91506139a582614585565b602082019050919050565b60006139bd603883613f9b565b91506139c8826145ae565b604082019050919050565b60006139e0602a83613f9b565b91506139eb826145fd565b604082019050919050565b6000613a03602983613f9b565b9150613a0e8261464c565b604082019050919050565b6000613a26602083613f9b565b9150613a318261469b565b602082019050919050565b6000613a49602c83613f9b565b9150613a54826146c4565b604082019050919050565b6000613a6c602083613f9b565b9150613a7782614713565b602082019050919050565b6000613a8f602983613f9b565b9150613a9a8261473c565b604082019050919050565b6000613ab2602f83613f9b565b9150613abd8261478b565b604082019050919050565b6000613ad5602183613f9b565b9150613ae0826147da565b604082019050919050565b6000613af8603183613f9b565b9150613b0382614829565b604082019050919050565b6000613b1b602c83613f9b565b9150613b2682614878565b604082019050919050565b613b3a81614136565b82525050565b613b4981614136565b82525050565b6000613b5b8285613867565b9150613b678284613867565b91508190509392505050565b6000602082019050613b886000830184613779565b92915050565b6000608082019050613ba36000830187613779565b613bb06020830186613779565b613bbd6040830185613b40565b8181036060830152613bcf81846137f5565b905095945050505050565b60006020820190508181036000830152613bf48184613788565b905092915050565b6000602082019050613c1160008301846137e6565b92915050565b60006020820190508181036000830152613c31818461382e565b905092915050565b60006020820190508181036000830152613c5281613898565b9050919050565b60006020820190508181036000830152613c72816138bb565b9050919050565b60006020820190508181036000830152613c92816138de565b9050919050565b60006020820190508181036000830152613cb281613901565b9050919050565b60006020820190508181036000830152613cd281613924565b9050919050565b60006020820190508181036000830152613cf281613947565b9050919050565b60006020820190508181036000830152613d128161396a565b9050919050565b60006020820190508181036000830152613d328161398d565b9050919050565b60006020820190508181036000830152613d52816139b0565b9050919050565b60006020820190508181036000830152613d72816139d3565b9050919050565b60006020820190508181036000830152613d92816139f6565b9050919050565b60006020820190508181036000830152613db281613a19565b9050919050565b60006020820190508181036000830152613dd281613a3c565b9050919050565b60006020820190508181036000830152613df281613a5f565b9050919050565b60006020820190508181036000830152613e1281613a82565b9050919050565b60006020820190508181036000830152613e3281613aa5565b9050919050565b60006020820190508181036000830152613e5281613ac8565b9050919050565b60006020820190508181036000830152613e7281613aeb565b9050919050565b60006020820190508181036000830152613e9281613b0e565b9050919050565b6000602082019050613eae6000830184613b40565b92915050565b6000613ebe613ecf565b9050613eca82826141b4565b919050565b6000604051905090565b600067ffffffffffffffff821115613ef457613ef361434a565b5b613efd82614397565b9050602081019050919050565b600067ffffffffffffffff821115613f2557613f2461434a565b5b613f2e82614397565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fc282614136565b9150613fcd83614136565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140025761400161425f565b5b828201905092915050565b600061401882614136565b915061402383614136565b9250826140335761403261428e565b5b828204905092915050565b600061404982614136565b915061405483614136565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561408d5761408c61425f565b5b828202905092915050565b60006140a382614136565b91506140ae83614136565b9250828210156140c1576140c061425f565b5b828203905092915050565b60006140d782614116565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561416d578082015181840152602081019050614152565b8381111561417c576000848401525b50505050565b6000600282049050600182168061419a57607f821691505b602082108114156141ae576141ad6142bd565b5b50919050565b6141bd82614397565b810181811067ffffffffffffffff821117156141dc576141db61434a565b5b80604052505050565b60006141f082614136565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142235761422261425f565b5b600182019050919050565b600061423982614136565b915061424483614136565b9250826142545761425361428e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f55736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6148d0816140cc565b81146148db57600080fd5b50565b6148e7816140de565b81146148f257600080fd5b50565b6148fe816140ea565b811461490957600080fd5b50565b61491581614136565b811461492057600080fd5b5056fea2646970667358221220c77be0a3c7bb6fd58f281e3b2d25c80028d2d226cec442f5518406cb27f538b164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000b546f42204f726967696e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004546f424f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e6972365044447978354c5238324b735a455a656b5772333174637859696b527345577935684a57597561752f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e61576d7a33554e5537753934453145464875415946527365335a7873625258397933564d535655714756762f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ToB Origins
Arg [1] : _symbol (string): ToBO
Arg [2] : _initBaseURI (string): https://ipfs.io/ipfs/QmNir6PDDyx5LR82KsZEZekWr31tcxYikRsEWy5hJWYuau/
Arg [3] : _initNotRevealedUri (string): https://ipfs.io/ipfs/QmNaWmz3UNU7u94E1EFHuAYFRse3ZxsbRX9y3VMSVUqGVv/
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 546f42204f726967696e73000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 546f424f00000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [9] : 68747470733a2f2f697066732e696f2f697066732f516d4e6972365044447978
Arg [10] : 354c5238324b735a455a656b5772333174637859696b527345577935684a5759
Arg [11] : 7561752f00000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [13] : 68747470733a2f2f697066732e696f2f697066732f516d4e61576d7a33554e55
Arg [14] : 37753934453145464875415946527365335a7873625258397933564d53565571
Arg [15] : 4756762f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43192:3878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34673:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22554:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24113:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43377:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23636:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43410:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35313:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43482:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25003:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34981:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46238:101;;;;;;;;;;;;;:::i;:::-;;25413:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44655:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45586:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46520:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35503:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43549:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45922:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43278:33;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22248:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21978:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42528:94;;;;;;;;;;;;;:::i;:::-;;45672:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46158:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43519:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41877:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22723:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43583:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44033:614;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24406:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45513:65;;;;;;;;;;;;;:::i;:::-;;25669:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46345:169;;;;;;;;;;;;;:::i;:::-;;43335:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45009:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43446:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46028:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24772:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46961:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45796:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42777:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34673:224;34775:4;34814:35;34799:50;;;:11;:50;;;;:90;;;;34853:36;34877:11;34853:23;:36::i;:::-;34799:90;34792:97;;34673:224;;;:::o;22554:100::-;22608:13;22641:5;22634:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22554:100;:::o;24113:221::-;24189:7;24217:16;24225:7;24217;:16::i;:::-;24209:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24302:15;:24;24318:7;24302:24;;;;;;;;;;;;;;;;;;;;;24295:31;;24113:221;;;:::o;43377:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23636:411::-;23717:13;23733:23;23748:7;23733:14;:23::i;:::-;23717:39;;23781:5;23775:11;;:2;:11;;;;23767:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23875:5;23859:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23884:37;23901:5;23908:12;:10;:12::i;:::-;23884:16;:37::i;:::-;23859:62;23837:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24018:21;24027:2;24031:7;24018:8;:21::i;:::-;23706:341;23636:411;;:::o;43410:31::-;;;;:::o;35313:113::-;35374:7;35401:10;:17;;;;35394:24;;35313:113;:::o;43482:32::-;;;;:::o;25003:339::-;25198:41;25217:12;:10;:12::i;:::-;25231:7;25198:18;:41::i;:::-;25190:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25306:28;25316:4;25322:2;25326:7;25306:9;:28::i;:::-;25003:339;;;:::o;34981:256::-;35078:7;35114:23;35131:5;35114:16;:23::i;:::-;35106:5;:31;35098:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35203:12;:19;35216:5;35203:19;;;;;;;;;;;;;;;:26;35223:5;35203:26;;;;;;;;;;;;35196:33;;34981:256;;;;:::o;46238:101::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46290:10:::1;46282:28;;:51;46311:21;46282:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46238:101::o:0;25413:185::-;25551:39;25568:4;25574:2;25578:7;25551:39;;;;;;;;;;;;:16;:39::i;:::-;25413:185;;;:::o;44655:348::-;44730:16;44758:23;44784:17;44794:6;44784:9;:17::i;:::-;44758:43;;44808:25;44850:15;44836:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44808:58;;44878:9;44873:103;44893:15;44889:1;:19;44873:103;;;44938:30;44958:6;44966:1;44938:19;:30::i;:::-;44924:8;44933:1;44924:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44910:3;;;;;:::i;:::-;;;;44873:103;;;;44989:8;44982:15;;;;44655:348;;;:::o;45586:80::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45652:8:::1;45645:4;:15;;;;45586:80:::0;:::o;46520:140::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46604:16:::1;;46597:23;;;;:::i;:::-;46648:6;;46629:16;:25;;;;;;;:::i;:::-;;46520:140:::0;;:::o;35503:233::-;35578:7;35614:30;:28;:30::i;:::-;35606:5;:38;35598:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35711:10;35722:5;35711:17;;;;;;;;:::i;:::-;;;;;;;;;;35704:24;;35503:233;;;:::o;43549:28::-;;;;;;;;;;;;;:::o;45922:98::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46003:11:::1;45993:7;:21;;;;;;;;;;;;:::i;:::-;;45922:98:::0;:::o;43278:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22248:239::-;22320:7;22340:13;22356:7;:16;22364:7;22356:16;;;;;;;;;;;;;;;;;;;;;22340:32;;22408:1;22391:19;;:5;:19;;;;22383:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22474:5;22467:12;;;22248:239;;;:::o;21978:208::-;22050:7;22095:1;22078:19;;:5;:19;;;;22070:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:9;:16;22172:5;22162:16;;;;;;;;;;;;;;;;22155:23;;21978:208;;;:::o;42528:94::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42593:21:::1;42611:1;42593:9;:21::i;:::-;42528:94::o:0;45672:116::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45765:17:::1;45749:13;:33;;;;45672:116:::0;:::o;46158:73::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46219:6:::1;46211:5;;:14;;;;;;;;;;;;;;;;;;46158:73:::0;:::o;43519:24::-;;;;;;;;;;;;;:::o;41877:87::-;41923:7;41950:6;;;;;;;;;;;41943:13;;41877:87;:::o;22723:104::-;22779:13;22812:7;22805:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22723:104;:::o;43583:35::-;;;;;;;;;;;;;:::o;44033:614::-;44103:5;;;;;;;;;;;44102:6;44094:15;;;;;;44120:14;44137:13;:11;:13::i;:::-;44120:30;;44183:1;44169:11;:15;44161:24;;;;;;44219:13;;44204:11;:28;;44196:37;;;;;;44276:9;;44261:11;44252:6;:20;;;;:::i;:::-;:33;;44244:42;;;;;;44317:7;:5;:7::i;:::-;44303:21;;:10;:21;;;44299:224;;44345:15;;;;;;;;;;;44341:116;;;44388:25;44402:10;44388:13;:25::i;:::-;44380:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44341:116;44499:11;44492:4;;:18;;;;:::i;:::-;44479:9;:31;;44471:40;;;;;;44299:224;44540:9;44535:101;44570:1;44558:11;:13;;;;:::i;:::-;44553:1;:18;44535:101;;44593:31;44603:10;44622:1;44615:6;:8;;;;:::i;:::-;44593:9;:31::i;:::-;44573:3;;;;;:::i;:::-;;;;44535:101;;;;44083:564;44033:614;:::o;24406:295::-;24521:12;:10;:12::i;:::-;24509:24;;:8;:24;;;;24501:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24621:8;24576:18;:32;24595:12;:10;:12::i;:::-;24576:32;;;;;;;;;;;;;;;:42;24609:8;24576:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24674:8;24645:48;;24660:12;:10;:12::i;:::-;24645:48;;;24684:8;24645:48;;;;;;:::i;:::-;;;;;;;;24406:295;;:::o;45513:65::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45568:4:::1;45557:8;;:15;;;;;;;;;;;;;;;;;;45513:65::o:0;25669:328::-;25844:41;25863:12;:10;:12::i;:::-;25877:7;25844:18;:41::i;:::-;25836:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25950:39;25964:4;25970:2;25974:7;25983:5;25950:13;:39::i;:::-;25669:328;;;;:::o;46345:169::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46389:14:::1;46406:13;:11;:13::i;:::-;46389:30;;46431:9;46426:83;46449:3;46444:1;:8;46426:83;;46470:31;46480:10;46499:1;46492:6;:8;;;;:::i;:::-;46470:9;:31::i;:::-;46454:3;;;;;:::i;:::-;;;;46426:83;;;;46382:132;46345:169::o:0;43335:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45009:482::-;45107:13;45148:16;45156:7;45148;:16::i;:::-;45132:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45257:5;45245:17;;:8;;;;;;;;;;;:17;;;45242:62;;;45282:14;45275:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45242:62;45312:28;45343:10;:8;:10::i;:::-;45312:41;;45398:1;45373:14;45367:28;:32;:118;;;;;;;;;;;;;;;;;45435:14;45451:18;:7;:16;:18::i;:::-;45418:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45367:118;45360:125;;;45009:482;;;;:::o;43446:31::-;;;;:::o;46028:122::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46127:17:::1;46111:13;:33;;;;;;;;;;;;:::i;:::-;;46028:122:::0;:::o;24772:164::-;24869:4;24893:18;:25;24912:5;24893:25;;;;;;;;;;;;;;;:35;24919:8;24893:35;;;;;;;;;;;;;;;;;;;;;;;;;24886:42;;24772:164;;;;:::o;46961:104::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47053:6:::1;47035:15;;:24;;;;;;;;;;;;;;;;;;46961:104:::0;:::o;45796:120::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45895:15:::1;45878:14;:32;;;;;;;;;;;;:::i;:::-;;45796:120:::0;:::o;42777:192::-;42108:12;:10;:12::i;:::-;42097:23;;:7;:5;:7::i;:::-;:23;;;42089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42886:1:::1;42866:22;;:8;:22;;;;42858:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42942:19;42952:8;42942:9;:19::i;:::-;42777:192:::0;:::o;10440:387::-;10500:4;10708:12;10775:7;10763:20;10755:28;;10818:1;10811:4;:8;10804:15;;;10440:387;;;:::o;33599:126::-;;;;:::o;21609:305::-;21711:4;21763:25;21748:40;;;:11;:40;;;;:105;;;;21820:33;21805:48;;;:11;:48;;;;21748:105;:158;;;;21870:36;21894:11;21870:23;:36::i;:::-;21748:158;21728:178;;21609:305;;;:::o;27507:127::-;27572:4;27624:1;27596:30;;:7;:16;27604:7;27596:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27589:37;;27507:127;;;:::o;20083:98::-;20136:7;20163:10;20156:17;;20083:98;:::o;31489:174::-;31591:2;31564:15;:24;31580:7;31564:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31647:7;31643:2;31609:46;;31618:23;31633:7;31618:14;:23::i;:::-;31609:46;;;;;;;;;;;;31489:174;;:::o;27801:348::-;27894:4;27919:16;27927:7;27919;:16::i;:::-;27911:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27995:13;28011:23;28026:7;28011:14;:23::i;:::-;27995:39;;28064:5;28053:16;;:7;:16;;;:51;;;;28097:7;28073:31;;:20;28085:7;28073:11;:20::i;:::-;:31;;;28053:51;:87;;;;28108:32;28125:5;28132:7;28108:16;:32::i;:::-;28053:87;28045:96;;;27801:348;;;;:::o;30793:578::-;30952:4;30925:31;;:23;30940:7;30925:14;:23::i;:::-;:31;;;30917:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31035:1;31021:16;;:2;:16;;;;31013:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31091:39;31112:4;31118:2;31122:7;31091:20;:39::i;:::-;31195:29;31212:1;31216:7;31195:8;:29::i;:::-;31256:1;31237:9;:15;31247:4;31237:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31285:1;31268:9;:13;31278:2;31268:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31316:2;31297:7;:16;31305:7;31297:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31355:7;31351:2;31336:27;;31345:4;31336:27;;;;;;;;;;;;30793:578;;;:::o;42977:173::-;43033:16;43052:6;;;;;;;;;;;43033:25;;43078:8;43069:6;;:17;;;;;;;;;;;;;;;;;;43133:8;43102:40;;43123:8;43102:40;;;;;;;;;;;;43022:128;42977:173;:::o;46666:289::-;46723:4;46741:9;46753:1;46741:13;;46737:192;46760:16;:23;;;;46756:1;:27;46737:192;;;46829:5;46806:28;;:16;46823:1;46806:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:28;;;46802:118;;;46859:16;46876:1;46859:19;;;;;;;;:::i;:::-;;;;;;;;;;46852:26;;;;;;;;;;;46902:4;46895:11;;;;;46802:118;46785:3;;;;;:::i;:::-;;;;46737:192;;;;46944:5;46937:12;;46666:289;;;;:::o;28491:110::-;28567:26;28577:2;28581:7;28567:26;;;;;;;;;;;;:9;:26::i;:::-;28491:110;;:::o;26879:315::-;27036:28;27046:4;27052:2;27056:7;27036:9;:28::i;:::-;27083:48;27106:4;27112:2;27116:7;27125:5;27083:22;:48::i;:::-;27075:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26879:315;;;;:::o;43912:102::-;43972:13;44001:7;43994:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43912:102;:::o;7915:723::-;7971:13;8201:1;8192:5;:10;8188:53;;;8219:10;;;;;;;;;;;;;;;;;;;;;8188:53;8251:12;8266:5;8251:20;;8282:14;8307:78;8322:1;8314:4;:9;8307:78;;8340:8;;;;;:::i;:::-;;;;8371:2;8363:10;;;;;:::i;:::-;;;8307:78;;;8395:19;8427:6;8417:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8395:39;;8445:154;8461:1;8452:5;:10;8445:154;;8489:1;8479:11;;;;;:::i;:::-;;;8556:2;8548:5;:10;;;;:::i;:::-;8535:2;:24;;;;:::i;:::-;8522:39;;8505:6;8512;8505:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8585:2;8576:11;;;;;:::i;:::-;;;8445:154;;;8623:6;8609:21;;;;;7915:723;;;;:::o;7440:157::-;7525:4;7564:25;7549:40;;;:11;:40;;;;7542:47;;7440:157;;;:::o;36349:589::-;36493:45;36520:4;36526:2;36530:7;36493:26;:45::i;:::-;36571:1;36555:18;;:4;:18;;;36551:187;;;36590:40;36622:7;36590:31;:40::i;:::-;36551:187;;;36660:2;36652:10;;:4;:10;;;36648:90;;36679:47;36712:4;36718:7;36679:32;:47::i;:::-;36648:90;36551:187;36766:1;36752:16;;:2;:16;;;36748:183;;;36785:45;36822:7;36785:36;:45::i;:::-;36748:183;;;36858:4;36852:10;;:2;:10;;;36848:83;;36879:40;36907:2;36911:7;36879:27;:40::i;:::-;36848:83;36748:183;36349:589;;;:::o;28828:321::-;28958:18;28964:2;28968:7;28958:5;:18::i;:::-;29009:54;29040:1;29044:2;29048:7;29057:5;29009:22;:54::i;:::-;28987:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:321;;;:::o;32228:799::-;32383:4;32404:15;:2;:13;;;:15::i;:::-;32400:620;;;32456:2;32440:36;;;32477:12;:10;:12::i;:::-;32491:4;32497:7;32506:5;32440:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32436:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32699:1;32682:6;:13;:18;32678:272;;;32725:60;;;;;;;;;;:::i;:::-;;;;;;;;32678:272;32900:6;32894:13;32885:6;32881:2;32877:15;32870:38;32436:529;32573:41;;;32563:51;;;:6;:51;;;;32556:58;;;;;32400:620;33004:4;32997:11;;32228:799;;;;;;;:::o;37661:164::-;37765:10;:17;;;;37738:15;:24;37754:7;37738:24;;;;;;;;;;;:44;;;;37793:10;37809:7;37793:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37661:164;:::o;38463:1010::-;38740:22;38790:1;38765:22;38782:4;38765:16;:22::i;:::-;:26;;;;:::i;:::-;38740:51;;38802:18;38823:17;:26;38841:7;38823:26;;;;;;;;;;;;38802:47;;38970:14;38956:10;:28;38952:328;;39001:19;39023:12;:18;39036:4;39023:18;;;;;;;;;;;;;;;:34;39042:14;39023:34;;;;;;;;;;;;39001:56;;39107:11;39074:12;:18;39087:4;39074:18;;;;;;;;;;;;;;;:30;39093:10;39074:30;;;;;;;;;;;:44;;;;39224:10;39191:17;:30;39209:11;39191:30;;;;;;;;;;;:43;;;;38986:294;38952:328;39387:17;:26;39405:7;39387:26;;;;;;;;;;;39380:33;;;39431:12;:18;39444:4;39431:18;;;;;;;;;;;;;;;:34;39450:14;39431:34;;;;;;;;;;;39424:41;;;38544:929;;38463:1010;;:::o;39779:1101::-;40043:22;40088:1;40068:10;:17;;;;:21;;;;:::i;:::-;40043:46;;40100:18;40121:15;:24;40137:7;40121:24;;;;;;;;;;;;40100:45;;40472:19;40494:10;40505:14;40494:26;;;;;;;;:::i;:::-;;;;;;;;;;40472:48;;40558:11;40533:10;40544;40533:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40669:10;40638:15;:28;40654:11;40638:28;;;;;;;;;;;:41;;;;40821:15;:24;40837:7;40821:24;;;;;;;;;;;40814:31;;;40856:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39850:1030;;;39779:1101;:::o;37239:221::-;37324:14;37341:20;37358:2;37341:16;:20::i;:::-;37324:37;;37399:7;37372:12;:16;37385:2;37372:16;;;;;;;;;;;;;;;:24;37389:6;37372:24;;;;;;;;;;;:34;;;;37446:6;37417:17;:26;37435:7;37417:26;;;;;;;;;;;:35;;;;37313:147;37239:221;;:::o;29485:382::-;29579:1;29565:16;;:2;:16;;;;29557:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29638:16;29646:7;29638;:16::i;:::-;29637:17;29629:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29700:45;29729:1;29733:2;29737:7;29700:20;:45::i;:::-;29775:1;29758:9;:13;29768:2;29758:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29806:2;29787:7;:16;29795:7;29787:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29851:7;29847:2;29826:33;;29843:1;29826:33;;;;;;;;;;;;29485:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10954:366::-;11096:3;11117:67;11181:2;11176:3;11117:67;:::i;:::-;11110:74;;11193:93;11282:3;11193:93;:::i;:::-;11311:2;11306:3;11302:12;11295:19;;10954:366;;;:::o;11326:::-;11468:3;11489:67;11553:2;11548:3;11489:67;:::i;:::-;11482:74;;11565:93;11654:3;11565:93;:::i;:::-;11683:2;11678:3;11674:12;11667:19;;11326:366;;;:::o;11698:::-;11840:3;11861:67;11925:2;11920:3;11861:67;:::i;:::-;11854:74;;11937:93;12026:3;11937:93;:::i;:::-;12055:2;12050:3;12046:12;12039:19;;11698:366;;;:::o;12070:::-;12212:3;12233:67;12297:2;12292:3;12233:67;:::i;:::-;12226:74;;12309:93;12398:3;12309:93;:::i;:::-;12427:2;12422:3;12418:12;12411:19;;12070:366;;;:::o;12442:::-;12584:3;12605:67;12669:2;12664:3;12605:67;:::i;:::-;12598:74;;12681:93;12770:3;12681:93;:::i;:::-;12799:2;12794:3;12790:12;12783:19;;12442:366;;;:::o;12814:::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12814:366;;;:::o;13186:::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:::-;13700:3;13721:67;13785:2;13780:3;13721:67;:::i;:::-;13714:74;;13797:93;13886:3;13797:93;:::i;:::-;13915:2;13910:3;13906:12;13899:19;;13558:366;;;:::o;13930:::-;14072:3;14093:67;14157:2;14152:3;14093:67;:::i;:::-;14086:74;;14169:93;14258:3;14169:93;:::i;:::-;14287:2;14282:3;14278:12;14271:19;;13930:366;;;:::o;14302:::-;14444:3;14465:67;14529:2;14524:3;14465:67;:::i;:::-;14458:74;;14541:93;14630:3;14541:93;:::i;:::-;14659:2;14654:3;14650:12;14643:19;;14302:366;;;:::o;14674:::-;14816:3;14837:67;14901:2;14896:3;14837:67;:::i;:::-;14830:74;;14913:93;15002:3;14913:93;:::i;:::-;15031:2;15026:3;15022:12;15015:19;;14674:366;;;:::o;15046:::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:::-;15560:3;15581:67;15645:2;15640:3;15581:67;:::i;:::-;15574:74;;15657:93;15746:3;15657:93;:::i;:::-;15775:2;15770:3;15766:12;15759:19;;15418:366;;;:::o;15790:::-;15932:3;15953:67;16017:2;16012:3;15953:67;:::i;:::-;15946:74;;16029:93;16118:3;16029:93;:::i;:::-;16147:2;16142:3;16138:12;16131:19;;15790:366;;;:::o;16162:::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:::-;16676:3;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16534:366;;;:::o;16906:::-;17048:3;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;16906:366;;;:::o;17278:::-;17420:3;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17278:366;;;:::o;17650:::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:108::-;18099:24;18117:5;18099:24;:::i;:::-;18094:3;18087:37;18022:108;;:::o;18136:118::-;18223:24;18241:5;18223:24;:::i;:::-;18218:3;18211:37;18136:118;;:::o;18260:435::-;18440:3;18462:95;18553:3;18544:6;18462:95;:::i;:::-;18455:102;;18574:95;18665:3;18656:6;18574:95;:::i;:::-;18567:102;;18686:3;18679:10;;18260:435;;;;;:::o;18701:222::-;18794:4;18832:2;18821:9;18817:18;18809:26;;18845:71;18913:1;18902:9;18898:17;18889:6;18845:71;:::i;:::-;18701:222;;;;:::o;18929:640::-;19124:4;19162:3;19151:9;19147:19;19139:27;;19176:71;19244:1;19233:9;19229:17;19220:6;19176:71;:::i;:::-;19257:72;19325:2;19314:9;19310:18;19301:6;19257:72;:::i;:::-;19339;19407:2;19396:9;19392:18;19383:6;19339:72;:::i;:::-;19458:9;19452:4;19448:20;19443:2;19432:9;19428:18;19421:48;19486:76;19557:4;19548:6;19486:76;:::i;:::-;19478:84;;18929:640;;;;;;;:::o;19575:373::-;19718:4;19756:2;19745:9;19741:18;19733:26;;19805:9;19799:4;19795:20;19791:1;19780:9;19776:17;19769:47;19833:108;19936:4;19927:6;19833:108;:::i;:::-;19825:116;;19575:373;;;;:::o;19954:210::-;20041:4;20079:2;20068:9;20064:18;20056:26;;20092:65;20154:1;20143:9;20139:17;20130:6;20092:65;:::i;:::-;19954:210;;;;:::o;20170:313::-;20283:4;20321:2;20310:9;20306:18;20298:26;;20370:9;20364:4;20360:20;20356:1;20345:9;20341:17;20334:47;20398:78;20471:4;20462:6;20398:78;:::i;:::-;20390:86;;20170:313;;;;:::o;20489:419::-;20655:4;20693:2;20682:9;20678:18;20670:26;;20742:9;20736:4;20732:20;20728:1;20717:9;20713:17;20706:47;20770:131;20896:4;20770:131;:::i;:::-;20762:139;;20489:419;;;:::o;20914:::-;21080:4;21118:2;21107:9;21103:18;21095:26;;21167:9;21161:4;21157:20;21153:1;21142:9;21138:17;21131:47;21195:131;21321:4;21195:131;:::i;:::-;21187:139;;20914:419;;;:::o;21339:::-;21505:4;21543:2;21532:9;21528:18;21520:26;;21592:9;21586:4;21582:20;21578:1;21567:9;21563:17;21556:47;21620:131;21746:4;21620:131;:::i;:::-;21612:139;;21339:419;;;:::o;21764:::-;21930:4;21968:2;21957:9;21953:18;21945:26;;22017:9;22011:4;22007:20;22003:1;21992:9;21988:17;21981:47;22045:131;22171:4;22045:131;:::i;:::-;22037:139;;21764:419;;;:::o;22189:::-;22355:4;22393:2;22382:9;22378:18;22370:26;;22442:9;22436:4;22432:20;22428:1;22417:9;22413:17;22406:47;22470:131;22596:4;22470:131;:::i;:::-;22462:139;;22189:419;;;:::o;22614:::-;22780:4;22818:2;22807:9;22803:18;22795:26;;22867:9;22861:4;22857:20;22853:1;22842:9;22838:17;22831:47;22895:131;23021:4;22895:131;:::i;:::-;22887:139;;22614:419;;;:::o;23039:::-;23205:4;23243:2;23232:9;23228:18;23220:26;;23292:9;23286:4;23282:20;23278:1;23267:9;23263:17;23256:47;23320:131;23446:4;23320:131;:::i;:::-;23312:139;;23039:419;;;:::o;23464:::-;23630:4;23668:2;23657:9;23653:18;23645:26;;23717:9;23711:4;23707:20;23703:1;23692:9;23688:17;23681:47;23745:131;23871:4;23745:131;:::i;:::-;23737:139;;23464:419;;;:::o;23889:::-;24055:4;24093:2;24082:9;24078:18;24070:26;;24142:9;24136:4;24132:20;24128:1;24117:9;24113:17;24106:47;24170:131;24296:4;24170:131;:::i;:::-;24162:139;;23889:419;;;:::o;24314:::-;24480:4;24518:2;24507:9;24503:18;24495:26;;24567:9;24561:4;24557:20;24553:1;24542:9;24538:17;24531:47;24595:131;24721:4;24595:131;:::i;:::-;24587:139;;24314:419;;;:::o;24739:::-;24905:4;24943:2;24932:9;24928:18;24920:26;;24992:9;24986:4;24982:20;24978:1;24967:9;24963:17;24956:47;25020:131;25146:4;25020:131;:::i;:::-;25012:139;;24739:419;;;:::o;25164:::-;25330:4;25368:2;25357:9;25353:18;25345:26;;25417:9;25411:4;25407:20;25403:1;25392:9;25388:17;25381:47;25445:131;25571:4;25445:131;:::i;:::-;25437:139;;25164:419;;;:::o;25589:::-;25755:4;25793:2;25782:9;25778:18;25770:26;;25842:9;25836:4;25832:20;25828:1;25817:9;25813:17;25806:47;25870:131;25996:4;25870:131;:::i;:::-;25862:139;;25589:419;;;:::o;26014:::-;26180:4;26218:2;26207:9;26203:18;26195:26;;26267:9;26261:4;26257:20;26253:1;26242:9;26238:17;26231:47;26295:131;26421:4;26295:131;:::i;:::-;26287:139;;26014:419;;;:::o;26439:::-;26605:4;26643:2;26632:9;26628:18;26620:26;;26692:9;26686:4;26682:20;26678:1;26667:9;26663:17;26656:47;26720:131;26846:4;26720:131;:::i;:::-;26712:139;;26439:419;;;:::o;26864:::-;27030:4;27068:2;27057:9;27053:18;27045:26;;27117:9;27111:4;27107:20;27103:1;27092:9;27088:17;27081:47;27145:131;27271:4;27145:131;:::i;:::-;27137:139;;26864:419;;;:::o;27289:::-;27455:4;27493:2;27482:9;27478:18;27470:26;;27542:9;27536:4;27532:20;27528:1;27517:9;27513:17;27506:47;27570:131;27696:4;27570:131;:::i;:::-;27562:139;;27289:419;;;:::o;27714:::-;27880:4;27918:2;27907:9;27903:18;27895:26;;27967:9;27961:4;27957:20;27953:1;27942:9;27938:17;27931:47;27995:131;28121:4;27995:131;:::i;:::-;27987:139;;27714:419;;;:::o;28139:::-;28305:4;28343:2;28332:9;28328:18;28320:26;;28392:9;28386:4;28382:20;28378:1;28367:9;28363:17;28356:47;28420:131;28546:4;28420:131;:::i;:::-;28412:139;;28139:419;;;:::o;28564:222::-;28657:4;28695:2;28684:9;28680:18;28672:26;;28708:71;28776:1;28765:9;28761:17;28752:6;28708:71;:::i;:::-;28564:222;;;;:::o;28792:129::-;28826:6;28853:20;;:::i;:::-;28843:30;;28882:33;28910:4;28902:6;28882:33;:::i;:::-;28792:129;;;:::o;28927:75::-;28960:6;28993:2;28987:9;28977:19;;28927:75;:::o;29008:307::-;29069:4;29159:18;29151:6;29148:30;29145:56;;;29181:18;;:::i;:::-;29145:56;29219:29;29241:6;29219:29;:::i;:::-;29211:37;;29303:4;29297;29293:15;29285:23;;29008:307;;;:::o;29321:308::-;29383:4;29473:18;29465:6;29462:30;29459:56;;;29495:18;;:::i;:::-;29459:56;29533:29;29555:6;29533:29;:::i;:::-;29525:37;;29617:4;29611;29607:15;29599:23;;29321:308;;;:::o;29635:132::-;29702:4;29725:3;29717:11;;29755:4;29750:3;29746:14;29738:22;;29635:132;;;:::o;29773:114::-;29840:6;29874:5;29868:12;29858:22;;29773:114;;;:::o;29893:98::-;29944:6;29978:5;29972:12;29962:22;;29893:98;;;:::o;29997:99::-;30049:6;30083:5;30077:12;30067:22;;29997:99;;;:::o;30102:113::-;30172:4;30204;30199:3;30195:14;30187:22;;30102:113;;;:::o;30221:184::-;30320:11;30354:6;30349:3;30342:19;30394:4;30389:3;30385:14;30370:29;;30221:184;;;;:::o;30411:168::-;30494:11;30528:6;30523:3;30516:19;30568:4;30563:3;30559:14;30544:29;;30411:168;;;;:::o;30585:169::-;30669:11;30703:6;30698:3;30691:19;30743:4;30738:3;30734:14;30719:29;;30585:169;;;;:::o;30760:148::-;30862:11;30899:3;30884:18;;30760:148;;;;:::o;30914:305::-;30954:3;30973:20;30991:1;30973:20;:::i;:::-;30968:25;;31007:20;31025:1;31007:20;:::i;:::-;31002:25;;31161:1;31093:66;31089:74;31086:1;31083:81;31080:107;;;31167:18;;:::i;:::-;31080:107;31211:1;31208;31204:9;31197:16;;30914:305;;;;:::o;31225:185::-;31265:1;31282:20;31300:1;31282:20;:::i;:::-;31277:25;;31316:20;31334:1;31316:20;:::i;:::-;31311:25;;31355:1;31345:35;;31360:18;;:::i;:::-;31345:35;31402:1;31399;31395:9;31390:14;;31225:185;;;;:::o;31416:348::-;31456:7;31479:20;31497:1;31479:20;:::i;:::-;31474:25;;31513:20;31531:1;31513:20;:::i;:::-;31508:25;;31701:1;31633:66;31629:74;31626:1;31623:81;31618:1;31611:9;31604:17;31600:105;31597:131;;;31708:18;;:::i;:::-;31597:131;31756:1;31753;31749:9;31738:20;;31416:348;;;;:::o;31770:191::-;31810:4;31830:20;31848:1;31830:20;:::i;:::-;31825:25;;31864:20;31882:1;31864:20;:::i;:::-;31859:25;;31903:1;31900;31897:8;31894:34;;;31908:18;;:::i;:::-;31894:34;31953:1;31950;31946:9;31938:17;;31770:191;;;;:::o;31967:96::-;32004:7;32033:24;32051:5;32033:24;:::i;:::-;32022:35;;31967:96;;;:::o;32069:90::-;32103:7;32146:5;32139:13;32132:21;32121:32;;32069:90;;;:::o;32165:149::-;32201:7;32241:66;32234:5;32230:78;32219:89;;32165:149;;;:::o;32320:126::-;32357:7;32397:42;32390:5;32386:54;32375:65;;32320:126;;;:::o;32452:77::-;32489:7;32518:5;32507:16;;32452:77;;;:::o;32535:154::-;32619:6;32614:3;32609;32596:30;32681:1;32672:6;32667:3;32663:16;32656:27;32535:154;;;:::o;32695:307::-;32763:1;32773:113;32787:6;32784:1;32781:13;32773:113;;;32872:1;32867:3;32863:11;32857:18;32853:1;32848:3;32844:11;32837:39;32809:2;32806:1;32802:10;32797:15;;32773:113;;;32904:6;32901:1;32898:13;32895:101;;;32984:1;32975:6;32970:3;32966:16;32959:27;32895:101;32744:258;32695:307;;;:::o;33008:320::-;33052:6;33089:1;33083:4;33079:12;33069:22;;33136:1;33130:4;33126:12;33157:18;33147:81;;33213:4;33205:6;33201:17;33191:27;;33147:81;33275:2;33267:6;33264:14;33244:18;33241:38;33238:84;;;33294:18;;:::i;:::-;33238:84;33059:269;33008:320;;;:::o;33334:281::-;33417:27;33439:4;33417:27;:::i;:::-;33409:6;33405:40;33547:6;33535:10;33532:22;33511:18;33499:10;33496:34;33493:62;33490:88;;;33558:18;;:::i;:::-;33490:88;33598:10;33594:2;33587:22;33377:238;33334:281;;:::o;33621:233::-;33660:3;33683:24;33701:5;33683:24;:::i;:::-;33674:33;;33729:66;33722:5;33719:77;33716:103;;;33799:18;;:::i;:::-;33716:103;33846:1;33839:5;33835:13;33828:20;;33621:233;;;:::o;33860:176::-;33892:1;33909:20;33927:1;33909:20;:::i;:::-;33904:25;;33943:20;33961:1;33943:20;:::i;:::-;33938:25;;33982:1;33972:35;;33987:18;;:::i;:::-;33972:35;34028:1;34025;34021:9;34016:14;;33860:176;;;;:::o;34042:180::-;34090:77;34087:1;34080:88;34187:4;34184:1;34177:15;34211:4;34208:1;34201:15;34228:180;34276:77;34273:1;34266:88;34373:4;34370:1;34363:15;34397:4;34394:1;34387:15;34414:180;34462:77;34459:1;34452:88;34559:4;34556:1;34549:15;34583:4;34580:1;34573:15;34600:180;34648:77;34645:1;34638:88;34745:4;34742:1;34735:15;34769:4;34766:1;34759:15;34786:180;34834:77;34831:1;34824:88;34931:4;34928:1;34921:15;34955:4;34952:1;34945:15;34972:180;35020:77;35017:1;35010:88;35117:4;35114:1;35107:15;35141:4;35138:1;35131:15;35158:117;35267:1;35264;35257:12;35281:117;35390:1;35387;35380:12;35404:117;35513:1;35510;35503:12;35527:117;35636:1;35633;35626:12;35650:117;35759:1;35756;35749:12;35773:117;35882:1;35879;35872:12;35896:102;35937:6;35988:2;35984:7;35979:2;35972:5;35968:14;35964:28;35954:38;;35896:102;;;:::o;36004:230::-;36144:34;36140:1;36132:6;36128:14;36121:58;36213:13;36208:2;36200:6;36196:15;36189:38;36004:230;:::o;36240:237::-;36380:34;36376:1;36368:6;36364:14;36357:58;36449:20;36444:2;36436:6;36432:15;36425:45;36240:237;:::o;36483:225::-;36623:34;36619:1;36611:6;36607:14;36600:58;36692:8;36687:2;36679:6;36675:15;36668:33;36483:225;:::o;36714:178::-;36854:30;36850:1;36842:6;36838:14;36831:54;36714:178;:::o;36898:223::-;37038:34;37034:1;37026:6;37022:14;37015:58;37107:6;37102:2;37094:6;37090:15;37083:31;36898:223;:::o;37127:175::-;37267:27;37263:1;37255:6;37251:14;37244:51;37127:175;:::o;37308:231::-;37448:34;37444:1;37436:6;37432:14;37425:58;37517:14;37512:2;37504:6;37500:15;37493:39;37308:231;:::o;37545:173::-;37685:25;37681:1;37673:6;37669:14;37662:49;37545:173;:::o;37724:243::-;37864:34;37860:1;37852:6;37848:14;37841:58;37933:26;37928:2;37920:6;37916:15;37909:51;37724:243;:::o;37973:229::-;38113:34;38109:1;38101:6;38097:14;38090:58;38182:12;38177:2;38169:6;38165:15;38158:37;37973:229;:::o;38208:228::-;38348:34;38344:1;38336:6;38332:14;38325:58;38417:11;38412:2;38404:6;38400:15;38393:36;38208:228;:::o;38442:182::-;38582:34;38578:1;38570:6;38566:14;38559:58;38442:182;:::o;38630:231::-;38770:34;38766:1;38758:6;38754:14;38747:58;38839:14;38834:2;38826:6;38822:15;38815:39;38630:231;:::o;38867:182::-;39007:34;39003:1;38995:6;38991:14;38984:58;38867:182;:::o;39055:228::-;39195:34;39191:1;39183:6;39179:14;39172:58;39264:11;39259:2;39251:6;39247:15;39240:36;39055:228;:::o;39289:234::-;39429:34;39425:1;39417:6;39413:14;39406:58;39498:17;39493:2;39485:6;39481:15;39474:42;39289:234;:::o;39529:220::-;39669:34;39665:1;39657:6;39653:14;39646:58;39738:3;39733:2;39725:6;39721:15;39714:28;39529:220;:::o;39755:236::-;39895:34;39891:1;39883:6;39879:14;39872:58;39964:19;39959:2;39951:6;39947:15;39940:44;39755:236;:::o;39997:231::-;40137:34;40133:1;40125:6;40121:14;40114:58;40206:14;40201:2;40193:6;40189:15;40182:39;39997:231;:::o;40234:122::-;40307:24;40325:5;40307:24;:::i;:::-;40300:5;40297:35;40287:63;;40346:1;40343;40336:12;40287:63;40234:122;:::o;40362:116::-;40432:21;40447:5;40432:21;:::i;:::-;40425:5;40422:32;40412:60;;40468:1;40465;40458:12;40412:60;40362:116;:::o;40484:120::-;40556:23;40573:5;40556:23;:::i;:::-;40549:5;40546:34;40536:62;;40594:1;40591;40584:12;40536:62;40484:120;:::o;40610:122::-;40683:24;40701:5;40683:24;:::i;:::-;40676:5;40673:35;40663:63;;40722:1;40719;40712:12;40663:63;40610:122;:::o
Swarm Source
ipfs://c77be0a3c7bb6fd58f281e3b2d25c80028d2d226cec442f5518406cb27f538b1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.