Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 51 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 17964920 | 917 days ago | IN | 0 ETH | 0.0015177 | ||||
| Mint Meta World | 13346894 | 1604 days ago | IN | 0 ETH | 0.00530504 | ||||
| Mint Meta World | 13346843 | 1604 days ago | IN | 0 ETH | 0.00470773 | ||||
| Mint Meta World | 13346827 | 1604 days ago | IN | 0 ETH | 0.00606435 | ||||
| Mint Meta World | 13346654 | 1604 days ago | IN | 0 ETH | 0.00602052 | ||||
| Mint Meta World | 13345047 | 1604 days ago | IN | 0 ETH | 0.00518833 | ||||
| Mint Meta World | 13345033 | 1604 days ago | IN | 0 ETH | 0.00420027 | ||||
| Mint Meta World | 13345020 | 1604 days ago | IN | 0 ETH | 0.00488996 | ||||
| Mint Meta World | 13345005 | 1604 days ago | IN | 0 ETH | 0.00570491 | ||||
| Mint Meta World | 13344989 | 1604 days ago | IN | 0 ETH | 0.00576857 | ||||
| Mint Meta World | 13344976 | 1604 days ago | IN | 0 ETH | 0.00496849 | ||||
| Mint Meta World | 13344957 | 1604 days ago | IN | 0 ETH | 0.00169707 | ||||
| Mint Meta World | 13344957 | 1604 days ago | IN | 0 ETH | 0.00169707 | ||||
| Mint Meta World | 13344955 | 1604 days ago | IN | 0 ETH | 0.00555217 | ||||
| Mint Meta World | 13344941 | 1604 days ago | IN | 0 ETH | 0.00189077 | ||||
| Mint Meta World | 13344941 | 1604 days ago | IN | 0 ETH | 0.00615068 | ||||
| Mint Meta World | 13344926 | 1604 days ago | IN | 0 ETH | 0.00528484 | ||||
| Mint Meta World | 13344915 | 1604 days ago | IN | 0 ETH | 0.00196654 | ||||
| Mint Meta World | 13344915 | 1604 days ago | IN | 0 ETH | 0.00196654 | ||||
| Mint Meta World | 13344914 | 1604 days ago | IN | 0 ETH | 0.00197969 | ||||
| Mint Meta World | 13344912 | 1604 days ago | IN | 0 ETH | 0.00725435 | ||||
| Mint Meta World | 13344894 | 1604 days ago | IN | 0 ETH | 0.00294235 | ||||
| Mint Meta World | 13344894 | 1604 days ago | IN | 0 ETH | 0.00294235 | ||||
| Mint Meta World | 13344894 | 1604 days ago | IN | 0 ETH | 0.00957145 | ||||
| Mint Meta World | 13344875 | 1604 days ago | IN | 0 ETH | 0.00752078 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MetaWorld
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-10-02
*/
// SPDX-License-Identifier: SimPL-3.0
pragma solidity ^0.8.7;
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);
}
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;
}
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);
}
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);
}
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);
}
}
}
}
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);
}
}
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
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 {}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
library Base64 {
bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/// @notice Encodes some bytes to the base64 representation
function encode(bytes memory data) internal pure returns (string memory) {
uint256 len = data.length;
if (len == 0) return "";
// multiply by 4/3 rounded up
uint256 encodedLen = 4 * ((len + 2) / 3);
// Add some extra buffer at the end
bytes memory result = new bytes(encodedLen + 32);
bytes memory table = TABLE;
assembly {
let tablePtr := add(table, 1)
let resultPtr := add(result, 32)
for {
let i := 0
} lt(i, len) {
} {
i := add(i, 3)
let input := and(mload(add(data, i)), 0xffffff)
let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
out := shl(8, out)
out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
out := shl(224, out)
mstore(resultPtr, out)
resultPtr := add(resultPtr, 4)
}
switch mod(len, 3)
case 1 {
mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
}
case 2 {
mstore(sub(resultPtr, 1), shl(248, 0x3d))
}
mstore(result, encodedLen)
}
return string(result);
}
}
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
contract MetaWorld is Ownable, ERC721,ReentrancyGuard{
struct MetaWorldToken {
uint rarity;
uint[] namespaces;
mapping(uint => string[]) attributes;
mapping(uint => uint8) soldCount;
}
uint8 public intervalCount = 33;
uint8 public blockCount = 10;
uint public maxSupply = 1000000;
uint public namespaceCount = 1;
uint public blockNum;
address private externalAddress;
MetaWorldToken[] public metaWorlds;
mapping(uint => string[][]) private allNamespaces;
event NamespaceCreated(uint indexed namespaceId);
event NewMetaWorldCreated(address indexed _creater,uint indexed tokenId);
event TransAttribute(uint indexed toTokenId,uint indexed fromTokenId,uint indexed namespaceId);
event SetAttribute(uint indexed tokenId,uint indexed namespaceId);
//构造函数
constructor() ERC721("MetaWorld", "MetaWorld") onlyOwner {
blockNum = block.number;
}
//externalAddress is market contract address
function setExternalAddress(address _externalAddress) onlyOwner external{
externalAddress = _externalAddress;
}
function renounceOwnership() public override onlyOwner {
}
//intervalCount is count for owner
function setLimit(uint8 _intervalCount,uint8 _blockCount,uint _maxSupply) onlyOwner external{
intervalCount = _intervalCount;
blockCount = _blockCount;
maxSupply = _maxSupply;
}
function mintMetaWorld() external nonReentrant{
require(blockNum < block.number,"every block can mint one nft");
require(metaWorlds.length <= maxSupply,"no supply");
if(metaWorlds.length % intervalCount == 0){
_createMetaWorld(owner());
}
_createMetaWorld(msg.sender);
blockNum=block.number+blockCount;
}
function _createMetaWorld(address _minter) private {
metaWorlds.push();
uint _id = metaWorlds.length-1;
metaWorlds[_id].rarity = _id*block.difficulty;
_safeMint(_minter, _id);
emit NewMetaWorldCreated(_minter,_id);
}
function setNameSpacesAttribute(uint _namespaceId,string[][] memory _keyAndvalues) external onlyOwner {
require(_namespaceId == namespaceCount,"require id == namespaceCount");
allNamespaces[_namespaceId] = _keyAndvalues;
namespaceCount++;
emit NamespaceCreated(_namespaceId);
}
function isExistNamespace(uint _tokenId,uint _namespaceId) public view returns(bool,uint){
uint[] storage _namespaces = metaWorlds[_tokenId].namespaces;
uint _nullIndex = 0;
bool _isExist = false;
for(uint i=0;i<_namespaces.length;i++){
if(_nullIndex == 0 && _namespaces[i] == 0){
_nullIndex = i;
}
if(_namespaces[i] == _namespaceId){
_isExist = true;
break;
}
}
return (_isExist,_nullIndex);
}
function transAttribute(uint _toTokenId,uint _fromTokenId,uint _namespaceId) external nonReentrant{
require(msg.sender == externalAddress,"no permit");
MetaWorldToken storage _sellerMetaWorld = metaWorlds[_fromTokenId];
MetaWorldToken storage _buyerMetaWorld = metaWorlds[_toTokenId];
bool _isExist;
uint _nullIndex;
(_isExist,_nullIndex)=isExistNamespace(_toTokenId,_namespaceId);
require(!_isExist,"namespace already exist");
uint[] storage _namespace = _sellerMetaWorld.namespaces;
for (uint i = 0; i < _namespace.length; i++) {
if(_namespaceId == _namespace[i]){
delete _namespace[i];
break;
}
}
string[] storage _attributes = _sellerMetaWorld.attributes[_namespaceId];
if(_nullIndex != 0){
_buyerMetaWorld.namespaces[_nullIndex] = _namespaceId;
}else{
_buyerMetaWorld.namespaces.push(_namespaceId);
}
_buyerMetaWorld.attributes[_namespaceId] = _attributes;
if(_buyerMetaWorld.soldCount[_namespaceId] == 0){
_buyerMetaWorld.soldCount[_namespaceId]++;
}
_sellerMetaWorld.soldCount[_namespaceId]++;
delete _sellerMetaWorld.attributes[_namespaceId];
emit TransAttribute(_toTokenId,_fromTokenId,_namespaceId);
}
function setAttribute(uint _tokenId,uint _namespaceId)external nonReentrant{
require(msg.sender == ownerOf(_tokenId),"not ownerOf this id");
require(_namespaceId < namespaceCount,"id not exist");
MetaWorldToken storage _metaWorld = metaWorlds[_tokenId];
uint[] storage _namespace = _metaWorld.namespaces;
uint8 _soldCount = _metaWorld.soldCount[_namespaceId];
uint _nullIndex;
//already set
if(!(_soldCount == 0)){
bool _isExist;
(_isExist,_nullIndex)=isExistNamespace(_tokenId,_namespaceId);
require(!_isExist,"already exist this namespace");
}
if(_nullIndex != 0){
_namespace[_nullIndex] = _namespaceId;
}else{
_namespace.push(_namespaceId);
}
string[][] storage _attributesarry = allNamespaces[_namespaceId];
string[] memory _attributes = new string[](_attributesarry.length);
for(uint i = 0;i<_attributesarry.length;i++){
string[] storage _keyAndvaluesarry = _attributesarry[i];
_attributes[i] = string(abi.encodePacked(_keyAndvaluesarry[0], "~",_keyAndvaluesarry[((_metaWorld.rarity*(_soldCount+1)*(i+1))%(_keyAndvaluesarry.length-1))+1]));
}
_metaWorld.attributes[_namespaceId] = _attributes;
_metaWorld.soldCount[_namespaceId]++;
emit SetAttribute(_tokenId,_namespaceId);
}
function getSoldCount(uint _tokenId,uint _namespaceId) external view returns(uint){
return metaWorlds[_tokenId].soldCount[_namespaceId];
}
function getNamespacesAttribute(uint _namespaceId) external view returns(string[][] memory){
return allNamespaces[_namespaceId];
}
function getAttribute(uint _tokenId,uint _namespaceId)external view returns(string[] memory){
return metaWorlds[_tokenId].attributes[_namespaceId];
}
function getNamespaceId(uint _tokenId)external view returns(uint[] memory){
return metaWorlds[_tokenId].namespaces;
}
function tokenURI(uint _tokenId) override public pure returns (string memory) {
string[8] memory _fill = ["blue","yellow","white","green","pink","red","purple","orange"];
bytes32 _random = keccak256(abi.encodePacked(toString(_tokenId)));
string[] memory parts = new string[](10);
parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 320 320"><rect width="100%" height="100%" fill="black" />';
for(uint i=0;i<_random.length;){
uint8 _color = uint8(_random[i]);
uint8 _r = uint8(_random[i+1])/8;
uint16 _x = uint8(_random[i+2]);
uint16 _y = uint8(_random[i+3]);
_y = _y + _r;
_x = _x + _r;
parts[(i/4)+1] = string(abi.encodePacked('<circle r="', toString(_r), '" fill="',_fill[_color%_fill.length],'" cx="',toString(_x), '" cy="' ,toString(_y), '"/>'));
i = i+4;
}
parts[9] = '</svg>';
string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9]));
string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Bag #', toString(_tokenId), '", "description": "MetaWorld is world", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
output = string(abi.encodePacked('data:application/json;base64,', json));
return output;
}
function toString(uint256 value) internal pure returns (string memory) {
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);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"uint256","name":"namespaceId","type":"uint256"}],"name":"NamespaceCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creater","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewMetaWorldCreated","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":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"namespaceId","type":"uint256"}],"name":"SetAttribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"namespaceId","type":"uint256"}],"name":"TransAttribute","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":"blockCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockNum","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":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"getAttribute","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getNamespaceId","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"getNamespacesAttribute","outputs":[{"internalType":"string[][]","name":"","type":"string[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"getSoldCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intervalCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"isExistNamespace","outputs":[{"internalType":"bool","name":"","type":"bool"},{"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":"","type":"uint256"}],"name":"metaWorlds","outputs":[{"internalType":"uint256","name":"rarity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintMetaWorld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"namespaceCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"setAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_externalAddress","type":"address"}],"name":"setExternalAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_intervalCount","type":"uint8"},{"internalType":"uint8","name":"_blockCount","type":"uint8"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_namespaceId","type":"uint256"},{"internalType":"string[][]","name":"_keyAndvalues","type":"string[][]"}],"name":"setNameSpacesAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toTokenId","type":"uint256"},{"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"internalType":"uint256","name":"_namespaceId","type":"uint256"}],"name":"transAttribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526021600860006101000a81548160ff021916908360ff160217905550600a600860016101000a81548160ff021916908360ff160217905550620f42406009556001600a553480156200005557600080fd5b506040518060400160405280600981526020017f4d657461576f726c6400000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4d657461576f726c640000000000000000000000000000000000000000000000815250620000e2620000d6620001ba60201b60201c565b620001c260201b60201c565b8160019080519060200190620000fa929190620002af565b50806002908051906020019062000113929190620002af565b50505060016007819055506200012e620001ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001546200028660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620001ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a49062000386565b60405180910390fd5b43600b8190555062000447565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002bd90620003b9565b90600052602060002090601f016020900481019282620002e157600085556200032d565b82601f10620002fc57805160ff19168380011785556200032d565b828001600101855582156200032d579182015b828111156200032c5782518255916020019190600101906200030f565b5b5090506200033c919062000340565b5090565b5b808211156200035b57600081600090555060010162000341565b5090565b60006200036e602083620003a8565b91506200037b826200041e565b602082019050919050565b60006020820190508181036000830152620003a1816200035f565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003d257607f821691505b60208210811415620003e957620003e8620003ef565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615b8c80620004576000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a9d0def1161011a578063b88d4fde116100ad578063dc9a557a1161007c578063dc9a557a146105c5578063e985e9c5146105e1578063ed7bec2d14610611578063f2fde38b14610641578063f3ba6d1f1461065d576101fb565b8063b88d4fde1461053d578063c87b56dd14610559578063cd996d9f14610589578063d5abeb01146105a7576101fb565b806395d89b41116100e957806395d89b41146104db578063a22cb465146104f9578063ad09543c14610515578063b40ec02b1461051f576101fb565b80638a9d0def146104535780638ae63d6d146104835780638da5cb5b146104a15780638e8ca334146104bf576101fb565b806342842e0e11610192578063715018a611610161578063715018a6146103cd5780637685945e146103d757806382d0e1fe14610407578063881ea9d114610423576101fb565b806342842e0e146103355780636352211e146103515780636fd36cd61461038157806370a082311461039d576101fb565b8063081812fc116101ce578063081812fc1461029d578063095ea7b3146102cd57806323b872dd146102e95780633a5550e714610305576101fb565b80630149fac41461020057806301ffc9a71461023157806306fdde031461026157806307225b4d1461027f575b600080fd5b61021a60048036038101906102159190613cc5565b610679565b60405161022892919061488a565b60405180910390f35b61024b60048036038101906102469190613be2565b61073f565b604051610258919061486f565b60405180910390f35b610269610821565b60405161027691906148b3565b60405180910390f35b6102876108b3565b6040516102949190614bf0565b60405180910390f35b6102b760048036038101906102b29190613c3c565b6108c6565b6040516102c491906147a2565b60405180910390f35b6102e760048036038101906102e29190613ba2565b61094b565b005b61030360048036038101906102fe9190613a8c565b610a63565b005b61031f600480360381019061031a9190613cc5565b610ac3565b60405161032c9190614bd5565b60405180910390f35b61034f600480360381019061034a9190613a8c565b610b14565b005b61036b60048036038101906103669190613c3c565b610b34565b60405161037891906147a2565b60405180910390f35b61039b60048036038101906103969190613a1f565b610be6565b005b6103b760048036038101906103b29190613a1f565b610ca6565b6040516103c49190614bd5565b60405180910390f35b6103d5610d5e565b005b6103f160048036038101906103ec9190613cc5565b610ddc565b6040516103fe919061482b565b60405180910390f35b610421600480360381019061041c9190613cc5565b610eec565b005b61043d60048036038101906104389190613c3c565b61133f565b60405161044a919061484d565b60405180910390f35b61046d60048036038101906104689190613c3c565b6113bc565b60405161047a9190614bd5565b60405180910390f35b61048b6113ea565b6040516104989190614bd5565b60405180910390f35b6104a96113f0565b6040516104b691906147a2565b60405180910390f35b6104d960048036038101906104d49190613d58565b611419565b005b6104e36114d7565b6040516104f091906148b3565b60405180910390f35b610513600480360381019061050e9190613b62565b611569565b005b61051d6116ea565b005b610527611839565b6040516105349190614bd5565b60405180910390f35b61055760048036038101906105529190613adf565b61183f565b005b610573600480360381019061056e9190613c3c565b6118a1565b60405161058091906148b3565b60405180910390f35b610591611eea565b60405161059e9190614bf0565b60405180910390f35b6105af611efd565b6040516105bc9190614bd5565b60405180910390f35b6105df60048036038101906105da9190613d05565b611f03565b005b6105fb60048036038101906105f69190613a4c565b6122bd565b604051610608919061486f565b60405180910390f35b61062b60048036038101906106269190613c3c565b612351565b6040516106389190614809565b60405180910390f35b61065b60048036038101906106569190613a1f565b612484565b005b61067760048036038101906106729190613c69565b61257c565b005b6000806000600d858154811061069257610691615229565b5b9060005260206000209060040201600101905060008060005b838054905081101561072e576000831480156106e4575060008482815481106106d7576106d6615229565b5b9060005260206000200154145b156106ed578092505b8684828154811061070157610700615229565b5b9060005260206000200154141561071b576001915061072e565b8080610726906150f8565b9150506106ab565b508082945094505050509250929050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081a5750610819826126ad565b5b9050919050565b60606001805461083090615095565b80601f016020809104026020016040519081016040528092919081815260200182805461085c90615095565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050905090565b600860019054906101000a900460ff1681565b60006108d182612717565b610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790614a95565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095682610b34565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90614b35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e6612783565b73ffffffffffffffffffffffffffffffffffffffff161480610a155750610a1481610a0f612783565b6122bd565b5b610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b906149f5565b60405180910390fd5b610a5e838361278b565b505050565b610a74610a6e612783565b82612844565b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90614b55565b60405180910390fd5b610abe838383612922565b505050565b6000600d8381548110610ad957610ad8615229565b5b9060005260206000209060040201600301600083815260200190815260200160002060009054906101000a900460ff1660ff16905092915050565b610b2f8383836040518060200160405280600081525061183f565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490614a35565b60405180910390fd5b80915050919050565b610bee612783565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614ad5565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90614a15565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d66612783565b73ffffffffffffffffffffffffffffffffffffffff16610d846113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614ad5565b60405180910390fd5b565b6060600d8381548110610df257610df1615229565b5b90600052602060002090600402016002016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ee0578382906000526020600020018054610e5390615095565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90615095565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b505050505081526020019060010190610e34565b50505050905092915050565b60026007541415610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990614bb5565b60405180910390fd5b6002600781905550610f4382610b34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614b95565b60405180910390fd5b600a548110610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614b75565b60405180910390fd5b6000600d838154811061100a57611009615229565b5b906000526020600020906004020190506000816001019050600082600301600085815260200190815260200160002060009054906101000a900460ff1690506000808260ff16146110ac5760006110618787610679565b809350819250505080156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906149d5565b60405180910390fd5b505b600081146110db57848382815481106110c8576110c7615229565b5b9060005260206000200181905550611104565b828590806001815401808255809150506001900390600052602060002001600090919091909150555b6000600e600087815260200190815260200160002090506000818054905067ffffffffffffffff81111561113b5761113a615258565b5b60405190808252806020026020018201604052801561116e57816020015b60608152602001906001900390816111595790505b50905060005b828054905081101561128957600083828154811061119557611194615229565b5b906000526020600020019050806000815481106111b5576111b4615229565b5b906000526020600020018160018084805490506111d29190614f90565b6001866111df9190614e47565b60018b6111ec9190614e9d565b60ff168d600001546111fe9190614f36565b6112089190614f36565b611212919061516b565b61121c9190614e47565b8154811061122d5761122c615229565b5b90600052602060002001604051602001611248929190614697565b60405160208183030381529060405283838151811061126a57611269615229565b5b6020026020010181905250508080611281906150f8565b915050611174565b508086600201600089815260200190815260200160002090805190602001906112b3929190613448565b50856003016000888152602001908152602001600020600081819054906101000a900460ff16809291906112e690615141565b91906101000a81548160ff021916908360ff1602179055505086887fd46916cd84ca966d60c5f30ac344d243eac781551559438e53382b06e247521760405160405180910390a350505050505060016007819055505050565b6060600d828154811061135557611354615229565b5b90600052602060002090600402016001018054806020026020016040519081016040528092919081815260200182805480156113b057602002820191906000526020600020905b81548152602001906001019080831161139c575b50505050509050919050565b600d81815481106113cc57600080fd5b90600052602060002090600402016000915090508060000154905081565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611421612783565b73ffffffffffffffffffffffffffffffffffffffff1661143f6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90614ad5565b60405180910390fd5b82600860006101000a81548160ff021916908360ff16021790555081600860016101000a81548160ff021916908360ff16021790555080600981905550505050565b6060600280546114e690615095565b80601f016020809104026020016040519081016040528092919081815260200182805461151290615095565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b611571612783565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614995565b60405180910390fd5b80600660006115ec612783565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611699612783565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116de919061486f565b60405180910390a35050565b60026007541415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790614bb5565b60405180910390fd5b600260078190555043600b541061177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614b15565b60405180910390fd5b600954600d8054905011156117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd906148d5565b60405180910390fd5b6000600860009054906101000a900460ff1660ff16600d805490506117eb919061516b565b1415611802576118016117fc6113f0565b612b7e565b5b61180b33612b7e565b600860019054906101000a900460ff1660ff16436118299190614e47565b600b819055506001600781905550565b600a5481565b61185061184a612783565b83612844565b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614b55565b60405180910390fd5b61189b84848484612c39565b50505050565b606060006040518061010001604052806040518060400160405280600481526020017f626c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f79656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f776869746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f677265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f70696e6b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f726564000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f707572706c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f6f72616e6765000000000000000000000000000000000000000000000000000081525081525090506000611a9484612c95565b604051602001611aa491906145f4565b6040516020818303038152906040528051906020012090506000600a67ffffffffffffffff811115611ad957611ad8615258565b5b604051908082528060200260200182016040528015611b0c57816020015b6060815260200190600190039081611af75790505b5090506040518060c0016040528060928152602001615ac56092913981600081518110611b3c57611b3b615229565b5b602002602001018190525060005b602060ff16811015611ce3576000838260208110611b6b57611b6a615229565b5b1a60f81b60f81c90506000600885600185611b869190614e47565b60208110611b9757611b96615229565b5b1a60f81b60f81c611ba89190614f05565b9050600085600285611bba9190614e47565b60208110611bcb57611bca615229565b5b1a60f81b60f81c60ff169050600086600386611be79190614e47565b60208110611bf857611bf7615229565b5b1a60f81b60f81c60ff1690508260ff1681611c139190614e0f565b90508260ff1682611c249190614e0f565b9150611c328360ff16612c95565b8860088660ff16611c43919061516b565b60088110611c5457611c53615229565b5b6020020151611c668461ffff16612c95565b611c738461ffff16612c95565b604051602001611c8694939291906146c6565b604051602081830303815290604052866001600488611ca59190614ed4565b611caf9190614e47565b81518110611cc057611cbf615229565b5b6020026020010181905250600485611cd89190614e47565b945050505050611b4a565b506040518060400160405280600681526020017f3c2f7376673e000000000000000000000000000000000000000000000000000081525081600981518110611d2e57611d2d615229565b5b6020026020010181905250600081600081518110611d4f57611d4e615229565b5b602002602001015182600181518110611d6b57611d6a615229565b5b602002602001015183600281518110611d8757611d86615229565b5b602002602001015184600381518110611da357611da2615229565b5b602002602001015185600481518110611dbf57611dbe615229565b5b602002602001015186600581518110611ddb57611dda615229565b5b602002602001015187600681518110611df757611df6615229565b5b602002602001015188600781518110611e1357611e12615229565b5b602002602001015189600881518110611e2f57611e2e615229565b5b60200260200101518a600981518110611e4b57611e4a615229565b5b6020026020010151604051602001611e6c9a9998979695949392919061460b565b60405160208183030381529060405290506000611eb9611e8b88612c95565b611e9484612df6565b604051602001611ea592919061473b565b604051602081830303815290604052612df6565b905080604051602001611ecc9190614780565b60405160208183030381529060405291508195505050505050919050565b600860009054906101000a900460ff1681565b60095481565b60026007541415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614bb5565b60405180910390fd5b6002600781905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614a55565b60405180910390fd5b6000600d8381548110611ff757611ff6615229565b5b906000526020600020906004020190506000600d858154811061201d5761201c615229565b5b9060005260206000209060040201905060008061203a8786610679565b80925081935050508115612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90614955565b60405180910390fd5b600084600101905060005b81805490508110156120f8578181815481106120ad576120ac615229565b5b90600052602060002001548714156120e5578181815481106120d2576120d1615229565b5b90600052602060002001600090556120f8565b80806120f0906150f8565b91505061208e565b506000856002016000888152602001908152602001600020905060008314612144578685600101848154811061213157612130615229565b5b9060005260206000200181905550612170565b846001018790806001815401808255809150506001900390600052602060002001600090919091909150555b808560020160008981526020019081526020016000209080546121949291906134a8565b50600085600301600089815260200190815260200160002060009054906101000a900460ff1660ff16141561220f57846003016000888152602001908152602001600020600081819054906101000a900460ff16809291906121f590615141565b91906101000a81548160ff021916908360ff160217905550505b856003016000888152602001908152602001600020600081819054906101000a900460ff168092919061224190615141565b91906101000a81548160ff021916908360ff16021790555050856002016000888152602001908152602001600020600061227b9190613510565b86888a7f6416a2c1729398794cc79754fb3e98dbce074e8825feeaed4b217f7d9e304ddb60405160405180910390a45050505050506001600781905550505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561247957838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b828210156124665783829060005260206000200180546123d990615095565b80601f016020809104026020016040519081016040528092919081815260200182805461240590615095565b80156124525780601f1061242757610100808354040283529160200191612452565b820191906000526020600020905b81548152906001019060200180831161243557829003601f168201915b5050505050815260200190600101906123ba565b5050505081526020019060010190612386565b505050509050919050565b61248c612783565b73ffffffffffffffffffffffffffffffffffffffff166124aa6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f790614ad5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614915565b60405180910390fd5b61257981612f8e565b50565b612584612783565b73ffffffffffffffffffffffffffffffffffffffff166125a26113f0565b73ffffffffffffffffffffffffffffffffffffffff16146125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614ad5565b60405180910390fd5b600a54821461263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390614ab5565b60405180910390fd5b80600e60008481526020019081526020016000209080519060200190612663929190613531565b50600a6000815480929190612677906150f8565b9190505550817fb07ebfa50de31028a15cff6bb3e7e20a95dbefb030decced078198c526a0371a60405160405180910390a25050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127fe83610b34565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061284f82612717565b61288e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612885906149b5565b60405180910390fd5b600061289983610b34565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061290857508373ffffffffffffffffffffffffffffffffffffffff166128f0846108c6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612919575061291881856122bd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661294282610b34565b73ffffffffffffffffffffffffffffffffffffffff1614612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90614af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff90614975565b60405180910390fd5b612a13838383613052565b612a1e60008261278b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6e9190614f90565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac59190614e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600d6001816001815401808255809150500390600052602060002090505060006001600d80549050612bb09190614f90565b90504481612bbe9190614f36565b600d8281548110612bd257612bd1615229565b5b906000526020600020906004020160000181905550612bf18282613057565b808273ffffffffffffffffffffffffffffffffffffffff167f8e7471715e4e98f076e1c1633d3b5efa7461c7879ad6f52e12316bb33433835a60405160405180910390a35050565b612c44848484612922565b612c5084848484613075565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906148f5565b60405180910390fd5b50505050565b60606000821415612cdd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612df1565b600082905060005b60008214612d0f578080612cf8906150f8565b915050600a82612d089190614ed4565b9150612ce5565b60008167ffffffffffffffff811115612d2b57612d2a615258565b5b6040519080825280601f01601f191660200182016040528015612d5d5781602001600182028036833780820191505090505b5090505b60008514612dea57600182612d769190614f90565b9150600a85612d85919061516b565b6030612d919190614e47565b60f81b818381518110612da757612da6615229565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de39190614ed4565b9450612d61565b8093505050505b919050565b60606000825190506000811415612e1f5760405180602001604052806000815250915050612f89565b60006003600283612e309190614e47565b612e3a9190614ed4565b6004612e469190614f36565b90506000602082612e579190614e47565b67ffffffffffffffff811115612e7057612e6f615258565b5b6040519080825280601f01601f191660200182016040528015612ea25781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615a85604091399050600181016020830160005b86811015612f465760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612ecd565b506003860660018114612f605760028114612f7057612f7b565b613d3d60f01b6002830352612f7b565b603d60f81b60018303525b508484525050819450505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b61307182826040518060200160405280600081525061320c565b5050565b60006130968473ffffffffffffffffffffffffffffffffffffffff16613267565b156131ff578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130bf612783565b8786866040518563ffffffff1660e01b81526004016130e194939291906147bd565b602060405180830381600087803b1580156130fb57600080fd5b505af192505050801561312c57506040513d601f19601f820116820180604052508101906131299190613c0f565b60015b6131af573d806000811461315c576040519150601f19603f3d011682016040523d82523d6000602084013e613161565b606091505b506000815114156131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e906148f5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613204565b600190505b949350505050565b613216838361327a565b6132236000848484613075565b613262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613259906148f5565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e190614a75565b60405180910390fd5b6132f381612717565b15613333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332a90614935565b60405180910390fd5b61333f60008383613052565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461338f9190614e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054828255906000526020600020908101928215613497579160200282015b82811115613496578251829080519060200190613486929190613591565b5091602001919060010190613468565b5b5090506134a49190613617565b5090565b8280548282559060005260206000209081019282156134ff5760005260206000209182015b828111156134fe5782829080546134e390615095565b6134ee92919061363b565b50916001019190600101906134cd565b5b50905061350c9190613617565b5090565b508054600082559060005260206000209081019061352e9190613617565b50565b828054828255906000526020600020908101928215613580579160200282015b8281111561357f57825182908051906020019061356f929190613448565b5091602001919060010190613551565b5b50905061358d91906136c8565b5090565b82805461359d90615095565b90600052602060002090601f0160209004810192826135bf5760008555613606565b82601f106135d857805160ff1916838001178555613606565b82800160010185558215613606579182015b828111156136055782518255916020019190600101906135ea565b5b50905061361391906136ec565b5090565b5b80821115613637576000818161362e9190613709565b50600101613618565b5090565b82805461364790615095565b90600052602060002090601f01602090048101928261366957600085556136b7565b82601f1061367a57805485556136b7565b828001600101855582156136b757600052602060002091601f016020900482015b828111156136b657825482559160010191906001019061369b565b5b5090506136c491906136ec565b5090565b5b808211156136e857600081816136df9190613510565b506001016136c9565b5090565b5b808211156137055760008160009055506001016136ed565b5090565b50805461371590615095565b6000825580601f106137275750613746565b601f01602090049060005260206000209081019061374591906136ec565b5b50565b600061375c61375784614c30565b614c0b565b9050808382526020820190508285602086028201111561377f5761377e61528c565b5b60005b858110156137cd57813567ffffffffffffffff8111156137a5576137a4615287565b5b8086016137b2898261392c565b85526020850194506020840193505050600181019050613782565b5050509392505050565b60006137ea6137e584614c5c565b614c0b565b9050808382526020820190508285602086028201111561380d5761380c61528c565b5b60005b8581101561385b57813567ffffffffffffffff81111561383357613832615287565b5b80860161384089826139c7565b85526020850194506020840193505050600181019050613810565b5050509392505050565b600061387861387384614c88565b614c0b565b90508281526020810184848401111561389457613893615291565b5b61389f848285615053565b509392505050565b60006138ba6138b584614cb9565b614c0b565b9050828152602081018484840111156138d6576138d5615291565b5b6138e1848285615053565b509392505050565b6000813590506138f881615a11565b92915050565b600082601f83011261391357613912615287565b5b8135613923848260208601613749565b91505092915050565b600082601f83011261394157613940615287565b5b81356139518482602086016137d7565b91505092915050565b60008135905061396981615a28565b92915050565b60008135905061397e81615a3f565b92915050565b60008151905061399381615a3f565b92915050565b600082601f8301126139ae576139ad615287565b5b81356139be848260208601613865565b91505092915050565b600082601f8301126139dc576139db615287565b5b81356139ec8482602086016138a7565b91505092915050565b600081359050613a0481615a56565b92915050565b600081359050613a1981615a6d565b92915050565b600060208284031215613a3557613a3461529b565b5b6000613a43848285016138e9565b91505092915050565b60008060408385031215613a6357613a6261529b565b5b6000613a71858286016138e9565b9250506020613a82858286016138e9565b9150509250929050565b600080600060608486031215613aa557613aa461529b565b5b6000613ab3868287016138e9565b9350506020613ac4868287016138e9565b9250506040613ad5868287016139f5565b9150509250925092565b60008060008060808587031215613af957613af861529b565b5b6000613b07878288016138e9565b9450506020613b18878288016138e9565b9350506040613b29878288016139f5565b925050606085013567ffffffffffffffff811115613b4a57613b49615296565b5b613b5687828801613999565b91505092959194509250565b60008060408385031215613b7957613b7861529b565b5b6000613b87858286016138e9565b9250506020613b988582860161395a565b9150509250929050565b60008060408385031215613bb957613bb861529b565b5b6000613bc7858286016138e9565b9250506020613bd8858286016139f5565b9150509250929050565b600060208284031215613bf857613bf761529b565b5b6000613c068482850161396f565b91505092915050565b600060208284031215613c2557613c2461529b565b5b6000613c3384828501613984565b91505092915050565b600060208284031215613c5257613c5161529b565b5b6000613c60848285016139f5565b91505092915050565b60008060408385031215613c8057613c7f61529b565b5b6000613c8e858286016139f5565b925050602083013567ffffffffffffffff811115613caf57613cae615296565b5b613cbb858286016138fe565b9150509250929050565b60008060408385031215613cdc57613cdb61529b565b5b6000613cea858286016139f5565b9250506020613cfb858286016139f5565b9150509250929050565b600080600060608486031215613d1e57613d1d61529b565b5b6000613d2c868287016139f5565b9350506020613d3d868287016139f5565b9250506040613d4e868287016139f5565b9150509250925092565b600080600060608486031215613d7157613d7061529b565b5b6000613d7f86828701613a0a565b9350506020613d9086828701613a0a565b9250506040613da1868287016139f5565b9150509250925092565b6000613db78383613e6f565b905092915050565b6000613dcb8383613fff565b905092915050565b6000613ddf83836145c7565b60208301905092915050565b613df481614fc4565b82525050565b6000613e0582614d2f565b613e0f8185614d8d565b935083602082028501613e2185614cea565b8060005b85811015613e5d5784840389528151613e3e8582613dab565b9450613e4983614d66565b925060208a01995050600181019050613e25565b50829750879550505050505092915050565b6000613e7a82614d3a565b613e848185614d9e565b935083602082028501613e9685614cfa565b8060005b85811015613ed25784840389528151613eb38582613dbf565b9450613ebe83614d73565b925060208a01995050600181019050613e9a565b50829750879550505050505092915050565b6000613eef82614d3a565b613ef98185614daf565b935083602082028501613f0b85614cfa565b8060005b85811015613f475784840389528151613f288582613dbf565b9450613f3383614d73565b925060208a01995050600181019050613f0f565b50829750879550505050505092915050565b6000613f6482614d45565b613f6e8185614dc0565b9350613f7983614d0a565b8060005b83811015613faa578151613f918882613dd3565b9750613f9c83614d80565b925050600181019050613f7d565b5085935050505092915050565b613fc081614fd6565b82525050565b6000613fd182614d50565b613fdb8185614dd1565b9350613feb818560208601615062565b613ff4816152a0565b840191505092915050565b600061400a82614d5b565b6140148185614de2565b9350614024818560208601615062565b61402d816152a0565b840191505092915050565b600061404382614d5b565b61404d8185614df3565b935061405d818560208601615062565b614066816152a0565b840191505092915050565b600061407c82614d5b565b6140868185614e04565b9350614096818560208601615062565b80840191505092915050565b600081546140af81615095565b6140b98186614e04565b945060018216600081146140d457600181146140e557614118565b60ff19831686528186019350614118565b6140ee85614d1a565b60005b83811015614110578154818901526001820191506020810190506140f1565b838801955050505b50505092915050565b600061412e600683614e04565b9150614139826152b1565b600682019050919050565b6000614151600983614df3565b915061415c826152da565b602082019050919050565b6000614174604c83614e04565b915061417f82615303565b604c82019050919050565b6000614197603283614df3565b91506141a282615378565b604082019050919050565b60006141ba602683614df3565b91506141c5826153c7565b604082019050919050565b60006141dd601c83614df3565b91506141e882615416565b602082019050919050565b6000614200601783614df3565b915061420b8261543f565b602082019050919050565b6000614223602483614df3565b915061422e82615468565b604082019050919050565b6000614246601983614df3565b9150614251826154b7565b602082019050919050565b6000614269602c83614df3565b9150614274826154e0565b604082019050919050565b600061428c601c83614df3565b91506142978261552f565b602082019050919050565b60006142af603883614df3565b91506142ba82615558565b604082019050919050565b60006142d2602a83614df3565b91506142dd826155a7565b604082019050919050565b60006142f5602983614df3565b9150614300826155f6565b604082019050919050565b6000614318600983614df3565b915061432382615645565b602082019050919050565b600061433b600b83614e04565b91506143468261566e565b600b82019050919050565b600061435e600283614e04565b915061436982615697565b600282019050919050565b6000614381600f83614e04565b915061438c826156c0565b600f82019050919050565b60006143a4602083614df3565b91506143af826156e9565b602082019050919050565b60006143c7602c83614df3565b91506143d282615712565b604082019050919050565b60006143ea600683614e04565b91506143f582615761565b600682019050919050565b600061440d601c83614df3565b91506144188261578a565b602082019050919050565b6000614430602083614df3565b915061443b826157b3565b602082019050919050565b6000614453602983614df3565b915061445e826157dc565b604082019050919050565b6000614476600183614e04565b91506144818261582b565b600182019050919050565b6000614499601c83614df3565b91506144a482615854565b602082019050919050565b60006144bc600383614e04565b91506144c78261587d565b600382019050919050565b60006144df602183614df3565b91506144ea826158a6565b604082019050919050565b6000614502601d83614e04565b915061450d826158f5565b601d82019050919050565b6000614525600883614e04565b91506145308261591e565b600882019050919050565b6000614548603183614df3565b915061455382615947565b604082019050919050565b600061456b600c83614df3565b915061457682615996565b602082019050919050565b600061458e601383614df3565b9150614599826159bf565b602082019050919050565b60006145b1601f83614df3565b91506145bc826159e8565b602082019050919050565b6145d08161503c565b82525050565b6145df8161503c565b82525050565b6145ee81615046565b82525050565b60006146008284614071565b915081905092915050565b6000614617828d614071565b9150614623828c614071565b915061462f828b614071565b915061463b828a614071565b91506146478289614071565b91506146538288614071565b915061465f8287614071565b915061466b8286614071565b91506146778285614071565b91506146838284614071565b91508190509b9a5050505050505050505050565b60006146a382856140a2565b91506146ae82614469565b91506146ba82846140a2565b91508190509392505050565b60006146d18261432e565b91506146dd8287614071565b91506146e882614518565b91506146f48286614071565b91506146ff826143dd565b915061470b8285614071565b915061471682614121565b91506147228284614071565b915061472d826144af565b915081905095945050505050565b600061474682614374565b91506147528285614071565b915061475d82614167565b91506147698284614071565b915061477482614351565b91508190509392505050565b600061478b826144f5565b91506147978284614071565b915081905092915050565b60006020820190506147b76000830184613deb565b92915050565b60006080820190506147d26000830187613deb565b6147df6020830186613deb565b6147ec60408301856145d6565b81810360608301526147fe8184613fc6565b905095945050505050565b600060208201905081810360008301526148238184613dfa565b905092915050565b600060208201905081810360008301526148458184613ee4565b905092915050565b600060208201905081810360008301526148678184613f59565b905092915050565b60006020820190506148846000830184613fb7565b92915050565b600060408201905061489f6000830185613fb7565b6148ac60208301846145d6565b9392505050565b600060208201905081810360008301526148cd8184614038565b905092915050565b600060208201905081810360008301526148ee81614144565b9050919050565b6000602082019050818103600083015261490e8161418a565b9050919050565b6000602082019050818103600083015261492e816141ad565b9050919050565b6000602082019050818103600083015261494e816141d0565b9050919050565b6000602082019050818103600083015261496e816141f3565b9050919050565b6000602082019050818103600083015261498e81614216565b9050919050565b600060208201905081810360008301526149ae81614239565b9050919050565b600060208201905081810360008301526149ce8161425c565b9050919050565b600060208201905081810360008301526149ee8161427f565b9050919050565b60006020820190508181036000830152614a0e816142a2565b9050919050565b60006020820190508181036000830152614a2e816142c5565b9050919050565b60006020820190508181036000830152614a4e816142e8565b9050919050565b60006020820190508181036000830152614a6e8161430b565b9050919050565b60006020820190508181036000830152614a8e81614397565b9050919050565b60006020820190508181036000830152614aae816143ba565b9050919050565b60006020820190508181036000830152614ace81614400565b9050919050565b60006020820190508181036000830152614aee81614423565b9050919050565b60006020820190508181036000830152614b0e81614446565b9050919050565b60006020820190508181036000830152614b2e8161448c565b9050919050565b60006020820190508181036000830152614b4e816144d2565b9050919050565b60006020820190508181036000830152614b6e8161453b565b9050919050565b60006020820190508181036000830152614b8e8161455e565b9050919050565b60006020820190508181036000830152614bae81614581565b9050919050565b60006020820190508181036000830152614bce816145a4565b9050919050565b6000602082019050614bea60008301846145d6565b92915050565b6000602082019050614c0560008301846145e5565b92915050565b6000614c15614c26565b9050614c2182826150c7565b919050565b6000604051905090565b600067ffffffffffffffff821115614c4b57614c4a615258565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c7757614c76615258565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ca357614ca2615258565b5b614cac826152a0565b9050602081019050919050565b600067ffffffffffffffff821115614cd457614cd3615258565b5b614cdd826152a0565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e1a8261500e565b9150614e258361500e565b92508261ffff03821115614e3c57614e3b61519c565b5b828201905092915050565b6000614e528261503c565b9150614e5d8361503c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e9257614e9161519c565b5b828201905092915050565b6000614ea882615046565b9150614eb383615046565b92508260ff03821115614ec957614ec861519c565b5b828201905092915050565b6000614edf8261503c565b9150614eea8361503c565b925082614efa57614ef96151cb565b5b828204905092915050565b6000614f1082615046565b9150614f1b83615046565b925082614f2b57614f2a6151cb565b5b828204905092915050565b6000614f418261503c565b9150614f4c8361503c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8557614f8461519c565b5b828202905092915050565b6000614f9b8261503c565b9150614fa68361503c565b925082821015614fb957614fb861519c565b5b828203905092915050565b6000614fcf8261501c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615080578082015181840152602081019050615065565b8381111561508f576000848401525b50505050565b600060028204905060018216806150ad57607f821691505b602082108114156150c1576150c06151fa565b5b50919050565b6150d0826152a0565b810181811067ffffffffffffffff821117156150ef576150ee615258565b5b80604052505050565b60006151038261503c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151365761513561519c565b5b600182019050919050565b600061514c82615046565b915060ff8214156151605761515f61519c565b5b600182019050919050565b60006151768261503c565b91506151818361503c565b925082615191576151906151cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b7f6e6f20737570706c790000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a20224d657461576f726c642069732060008201527f776f726c64222c2022696d616765223a2022646174613a696d6167652f73766760208201527f2b786d6c3b6261736536342c0000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6e616d65737061636520616c7265616479206578697374000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f616c72656164792065786973742074686973206e616d65737061636500000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f207065726d69740000000000000000000000000000000000000000000000600082015250565b7f3c636972636c6520723d22000000000000000000000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f222063783d220000000000000000000000000000000000000000000000000000600082015250565b7f72657175697265206964203d3d206e616d657370616365436f756e7400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7e00000000000000000000000000000000000000000000000000000000000000600082015250565b7f657665727920626c6f636b2063616e206d696e74206f6e65206e667400000000600082015250565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f222066696c6c3d22000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6964206e6f742065786973740000000000000000000000000000000000000000600082015250565b7f6e6f74206f776e65724f66207468697320696400000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b615a1a81614fc4565b8114615a2557600080fd5b50565b615a3181614fd6565b8114615a3c57600080fd5b50565b615a4881614fe2565b8114615a5357600080fd5b50565b615a5f8161503c565b8114615a6a57600080fd5b50565b615a7681615046565b8114615a8157600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033323020333230223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3ea2646970667358221220ffa58d8aa7cb5c45267943b0889868346ed67f1fc76e57fc9c2290d66c2ba8eb64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a9d0def1161011a578063b88d4fde116100ad578063dc9a557a1161007c578063dc9a557a146105c5578063e985e9c5146105e1578063ed7bec2d14610611578063f2fde38b14610641578063f3ba6d1f1461065d576101fb565b8063b88d4fde1461053d578063c87b56dd14610559578063cd996d9f14610589578063d5abeb01146105a7576101fb565b806395d89b41116100e957806395d89b41146104db578063a22cb465146104f9578063ad09543c14610515578063b40ec02b1461051f576101fb565b80638a9d0def146104535780638ae63d6d146104835780638da5cb5b146104a15780638e8ca334146104bf576101fb565b806342842e0e11610192578063715018a611610161578063715018a6146103cd5780637685945e146103d757806382d0e1fe14610407578063881ea9d114610423576101fb565b806342842e0e146103355780636352211e146103515780636fd36cd61461038157806370a082311461039d576101fb565b8063081812fc116101ce578063081812fc1461029d578063095ea7b3146102cd57806323b872dd146102e95780633a5550e714610305576101fb565b80630149fac41461020057806301ffc9a71461023157806306fdde031461026157806307225b4d1461027f575b600080fd5b61021a60048036038101906102159190613cc5565b610679565b60405161022892919061488a565b60405180910390f35b61024b60048036038101906102469190613be2565b61073f565b604051610258919061486f565b60405180910390f35b610269610821565b60405161027691906148b3565b60405180910390f35b6102876108b3565b6040516102949190614bf0565b60405180910390f35b6102b760048036038101906102b29190613c3c565b6108c6565b6040516102c491906147a2565b60405180910390f35b6102e760048036038101906102e29190613ba2565b61094b565b005b61030360048036038101906102fe9190613a8c565b610a63565b005b61031f600480360381019061031a9190613cc5565b610ac3565b60405161032c9190614bd5565b60405180910390f35b61034f600480360381019061034a9190613a8c565b610b14565b005b61036b60048036038101906103669190613c3c565b610b34565b60405161037891906147a2565b60405180910390f35b61039b60048036038101906103969190613a1f565b610be6565b005b6103b760048036038101906103b29190613a1f565b610ca6565b6040516103c49190614bd5565b60405180910390f35b6103d5610d5e565b005b6103f160048036038101906103ec9190613cc5565b610ddc565b6040516103fe919061482b565b60405180910390f35b610421600480360381019061041c9190613cc5565b610eec565b005b61043d60048036038101906104389190613c3c565b61133f565b60405161044a919061484d565b60405180910390f35b61046d60048036038101906104689190613c3c565b6113bc565b60405161047a9190614bd5565b60405180910390f35b61048b6113ea565b6040516104989190614bd5565b60405180910390f35b6104a96113f0565b6040516104b691906147a2565b60405180910390f35b6104d960048036038101906104d49190613d58565b611419565b005b6104e36114d7565b6040516104f091906148b3565b60405180910390f35b610513600480360381019061050e9190613b62565b611569565b005b61051d6116ea565b005b610527611839565b6040516105349190614bd5565b60405180910390f35b61055760048036038101906105529190613adf565b61183f565b005b610573600480360381019061056e9190613c3c565b6118a1565b60405161058091906148b3565b60405180910390f35b610591611eea565b60405161059e9190614bf0565b60405180910390f35b6105af611efd565b6040516105bc9190614bd5565b60405180910390f35b6105df60048036038101906105da9190613d05565b611f03565b005b6105fb60048036038101906105f69190613a4c565b6122bd565b604051610608919061486f565b60405180910390f35b61062b60048036038101906106269190613c3c565b612351565b6040516106389190614809565b60405180910390f35b61065b60048036038101906106569190613a1f565b612484565b005b61067760048036038101906106729190613c69565b61257c565b005b6000806000600d858154811061069257610691615229565b5b9060005260206000209060040201600101905060008060005b838054905081101561072e576000831480156106e4575060008482815481106106d7576106d6615229565b5b9060005260206000200154145b156106ed578092505b8684828154811061070157610700615229565b5b9060005260206000200154141561071b576001915061072e565b8080610726906150f8565b9150506106ab565b508082945094505050509250929050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081a5750610819826126ad565b5b9050919050565b60606001805461083090615095565b80601f016020809104026020016040519081016040528092919081815260200182805461085c90615095565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050905090565b600860019054906101000a900460ff1681565b60006108d182612717565b610910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090790614a95565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095682610b34565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90614b35565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e6612783565b73ffffffffffffffffffffffffffffffffffffffff161480610a155750610a1481610a0f612783565b6122bd565b5b610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b906149f5565b60405180910390fd5b610a5e838361278b565b505050565b610a74610a6e612783565b82612844565b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90614b55565b60405180910390fd5b610abe838383612922565b505050565b6000600d8381548110610ad957610ad8615229565b5b9060005260206000209060040201600301600083815260200190815260200160002060009054906101000a900460ff1660ff16905092915050565b610b2f8383836040518060200160405280600081525061183f565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490614a35565b60405180910390fd5b80915050919050565b610bee612783565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614ad5565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90614a15565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d66612783565b73ffffffffffffffffffffffffffffffffffffffff16610d846113f0565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614ad5565b60405180910390fd5b565b6060600d8381548110610df257610df1615229565b5b90600052602060002090600402016002016000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ee0578382906000526020600020018054610e5390615095565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7f90615095565b8015610ecc5780601f10610ea157610100808354040283529160200191610ecc565b820191906000526020600020905b815481529060010190602001808311610eaf57829003601f168201915b505050505081526020019060010190610e34565b50505050905092915050565b60026007541415610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990614bb5565b60405180910390fd5b6002600781905550610f4382610b34565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614b95565b60405180910390fd5b600a548110610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614b75565b60405180910390fd5b6000600d838154811061100a57611009615229565b5b906000526020600020906004020190506000816001019050600082600301600085815260200190815260200160002060009054906101000a900460ff1690506000808260ff16146110ac5760006110618787610679565b809350819250505080156110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906149d5565b60405180910390fd5b505b600081146110db57848382815481106110c8576110c7615229565b5b9060005260206000200181905550611104565b828590806001815401808255809150506001900390600052602060002001600090919091909150555b6000600e600087815260200190815260200160002090506000818054905067ffffffffffffffff81111561113b5761113a615258565b5b60405190808252806020026020018201604052801561116e57816020015b60608152602001906001900390816111595790505b50905060005b828054905081101561128957600083828154811061119557611194615229565b5b906000526020600020019050806000815481106111b5576111b4615229565b5b906000526020600020018160018084805490506111d29190614f90565b6001866111df9190614e47565b60018b6111ec9190614e9d565b60ff168d600001546111fe9190614f36565b6112089190614f36565b611212919061516b565b61121c9190614e47565b8154811061122d5761122c615229565b5b90600052602060002001604051602001611248929190614697565b60405160208183030381529060405283838151811061126a57611269615229565b5b6020026020010181905250508080611281906150f8565b915050611174565b508086600201600089815260200190815260200160002090805190602001906112b3929190613448565b50856003016000888152602001908152602001600020600081819054906101000a900460ff16809291906112e690615141565b91906101000a81548160ff021916908360ff1602179055505086887fd46916cd84ca966d60c5f30ac344d243eac781551559438e53382b06e247521760405160405180910390a350505050505060016007819055505050565b6060600d828154811061135557611354615229565b5b90600052602060002090600402016001018054806020026020016040519081016040528092919081815260200182805480156113b057602002820191906000526020600020905b81548152602001906001019080831161139c575b50505050509050919050565b600d81815481106113cc57600080fd5b90600052602060002090600402016000915090508060000154905081565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611421612783565b73ffffffffffffffffffffffffffffffffffffffff1661143f6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90614ad5565b60405180910390fd5b82600860006101000a81548160ff021916908360ff16021790555081600860016101000a81548160ff021916908360ff16021790555080600981905550505050565b6060600280546114e690615095565b80601f016020809104026020016040519081016040528092919081815260200182805461151290615095565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b611571612783565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614995565b60405180910390fd5b80600660006115ec612783565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611699612783565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116de919061486f565b60405180910390a35050565b60026007541415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790614bb5565b60405180910390fd5b600260078190555043600b541061177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614b15565b60405180910390fd5b600954600d8054905011156117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd906148d5565b60405180910390fd5b6000600860009054906101000a900460ff1660ff16600d805490506117eb919061516b565b1415611802576118016117fc6113f0565b612b7e565b5b61180b33612b7e565b600860019054906101000a900460ff1660ff16436118299190614e47565b600b819055506001600781905550565b600a5481565b61185061184a612783565b83612844565b61188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614b55565b60405180910390fd5b61189b84848484612c39565b50505050565b606060006040518061010001604052806040518060400160405280600481526020017f626c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f79656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f776869746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f677265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f70696e6b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f726564000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f707572706c65000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f6f72616e6765000000000000000000000000000000000000000000000000000081525081525090506000611a9484612c95565b604051602001611aa491906145f4565b6040516020818303038152906040528051906020012090506000600a67ffffffffffffffff811115611ad957611ad8615258565b5b604051908082528060200260200182016040528015611b0c57816020015b6060815260200190600190039081611af75790505b5090506040518060c0016040528060928152602001615ac56092913981600081518110611b3c57611b3b615229565b5b602002602001018190525060005b602060ff16811015611ce3576000838260208110611b6b57611b6a615229565b5b1a60f81b60f81c90506000600885600185611b869190614e47565b60208110611b9757611b96615229565b5b1a60f81b60f81c611ba89190614f05565b9050600085600285611bba9190614e47565b60208110611bcb57611bca615229565b5b1a60f81b60f81c60ff169050600086600386611be79190614e47565b60208110611bf857611bf7615229565b5b1a60f81b60f81c60ff1690508260ff1681611c139190614e0f565b90508260ff1682611c249190614e0f565b9150611c328360ff16612c95565b8860088660ff16611c43919061516b565b60088110611c5457611c53615229565b5b6020020151611c668461ffff16612c95565b611c738461ffff16612c95565b604051602001611c8694939291906146c6565b604051602081830303815290604052866001600488611ca59190614ed4565b611caf9190614e47565b81518110611cc057611cbf615229565b5b6020026020010181905250600485611cd89190614e47565b945050505050611b4a565b506040518060400160405280600681526020017f3c2f7376673e000000000000000000000000000000000000000000000000000081525081600981518110611d2e57611d2d615229565b5b6020026020010181905250600081600081518110611d4f57611d4e615229565b5b602002602001015182600181518110611d6b57611d6a615229565b5b602002602001015183600281518110611d8757611d86615229565b5b602002602001015184600381518110611da357611da2615229565b5b602002602001015185600481518110611dbf57611dbe615229565b5b602002602001015186600581518110611ddb57611dda615229565b5b602002602001015187600681518110611df757611df6615229565b5b602002602001015188600781518110611e1357611e12615229565b5b602002602001015189600881518110611e2f57611e2e615229565b5b60200260200101518a600981518110611e4b57611e4a615229565b5b6020026020010151604051602001611e6c9a9998979695949392919061460b565b60405160208183030381529060405290506000611eb9611e8b88612c95565b611e9484612df6565b604051602001611ea592919061473b565b604051602081830303815290604052612df6565b905080604051602001611ecc9190614780565b60405160208183030381529060405291508195505050505050919050565b600860009054906101000a900460ff1681565b60095481565b60026007541415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614bb5565b60405180910390fd5b6002600781905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614a55565b60405180910390fd5b6000600d8381548110611ff757611ff6615229565b5b906000526020600020906004020190506000600d858154811061201d5761201c615229565b5b9060005260206000209060040201905060008061203a8786610679565b80925081935050508115612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90614955565b60405180910390fd5b600084600101905060005b81805490508110156120f8578181815481106120ad576120ac615229565b5b90600052602060002001548714156120e5578181815481106120d2576120d1615229565b5b90600052602060002001600090556120f8565b80806120f0906150f8565b91505061208e565b506000856002016000888152602001908152602001600020905060008314612144578685600101848154811061213157612130615229565b5b9060005260206000200181905550612170565b846001018790806001815401808255809150506001900390600052602060002001600090919091909150555b808560020160008981526020019081526020016000209080546121949291906134a8565b50600085600301600089815260200190815260200160002060009054906101000a900460ff1660ff16141561220f57846003016000888152602001908152602001600020600081819054906101000a900460ff16809291906121f590615141565b91906101000a81548160ff021916908360ff160217905550505b856003016000888152602001908152602001600020600081819054906101000a900460ff168092919061224190615141565b91906101000a81548160ff021916908360ff16021790555050856002016000888152602001908152602001600020600061227b9190613510565b86888a7f6416a2c1729398794cc79754fb3e98dbce074e8825feeaed4b217f7d9e304ddb60405160405180910390a45050505050506001600781905550505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561247957838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b828210156124665783829060005260206000200180546123d990615095565b80601f016020809104026020016040519081016040528092919081815260200182805461240590615095565b80156124525780601f1061242757610100808354040283529160200191612452565b820191906000526020600020905b81548152906001019060200180831161243557829003601f168201915b5050505050815260200190600101906123ba565b5050505081526020019060010190612386565b505050509050919050565b61248c612783565b73ffffffffffffffffffffffffffffffffffffffff166124aa6113f0565b73ffffffffffffffffffffffffffffffffffffffff1614612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f790614ad5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614915565b60405180910390fd5b61257981612f8e565b50565b612584612783565b73ffffffffffffffffffffffffffffffffffffffff166125a26113f0565b73ffffffffffffffffffffffffffffffffffffffff16146125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614ad5565b60405180910390fd5b600a54821461263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390614ab5565b60405180910390fd5b80600e60008481526020019081526020016000209080519060200190612663929190613531565b50600a6000815480929190612677906150f8565b9190505550817fb07ebfa50de31028a15cff6bb3e7e20a95dbefb030decced078198c526a0371a60405160405180910390a25050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127fe83610b34565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061284f82612717565b61288e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612885906149b5565b60405180910390fd5b600061289983610b34565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061290857508373ffffffffffffffffffffffffffffffffffffffff166128f0846108c6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612919575061291881856122bd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661294282610b34565b73ffffffffffffffffffffffffffffffffffffffff1614612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90614af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff90614975565b60405180910390fd5b612a13838383613052565b612a1e60008261278b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a6e9190614f90565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac59190614e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600d6001816001815401808255809150500390600052602060002090505060006001600d80549050612bb09190614f90565b90504481612bbe9190614f36565b600d8281548110612bd257612bd1615229565b5b906000526020600020906004020160000181905550612bf18282613057565b808273ffffffffffffffffffffffffffffffffffffffff167f8e7471715e4e98f076e1c1633d3b5efa7461c7879ad6f52e12316bb33433835a60405160405180910390a35050565b612c44848484612922565b612c5084848484613075565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906148f5565b60405180910390fd5b50505050565b60606000821415612cdd576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612df1565b600082905060005b60008214612d0f578080612cf8906150f8565b915050600a82612d089190614ed4565b9150612ce5565b60008167ffffffffffffffff811115612d2b57612d2a615258565b5b6040519080825280601f01601f191660200182016040528015612d5d5781602001600182028036833780820191505090505b5090505b60008514612dea57600182612d769190614f90565b9150600a85612d85919061516b565b6030612d919190614e47565b60f81b818381518110612da757612da6615229565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de39190614ed4565b9450612d61565b8093505050505b919050565b60606000825190506000811415612e1f5760405180602001604052806000815250915050612f89565b60006003600283612e309190614e47565b612e3a9190614ed4565b6004612e469190614f36565b90506000602082612e579190614e47565b67ffffffffffffffff811115612e7057612e6f615258565b5b6040519080825280601f01601f191660200182016040528015612ea25781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615a85604091399050600181016020830160005b86811015612f465760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612ecd565b506003860660018114612f605760028114612f7057612f7b565b613d3d60f01b6002830352612f7b565b603d60f81b60018303525b508484525050819450505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b61307182826040518060200160405280600081525061320c565b5050565b60006130968473ffffffffffffffffffffffffffffffffffffffff16613267565b156131ff578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130bf612783565b8786866040518563ffffffff1660e01b81526004016130e194939291906147bd565b602060405180830381600087803b1580156130fb57600080fd5b505af192505050801561312c57506040513d601f19601f820116820180604052508101906131299190613c0f565b60015b6131af573d806000811461315c576040519150601f19603f3d011682016040523d82523d6000602084013e613161565b606091505b506000815114156131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e906148f5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613204565b600190505b949350505050565b613216838361327a565b6132236000848484613075565b613262576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613259906148f5565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e190614a75565b60405180910390fd5b6132f381612717565b15613333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332a90614935565b60405180910390fd5b61333f60008383613052565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461338f9190614e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054828255906000526020600020908101928215613497579160200282015b82811115613496578251829080519060200190613486929190613591565b5091602001919060010190613468565b5b5090506134a49190613617565b5090565b8280548282559060005260206000209081019282156134ff5760005260206000209182015b828111156134fe5782829080546134e390615095565b6134ee92919061363b565b50916001019190600101906134cd565b5b50905061350c9190613617565b5090565b508054600082559060005260206000209081019061352e9190613617565b50565b828054828255906000526020600020908101928215613580579160200282015b8281111561357f57825182908051906020019061356f929190613448565b5091602001919060010190613551565b5b50905061358d91906136c8565b5090565b82805461359d90615095565b90600052602060002090601f0160209004810192826135bf5760008555613606565b82601f106135d857805160ff1916838001178555613606565b82800160010185558215613606579182015b828111156136055782518255916020019190600101906135ea565b5b50905061361391906136ec565b5090565b5b80821115613637576000818161362e9190613709565b50600101613618565b5090565b82805461364790615095565b90600052602060002090601f01602090048101928261366957600085556136b7565b82601f1061367a57805485556136b7565b828001600101855582156136b757600052602060002091601f016020900482015b828111156136b657825482559160010191906001019061369b565b5b5090506136c491906136ec565b5090565b5b808211156136e857600081816136df9190613510565b506001016136c9565b5090565b5b808211156137055760008160009055506001016136ed565b5090565b50805461371590615095565b6000825580601f106137275750613746565b601f01602090049060005260206000209081019061374591906136ec565b5b50565b600061375c61375784614c30565b614c0b565b9050808382526020820190508285602086028201111561377f5761377e61528c565b5b60005b858110156137cd57813567ffffffffffffffff8111156137a5576137a4615287565b5b8086016137b2898261392c565b85526020850194506020840193505050600181019050613782565b5050509392505050565b60006137ea6137e584614c5c565b614c0b565b9050808382526020820190508285602086028201111561380d5761380c61528c565b5b60005b8581101561385b57813567ffffffffffffffff81111561383357613832615287565b5b80860161384089826139c7565b85526020850194506020840193505050600181019050613810565b5050509392505050565b600061387861387384614c88565b614c0b565b90508281526020810184848401111561389457613893615291565b5b61389f848285615053565b509392505050565b60006138ba6138b584614cb9565b614c0b565b9050828152602081018484840111156138d6576138d5615291565b5b6138e1848285615053565b509392505050565b6000813590506138f881615a11565b92915050565b600082601f83011261391357613912615287565b5b8135613923848260208601613749565b91505092915050565b600082601f83011261394157613940615287565b5b81356139518482602086016137d7565b91505092915050565b60008135905061396981615a28565b92915050565b60008135905061397e81615a3f565b92915050565b60008151905061399381615a3f565b92915050565b600082601f8301126139ae576139ad615287565b5b81356139be848260208601613865565b91505092915050565b600082601f8301126139dc576139db615287565b5b81356139ec8482602086016138a7565b91505092915050565b600081359050613a0481615a56565b92915050565b600081359050613a1981615a6d565b92915050565b600060208284031215613a3557613a3461529b565b5b6000613a43848285016138e9565b91505092915050565b60008060408385031215613a6357613a6261529b565b5b6000613a71858286016138e9565b9250506020613a82858286016138e9565b9150509250929050565b600080600060608486031215613aa557613aa461529b565b5b6000613ab3868287016138e9565b9350506020613ac4868287016138e9565b9250506040613ad5868287016139f5565b9150509250925092565b60008060008060808587031215613af957613af861529b565b5b6000613b07878288016138e9565b9450506020613b18878288016138e9565b9350506040613b29878288016139f5565b925050606085013567ffffffffffffffff811115613b4a57613b49615296565b5b613b5687828801613999565b91505092959194509250565b60008060408385031215613b7957613b7861529b565b5b6000613b87858286016138e9565b9250506020613b988582860161395a565b9150509250929050565b60008060408385031215613bb957613bb861529b565b5b6000613bc7858286016138e9565b9250506020613bd8858286016139f5565b9150509250929050565b600060208284031215613bf857613bf761529b565b5b6000613c068482850161396f565b91505092915050565b600060208284031215613c2557613c2461529b565b5b6000613c3384828501613984565b91505092915050565b600060208284031215613c5257613c5161529b565b5b6000613c60848285016139f5565b91505092915050565b60008060408385031215613c8057613c7f61529b565b5b6000613c8e858286016139f5565b925050602083013567ffffffffffffffff811115613caf57613cae615296565b5b613cbb858286016138fe565b9150509250929050565b60008060408385031215613cdc57613cdb61529b565b5b6000613cea858286016139f5565b9250506020613cfb858286016139f5565b9150509250929050565b600080600060608486031215613d1e57613d1d61529b565b5b6000613d2c868287016139f5565b9350506020613d3d868287016139f5565b9250506040613d4e868287016139f5565b9150509250925092565b600080600060608486031215613d7157613d7061529b565b5b6000613d7f86828701613a0a565b9350506020613d9086828701613a0a565b9250506040613da1868287016139f5565b9150509250925092565b6000613db78383613e6f565b905092915050565b6000613dcb8383613fff565b905092915050565b6000613ddf83836145c7565b60208301905092915050565b613df481614fc4565b82525050565b6000613e0582614d2f565b613e0f8185614d8d565b935083602082028501613e2185614cea565b8060005b85811015613e5d5784840389528151613e3e8582613dab565b9450613e4983614d66565b925060208a01995050600181019050613e25565b50829750879550505050505092915050565b6000613e7a82614d3a565b613e848185614d9e565b935083602082028501613e9685614cfa565b8060005b85811015613ed25784840389528151613eb38582613dbf565b9450613ebe83614d73565b925060208a01995050600181019050613e9a565b50829750879550505050505092915050565b6000613eef82614d3a565b613ef98185614daf565b935083602082028501613f0b85614cfa565b8060005b85811015613f475784840389528151613f288582613dbf565b9450613f3383614d73565b925060208a01995050600181019050613f0f565b50829750879550505050505092915050565b6000613f6482614d45565b613f6e8185614dc0565b9350613f7983614d0a565b8060005b83811015613faa578151613f918882613dd3565b9750613f9c83614d80565b925050600181019050613f7d565b5085935050505092915050565b613fc081614fd6565b82525050565b6000613fd182614d50565b613fdb8185614dd1565b9350613feb818560208601615062565b613ff4816152a0565b840191505092915050565b600061400a82614d5b565b6140148185614de2565b9350614024818560208601615062565b61402d816152a0565b840191505092915050565b600061404382614d5b565b61404d8185614df3565b935061405d818560208601615062565b614066816152a0565b840191505092915050565b600061407c82614d5b565b6140868185614e04565b9350614096818560208601615062565b80840191505092915050565b600081546140af81615095565b6140b98186614e04565b945060018216600081146140d457600181146140e557614118565b60ff19831686528186019350614118565b6140ee85614d1a565b60005b83811015614110578154818901526001820191506020810190506140f1565b838801955050505b50505092915050565b600061412e600683614e04565b9150614139826152b1565b600682019050919050565b6000614151600983614df3565b915061415c826152da565b602082019050919050565b6000614174604c83614e04565b915061417f82615303565b604c82019050919050565b6000614197603283614df3565b91506141a282615378565b604082019050919050565b60006141ba602683614df3565b91506141c5826153c7565b604082019050919050565b60006141dd601c83614df3565b91506141e882615416565b602082019050919050565b6000614200601783614df3565b915061420b8261543f565b602082019050919050565b6000614223602483614df3565b915061422e82615468565b604082019050919050565b6000614246601983614df3565b9150614251826154b7565b602082019050919050565b6000614269602c83614df3565b9150614274826154e0565b604082019050919050565b600061428c601c83614df3565b91506142978261552f565b602082019050919050565b60006142af603883614df3565b91506142ba82615558565b604082019050919050565b60006142d2602a83614df3565b91506142dd826155a7565b604082019050919050565b60006142f5602983614df3565b9150614300826155f6565b604082019050919050565b6000614318600983614df3565b915061432382615645565b602082019050919050565b600061433b600b83614e04565b91506143468261566e565b600b82019050919050565b600061435e600283614e04565b915061436982615697565b600282019050919050565b6000614381600f83614e04565b915061438c826156c0565b600f82019050919050565b60006143a4602083614df3565b91506143af826156e9565b602082019050919050565b60006143c7602c83614df3565b91506143d282615712565b604082019050919050565b60006143ea600683614e04565b91506143f582615761565b600682019050919050565b600061440d601c83614df3565b91506144188261578a565b602082019050919050565b6000614430602083614df3565b915061443b826157b3565b602082019050919050565b6000614453602983614df3565b915061445e826157dc565b604082019050919050565b6000614476600183614e04565b91506144818261582b565b600182019050919050565b6000614499601c83614df3565b91506144a482615854565b602082019050919050565b60006144bc600383614e04565b91506144c78261587d565b600382019050919050565b60006144df602183614df3565b91506144ea826158a6565b604082019050919050565b6000614502601d83614e04565b915061450d826158f5565b601d82019050919050565b6000614525600883614e04565b91506145308261591e565b600882019050919050565b6000614548603183614df3565b915061455382615947565b604082019050919050565b600061456b600c83614df3565b915061457682615996565b602082019050919050565b600061458e601383614df3565b9150614599826159bf565b602082019050919050565b60006145b1601f83614df3565b91506145bc826159e8565b602082019050919050565b6145d08161503c565b82525050565b6145df8161503c565b82525050565b6145ee81615046565b82525050565b60006146008284614071565b915081905092915050565b6000614617828d614071565b9150614623828c614071565b915061462f828b614071565b915061463b828a614071565b91506146478289614071565b91506146538288614071565b915061465f8287614071565b915061466b8286614071565b91506146778285614071565b91506146838284614071565b91508190509b9a5050505050505050505050565b60006146a382856140a2565b91506146ae82614469565b91506146ba82846140a2565b91508190509392505050565b60006146d18261432e565b91506146dd8287614071565b91506146e882614518565b91506146f48286614071565b91506146ff826143dd565b915061470b8285614071565b915061471682614121565b91506147228284614071565b915061472d826144af565b915081905095945050505050565b600061474682614374565b91506147528285614071565b915061475d82614167565b91506147698284614071565b915061477482614351565b91508190509392505050565b600061478b826144f5565b91506147978284614071565b915081905092915050565b60006020820190506147b76000830184613deb565b92915050565b60006080820190506147d26000830187613deb565b6147df6020830186613deb565b6147ec60408301856145d6565b81810360608301526147fe8184613fc6565b905095945050505050565b600060208201905081810360008301526148238184613dfa565b905092915050565b600060208201905081810360008301526148458184613ee4565b905092915050565b600060208201905081810360008301526148678184613f59565b905092915050565b60006020820190506148846000830184613fb7565b92915050565b600060408201905061489f6000830185613fb7565b6148ac60208301846145d6565b9392505050565b600060208201905081810360008301526148cd8184614038565b905092915050565b600060208201905081810360008301526148ee81614144565b9050919050565b6000602082019050818103600083015261490e8161418a565b9050919050565b6000602082019050818103600083015261492e816141ad565b9050919050565b6000602082019050818103600083015261494e816141d0565b9050919050565b6000602082019050818103600083015261496e816141f3565b9050919050565b6000602082019050818103600083015261498e81614216565b9050919050565b600060208201905081810360008301526149ae81614239565b9050919050565b600060208201905081810360008301526149ce8161425c565b9050919050565b600060208201905081810360008301526149ee8161427f565b9050919050565b60006020820190508181036000830152614a0e816142a2565b9050919050565b60006020820190508181036000830152614a2e816142c5565b9050919050565b60006020820190508181036000830152614a4e816142e8565b9050919050565b60006020820190508181036000830152614a6e8161430b565b9050919050565b60006020820190508181036000830152614a8e81614397565b9050919050565b60006020820190508181036000830152614aae816143ba565b9050919050565b60006020820190508181036000830152614ace81614400565b9050919050565b60006020820190508181036000830152614aee81614423565b9050919050565b60006020820190508181036000830152614b0e81614446565b9050919050565b60006020820190508181036000830152614b2e8161448c565b9050919050565b60006020820190508181036000830152614b4e816144d2565b9050919050565b60006020820190508181036000830152614b6e8161453b565b9050919050565b60006020820190508181036000830152614b8e8161455e565b9050919050565b60006020820190508181036000830152614bae81614581565b9050919050565b60006020820190508181036000830152614bce816145a4565b9050919050565b6000602082019050614bea60008301846145d6565b92915050565b6000602082019050614c0560008301846145e5565b92915050565b6000614c15614c26565b9050614c2182826150c7565b919050565b6000604051905090565b600067ffffffffffffffff821115614c4b57614c4a615258565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c7757614c76615258565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ca357614ca2615258565b5b614cac826152a0565b9050602081019050919050565b600067ffffffffffffffff821115614cd457614cd3615258565b5b614cdd826152a0565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e1a8261500e565b9150614e258361500e565b92508261ffff03821115614e3c57614e3b61519c565b5b828201905092915050565b6000614e528261503c565b9150614e5d8361503c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e9257614e9161519c565b5b828201905092915050565b6000614ea882615046565b9150614eb383615046565b92508260ff03821115614ec957614ec861519c565b5b828201905092915050565b6000614edf8261503c565b9150614eea8361503c565b925082614efa57614ef96151cb565b5b828204905092915050565b6000614f1082615046565b9150614f1b83615046565b925082614f2b57614f2a6151cb565b5b828204905092915050565b6000614f418261503c565b9150614f4c8361503c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8557614f8461519c565b5b828202905092915050565b6000614f9b8261503c565b9150614fa68361503c565b925082821015614fb957614fb861519c565b5b828203905092915050565b6000614fcf8261501c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615080578082015181840152602081019050615065565b8381111561508f576000848401525b50505050565b600060028204905060018216806150ad57607f821691505b602082108114156150c1576150c06151fa565b5b50919050565b6150d0826152a0565b810181811067ffffffffffffffff821117156150ef576150ee615258565b5b80604052505050565b60006151038261503c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151365761513561519c565b5b600182019050919050565b600061514c82615046565b915060ff8214156151605761515f61519c565b5b600182019050919050565b60006151768261503c565b91506151818361503c565b925082615191576151906151cb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b7f6e6f20737570706c790000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a20224d657461576f726c642069732060008201527f776f726c64222c2022696d616765223a2022646174613a696d6167652f73766760208201527f2b786d6c3b6261736536342c0000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6e616d65737061636520616c7265616479206578697374000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f616c72656164792065786973742074686973206e616d65737061636500000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f207065726d69740000000000000000000000000000000000000000000000600082015250565b7f3c636972636c6520723d22000000000000000000000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f222063783d220000000000000000000000000000000000000000000000000000600082015250565b7f72657175697265206964203d3d206e616d657370616365436f756e7400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7e00000000000000000000000000000000000000000000000000000000000000600082015250565b7f657665727920626c6f636b2063616e206d696e74206f6e65206e667400000000600082015250565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f222066696c6c3d22000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6964206e6f742065786973740000000000000000000000000000000000000000600082015250565b7f6e6f74206f776e65724f66207468697320696400000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b615a1a81614fc4565b8114615a2557600080fd5b50565b615a3181614fd6565b8114615a3c57600080fd5b50565b615a4881614fe2565b8114615a5357600080fd5b50565b615a5f8161503c565b8114615a6a57600080fd5b50565b615a7681615046565b8114615a8157600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033323020333230223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3ea2646970667358221220ffa58d8aa7cb5c45267943b0889868346ed67f1fc76e57fc9c2290d66c2ba8eb64736f6c63430008070033
Deployed Bytecode Sourcemap
35380:8595:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37918:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;17734:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18679:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35654:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20238:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19761:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21128:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41277:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21538:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18373:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36422:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18103:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36559:73;;;:::i;:::-;;41601:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39756:1509;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41772:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35829:34;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35764:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30269:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36684:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18848:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20531:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36901:376;;;:::i;:::-;;35727:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21794:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41915:1508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35616:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35689;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38437:1305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20897:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41443:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31178:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37579:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37918:505;37997:4;38002;38012:26;38041:10;38052:8;38041:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;38012:60;;38077:15;38101:13;38131:6;38127:259;38142:11;:18;;;;38140:1;:20;38127:259;;;38191:1;38177:10;:15;:38;;;;;38214:1;38196:11;38208:1;38196:14;;;;;;;;:::i;:::-;;;;;;;;;;:19;38177:38;38174:79;;;38242:1;38229:14;;38174:79;38288:12;38270:11;38282:1;38270:14;;;;;;;;:::i;:::-;;;;;;;;;;:30;38267:108;;;38331:4;38320:15;;38354:5;;38267:108;38161:3;;;;;:::i;:::-;;;;38127:259;;;;38398:8;38407:10;38390:28;;;;;;;37918:505;;;;;:::o;17734:305::-;17836:4;17888:25;17873:40;;;:11;:40;;;;:105;;;;17945:33;17930:48;;;:11;:48;;;;17873:105;:158;;;;17995:36;18019:11;17995:23;:36::i;:::-;17873:158;17853:178;;17734:305;;;:::o;18679:100::-;18733:13;18766:5;18759:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18679:100;:::o;35654:28::-;;;;;;;;;;;;;:::o;20238:221::-;20314:7;20342:16;20350:7;20342;:16::i;:::-;20334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20427:15;:24;20443:7;20427:24;;;;;;;;;;;;;;;;;;;;;20420:31;;20238:221;;;:::o;19761:411::-;19842:13;19858:23;19873:7;19858:14;:23::i;:::-;19842:39;;19906:5;19900:11;;:2;:11;;;;19892:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20000:5;19984:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20009:37;20026:5;20033:12;:10;:12::i;:::-;20009:16;:37::i;:::-;19984:62;19962:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20143:21;20152:2;20156:7;20143:8;:21::i;:::-;19831:341;19761:411;;:::o;21128:339::-;21323:41;21342:12;:10;:12::i;:::-;21356:7;21323:18;:41::i;:::-;21315:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21431:28;21441:4;21447:2;21451:7;21431:9;:28::i;:::-;21128:339;;;:::o;41277:152::-;41354:4;41377:10;41388:8;41377:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:30;;:44;41408:12;41377:44;;;;;;;;;;;;;;;;;;;;;41370:51;;;;41277:152;;;;:::o;21538:185::-;21676:39;21693:4;21699:2;21703:7;21676:39;;;;;;;;;;;;:16;:39::i;:::-;21538:185;;;:::o;18373:239::-;18445:7;18465:13;18481:7;:16;18489:7;18481:16;;;;;;;;;;;;;;;;;;;;;18465:32;;18533:1;18516:19;;:5;:19;;;;18508:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18599:5;18592:12;;;18373:239;;;:::o;36422:125::-;30500:12;:10;:12::i;:::-;30489:23;;:7;:5;:7::i;:::-;:23;;;30481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36523:16:::1;36505:15;;:34;;;;;;;;;;;;;;;;;;36422:125:::0;:::o;18103:208::-;18175:7;18220:1;18203:19;;:5;:19;;;;18195:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18287:9;:16;18297:5;18287:16;;;;;;;;;;;;;;;;18280:23;;18103:208;;;:::o;36559:73::-;30500:12;:10;:12::i;:::-;30489:23;;:7;:5;:7::i;:::-;:23;;;30481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36559:73::o;41601:157::-;41677:15;41705:10;41716:8;41705:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;:45;41737:12;41705:45;;;;;;;;;;;41698:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41601:157;;;;:::o;39756:1509::-;34435:1;35033:7;;:19;;35025:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34435:1;35166:7;:18;;;;39864:17:::1;39872:8;39864:7;:17::i;:::-;39850:31;;:10;:31;;;39842:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39938:14;;39923:12;:29;39915:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39979:33;40015:10;40026:8;40015:20;;;;;;;;:::i;:::-;;;;;;;;;;;;39979:56;;40046:25;40074:10;:21;;40046:49;;40106:16;40125:10;:20;;:34;40146:12;40125:34;;;;;;;;;;;;;;;;;;;;;40106:53;;40170:15;40238:1:::0;40224:10:::1;:15;;;40219:202;;40256:13;40306:39;40323:8;40332:12;40306:16;:39::i;:::-;40284:61;;;;;;;;40369:8;40368:9;40360:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;40241:180;40219:202;40460:1;40446:10;:15;40443:143;;40502:12;40477:10;40488;40477:22;;;;;;;;:::i;:::-;;;;;;;;;:37;;;;40443:143;;;40545:10;40561:12;40545:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40443:143;40606:34;40643:13;:27;40657:12;40643:27;;;;;;;;;;;40606:64;;40691:27;40734:15;:22;;;;40721:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40691:66;;40782:6;40778:302;40795:15;:22;;;;40793:1;:24;40778:302;;;40837:34;40874:15;40890:1;40874:18;;;;;;;;:::i;:::-;;;;;;;;;40837:55;;40948:17;40966:1;40948:20;;;;;;;;:::i;:::-;;;;;;;;;40974:17;41064:1;41060::::0;41035:17:::1;:24;;;;:26;;;;:::i;:::-;41030:1;41028;:3;;;;:::i;:::-;41024:1;41013:10;:12;;;;:::i;:::-;40994:32;;:10;:17;;;:32;;;;:::i;:::-;:38;;;;:::i;:::-;40993:69;;;;:::i;:::-;40992:73;;;;:::i;:::-;40974:92;;;;;;;;:::i;:::-;;;;;;;;;40931:136;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40907:11;40919:1;40907:14;;;;;;;;:::i;:::-;;;;;;;:161;;;;40822:258;40818:3;;;;;:::i;:::-;;;;40778:302;;;;41138:11;41100:10;:21;;:35;41122:12;41100:35;;;;;;;;;;;:49;;;;;;;;;;;;:::i;:::-;;41160:10;:20;;:34;41181:12;41160:34;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;41244:12;41235:8;41222:35;;;;;;;;;;39831:1434;;;;;;34391:1:::0;35345:7;:22;;;;39756:1509;;:::o;41772:131::-;41832:13;41864:10;41875:8;41864:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;41857:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41772:131;;;:::o;35829:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35764:20::-;;;;:::o;30269:87::-;30315:7;30342:6;;;;;;;;;;;30335:13;;30269:87;:::o;36684:209::-;30500:12;:10;:12::i;:::-;30489:23;;:7;:5;:7::i;:::-;:23;;;30481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36803:14:::1;36787:13;;:30;;;;;;;;;;;;;;;;;;36841:11;36828:10;;:24;;;;;;;;;;;;;;;;;;36875:10;36863:9;:22;;;;36684:209:::0;;;:::o;18848:104::-;18904:13;18937:7;18930:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18848:104;:::o;20531:295::-;20646:12;:10;:12::i;:::-;20634:24;;:8;:24;;;;20626:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20746:8;20701:18;:32;20720:12;:10;:12::i;:::-;20701:32;;;;;;;;;;;;;;;:42;20734:8;20701:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20799:8;20770:48;;20785:12;:10;:12::i;:::-;20770:48;;;20809:8;20770:48;;;;;;:::i;:::-;;;;;;;;20531:295;;:::o;36901:376::-;34435:1;35033:7;;:19;;35025:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34435:1;35166:7;:18;;;;36977:12:::1;36966:8;;:23;36958:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37061:9;;37040:10;:17;;;;:30;;37032:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37134:1;37117:13;;;;;;;;;;;37097:33;;:10;:17;;;;:33;;;;:::i;:::-;:38;37094:94;;;37151:25;37168:7;:5;:7::i;:::-;37151:16;:25::i;:::-;37094:94;37198:28;37215:10;37198:16;:28::i;:::-;37259:10;;;;;;;;;;;37246:23;;:12;:23;;;;:::i;:::-;37237:8;:32;;;;34391:1:::0;35345:7;:22;;;;36901:376::o;35727:30::-;;;;:::o;21794:328::-;21969:41;21988:12;:10;:12::i;:::-;22002:7;21969:18;:41::i;:::-;21961:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22075:39;22089:4;22095:2;22099:7;22108:5;22075:13;:39::i;:::-;21794:328;;;;:::o;41915:1508::-;41978:13;42004:22;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42104:15;42149:18;42158:8;42149;:18::i;:::-;42132:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;42122:47;;;;;;42104:65;;42180:21;42217:2;42204:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42180:40;;42231:159;;;;;;;;;;;;;;;;;:5;42237:1;42231:8;;;;;;;;:::i;:::-;;;;;;;:159;;;;42405:6;42401:485;42416:14;42414:16;;:1;:16;42401:485;;;42447:12;42468:7;42476:1;42468:10;;;;;;;:::i;:::-;;;;;42462:17;;42447:32;;42494:8;42525:1;42511:7;42521:1;42519;:3;;;;:::i;:::-;42511:12;;;;;;;:::i;:::-;;;;;42505:19;;:21;;;;:::i;:::-;42494:32;;42541:9;42559:7;42569:1;42567;:3;;;;:::i;:::-;42559:12;;;;;;;:::i;:::-;;;;;42553:19;;42541:31;;;;42587:9;42605:7;42615:1;42613;:3;;;;:::i;:::-;42605:12;;;;;;;:::i;:::-;;;;;42599:19;;42587:31;;;;42643:2;42638:7;;:2;:7;;;;:::i;:::-;42633:12;;42670:2;42665:7;;:2;:7;;;;:::i;:::-;42660:12;;42743;42752:2;42743:12;;:8;:12::i;:::-;42769:5;42782:12;42775:6;:19;;;;;;:::i;:::-;42769:26;;;;;;;:::i;:::-;;;;;;42805:12;42814:2;42805:12;;:8;:12::i;:::-;42829;42838:2;42829:12;;:8;:12::i;:::-;42711:138;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42687:5;42699:1;42696;42694;:3;;;;:::i;:::-;42693:7;;;;:::i;:::-;42687:14;;;;;;;;:::i;:::-;;;;;;;:163;;;;42873:1;42871;:3;;;;:::i;:::-;42867:7;;42432:454;;;;42401:485;;;;42896:19;;;;;;;;;;;;;;;;;:5;42902:1;42896:8;;;;;;;;:::i;:::-;;;;;;;:19;;;;42926:20;42973:5;42979:1;42973:8;;;;;;;;:::i;:::-;;;;;;;;42983:5;42989:1;42983:8;;;;;;;;:::i;:::-;;;;;;;;42993:5;42999:1;42993:8;;;;;;;;:::i;:::-;;;;;;;;43003:5;43009:1;43003:8;;;;;;;;:::i;:::-;;;;;;;;43013:5;43019:1;43013:8;;;;;;;;:::i;:::-;;;;;;;;43023:5;43029:1;43023:8;;;;;;;;:::i;:::-;;;;;;;;43033:5;43039:1;43033:8;;;;;;;;:::i;:::-;;;;;;;;43043:5;43049:1;43043:8;;;;;;;;:::i;:::-;;;;;;;;43053:5;43059:1;43053:8;;;;;;;;:::i;:::-;;;;;;;;43063:5;43069:1;43063:8;;;;;;;;:::i;:::-;;;;;;;;42956:116;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42926:147;;43084:18;43105:201;43168:18;43177:8;43168;:18::i;:::-;43268:28;43288:6;43268:13;:28::i;:::-;43132:171;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43105:13;:201::i;:::-;43084:222;;43383:4;43333:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;43317:72;;43409:6;43402:13;;;;;;;41915:1508;;;:::o;35616:31::-;;;;;;;;;;;;;:::o;35689:::-;;;;:::o;38437:1305::-;34435:1;35033:7;;:19;;35025:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34435:1;35166:7;:18;;;;38568:15:::1;;;;;;;;;;;38554:29;;:10;:29;;;38546:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38607:39;38649:10;38660:12;38649:24;;;;;;;;:::i;:::-;;;;;;;;;;;;38607:66;;38678:38;38719:10;38730;38719:22;;;;;;;;:::i;:::-;;;;;;;;;;;;38678:63;;38746:13;38770:15:::0;38814:41:::1;38831:10;38842:12;38814:16;:41::i;:::-;38792:63;;;;;;;;38869:8;38868:9;38860:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;38911:25;38939:16;:27;;38911:55;;38982:6;38977:141;38998:10;:17;;;;38994:1;:21;38977:141;;;39047:10;39058:1;39047:13;;;;;;;;:::i;:::-;;;;;;;;;;39031:12;:29;39028:79;;;39075:10;39086:1;39075:13;;;;;;;;:::i;:::-;;;;;;;;;39068:20;;;39095:5;;39028:79;39017:3;;;;;:::i;:::-;;;;38977:141;;;;39134:28;39165:16;:27;;:41;39193:12;39165:41;;;;;;;;;;;39134:72;;39234:1;39220:10;:15;39217:175;;39292:12;39251:15;:26;;39278:10;39251:38;;;;;;;;:::i;:::-;;;;;;;;;:53;;;;39217:175;;;39335:15;:26;;39367:12;39335:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39217:175;39449:11;39406:15;:26;;:40;39433:12;39406:40;;;;;;;;;;;:54;;;;;;;;:::i;:::-;;39511:1;39468:15;:25;;:39;39494:12;39468:39;;;;;;;;;;;;;;;;;;;;;:44;;;39465:104;;;39522:15;:25;;:39;39548:12;39522:39;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;39465:104;39573:16;:26;;:40;39600:12;39573:40;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;39627:16;:27;;:41;39655:12;39627:41;;;;;;;;;;;;39620:48;;;;:::i;:::-;39721:12;39708;39697:10;39682:52;;;;;;;;;;38535:1207;;;;;;34391:1:::0;35345:7;:22;;;;38437:1305;;;:::o;20897:164::-;20994:4;21018:18;:25;21037:5;21018:25;;;;;;;;;;;;;;;:35;21044:8;21018:35;;;;;;;;;;;;;;;;;;;;;;;;;21011:42;;20897:164;;;;:::o;41443:144::-;41516:17;41552:13;:27;41566:12;41552:27;;;;;;;;;;;41545:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41443:144;;;:::o;31178:201::-;30500:12;:10;:12::i;:::-;30489:23;;:7;:5;:7::i;:::-;:23;;;30481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31287:1:::1;31267:22;;:8;:22;;;;31259:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31343:28;31362:8;31343:18;:28::i;:::-;31178:201:::0;:::o;37579:328::-;30500:12;:10;:12::i;:::-;30489:23;;:7;:5;:7::i;:::-;:23;;;30481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37716:14:::1;;37700:12;:30;37692:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37803:13;37773;:27;37787:12;37773:27;;;;;;;;;;;:43;;;;;;;;;;;;:::i;:::-;;37827:14;;:16;;;;;;;;;:::i;:::-;;;;;;37886:12;37869:30;;;;;;;;;;37579:328:::0;;:::o;16348:157::-;16433:4;16472:25;16457:40;;;:11;:40;;;;16450:47;;16348:157;;;:::o;23632:127::-;23697:4;23749:1;23721:30;;:7;:16;23729:7;23721:16;;;;;;;;;;;;;;;;;;;;;:30;;;;23714:37;;23632:127;;;:::o;16545:98::-;16598:7;16625:10;16618:17;;16545:98;:::o;27614:174::-;27716:2;27689:15;:24;27705:7;27689:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27772:7;27768:2;27734:46;;27743:23;27758:7;27743:14;:23::i;:::-;27734:46;;;;;;;;;;;;27614:174;;:::o;23926:348::-;24019:4;24044:16;24052:7;24044;:16::i;:::-;24036:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24120:13;24136:23;24151:7;24136:14;:23::i;:::-;24120:39;;24189:5;24178:16;;:7;:16;;;:51;;;;24222:7;24198:31;;:20;24210:7;24198:11;:20::i;:::-;:31;;;24178:51;:87;;;;24233:32;24250:5;24257:7;24233:16;:32::i;:::-;24178:87;24170:96;;;23926:348;;;;:::o;26918:578::-;27077:4;27050:31;;:23;27065:7;27050:14;:23::i;:::-;:31;;;27042:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27160:1;27146:16;;:2;:16;;;;27138:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27216:39;27237:4;27243:2;27247:7;27216:20;:39::i;:::-;27320:29;27337:1;27341:7;27320:8;:29::i;:::-;27381:1;27362:9;:15;27372:4;27362:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27410:1;27393:9;:13;27403:2;27393:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27441:2;27422:7;:16;27430:7;27422:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27480:7;27476:2;27461:27;;27470:4;27461:27;;;;;;;;;;;;26918:578;;;:::o;37289:276::-;37351:10;:17;;;;;;;;;;;;;;;;;;;;;;;37379:8;37408:1;37390:10;:17;;;;:19;;;;:::i;:::-;37379:30;;37449:16;37445:3;:20;;;;:::i;:::-;37420:10;37431:3;37420:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:45;;;;37476:23;37486:7;37495:3;37476:9;:23::i;:::-;37553:3;37545:7;37525:32;;;;;;;;;;;;37340:225;37289:276;:::o;23004:315::-;23161:28;23171:4;23177:2;23181:7;23161:9;:28::i;:::-;23208:48;23231:4;23237:2;23241:7;23250:5;23208:22;:48::i;:::-;23200:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23004:315;;;;:::o;43435:532::-;43491:13;43530:1;43521:5;:10;43517:53;;;43548:10;;;;;;;;;;;;;;;;;;;;;43517:53;43580:12;43595:5;43580:20;;43611:14;43636:78;43651:1;43643:4;:9;43636:78;;43669:8;;;;;:::i;:::-;;;;43700:2;43692:10;;;;;:::i;:::-;;;43636:78;;;43724:19;43756:6;43746:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43724:39;;43774:154;43790:1;43781:5;:10;43774:154;;43818:1;43808:11;;;;;:::i;:::-;;;43885:2;43877:5;:10;;;;:::i;:::-;43864:2;:24;;;;:::i;:::-;43851:39;;43834:6;43841;43834:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;43914:2;43905:11;;;;;:::i;:::-;;;43774:154;;;43952:6;43938:21;;;;;43435:532;;;;:::o;31931:1607::-;31989:13;32015:11;32029:4;:11;32015:25;;32062:1;32055:3;:8;32051:23;;;32065:9;;;;;;;;;;;;;;;;;32051:23;32126:18;32164:1;32159;32153:3;:7;;;;:::i;:::-;32152:13;;;;:::i;:::-;32147:1;:19;;;;:::i;:::-;32126:40;;32224:19;32269:2;32256:10;:15;;;;:::i;:::-;32246:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32224:48;;32285:18;32306:5;;;;;;;;;;;;;;;;;32285:26;;32375:1;32368:5;32364:13;32420:2;32412:6;32408:15;32471:1;32439:777;32494:3;32491:1;32488:10;32439:777;;;32549:1;32546;32542:9;32537:14;;32607:8;32602:1;32596:4;32592:12;32586:19;32582:34;32687:4;32679:5;32675:2;32671:14;32667:25;32657:8;32653:40;32647:47;32726:3;32723:1;32719:11;32712:18;;32817:4;32808;32800:5;32796:2;32792:14;32788:25;32778:8;32774:40;32768:47;32764:58;32759:3;32755:68;32748:75;;32855:3;32852:1;32848:11;32841:18;;32945:4;32936;32928:5;32925:1;32921:13;32917:24;32907:8;32903:39;32897:46;32893:57;32888:3;32884:67;32877:74;;32983:3;32980:1;32976:11;32969:18;;33065:4;33056;33049:5;33045:16;33035:8;33031:31;33025:38;33021:49;33016:3;33012:59;33005:66;;33105:3;33100;33096:13;33089:20;;33147:3;33136:9;33129:22;33199:1;33188:9;33184:17;33171:30;;32518:698;;32439:777;;;32443:44;33248:1;33243:3;33239:11;33269:1;33264:84;;;;33367:1;33362:82;;;;33232:212;;33264:84;33325:6;33320:3;33316:16;33312:1;33301:9;33297:17;33290:43;33264:84;;33362:82;33423:4;33418:3;33414:14;33410:1;33399:9;33395:17;33388:41;33232:212;;33475:10;33467:6;33460:26;32333:1164;;33523:6;33509:21;;;;;;31931:1607;;;;:::o;31539:191::-;31613:16;31632:6;;;;;;;;;;;31613:25;;31658:8;31649:6;;:17;;;;;;;;;;;;;;;;;;31713:8;31682:40;;31703:8;31682:40;;;;;;;;;;;;31602:128;31539:191;:::o;29724:126::-;;;;:::o;24616:110::-;24692:26;24702:2;24706:7;24692:26;;;;;;;;;;;;:9;:26::i;:::-;24616:110;;:::o;28353:799::-;28508:4;28529:15;:2;:13;;;:15::i;:::-;28525:620;;;28581:2;28565:36;;;28602:12;:10;:12::i;:::-;28616:4;28622:7;28631:5;28565:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28561:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28824:1;28807:6;:13;:18;28803:272;;;28850:60;;;;;;;;;;:::i;:::-;;;;;;;;28803:272;29025:6;29019:13;29010:6;29006:2;29002:15;28995:38;28561:529;28698:41;;;28688:51;;;:6;:51;;;;28681:58;;;;;28525:620;29129:4;29122:11;;28353:799;;;;;;;:::o;24953:321::-;25083:18;25089:2;25093:7;25083:5;:18::i;:::-;25134:54;25165:1;25169:2;25173:7;25182:5;25134:22;:54::i;:::-;25112:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24953:321;;;:::o;6963:387::-;7023:4;7231:12;7298:7;7286:20;7278:28;;7341:1;7334:4;:8;7327:15;;;6963:387;;;:::o;25610:382::-;25704:1;25690:16;;:2;:16;;;;25682:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25763:16;25771:7;25763;:16::i;:::-;25762:17;25754:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25825:45;25854:1;25858:2;25862:7;25825:20;:45::i;:::-;25900:1;25883:9;:13;25893:2;25883:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25931:2;25912:7;:16;25920:7;25912:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25976:7;25972:2;25951:33;;25968:1;25951:33;;;;;;;;;;;;25610:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;25:1032:1:-;156:5;181:116;197:99;289:6;197:99;:::i;:::-;181:116;:::i;:::-;172:125;;317:5;346:6;339:5;332:21;380:4;373:5;369:16;362:23;;406:6;456:3;448:4;440:6;436:17;431:3;427:27;424:36;421:143;;;475:79;;:::i;:::-;421:143;588:1;573:478;598:6;595:1;592:13;573:478;;;680:3;667:17;716:18;703:11;700:35;697:122;;;738:79;;:::i;:::-;697:122;862:11;854:6;850:24;900:72;968:3;956:10;900:72;:::i;:::-;895:3;888:85;1002:4;997:3;993:14;986:21;;1036:4;1031:3;1027:14;1020:21;;633:418;;620:1;617;613:9;608:14;;573:478;;;577:14;162:895;;25:1032;;;;;:::o;1079:957::-;1185:5;1210:91;1226:74;1293:6;1226:74;:::i;:::-;1210:91;:::i;:::-;1201:100;;1321:5;1350:6;1343:5;1336:21;1384:4;1377:5;1373:16;1366:23;;1410:6;1460:3;1452:4;1444:6;1440:17;1435:3;1431:27;1428:36;1425:143;;;1479:79;;:::i;:::-;1425:143;1592:1;1577:453;1602:6;1599:1;1596:13;1577:453;;;1684:3;1671:17;1720:18;1707:11;1704:35;1701:122;;;1742:79;;:::i;:::-;1701:122;1866:11;1858:6;1854:24;1904:47;1947:3;1935:10;1904:47;:::i;:::-;1899:3;1892:60;1981:4;1976:3;1972:14;1965:21;;2015:4;2010:3;2006:14;1999:21;;1637:393;;1624:1;1621;1617:9;1612:14;;1577:453;;;1581:14;1191:845;;1079:957;;;;;:::o;2042:410::-;2119:5;2144:65;2160:48;2201:6;2160:48;:::i;:::-;2144:65;:::i;:::-;2135:74;;2232:6;2225:5;2218:21;2270:4;2263:5;2259:16;2308:3;2299:6;2294:3;2290:16;2287:25;2284:112;;;2315:79;;:::i;:::-;2284:112;2405:41;2439:6;2434:3;2429;2405:41;:::i;:::-;2125:327;2042:410;;;;;:::o;2458:412::-;2536:5;2561:66;2577:49;2619:6;2577:49;:::i;:::-;2561:66;:::i;:::-;2552:75;;2650:6;2643:5;2636:21;2688:4;2681:5;2677:16;2726:3;2717:6;2712:3;2708:16;2705:25;2702:112;;;2733:79;;:::i;:::-;2702:112;2823:41;2857:6;2852:3;2847;2823:41;:::i;:::-;2542:328;2458:412;;;;;:::o;2876:139::-;2922:5;2960:6;2947:20;2938:29;;2976:33;3003:5;2976:33;:::i;:::-;2876:139;;;;:::o;3039:440::-;3145:5;3194:3;3187:4;3179:6;3175:17;3171:27;3161:122;;3202:79;;:::i;:::-;3161:122;3319:6;3306:20;3344:129;3469:3;3461:6;3454:4;3446:6;3442:17;3344:129;:::i;:::-;3335:138;;3151:328;3039:440;;;;:::o;3501:390::-;3582:5;3631:3;3624:4;3616:6;3612:17;3608:27;3598:122;;3639:79;;:::i;:::-;3598:122;3756:6;3743:20;3781:104;3881:3;3873:6;3866:4;3858:6;3854:17;3781:104;:::i;:::-;3772:113;;3588:303;3501:390;;;;:::o;3897:133::-;3940:5;3978:6;3965:20;3956:29;;3994:30;4018:5;3994:30;:::i;:::-;3897:133;;;;:::o;4036:137::-;4081:5;4119:6;4106:20;4097:29;;4135:32;4161:5;4135:32;:::i;:::-;4036:137;;;;:::o;4179:141::-;4235:5;4266:6;4260:13;4251:22;;4282:32;4308:5;4282:32;:::i;:::-;4179:141;;;;:::o;4339:338::-;4394:5;4443:3;4436:4;4428:6;4424:17;4420:27;4410:122;;4451:79;;:::i;:::-;4410:122;4568:6;4555:20;4593:78;4667:3;4659:6;4652:4;4644:6;4640:17;4593:78;:::i;:::-;4584:87;;4400:277;4339:338;;;;:::o;4697:340::-;4753:5;4802:3;4795:4;4787:6;4783:17;4779:27;4769:122;;4810:79;;:::i;:::-;4769:122;4927:6;4914:20;4952:79;5027:3;5019:6;5012:4;5004:6;5000:17;4952:79;:::i;:::-;4943:88;;4759:278;4697:340;;;;:::o;5043:139::-;5089:5;5127:6;5114:20;5105:29;;5143:33;5170:5;5143:33;:::i;:::-;5043:139;;;;:::o;5188:135::-;5232:5;5270:6;5257:20;5248:29;;5286:31;5311:5;5286:31;:::i;:::-;5188:135;;;;:::o;5329:329::-;5388:6;5437:2;5425:9;5416:7;5412:23;5408:32;5405:119;;;5443:79;;:::i;:::-;5405:119;5563:1;5588:53;5633:7;5624:6;5613:9;5609:22;5588:53;:::i;:::-;5578:63;;5534:117;5329:329;;;;:::o;5664:474::-;5732:6;5740;5789:2;5777:9;5768:7;5764:23;5760:32;5757:119;;;5795:79;;:::i;:::-;5757:119;5915:1;5940:53;5985:7;5976:6;5965:9;5961:22;5940:53;:::i;:::-;5930:63;;5886:117;6042:2;6068:53;6113:7;6104:6;6093:9;6089:22;6068:53;:::i;:::-;6058:63;;6013:118;5664:474;;;;;:::o;6144:619::-;6221:6;6229;6237;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6539:2;6565:53;6610:7;6601:6;6590:9;6586:22;6565:53;:::i;:::-;6555:63;;6510:118;6667:2;6693:53;6738:7;6729:6;6718:9;6714:22;6693:53;:::i;:::-;6683:63;;6638:118;6144:619;;;;;:::o;6769:943::-;6864:6;6872;6880;6888;6937:3;6925:9;6916:7;6912:23;6908:33;6905:120;;;6944:79;;:::i;:::-;6905:120;7064:1;7089:53;7134:7;7125:6;7114:9;7110:22;7089:53;:::i;:::-;7079:63;;7035:117;7191:2;7217:53;7262:7;7253:6;7242:9;7238:22;7217:53;:::i;:::-;7207:63;;7162:118;7319:2;7345:53;7390:7;7381:6;7370:9;7366:22;7345:53;:::i;:::-;7335:63;;7290:118;7475:2;7464:9;7460:18;7447:32;7506:18;7498:6;7495:30;7492:117;;;7528:79;;:::i;:::-;7492:117;7633:62;7687:7;7678:6;7667:9;7663:22;7633:62;:::i;:::-;7623:72;;7418:287;6769:943;;;;;;;:::o;7718:468::-;7783:6;7791;7840:2;7828:9;7819:7;7815:23;7811:32;7808:119;;;7846:79;;:::i;:::-;7808:119;7966:1;7991:53;8036:7;8027:6;8016:9;8012:22;7991:53;:::i;:::-;7981:63;;7937:117;8093:2;8119:50;8161:7;8152:6;8141:9;8137:22;8119:50;:::i;:::-;8109:60;;8064:115;7718:468;;;;;:::o;8192:474::-;8260:6;8268;8317:2;8305:9;8296:7;8292:23;8288:32;8285:119;;;8323:79;;:::i;:::-;8285:119;8443:1;8468:53;8513:7;8504:6;8493:9;8489:22;8468:53;:::i;:::-;8458:63;;8414:117;8570:2;8596:53;8641:7;8632:6;8621:9;8617:22;8596:53;:::i;:::-;8586:63;;8541:118;8192:474;;;;;:::o;8672:327::-;8730:6;8779:2;8767:9;8758:7;8754:23;8750:32;8747:119;;;8785:79;;:::i;:::-;8747:119;8905:1;8930:52;8974:7;8965:6;8954:9;8950:22;8930:52;:::i;:::-;8920:62;;8876:116;8672:327;;;;:::o;9005:349::-;9074:6;9123:2;9111:9;9102:7;9098:23;9094:32;9091:119;;;9129:79;;:::i;:::-;9091:119;9249:1;9274:63;9329:7;9320:6;9309:9;9305:22;9274:63;:::i;:::-;9264:73;;9220:127;9005:349;;;;:::o;9360:329::-;9419:6;9468:2;9456:9;9447:7;9443:23;9439:32;9436:119;;;9474:79;;:::i;:::-;9436:119;9594:1;9619:53;9664:7;9655:6;9644:9;9640:22;9619:53;:::i;:::-;9609:63;;9565:117;9360:329;;;;:::o;9695:754::-;9823:6;9831;9880:2;9868:9;9859:7;9855:23;9851:32;9848:119;;;9886:79;;:::i;:::-;9848:119;10006:1;10031:53;10076:7;10067:6;10056:9;10052:22;10031:53;:::i;:::-;10021:63;;9977:117;10161:2;10150:9;10146:18;10133:32;10192:18;10184:6;10181:30;10178:117;;;10214:79;;:::i;:::-;10178:117;10319:113;10424:7;10415:6;10404:9;10400:22;10319:113;:::i;:::-;10309:123;;10104:338;9695:754;;;;;:::o;10455:474::-;10523:6;10531;10580:2;10568:9;10559:7;10555:23;10551:32;10548:119;;;10586:79;;:::i;:::-;10548:119;10706:1;10731:53;10776:7;10767:6;10756:9;10752:22;10731:53;:::i;:::-;10721:63;;10677:117;10833:2;10859:53;10904:7;10895:6;10884:9;10880:22;10859:53;:::i;:::-;10849:63;;10804:118;10455:474;;;;;:::o;10935:619::-;11012:6;11020;11028;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11203:1;11228:53;11273:7;11264:6;11253:9;11249:22;11228:53;:::i;:::-;11218:63;;11174:117;11330:2;11356:53;11401:7;11392:6;11381:9;11377:22;11356:53;:::i;:::-;11346:63;;11301:118;11458:2;11484:53;11529:7;11520:6;11509:9;11505:22;11484:53;:::i;:::-;11474:63;;11429:118;10935:619;;;;;:::o;11560:611::-;11633:6;11641;11649;11698:2;11686:9;11677:7;11673:23;11669:32;11666:119;;;11704:79;;:::i;:::-;11666:119;11824:1;11849:51;11892:7;11883:6;11872:9;11868:22;11849:51;:::i;:::-;11839:61;;11795:115;11949:2;11975:51;12018:7;12009:6;11998:9;11994:22;11975:51;:::i;:::-;11965:61;;11920:116;12075:2;12101:53;12146:7;12137:6;12126:9;12122:22;12101:53;:::i;:::-;12091:63;;12046:118;11560:611;;;;;:::o;12177:296::-;12316:10;12351:116;12463:3;12455:6;12351:116;:::i;:::-;12337:130;;12177:296;;;;:::o;12479:196::-;12568:10;12603:66;12665:3;12657:6;12603:66;:::i;:::-;12589:80;;12479:196;;;;:::o;12681:179::-;12750:10;12771:46;12813:3;12805:6;12771:46;:::i;:::-;12849:4;12844:3;12840:14;12826:28;;12681:179;;;;:::o;12866:118::-;12953:24;12971:5;12953:24;:::i;:::-;12948:3;12941:37;12866:118;;:::o;13022:1191::-;13211:3;13240:89;13323:5;13240:89;:::i;:::-;13345:121;13459:6;13454:3;13345:121;:::i;:::-;13338:128;;13492:3;13537:4;13529:6;13525:17;13520:3;13516:27;13567:91;13652:5;13567:91;:::i;:::-;13681:7;13712:1;13697:471;13722:6;13719:1;13716:13;13697:471;;;13793:9;13787:4;13783:20;13778:3;13771:33;13844:6;13838:13;13872:134;14001:4;13986:13;13872:134;:::i;:::-;13864:142;;14029:95;14117:6;14029:95;:::i;:::-;14019:105;;14153:4;14148:3;14144:14;14137:21;;13757:411;13744:1;13741;13737:9;13732:14;;13697:471;;;13701:14;14184:4;14177:11;;14204:3;14197:10;;13216:997;;;;;13022:1191;;;;:::o;14247:971::-;14376:3;14405:64;14463:5;14405:64;:::i;:::-;14485:86;14564:6;14559:3;14485:86;:::i;:::-;14478:93;;14597:3;14642:4;14634:6;14630:17;14625:3;14621:27;14672:66;14732:5;14672:66;:::i;:::-;14761:7;14792:1;14777:396;14802:6;14799:1;14796:13;14777:396;;;14873:9;14867:4;14863:20;14858:3;14851:33;14924:6;14918:13;14952:84;15031:4;15016:13;14952:84;:::i;:::-;14944:92;;15059:70;15122:6;15059:70;:::i;:::-;15049:80;;15158:4;15153:3;15149:14;15142:21;;14837:336;14824:1;14821;14817:9;14812:14;;14777:396;;;14781:14;15189:4;15182:11;;15209:3;15202:10;;14381:837;;;;;14247:971;;;;:::o;15252:991::-;15391:3;15420:64;15478:5;15420:64;:::i;:::-;15500:96;15589:6;15584:3;15500:96;:::i;:::-;15493:103;;15622:3;15667:4;15659:6;15655:17;15650:3;15646:27;15697:66;15757:5;15697:66;:::i;:::-;15786:7;15817:1;15802:396;15827:6;15824:1;15821:13;15802:396;;;15898:9;15892:4;15888:20;15883:3;15876:33;15949:6;15943:13;15977:84;16056:4;16041:13;15977:84;:::i;:::-;15969:92;;16084:70;16147:6;16084:70;:::i;:::-;16074:80;;16183:4;16178:3;16174:14;16167:21;;15862:336;15849:1;15846;15842:9;15837:14;;15802:396;;;15806:14;16214:4;16207:11;;16234:3;16227:10;;15396:847;;;;;15252:991;;;;:::o;16279:732::-;16398:3;16427:54;16475:5;16427:54;:::i;:::-;16497:86;16576:6;16571:3;16497:86;:::i;:::-;16490:93;;16607:56;16657:5;16607:56;:::i;:::-;16686:7;16717:1;16702:284;16727:6;16724:1;16721:13;16702:284;;;16803:6;16797:13;16830:63;16889:3;16874:13;16830:63;:::i;:::-;16823:70;;16916:60;16969:6;16916:60;:::i;:::-;16906:70;;16762:224;16749:1;16746;16742:9;16737:14;;16702:284;;;16706:14;17002:3;16995:10;;16403:608;;;16279:732;;;;:::o;17017:109::-;17098:21;17113:5;17098:21;:::i;:::-;17093:3;17086:34;17017:109;;:::o;17132:360::-;17218:3;17246:38;17278:5;17246:38;:::i;:::-;17300:70;17363:6;17358:3;17300:70;:::i;:::-;17293:77;;17379:52;17424:6;17419:3;17412:4;17405:5;17401:16;17379:52;:::i;:::-;17456:29;17478:6;17456:29;:::i;:::-;17451:3;17447:39;17440:46;;17222:270;17132:360;;;;:::o;17498:344::-;17576:3;17604:39;17637:5;17604:39;:::i;:::-;17659:61;17713:6;17708:3;17659:61;:::i;:::-;17652:68;;17729:52;17774:6;17769:3;17762:4;17755:5;17751:16;17729:52;:::i;:::-;17806:29;17828:6;17806:29;:::i;:::-;17801:3;17797:39;17790:46;;17580:262;17498:344;;;;:::o;17848:364::-;17936:3;17964:39;17997:5;17964:39;:::i;:::-;18019:71;18083:6;18078:3;18019:71;:::i;:::-;18012:78;;18099:52;18144:6;18139:3;18132:4;18125:5;18121:16;18099:52;:::i;:::-;18176:29;18198:6;18176:29;:::i;:::-;18171:3;18167:39;18160:46;;17940:272;17848:364;;;;:::o;18218:377::-;18324:3;18352:39;18385:5;18352:39;:::i;:::-;18407:89;18489:6;18484:3;18407:89;:::i;:::-;18400:96;;18505:52;18550:6;18545:3;18538:4;18531:5;18527:16;18505:52;:::i;:::-;18582:6;18577:3;18573:16;18566:23;;18328:267;18218:377;;;;:::o;18625:845::-;18728:3;18765:5;18759:12;18794:36;18820:9;18794:36;:::i;:::-;18846:89;18928:6;18923:3;18846:89;:::i;:::-;18839:96;;18966:1;18955:9;18951:17;18982:1;18977:137;;;;19128:1;19123:341;;;;18944:520;;18977:137;19061:4;19057:9;19046;19042:25;19037:3;19030:38;19097:6;19092:3;19088:16;19081:23;;18977:137;;19123:341;19190:38;19222:5;19190:38;:::i;:::-;19250:1;19264:154;19278:6;19275:1;19272:13;19264:154;;;19352:7;19346:14;19342:1;19337:3;19333:11;19326:35;19402:1;19393:7;19389:15;19378:26;;19300:4;19297:1;19293:12;19288:17;;19264:154;;;19447:6;19442:3;19438:16;19431:23;;19130:334;;18944:520;;18732:738;;18625:845;;;;:::o;19476:400::-;19636:3;19657:84;19739:1;19734:3;19657:84;:::i;:::-;19650:91;;19750:93;19839:3;19750:93;:::i;:::-;19868:1;19863:3;19859:11;19852:18;;19476:400;;;:::o;19882:365::-;20024:3;20045:66;20109:1;20104:3;20045:66;:::i;:::-;20038:73;;20120:93;20209:3;20120:93;:::i;:::-;20238:2;20233:3;20229:12;20222:19;;19882:365;;;:::o;20253:402::-;20413:3;20434:85;20516:2;20511:3;20434:85;:::i;:::-;20427:92;;20528:93;20617:3;20528:93;:::i;:::-;20646:2;20641:3;20637:12;20630:19;;20253:402;;;:::o;20661:366::-;20803:3;20824:67;20888:2;20883:3;20824:67;:::i;:::-;20817:74;;20900:93;20989:3;20900:93;:::i;:::-;21018:2;21013:3;21009:12;21002:19;;20661:366;;;:::o;21033:::-;21175:3;21196:67;21260:2;21255:3;21196:67;:::i;:::-;21189:74;;21272:93;21361:3;21272:93;:::i;:::-;21390:2;21385:3;21381:12;21374:19;;21033:366;;;:::o;21405:::-;21547:3;21568:67;21632:2;21627:3;21568:67;:::i;:::-;21561:74;;21644:93;21733:3;21644:93;:::i;:::-;21762:2;21757:3;21753:12;21746:19;;21405:366;;;:::o;21777:::-;21919:3;21940:67;22004:2;21999:3;21940:67;:::i;:::-;21933:74;;22016:93;22105:3;22016:93;:::i;:::-;22134:2;22129:3;22125:12;22118:19;;21777:366;;;:::o;22149:::-;22291:3;22312:67;22376:2;22371:3;22312:67;:::i;:::-;22305:74;;22388:93;22477:3;22388:93;:::i;:::-;22506:2;22501:3;22497:12;22490:19;;22149:366;;;:::o;22521:::-;22663:3;22684:67;22748:2;22743:3;22684:67;:::i;:::-;22677:74;;22760:93;22849:3;22760:93;:::i;:::-;22878:2;22873:3;22869:12;22862:19;;22521:366;;;:::o;22893:::-;23035:3;23056:67;23120:2;23115:3;23056:67;:::i;:::-;23049:74;;23132:93;23221:3;23132:93;:::i;:::-;23250:2;23245:3;23241:12;23234:19;;22893:366;;;:::o;23265:::-;23407:3;23428:67;23492:2;23487:3;23428:67;:::i;:::-;23421:74;;23504:93;23593:3;23504:93;:::i;:::-;23622:2;23617:3;23613:12;23606:19;;23265:366;;;:::o;23637:::-;23779:3;23800:67;23864:2;23859:3;23800:67;:::i;:::-;23793:74;;23876:93;23965:3;23876:93;:::i;:::-;23994:2;23989:3;23985:12;23978:19;;23637:366;;;:::o;24009:::-;24151:3;24172:67;24236:2;24231:3;24172:67;:::i;:::-;24165:74;;24248:93;24337:3;24248:93;:::i;:::-;24366:2;24361:3;24357:12;24350:19;;24009:366;;;:::o;24381:::-;24523:3;24544:67;24608:2;24603:3;24544:67;:::i;:::-;24537:74;;24620:93;24709:3;24620:93;:::i;:::-;24738:2;24733:3;24729:12;24722:19;;24381:366;;;:::o;24753:365::-;24895:3;24916:66;24980:1;24975:3;24916:66;:::i;:::-;24909:73;;24991:93;25080:3;24991:93;:::i;:::-;25109:2;25104:3;25100:12;25093:19;;24753:365;;;:::o;25124:402::-;25284:3;25305:85;25387:2;25382:3;25305:85;:::i;:::-;25298:92;;25399:93;25488:3;25399:93;:::i;:::-;25517:2;25512:3;25508:12;25501:19;;25124:402;;;:::o;25532:400::-;25692:3;25713:84;25795:1;25790:3;25713:84;:::i;:::-;25706:91;;25806:93;25895:3;25806:93;:::i;:::-;25924:1;25919:3;25915:11;25908:18;;25532:400;;;:::o;25938:402::-;26098:3;26119:85;26201:2;26196:3;26119:85;:::i;:::-;26112:92;;26213:93;26302:3;26213:93;:::i;:::-;26331:2;26326:3;26322:12;26315:19;;25938:402;;;:::o;26346:366::-;26488:3;26509:67;26573:2;26568:3;26509:67;:::i;:::-;26502:74;;26585:93;26674:3;26585:93;:::i;:::-;26703:2;26698:3;26694:12;26687:19;;26346:366;;;:::o;26718:::-;26860:3;26881:67;26945:2;26940:3;26881:67;:::i;:::-;26874:74;;26957:93;27046:3;26957:93;:::i;:::-;27075:2;27070:3;27066:12;27059:19;;26718:366;;;:::o;27090:400::-;27250:3;27271:84;27353:1;27348:3;27271:84;:::i;:::-;27264:91;;27364:93;27453:3;27364:93;:::i;:::-;27482:1;27477:3;27473:11;27466:18;;27090:400;;;:::o;27496:366::-;27638:3;27659:67;27723:2;27718:3;27659:67;:::i;:::-;27652:74;;27735:93;27824:3;27735:93;:::i;:::-;27853:2;27848:3;27844:12;27837:19;;27496:366;;;:::o;27868:::-;28010:3;28031:67;28095:2;28090:3;28031:67;:::i;:::-;28024:74;;28107:93;28196:3;28107:93;:::i;:::-;28225:2;28220:3;28216:12;28209:19;;27868:366;;;:::o;28240:::-;28382:3;28403:67;28467:2;28462:3;28403:67;:::i;:::-;28396:74;;28479:93;28568:3;28479:93;:::i;:::-;28597:2;28592:3;28588:12;28581:19;;28240:366;;;:::o;28612:400::-;28772:3;28793:84;28875:1;28870:3;28793:84;:::i;:::-;28786:91;;28886:93;28975:3;28886:93;:::i;:::-;29004:1;28999:3;28995:11;28988:18;;28612:400;;;:::o;29018:366::-;29160:3;29181:67;29245:2;29240:3;29181:67;:::i;:::-;29174:74;;29257:93;29346:3;29257:93;:::i;:::-;29375:2;29370:3;29366:12;29359:19;;29018:366;;;:::o;29390:400::-;29550:3;29571:84;29653:1;29648:3;29571:84;:::i;:::-;29564:91;;29664:93;29753:3;29664:93;:::i;:::-;29782:1;29777:3;29773:11;29766:18;;29390:400;;;:::o;29796:366::-;29938:3;29959:67;30023:2;30018:3;29959:67;:::i;:::-;29952:74;;30035:93;30124:3;30035:93;:::i;:::-;30153:2;30148:3;30144:12;30137:19;;29796:366;;;:::o;30168:402::-;30328:3;30349:85;30431:2;30426:3;30349:85;:::i;:::-;30342:92;;30443:93;30532:3;30443:93;:::i;:::-;30561:2;30556:3;30552:12;30545:19;;30168:402;;;:::o;30576:400::-;30736:3;30757:84;30839:1;30834:3;30757:84;:::i;:::-;30750:91;;30850:93;30939:3;30850:93;:::i;:::-;30968:1;30963:3;30959:11;30952:18;;30576:400;;;:::o;30982:366::-;31124:3;31145:67;31209:2;31204:3;31145:67;:::i;:::-;31138:74;;31221:93;31310:3;31221:93;:::i;:::-;31339:2;31334:3;31330:12;31323:19;;30982:366;;;:::o;31354:::-;31496:3;31517:67;31581:2;31576:3;31517:67;:::i;:::-;31510:74;;31593:93;31682:3;31593:93;:::i;:::-;31711:2;31706:3;31702:12;31695:19;;31354:366;;;:::o;31726:::-;31868:3;31889:67;31953:2;31948:3;31889:67;:::i;:::-;31882:74;;31965:93;32054:3;31965:93;:::i;:::-;32083:2;32078:3;32074:12;32067:19;;31726:366;;;:::o;32098:::-;32240:3;32261:67;32325:2;32320:3;32261:67;:::i;:::-;32254:74;;32337:93;32426:3;32337:93;:::i;:::-;32455:2;32450:3;32446:12;32439:19;;32098:366;;;:::o;32470:108::-;32547:24;32565:5;32547:24;:::i;:::-;32542:3;32535:37;32470:108;;:::o;32584:118::-;32671:24;32689:5;32671:24;:::i;:::-;32666:3;32659:37;32584:118;;:::o;32708:112::-;32791:22;32807:5;32791:22;:::i;:::-;32786:3;32779:35;32708:112;;:::o;32826:275::-;32958:3;32980:95;33071:3;33062:6;32980:95;:::i;:::-;32973:102;;33092:3;33085:10;;32826:275;;;;:::o;33107:1715::-;33671:3;33693:95;33784:3;33775:6;33693:95;:::i;:::-;33686:102;;33805:95;33896:3;33887:6;33805:95;:::i;:::-;33798:102;;33917:95;34008:3;33999:6;33917:95;:::i;:::-;33910:102;;34029:95;34120:3;34111:6;34029:95;:::i;:::-;34022:102;;34141:95;34232:3;34223:6;34141:95;:::i;:::-;34134:102;;34253:95;34344:3;34335:6;34253:95;:::i;:::-;34246:102;;34365:95;34456:3;34447:6;34365:95;:::i;:::-;34358:102;;34477:95;34568:3;34559:6;34477:95;:::i;:::-;34470:102;;34589:95;34680:3;34671:6;34589:95;:::i;:::-;34582:102;;34701:95;34792:3;34783:6;34701:95;:::i;:::-;34694:102;;34813:3;34806:10;;33107:1715;;;;;;;;;;;;;:::o;34828:689::-;35103:3;35125:92;35213:3;35204:6;35125:92;:::i;:::-;35118:99;;35234:148;35378:3;35234:148;:::i;:::-;35227:155;;35399:92;35487:3;35478:6;35399:92;:::i;:::-;35392:99;;35508:3;35501:10;;34828:689;;;;;:::o;35523:2085::-;36304:3;36326:148;36470:3;36326:148;:::i;:::-;36319:155;;36491:95;36582:3;36573:6;36491:95;:::i;:::-;36484:102;;36603:148;36747:3;36603:148;:::i;:::-;36596:155;;36768:95;36859:3;36850:6;36768:95;:::i;:::-;36761:102;;36880:148;37024:3;36880:148;:::i;:::-;36873:155;;37045:95;37136:3;37127:6;37045:95;:::i;:::-;37038:102;;37157:148;37301:3;37157:148;:::i;:::-;37150:155;;37322:95;37413:3;37404:6;37322:95;:::i;:::-;37315:102;;37434:148;37578:3;37434:148;:::i;:::-;37427:155;;37599:3;37592:10;;35523:2085;;;;;;;:::o;37614:1233::-;38097:3;38119:148;38263:3;38119:148;:::i;:::-;38112:155;;38284:95;38375:3;38366:6;38284:95;:::i;:::-;38277:102;;38396:148;38540:3;38396:148;:::i;:::-;38389:155;;38561:95;38652:3;38643:6;38561:95;:::i;:::-;38554:102;;38673:148;38817:3;38673:148;:::i;:::-;38666:155;;38838:3;38831:10;;37614:1233;;;;;:::o;38853:541::-;39086:3;39108:148;39252:3;39108:148;:::i;:::-;39101:155;;39273:95;39364:3;39355:6;39273:95;:::i;:::-;39266:102;;39385:3;39378:10;;38853:541;;;;:::o;39400:222::-;39493:4;39531:2;39520:9;39516:18;39508:26;;39544:71;39612:1;39601:9;39597:17;39588:6;39544:71;:::i;:::-;39400:222;;;;:::o;39628:640::-;39823:4;39861:3;39850:9;39846:19;39838:27;;39875:71;39943:1;39932:9;39928:17;39919:6;39875:71;:::i;:::-;39956:72;40024:2;40013:9;40009:18;40000:6;39956:72;:::i;:::-;40038;40106:2;40095:9;40091:18;40082:6;40038:72;:::i;:::-;40157:9;40151:4;40147:20;40142:2;40131:9;40127:18;40120:48;40185:76;40256:4;40247:6;40185:76;:::i;:::-;40177:84;;39628:640;;;;;;;:::o;40274:513::-;40487:4;40525:2;40514:9;40510:18;40502:26;;40574:9;40568:4;40564:20;40560:1;40549:9;40545:17;40538:47;40602:178;40775:4;40766:6;40602:178;:::i;:::-;40594:186;;40274:513;;;;:::o;40793:413::-;40956:4;40994:2;40983:9;40979:18;40971:26;;41043:9;41037:4;41033:20;41029:1;41018:9;41014:17;41007:47;41071:128;41194:4;41185:6;41071:128;:::i;:::-;41063:136;;40793:413;;;;:::o;41212:373::-;41355:4;41393:2;41382:9;41378:18;41370:26;;41442:9;41436:4;41432:20;41428:1;41417:9;41413:17;41406:47;41470:108;41573:4;41564:6;41470:108;:::i;:::-;41462:116;;41212:373;;;;:::o;41591:210::-;41678:4;41716:2;41705:9;41701:18;41693:26;;41729:65;41791:1;41780:9;41776:17;41767:6;41729:65;:::i;:::-;41591:210;;;;:::o;41807:320::-;41922:4;41960:2;41949:9;41945:18;41937:26;;41973:65;42035:1;42024:9;42020:17;42011:6;41973:65;:::i;:::-;42048:72;42116:2;42105:9;42101:18;42092:6;42048:72;:::i;:::-;41807:320;;;;;:::o;42133:313::-;42246:4;42284:2;42273:9;42269:18;42261:26;;42333:9;42327:4;42323:20;42319:1;42308:9;42304:17;42297:47;42361:78;42434:4;42425:6;42361:78;:::i;:::-;42353:86;;42133:313;;;;:::o;42452:419::-;42618:4;42656:2;42645:9;42641:18;42633:26;;42705:9;42699:4;42695:20;42691:1;42680:9;42676:17;42669:47;42733:131;42859:4;42733:131;:::i;:::-;42725:139;;42452:419;;;:::o;42877:::-;43043:4;43081:2;43070:9;43066:18;43058:26;;43130:9;43124:4;43120:20;43116:1;43105:9;43101:17;43094:47;43158:131;43284:4;43158:131;:::i;:::-;43150:139;;42877:419;;;:::o;43302:::-;43468:4;43506:2;43495:9;43491:18;43483:26;;43555:9;43549:4;43545:20;43541:1;43530:9;43526:17;43519:47;43583:131;43709:4;43583:131;:::i;:::-;43575:139;;43302:419;;;:::o;43727:::-;43893:4;43931:2;43920:9;43916:18;43908:26;;43980:9;43974:4;43970:20;43966:1;43955:9;43951:17;43944:47;44008:131;44134:4;44008:131;:::i;:::-;44000:139;;43727:419;;;:::o;44152:::-;44318:4;44356:2;44345:9;44341:18;44333:26;;44405:9;44399:4;44395:20;44391:1;44380:9;44376:17;44369:47;44433:131;44559:4;44433:131;:::i;:::-;44425:139;;44152:419;;;:::o;44577:::-;44743:4;44781:2;44770:9;44766:18;44758:26;;44830:9;44824:4;44820:20;44816:1;44805:9;44801:17;44794:47;44858:131;44984:4;44858:131;:::i;:::-;44850:139;;44577:419;;;:::o;45002:::-;45168:4;45206:2;45195:9;45191:18;45183:26;;45255:9;45249:4;45245:20;45241:1;45230:9;45226:17;45219:47;45283:131;45409:4;45283:131;:::i;:::-;45275:139;;45002:419;;;:::o;45427:::-;45593:4;45631:2;45620:9;45616:18;45608:26;;45680:9;45674:4;45670:20;45666:1;45655:9;45651:17;45644:47;45708:131;45834:4;45708:131;:::i;:::-;45700:139;;45427:419;;;:::o;45852:::-;46018:4;46056:2;46045:9;46041:18;46033:26;;46105:9;46099:4;46095:20;46091:1;46080:9;46076:17;46069:47;46133:131;46259:4;46133:131;:::i;:::-;46125:139;;45852:419;;;:::o;46277:::-;46443:4;46481:2;46470:9;46466:18;46458:26;;46530:9;46524:4;46520:20;46516:1;46505:9;46501:17;46494:47;46558:131;46684:4;46558:131;:::i;:::-;46550:139;;46277:419;;;:::o;46702:::-;46868:4;46906:2;46895:9;46891:18;46883:26;;46955:9;46949:4;46945:20;46941:1;46930:9;46926:17;46919:47;46983:131;47109:4;46983:131;:::i;:::-;46975:139;;46702:419;;;:::o;47127:::-;47293:4;47331:2;47320:9;47316:18;47308:26;;47380:9;47374:4;47370:20;47366:1;47355:9;47351:17;47344:47;47408:131;47534:4;47408:131;:::i;:::-;47400:139;;47127:419;;;:::o;47552:::-;47718:4;47756:2;47745:9;47741:18;47733:26;;47805:9;47799:4;47795:20;47791:1;47780:9;47776:17;47769:47;47833:131;47959:4;47833:131;:::i;:::-;47825:139;;47552:419;;;:::o;47977:::-;48143:4;48181:2;48170:9;48166:18;48158:26;;48230:9;48224:4;48220:20;48216:1;48205:9;48201:17;48194:47;48258:131;48384:4;48258:131;:::i;:::-;48250:139;;47977:419;;;:::o;48402:::-;48568:4;48606:2;48595:9;48591:18;48583:26;;48655:9;48649:4;48645:20;48641:1;48630:9;48626:17;48619:47;48683:131;48809:4;48683:131;:::i;:::-;48675:139;;48402:419;;;:::o;48827:::-;48993:4;49031:2;49020:9;49016:18;49008:26;;49080:9;49074:4;49070:20;49066:1;49055:9;49051:17;49044:47;49108:131;49234:4;49108:131;:::i;:::-;49100:139;;48827:419;;;:::o;49252:::-;49418:4;49456:2;49445:9;49441:18;49433:26;;49505:9;49499:4;49495:20;49491:1;49480:9;49476:17;49469:47;49533:131;49659:4;49533:131;:::i;:::-;49525:139;;49252:419;;;:::o;49677:::-;49843:4;49881:2;49870:9;49866:18;49858:26;;49930:9;49924:4;49920:20;49916:1;49905:9;49901:17;49894:47;49958:131;50084:4;49958:131;:::i;:::-;49950:139;;49677:419;;;:::o;50102:::-;50268:4;50306:2;50295:9;50291:18;50283:26;;50355:9;50349:4;50345:20;50341:1;50330:9;50326:17;50319:47;50383:131;50509:4;50383:131;:::i;:::-;50375:139;;50102:419;;;:::o;50527:::-;50693:4;50731:2;50720:9;50716:18;50708:26;;50780:9;50774:4;50770:20;50766:1;50755:9;50751:17;50744:47;50808:131;50934:4;50808:131;:::i;:::-;50800:139;;50527:419;;;:::o;50952:::-;51118:4;51156:2;51145:9;51141:18;51133:26;;51205:9;51199:4;51195:20;51191:1;51180:9;51176:17;51169:47;51233:131;51359:4;51233:131;:::i;:::-;51225:139;;50952:419;;;:::o;51377:::-;51543:4;51581:2;51570:9;51566:18;51558:26;;51630:9;51624:4;51620:20;51616:1;51605:9;51601:17;51594:47;51658:131;51784:4;51658:131;:::i;:::-;51650:139;;51377:419;;;:::o;51802:::-;51968:4;52006:2;51995:9;51991:18;51983:26;;52055:9;52049:4;52045:20;52041:1;52030:9;52026:17;52019:47;52083:131;52209:4;52083:131;:::i;:::-;52075:139;;51802:419;;;:::o;52227:::-;52393:4;52431:2;52420:9;52416:18;52408:26;;52480:9;52474:4;52470:20;52466:1;52455:9;52451:17;52444:47;52508:131;52634:4;52508:131;:::i;:::-;52500:139;;52227:419;;;:::o;52652:222::-;52745:4;52783:2;52772:9;52768:18;52760:26;;52796:71;52864:1;52853:9;52849:17;52840:6;52796:71;:::i;:::-;52652:222;;;;:::o;52880:214::-;52969:4;53007:2;52996:9;52992:18;52984:26;;53020:67;53084:1;53073:9;53069:17;53060:6;53020:67;:::i;:::-;52880:214;;;;:::o;53100:129::-;53134:6;53161:20;;:::i;:::-;53151:30;;53190:33;53218:4;53210:6;53190:33;:::i;:::-;53100:129;;;:::o;53235:75::-;53268:6;53301:2;53295:9;53285:19;;53235:75;:::o;53316:346::-;53428:4;53518:18;53510:6;53507:30;53504:56;;;53540:18;;:::i;:::-;53504:56;53590:4;53582:6;53578:17;53570:25;;53650:4;53644;53640:15;53632:23;;53316:346;;;:::o;53668:321::-;53755:4;53845:18;53837:6;53834:30;53831:56;;;53867:18;;:::i;:::-;53831:56;53917:4;53909:6;53905:17;53897:25;;53977:4;53971;53967:15;53959:23;;53668:321;;;:::o;53995:307::-;54056:4;54146:18;54138:6;54135:30;54132:56;;;54168:18;;:::i;:::-;54132:56;54206:29;54228:6;54206:29;:::i;:::-;54198:37;;54290:4;54284;54280:15;54272:23;;53995:307;;;:::o;54308:308::-;54370:4;54460:18;54452:6;54449:30;54446:56;;;54482:18;;:::i;:::-;54446:56;54520:29;54542:6;54520:29;:::i;:::-;54512:37;;54604:4;54598;54594:15;54586:23;;54308:308;;;:::o;54622:167::-;54724:4;54747:3;54739:11;;54777:4;54772:3;54768:14;54760:22;;54622:167;;;:::o;54795:142::-;54872:4;54895:3;54887:11;;54925:4;54920:3;54916:14;54908:22;;54795:142;;;:::o;54943:132::-;55010:4;55033:3;55025:11;;55063:4;55058:3;55054:14;55046:22;;54943:132;;;:::o;55081:141::-;55130:4;55153:3;55145:11;;55176:3;55173:1;55166:14;55210:4;55207:1;55197:18;55189:26;;55081:141;;;:::o;55228:149::-;55330:6;55364:5;55358:12;55348:22;;55228:149;;;:::o;55383:124::-;55460:6;55494:5;55488:12;55478:22;;55383:124;;;:::o;55513:114::-;55580:6;55614:5;55608:12;55598:22;;55513:114;;;:::o;55633:98::-;55684:6;55718:5;55712:12;55702:22;;55633:98;;;:::o;55737:99::-;55789:6;55823:5;55817:12;55807:22;;55737:99;;;:::o;55842:148::-;55947:4;55979;55974:3;55970:14;55962:22;;55842:148;;;:::o;55996:123::-;56076:4;56108;56103:3;56099:14;56091:22;;55996:123;;;:::o;56125:113::-;56195:4;56227;56222:3;56218:14;56210:22;;56125:113;;;:::o;56244:219::-;56378:11;56412:6;56407:3;56400:19;56452:4;56447:3;56443:14;56428:29;;56244:219;;;;:::o;56469:184::-;56568:11;56602:6;56597:3;56590:19;56642:4;56637:3;56633:14;56618:29;;56469:184;;;;:::o;56659:194::-;56768:11;56802:6;56797:3;56790:19;56842:4;56837:3;56833:14;56818:29;;56659:194;;;;:::o;56859:184::-;56958:11;56992:6;56987:3;56980:19;57032:4;57027:3;57023:14;57008:29;;56859:184;;;;:::o;57049:168::-;57132:11;57166:6;57161:3;57154:19;57206:4;57201:3;57197:14;57182:29;;57049:168;;;;:::o;57223:159::-;57297:11;57331:6;57326:3;57319:19;57371:4;57366:3;57362:14;57347:29;;57223:159;;;;:::o;57388:169::-;57472:11;57506:6;57501:3;57494:19;57546:4;57541:3;57537:14;57522:29;;57388:169;;;;:::o;57563:148::-;57665:11;57702:3;57687:18;;57563:148;;;;:::o;57717:242::-;57756:3;57775:19;57792:1;57775:19;:::i;:::-;57770:24;;57808:19;57825:1;57808:19;:::i;:::-;57803:24;;57901:1;57893:6;57889:14;57886:1;57883:21;57880:47;;;57907:18;;:::i;:::-;57880:47;57951:1;57948;57944:9;57937:16;;57717:242;;;;:::o;57965:305::-;58005:3;58024:20;58042:1;58024:20;:::i;:::-;58019:25;;58058:20;58076:1;58058:20;:::i;:::-;58053:25;;58212:1;58144:66;58140:74;58137:1;58134:81;58131:107;;;58218:18;;:::i;:::-;58131:107;58262:1;58259;58255:9;58248:16;;57965:305;;;;:::o;58276:237::-;58314:3;58333:18;58349:1;58333:18;:::i;:::-;58328:23;;58365:18;58381:1;58365:18;:::i;:::-;58360:23;;58455:1;58449:4;58445:12;58442:1;58439:19;58436:45;;;58461:18;;:::i;:::-;58436:45;58505:1;58502;58498:9;58491:16;;58276:237;;;;:::o;58519:185::-;58559:1;58576:20;58594:1;58576:20;:::i;:::-;58571:25;;58610:20;58628:1;58610:20;:::i;:::-;58605:25;;58649:1;58639:35;;58654:18;;:::i;:::-;58639:35;58696:1;58693;58689:9;58684:14;;58519:185;;;;:::o;58710:179::-;58748:1;58765:18;58781:1;58765:18;:::i;:::-;58760:23;;58797:18;58813:1;58797:18;:::i;:::-;58792:23;;58834:1;58824:35;;58839:18;;:::i;:::-;58824:35;58881:1;58878;58874:9;58869:14;;58710:179;;;;:::o;58895:348::-;58935:7;58958:20;58976:1;58958:20;:::i;:::-;58953:25;;58992:20;59010:1;58992:20;:::i;:::-;58987:25;;59180:1;59112:66;59108:74;59105:1;59102:81;59097:1;59090:9;59083:17;59079:105;59076:131;;;59187:18;;:::i;:::-;59076:131;59235:1;59232;59228:9;59217:20;;58895:348;;;;:::o;59249:191::-;59289:4;59309:20;59327:1;59309:20;:::i;:::-;59304:25;;59343:20;59361:1;59343:20;:::i;:::-;59338:25;;59382:1;59379;59376:8;59373:34;;;59387:18;;:::i;:::-;59373:34;59432:1;59429;59425:9;59417:17;;59249:191;;;;:::o;59446:96::-;59483:7;59512:24;59530:5;59512:24;:::i;:::-;59501:35;;59446:96;;;:::o;59548:90::-;59582:7;59625:5;59618:13;59611:21;59600:32;;59548:90;;;:::o;59644:149::-;59680:7;59720:66;59713:5;59709:78;59698:89;;59644:149;;;:::o;59799:89::-;59835:7;59875:6;59868:5;59864:18;59853:29;;59799:89;;;:::o;59894:126::-;59931:7;59971:42;59964:5;59960:54;59949:65;;59894:126;;;:::o;60026:77::-;60063:7;60092:5;60081:16;;60026:77;;;:::o;60109:86::-;60144:7;60184:4;60177:5;60173:16;60162:27;;60109:86;;;:::o;60201:154::-;60285:6;60280:3;60275;60262:30;60347:1;60338:6;60333:3;60329:16;60322:27;60201:154;;;:::o;60361:307::-;60429:1;60439:113;60453:6;60450:1;60447:13;60439:113;;;60538:1;60533:3;60529:11;60523:18;60519:1;60514:3;60510:11;60503:39;60475:2;60472:1;60468:10;60463:15;;60439:113;;;60570:6;60567:1;60564:13;60561:101;;;60650:1;60641:6;60636:3;60632:16;60625:27;60561:101;60410:258;60361:307;;;:::o;60674:320::-;60718:6;60755:1;60749:4;60745:12;60735:22;;60802:1;60796:4;60792:12;60823:18;60813:81;;60879:4;60871:6;60867:17;60857:27;;60813:81;60941:2;60933:6;60930:14;60910:18;60907:38;60904:84;;;60960:18;;:::i;:::-;60904:84;60725:269;60674:320;;;:::o;61000:281::-;61083:27;61105:4;61083:27;:::i;:::-;61075:6;61071:40;61213:6;61201:10;61198:22;61177:18;61165:10;61162:34;61159:62;61156:88;;;61224:18;;:::i;:::-;61156:88;61264:10;61260:2;61253:22;61043:238;61000:281;;:::o;61287:233::-;61326:3;61349:24;61367:5;61349:24;:::i;:::-;61340:33;;61395:66;61388:5;61385:77;61382:103;;;61465:18;;:::i;:::-;61382:103;61512:1;61505:5;61501:13;61494:20;;61287:233;;;:::o;61526:167::-;61563:3;61586:22;61602:5;61586:22;:::i;:::-;61577:31;;61630:4;61623:5;61620:15;61617:41;;;61638:18;;:::i;:::-;61617:41;61685:1;61678:5;61674:13;61667:20;;61526:167;;;:::o;61699:176::-;61731:1;61748:20;61766:1;61748:20;:::i;:::-;61743:25;;61782:20;61800:1;61782:20;:::i;:::-;61777:25;;61821:1;61811:35;;61826:18;;:::i;:::-;61811:35;61867:1;61864;61860:9;61855:14;;61699:176;;;;:::o;61881:180::-;61929:77;61926:1;61919:88;62026:4;62023:1;62016:15;62050:4;62047:1;62040:15;62067:180;62115:77;62112:1;62105:88;62212:4;62209:1;62202:15;62236:4;62233:1;62226:15;62253:180;62301:77;62298:1;62291:88;62398:4;62395:1;62388:15;62422:4;62419:1;62412:15;62439:180;62487:77;62484:1;62477:88;62584:4;62581:1;62574:15;62608:4;62605:1;62598:15;62625:180;62673:77;62670:1;62663:88;62770:4;62767:1;62760:15;62794:4;62791:1;62784:15;62811:117;62920:1;62917;62910:12;62934:117;63043:1;63040;63033:12;63057:117;63166:1;63163;63156:12;63180:117;63289:1;63286;63279:12;63303:117;63412:1;63409;63402:12;63426:102;63467:6;63518:2;63514:7;63509:2;63502:5;63498:14;63494:28;63484:38;;63426:102;;;:::o;63534:214::-;63674:66;63670:1;63662:6;63658:14;63651:90;63534:214;:::o;63754:159::-;63894:11;63890:1;63882:6;63878:14;63871:35;63754:159;:::o;63919:364::-;64059:66;64055:1;64047:6;64043:14;64036:90;64160:66;64155:2;64147:6;64143:15;64136:91;64261:14;64256:2;64248:6;64244:15;64237:39;63919:364;:::o;64289:237::-;64429:34;64425:1;64417:6;64413:14;64406:58;64498:20;64493:2;64485:6;64481:15;64474:45;64289:237;:::o;64532:225::-;64672:34;64668:1;64660:6;64656:14;64649:58;64741:8;64736:2;64728:6;64724:15;64717:33;64532:225;:::o;64763:178::-;64903:30;64899:1;64891:6;64887:14;64880:54;64763:178;:::o;64947:173::-;65087:25;65083:1;65075:6;65071:14;65064:49;64947:173;:::o;65126:223::-;65266:34;65262:1;65254:6;65250:14;65243:58;65335:6;65330:2;65322:6;65318:15;65311:31;65126:223;:::o;65355:175::-;65495:27;65491:1;65483:6;65479:14;65472:51;65355:175;:::o;65536:231::-;65676:34;65672:1;65664:6;65660:14;65653:58;65745:14;65740:2;65732:6;65728:15;65721:39;65536:231;:::o;65773:178::-;65913:30;65909:1;65901:6;65897:14;65890:54;65773:178;:::o;65957:243::-;66097:34;66093:1;66085:6;66081:14;66074:58;66166:26;66161:2;66153:6;66149:15;66142:51;65957:243;:::o;66206:229::-;66346:34;66342:1;66334:6;66330:14;66323:58;66415:12;66410:2;66402:6;66398:15;66391:37;66206:229;:::o;66441:228::-;66581:34;66577:1;66569:6;66565:14;66558:58;66650:11;66645:2;66637:6;66633:15;66626:36;66441:228;:::o;66675:159::-;66815:11;66811:1;66803:6;66799:14;66792:35;66675:159;:::o;66840:214::-;66980:66;66976:1;66968:6;66964:14;66957:90;66840:214;:::o;67060:::-;67200:66;67196:1;67188:6;67184:14;67177:90;67060:214;:::o;67280:::-;67420:66;67416:1;67408:6;67404:14;67397:90;67280:214;:::o;67500:182::-;67640:34;67636:1;67628:6;67624:14;67617:58;67500:182;:::o;67688:231::-;67828:34;67824:1;67816:6;67812:14;67805:58;67897:14;67892:2;67884:6;67880:15;67873:39;67688:231;:::o;67925:214::-;68065:66;68061:1;68053:6;68049:14;68042:90;67925:214;:::o;68145:178::-;68285:30;68281:1;68273:6;68269:14;68262:54;68145:178;:::o;68329:182::-;68469:34;68465:1;68457:6;68453:14;68446:58;68329:182;:::o;68517:228::-;68657:34;68653:1;68645:6;68641:14;68634:58;68726:11;68721:2;68713:6;68709:15;68702:36;68517:228;:::o;68751:151::-;68891:3;68887:1;68879:6;68875:14;68868:27;68751:151;:::o;68908:178::-;69048:30;69044:1;69036:6;69032:14;69025:54;68908:178;:::o;69092:214::-;69232:66;69228:1;69220:6;69216:14;69209:90;69092:214;:::o;69312:220::-;69452:34;69448:1;69440:6;69436:14;69429:58;69521:3;69516:2;69508:6;69504:15;69497:28;69312:220;:::o;69538:179::-;69678:31;69674:1;69666:6;69662:14;69655:55;69538:179;:::o;69723:214::-;69863:66;69859:1;69851:6;69847:14;69840:90;69723:214;:::o;69943:236::-;70083:34;70079:1;70071:6;70067:14;70060:58;70152:19;70147:2;70139:6;70135:15;70128:44;69943:236;:::o;70185:162::-;70325:14;70321:1;70313:6;70309:14;70302:38;70185:162;:::o;70353:169::-;70493:21;70489:1;70481:6;70477:14;70470:45;70353:169;:::o;70528:181::-;70668:33;70664:1;70656:6;70652:14;70645:57;70528:181;:::o;70715:122::-;70788:24;70806:5;70788:24;:::i;:::-;70781:5;70778:35;70768:63;;70827:1;70824;70817:12;70768:63;70715:122;:::o;70843:116::-;70913:21;70928:5;70913:21;:::i;:::-;70906:5;70903:32;70893:60;;70949:1;70946;70939:12;70893:60;70843:116;:::o;70965:120::-;71037:23;71054:5;71037:23;:::i;:::-;71030:5;71027:34;71017:62;;71075:1;71072;71065:12;71017:62;70965:120;:::o;71091:122::-;71164:24;71182:5;71164:24;:::i;:::-;71157:5;71154:35;71144:63;;71203:1;71200;71193:12;71144:63;71091:122;:::o;71219:118::-;71290:22;71306:5;71290:22;:::i;:::-;71283:5;71280:33;71270:61;;71327:1;71324;71317:12;71270:61;71219:118;:::o
Swarm Source
ipfs://ffa58d8aa7cb5c45267943b0889868346ed67f1fc76e57fc9c2290d66c2ba8eb
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.