ERC-721
Overview
Max Total Supply
0 DagongrenNFT
Holders
85
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DagongrenNFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DagongrenNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-16 */ // File: contracts/interfaces/ILayerZeroUserApplicationConfig.sol pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } // File: contracts/interfaces/ILayerZeroEndpoint.sol pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } // File: contracts/interfaces/ILayerZeroReceiver.sol pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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"); _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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/NonblockingReceiver.sol pragma solidity ^0.8.6; abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver { ILayerZeroEndpoint internal endpoint; struct FailedMessages { uint payloadLength; bytes32 payloadHash; } mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages; mapping(uint16 => bytes) public trustedRemoteLookup; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override { require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract"); // try-catch all errors/exceptions // having failed messages does not block messages passing try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload)); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public { // only internal transaction require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge."); // handle incoming message _LzReceive( _srcChainId, _srcAddress, _nonce, _payload); } // abstract function function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal; function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal { endpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam); } function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable { // assert there is message to retry FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce]; require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message"); require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload"); // clear the stored message failedMsg.payloadLength = 0; failedMsg.payloadHash = bytes32(0); // execute the message. revert if it fails again this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote) external onlyOwner { trustedRemoteLookup[_chainId] = _trustedRemote; } } // File: contracts/GhostlyGhosts.sol pragma solidity ^0.8.7; contract DagongrenNFT is Ownable, ERC721, NonblockingReceiver { address public _owner; string private baseURI; uint8 public maxPerAddress = 10; uint256 nextTokenId = 0; uint256 MAX_MINT_ETHEREUM = 3400; uint256 nextLastTokenId = 6600; uint256 maxLastTokenId = 6665; uint256 public PRICE = 5000000000000000; bool startMint = false; uint gasForDestinationLzReceive = 350000; mapping(address => uint) private limitMint; constructor(string memory baseURI_, address _layerZeroEndpoint) ERC721("DagongrenNFT", "DagongrenNFT") { _owner = msg.sender; endpoint = ILayerZeroEndpoint(_layerZeroEndpoint); baseURI = baseURI_; } function adminMintLast(uint8 numTokens) external onlyOwner { require(nextLastTokenId + numTokens <= maxLastTokenId, "Mint exceeds supply"); for(uint i=0;i<numTokens;i++){ _safeMint(msg.sender, nextLastTokenId); nextLastTokenId++; } } // mint function // you can choose to mint 10 function mint(uint8 numTokens) external payable { require(startMint, "not started"); require(msg.value >= (PRICE * numTokens), "value not enough"); if(nextTokenId < MAX_MINT_ETHEREUM) { require(numTokens <= maxPerAddress, "Mint exceeds maxPerAddress"); require(nextTokenId + numTokens <= MAX_MINT_ETHEREUM, "Mint exceeds supply"); for(uint i=0;i<numTokens;i++){ _safeMint(msg.sender, nextTokenId); nextTokenId++; } } else { require(numTokens < 2, "Mint exceeds 2"); require(nextLastTokenId + numTokens <= maxLastTokenId, "Mint exceeds supply"); require(limitMint[msg.sender] < 1, "Mint exceeds 1"); for(uint i=0;i<numTokens;i++){ _safeMint(msg.sender, nextLastTokenId); limitMint[msg.sender] = numTokens; nextLastTokenId++; } } } // This function transfers the nft from your address on the // source chain to the same address on the destination chain function traverseChains(uint16 _chainId, uint tokenId) public payable { require(msg.sender == ownerOf(tokenId), "You must own the token to traverse"); require(trustedRemoteLookup[_chainId].length > 0, "This chain is currently unavailable for travel"); // burn NFT, eliminating it from circulation on src chain _burn(tokenId); // abi.encode() the payload with the values to send bytes memory payload = abi.encode(msg.sender, tokenId); // encode adapterParams to specify more gas for the destination uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive); // get the fees we need to pay to LayerZero + Relayer to cover message delivery // you will be refunded for extra gas paid (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); require(msg.value >= messageFee, "msg.value not enough to cover messageFee. Send gas for message fees"); endpoint.send{value: msg.value}( _chainId, // destination chainId trustedRemoteLookup[_chainId], // destination address of nft contract payload, // abi.encoded()'ed bytes payable(msg.sender), // refund address address(0x0), // 'zroPaymentAddress' unused for this adapterParams // txParameters ); } function setPrice(uint _price) external onlyOwner { PRICE = _price; } function setStartMint(bool _startMint) external onlyOwner { startMint = _startMint; } function setMaxPerAddress(uint8 _max) external onlyOwner { maxPerAddress = _max; } function setBaseURI(string memory URI) external onlyOwner { baseURI = URI; } function setNextTokenId(uint8 _n) external onlyOwner { nextTokenId = _n; } function setMaxMintEthereum(uint8 _n) external onlyOwner { MAX_MINT_ETHEREUM = _n; } function setNextLastTokenId(uint8 _n) external onlyOwner { nextLastTokenId = _n; } function setMaxLastTokenId(uint8 _n) external onlyOwner { maxLastTokenId = _n; } function donate() external payable { // thank you } // This allows the devs to receive kind donations function withdraw(uint amt) external onlyOwner { (bool sent, ) = payable(_owner).call{value: amt}(""); require(sent, "Failed to withdraw Ether"); } // just in case this fixed variable limits us from future integrations function setGasForDestinationLzReceive(uint newVal) external onlyOwner { gasForDestinationLzReceive = newVal; } // ------------------ // Internal Functions // ------------------ function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) override internal { // decode (address toAddr, uint tokenId) = abi.decode(_payload, (address, uint)); // mint the tokens back into existence on destination chain _safeMint(toAddr, tokenId); } function _baseURI() override internal view returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"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":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRICE","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":"uint8","name":"numTokens","type":"uint8"}],"name":"adminMintLast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_n","type":"uint8"}],"name":"setMaxLastTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_n","type":"uint8"}],"name":"setMaxMintEthereum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_max","type":"uint8"}],"name":"setMaxPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_n","type":"uint8"}],"name":"setNextLastTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_n","type":"uint8"}],"name":"setNextTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_startMint","type":"bool"}],"name":"setStartMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600a600c60006101000a81548160ff021916908360ff1602179055506000600d55610d48600e556119c8600f55611a096010556611c37937e080006011556000601260006101000a81548160ff021916908315150217905550620557306013553480156200007157600080fd5b5060405162005ece38038062005ece83398181016040528101906200009791906200040b565b6040518060400160405280600c81526020017f4461676f6e6772656e4e465400000000000000000000000000000000000000008152506040518060400160405280600c81526020017f4461676f6e6772656e4e465400000000000000000000000000000000000000008152506200012362000117620001fa60201b60201c565b6200020260201b60201c565b81600190805190602001906200013b929190620002c6565b50806002908051906020019062000154929190620002c6565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b9080519060200190620001f1929190620002c6565b50505062000643565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d4906200053a565b90600052602060002090601f016020900481019282620002f8576000855562000344565b82601f106200031357805160ff191683800117855562000344565b8280016001018555821562000344579182015b828111156200034357825182559160200191906001019062000326565b5b50905062000353919062000357565b5090565b5b808211156200037257600081600090555060010162000358565b5090565b60006200038d62000387846200049a565b62000471565b905082815260208101848484011115620003ac57620003ab62000609565b5b620003b984828562000504565b509392505050565b600081519050620003d28162000629565b92915050565b600082601f830112620003f057620003ef62000604565b5b81516200040284826020860162000376565b91505092915050565b6000806040838503121562000425576200042462000613565b5b600083015167ffffffffffffffff8111156200044657620004456200060e565b5b6200045485828601620003d8565b92505060206200046785828601620003c1565b9150509250929050565b60006200047d62000490565b90506200048b828262000570565b919050565b6000604051905090565b600067ffffffffffffffff821115620004b857620004b7620005d5565b5b620004c38262000618565b9050602081019050919050565b6000620004dd82620004e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200052457808201518184015260208101905062000507565b8381111562000534576000848401525b50505050565b600060028204905060018216806200055357607f821691505b602082108114156200056a5762000569620005a6565b5b50919050565b6200057b8262000618565b810181811067ffffffffffffffff821117156200059d576200059c620005d5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200063481620004d0565b81146200064057600080fd5b50565b61587b80620006536000396000f3fe60806040526004361061022f5760003560e01c806382bc336c1161012e578063c87b56dd116100ab578063e985e9c51161006f578063e985e9c514610806578063eb8d72b714610843578063ed88c68e1461086c578063f0777c1f14610876578063f2fde38b1461089f5761022f565b8063c87b56dd1461073f578063cf89fa031461077c578063d1deba1f14610798578063d58eafb1146107b4578063da5ee195146107dd5761022f565b8063943fb872116100f2578063943fb8721461066e57806395d89b4114610697578063a22cb465146106c2578063b2bdfa7b146106eb578063b88d4fde146107165761022f565b806382bc336c146105885780638d859f3e146105b15780638da5cb5b146105dc5780638ee749121461060757806391b7f5ed146106455761022f565b80634039058c116101bc578063639814e011610180578063639814e0146104b05780636ecd2306146104db57806370a08231146104f7578063715018a6146105345780637533d7881461054b5761022f565b80634039058c146103cf57806342842e0e146103f85780635168e54f1461042157806355f804b31461044a5780636352211e146104735761022f565b8063095ea7b311610203578063095ea7b3146103025780631c37a8221461032b57806323b872dd1461035457806325f4c6701461037d5780632e1a7d4d146103a65761022f565b80621d35671461023457806301ffc9a71461025d57806306fdde031461029a578063081812fc146102c5575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613b7c565b6108c8565b005b34801561026957600080fd5b50610284600480360381019061027f9190613939565b610b0a565b6040516102919190614516565b60405180910390f35b3480156102a657600080fd5b506102af610bec565b6040516102bc9190614553565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613c5b565b610c7e565b6040516102f99190614486565b60405180910390f35b34801561030e57600080fd5b50610329600480360381019061032491906138cc565b610d03565b005b34801561033757600080fd5b50610352600480360381019061034d9190613b7c565b610e1b565b005b34801561036057600080fd5b5061037b600480360381019061037691906137b6565b610e9b565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613cc8565b610efb565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613c5b565b610f84565b005b3480156103db57600080fd5b506103f660048036038101906103f1919061390c565b6110d2565b005b34801561040457600080fd5b5061041f600480360381019061041a91906137b6565b61116b565b005b34801561042d57600080fd5b5061044860048036038101906104439190613cc8565b61118b565b005b34801561045657600080fd5b50610471600480360381019061046c9190613993565b611225565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613c5b565b6112bb565b6040516104a79190614486565b60405180910390f35b3480156104bc57600080fd5b506104c561136d565b6040516104d29190614ad8565b60405180910390f35b6104f560048036038101906104f09190613cc8565b611380565b005b34801561050357600080fd5b5061051e60048036038101906105199190613709565b6116d4565b60405161052b9190614a94565b60405180910390f35b34801561054057600080fd5b5061054961178c565b005b34801561055757600080fd5b50610572600480360381019061056d91906139dc565b611814565b60405161057f9190614531565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613cc8565b6118b4565b005b3480156105bd57600080fd5b506105c66119ce565b6040516105d39190614a94565b60405180910390f35b3480156105e857600080fd5b506105f16119d4565b6040516105fe9190614486565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613a69565b6119fd565b60405161063c929190614aaf565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190613c5b565b611a51565b005b34801561067a57600080fd5b5061069560048036038101906106909190613c5b565b611ad7565b005b3480156106a357600080fd5b506106ac611b5d565b6040516106b99190614553565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e4919061388c565b611bef565b005b3480156106f757600080fd5b50610700611c05565b60405161070d9190614486565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613809565b611c2b565b005b34801561074b57600080fd5b5061076660048036038101906107619190613c5b565b611c8d565b6040516107739190614553565b60405180910390f35b61079660048036038101906107919190613c1b565b611d34565b005b6107b260048036038101906107ad9190613ad8565b612027565b005b3480156107c057600080fd5b506107db60048036038101906107d69190613cc8565b6121c7565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613cc8565b612250565b005b34801561081257600080fd5b5061082d60048036038101906108289190613776565b6122d9565b60405161083a9190614516565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613a09565b61236d565b005b610874612419565b005b34801561088257600080fd5b5061089d60048036038101906108989190613cc8565b61241b565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613709565b6124a4565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092257600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461094890614df3565b9050835114801561098e5750600960008561ffff1661ffff16815260200190815260200160002060405161097c919061440a565b60405180910390208380519060200120145b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906147d5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b8152600401610a0c94939291906149cb565b600060405180830381600087803b158015610a2657600080fd5b505af1925050508015610a37575060015b610b03576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610a8191906143f3565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d84848484604051610af694939291906149cb565b60405180910390a1610b04565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be55750610be48261259c565b5b9050919050565b606060018054610bfb90614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790614df3565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c8982612606565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90614795565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d0e826112bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690614875565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d9e612672565b73ffffffffffffffffffffffffffffffffffffffff161480610dcd5750610dcc81610dc7612672565b6122d9565b5b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906146f5565b60405180910390fd5b610e16838361267a565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614755565b60405180910390fd5b610e9584848484612733565b50505050565b610eac610ea6612672565b82612760565b610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614895565b60405180910390fd5b610ef683838361283e565b505050565b610f03612672565b73ffffffffffffffffffffffffffffffffffffffff16610f216119d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906147b5565b60405180910390fd5b8060ff16600e8190555050565b610f8c612672565b73ffffffffffffffffffffffffffffffffffffffff16610faa6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff7906147b5565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161104890614445565b60006040518083038185875af1925050503d8060008114611085576040519150601f19603f3d011682016040523d82523d6000602084013e61108a565b606091505b50509050806110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614855565b60405180910390fd5b5050565b6110da612672565b73ffffffffffffffffffffffffffffffffffffffff166110f86119d4565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611145906147b5565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b61118683838360405180602001604052806000815250611c2b565b505050565b611193612672565b73ffffffffffffffffffffffffffffffffffffffff166111b16119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906147b5565b60405180910390fd5b80600c60006101000a81548160ff021916908360ff16021790555050565b61122d612672565b73ffffffffffffffffffffffffffffffffffffffff1661124b6119d4565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906147b5565b60405180910390fd5b80600b90805190602001906112b79291906133d8565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90614735565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff1681565b601260009054906101000a900460ff166113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906148d5565b60405180910390fd5b8060ff166011546113e09190614c64565b341015611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906145d5565b60405180910390fd5b600e54600d54101561152657600c60009054906101000a900460ff1660ff168160ff161115611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614815565b60405180910390fd5b600e548160ff16600d5461149a9190614bdd565b11156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146b5565b60405180910390fd5b60005b8160ff16811015611520576114f533600d54612a9a565b600d600081548092919061150890614e56565b9190505550808061151890614e56565b9150506114de565b506116d1565b60028160ff161061156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906148f5565b60405180910390fd5b6010548160ff16600f546115809190614bdd565b11156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906146b5565b60405180910390fd5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a906145f5565b60405180910390fd5b60005b8160ff168110156116cf5761165d33600f54612a9a565b8160ff16601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60008154809291906116b790614e56565b919050555080806116c790614e56565b915050611646565b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614715565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611794612672565b73ffffffffffffffffffffffffffffffffffffffff166117b26119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906147b5565b60405180910390fd5b6118126000612ab8565b565b6009602052806000526040600020600091509050805461183390614df3565b80601f016020809104026020016040519081016040528092919081815260200182805461185f90614df3565b80156118ac5780601f10611881576101008083540402835291602001916118ac565b820191906000526020600020905b81548152906001019060200180831161188f57829003601f168201915b505050505081565b6118bc612672565b73ffffffffffffffffffffffffffffffffffffffff166118da6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611927906147b5565b60405180910390fd5b6010548160ff16600f546119449190614bdd565b1115611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c906146b5565b60405180910390fd5b60005b8160ff168110156119ca5761199f33600f54612a9a565b600f60008154809291906119b290614e56565b919050555080806119c290614e56565b915050611988565b5050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b611a59612672565b73ffffffffffffffffffffffffffffffffffffffff16611a776119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906147b5565b60405180910390fd5b8060118190555050565b611adf612672565b73ffffffffffffffffffffffffffffffffffffffff16611afd6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906147b5565b60405180910390fd5b8060138190555050565b606060028054611b6c90614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9890614df3565b8015611be55780601f10611bba57610100808354040283529160200191611be5565b820191906000526020600020905b815481529060010190602001808311611bc857829003601f168201915b5050505050905090565b611c01611bfa612672565b8383612b7c565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3c611c36612672565b83612760565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614895565b60405180910390fd5b611c8784848484612ce9565b50505050565b6060611c9882612606565b611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614835565b60405180910390fd5b6000611ce1612d45565b90506000815111611d015760405180602001604052806000815250611d2c565b80611d0b84612dd7565b604051602001611d1c929190614421565b6040516020818303038152906040525b915050919050565b611d3d816112bb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614695565b60405180910390fd5b6000600960008461ffff1661ffff1681526020019081526020016000208054611dd290614df3565b905011611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614655565b60405180910390fd5b611e1d81612f38565b60003382604051602001611e329291906144ed565b6040516020818303038152906040529050600060019050600081601354604051602001611e6092919061445a565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b8152600401611ed7959493929190614915565b604080518083038186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f269190613c88565b50905080341015611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390614575565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b8152600401611fed96959493929190614a1e565b6000604051808303818588803b15801561200657600080fd5b505af115801561201a573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161205291906143f3565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906148b5565b60405180910390fd5b8060000154838390501480156120f75750806001015483836040516120ed9291906143da565b6040518091039020145b612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614675565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b815260040161218d959493929190614976565b600060405180830381600087803b1580156121a757600080fd5b505af11580156121bb573d6000803e3d6000fd5b50505050505050505050565b6121cf612672565b73ffffffffffffffffffffffffffffffffffffffff166121ed6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906147b5565b60405180910390fd5b8060ff16600f8190555050565b612258612672565b73ffffffffffffffffffffffffffffffffffffffff166122766119d4565b73ffffffffffffffffffffffffffffffffffffffff16146122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906147b5565b60405180910390fd5b8060ff1660108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612375612672565b73ffffffffffffffffffffffffffffffffffffffff166123936119d4565b73ffffffffffffffffffffffffffffffffffffffff16146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e0906147b5565b60405180910390fd5b8181600960008661ffff1661ffff168152602001908152602001600020919061241392919061345e565b50505050565b565b612423612672565b73ffffffffffffffffffffffffffffffffffffffff166124416119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e906147b5565b60405180910390fd5b8060ff16600d8190555050565b6124ac612672565b73ffffffffffffffffffffffffffffffffffffffff166124ca6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906145b5565b60405180910390fd5b61259981612ab8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ed836112bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808280602001905181019061274a9190613736565b915091506127588282612a9a565b505050505050565b600061276b82612606565b6127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a1906146d5565b60405180910390fd5b60006127b5836112bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061282457508373ffffffffffffffffffffffffffffffffffffffff1661280c84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612835575061283481856122d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661285e826112bb565b73ffffffffffffffffffffffffffffffffffffffff16146128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90614615565b60405180910390fd5b61292f838383613049565b61293a60008261267a565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298a9190614cbe565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e19190614bdd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612ab482826040518060200160405280600081525061304e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be290614635565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cdc9190614516565b60405180910390a3505050565b612cf484848461283e565b612d00848484846130a9565b612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690614595565b60405180910390fd5b50505050565b6060600b8054612d5490614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8090614df3565b8015612dcd5780601f10612da257610100808354040283529160200191612dcd565b820191906000526020600020905b815481529060010190602001808311612db057829003601f168201915b5050505050905090565b60606000821415612e1f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f33565b600082905060005b60008214612e51578080612e3a90614e56565b915050600a82612e4a9190614c33565b9150612e27565b60008167ffffffffffffffff811115612e6d57612e6c614fa8565b5b6040519080825280601f01601f191660200182016040528015612e9f5781602001600182028036833780820191505090505b5090505b60008514612f2c57600182612eb89190614cbe565b9150600a85612ec79190614ebb565b6030612ed39190614bdd565b60f81b818381518110612ee957612ee8614f79565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f259190614c33565b9450612ea3565b8093505050505b919050565b6000612f43826112bb565b9050612f5181600084613049565b612f5c60008361267a565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fac9190614cbe565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6130588383613240565b61306560008484846130a9565b6130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90614595565b60405180910390fd5b505050565b60006130ca8473ffffffffffffffffffffffffffffffffffffffff166133c5565b15613233578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130f3612672565b8786866040518563ffffffff1660e01b815260040161311594939291906144a1565b602060405180830381600087803b15801561312f57600080fd5b505af192505050801561316057506040513d601f19601f8201168201806040525081019061315d9190613966565b60015b6131e3573d8060008114613190576040519150601f19603f3d011682016040523d82523d6000602084013e613195565b606091505b506000815114156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290614595565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613238565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790614775565b60405180910390fd5b6132bc60008383613049565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330c9190614bdd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546133e490614df3565b90600052602060002090601f016020900481019282613406576000855561344d565b82601f1061341f57805160ff191683800117855561344d565b8280016001018555821561344d579182015b8281111561344c578251825591602001919060010190613431565b5b50905061345a91906134e4565b5090565b82805461346a90614df3565b90600052602060002090601f01602090048101928261348c57600085556134d3565b82601f106134a557803560ff19168380011785556134d3565b828001600101855582156134d3579182015b828111156134d25782358255916020019190600101906134b7565b5b5090506134e091906134e4565b5090565b5b808211156134fd5760008160009055506001016134e5565b5090565b600061351461350f84614b18565b614af3565b9050828152602081018484840111156135305761352f614fe6565b5b61353b848285614db1565b509392505050565b600061355661355184614b49565b614af3565b90508281526020810184848401111561357257613571614fe6565b5b61357d848285614db1565b509392505050565b6000813590506135948161578d565b92915050565b6000815190506135a9816157a4565b92915050565b6000813590506135be816157bb565b92915050565b6000813590506135d3816157d2565b92915050565b6000815190506135e8816157d2565b92915050565b60008083601f84011261360457613603614fdc565b5b8235905067ffffffffffffffff81111561362157613620614fd7565b5b60208301915083600182028301111561363d5761363c614fe1565b5b9250929050565b600082601f83011261365957613658614fdc565b5b8135613669848260208601613501565b91505092915050565b600082601f83011261368757613686614fdc565b5b8135613697848260208601613543565b91505092915050565b6000813590506136af816157e9565b92915050565b6000813590506136c481615800565b92915050565b6000815190506136d981615800565b92915050565b6000813590506136ee81615817565b92915050565b6000813590506137038161582e565b92915050565b60006020828403121561371f5761371e614ff0565b5b600061372d84828501613585565b91505092915050565b6000806040838503121561374d5761374c614ff0565b5b600061375b8582860161359a565b925050602061376c858286016136ca565b9150509250929050565b6000806040838503121561378d5761378c614ff0565b5b600061379b85828601613585565b92505060206137ac85828601613585565b9150509250929050565b6000806000606084860312156137cf576137ce614ff0565b5b60006137dd86828701613585565b93505060206137ee86828701613585565b92505060406137ff868287016136b5565b9150509250925092565b6000806000806080858703121561382357613822614ff0565b5b600061383187828801613585565b945050602061384287828801613585565b9350506040613853878288016136b5565b925050606085013567ffffffffffffffff81111561387457613873614feb565b5b61388087828801613644565b91505092959194509250565b600080604083850312156138a3576138a2614ff0565b5b60006138b185828601613585565b92505060206138c2858286016135af565b9150509250929050565b600080604083850312156138e3576138e2614ff0565b5b60006138f185828601613585565b9250506020613902858286016136b5565b9150509250929050565b60006020828403121561392257613921614ff0565b5b6000613930848285016135af565b91505092915050565b60006020828403121561394f5761394e614ff0565b5b600061395d848285016135c4565b91505092915050565b60006020828403121561397c5761397b614ff0565b5b600061398a848285016135d9565b91505092915050565b6000602082840312156139a9576139a8614ff0565b5b600082013567ffffffffffffffff8111156139c7576139c6614feb565b5b6139d384828501613672565b91505092915050565b6000602082840312156139f2576139f1614ff0565b5b6000613a00848285016136a0565b91505092915050565b600080600060408486031215613a2257613a21614ff0565b5b6000613a30868287016136a0565b935050602084013567ffffffffffffffff811115613a5157613a50614feb565b5b613a5d868287016135ee565b92509250509250925092565b600080600060608486031215613a8257613a81614ff0565b5b6000613a90868287016136a0565b935050602084013567ffffffffffffffff811115613ab157613ab0614feb565b5b613abd86828701613644565b9250506040613ace868287016136b5565b9150509250925092565b600080600080600060808688031215613af457613af3614ff0565b5b6000613b02888289016136a0565b955050602086013567ffffffffffffffff811115613b2357613b22614feb565b5b613b2f88828901613644565b9450506040613b40888289016136df565b935050606086013567ffffffffffffffff811115613b6157613b60614feb565b5b613b6d888289016135ee565b92509250509295509295909350565b60008060008060808587031215613b9657613b95614ff0565b5b6000613ba4878288016136a0565b945050602085013567ffffffffffffffff811115613bc557613bc4614feb565b5b613bd187828801613644565b9350506040613be2878288016136df565b925050606085013567ffffffffffffffff811115613c0357613c02614feb565b5b613c0f87828801613644565b91505092959194509250565b60008060408385031215613c3257613c31614ff0565b5b6000613c40858286016136a0565b9250506020613c51858286016136b5565b9150509250929050565b600060208284031215613c7157613c70614ff0565b5b6000613c7f848285016136b5565b91505092915050565b60008060408385031215613c9f57613c9e614ff0565b5b6000613cad858286016136ca565b9250506020613cbe858286016136ca565b9150509250929050565b600060208284031215613cde57613cdd614ff0565b5b6000613cec848285016136f4565b91505092915050565b613cfe81614d04565b82525050565b613d0d81614cf2565b82525050565b613d1c81614d16565b82525050565b613d2b81614d22565b82525050565b6000613d3d8385614ba5565b9350613d4a838584614db1565b613d5383614ff5565b840190509392505050565b6000613d6a8385614bb6565b9350613d77838584614db1565b82840190509392505050565b6000613d8e82614b8f565b613d988185614ba5565b9350613da8818560208601614dc0565b613db181614ff5565b840191505092915050565b6000613dc782614b8f565b613dd18185614bb6565b9350613de1818560208601614dc0565b80840191505092915050565b60008154613dfa81614df3565b613e048186614ba5565b94506001821660008114613e1f5760018114613e3157613e64565b60ff1983168652602086019350613e64565b613e3a85614b7a565b60005b83811015613e5c57815481890152600182019150602081019050613e3d565b808801955050505b50505092915050565b60008154613e7a81614df3565b613e848186614bb6565b94506001821660008114613e9f5760018114613eb057613ee3565b60ff19831686528186019350613ee3565b613eb985614b7a565b60005b83811015613edb57815481890152600182019150602081019050613ebc565b838801955050505b50505092915050565b6000613ef782614b9a565b613f018185614bc1565b9350613f11818560208601614dc0565b613f1a81614ff5565b840191505092915050565b6000613f3082614b9a565b613f3a8185614bd2565b9350613f4a818560208601614dc0565b80840191505092915050565b6000613f63604383614bc1565b9150613f6e82615013565b606082019050919050565b6000613f86603283614bc1565b9150613f9182615088565b604082019050919050565b6000613fa9602683614bc1565b9150613fb4826150d7565b604082019050919050565b6000613fcc601083614bc1565b9150613fd782615126565b602082019050919050565b6000613fef600e83614bc1565b9150613ffa8261514f565b602082019050919050565b6000614012602483614bc1565b915061401d82615178565b604082019050919050565b6000614035601983614bc1565b9150614040826151c7565b602082019050919050565b6000614058602e83614bc1565b9150614063826151f0565b604082019050919050565b600061407b601a83614bc1565b91506140868261523f565b602082019050919050565b600061409e602283614bc1565b91506140a982615268565b604082019050919050565b60006140c1601383614bc1565b91506140cc826152b7565b602082019050919050565b60006140e4602c83614bc1565b91506140ef826152e0565b604082019050919050565b6000614107603883614bc1565b91506141128261532f565b604082019050919050565b600061412a602a83614bc1565b91506141358261537e565b604082019050919050565b600061414d602983614bc1565b9150614158826153cd565b604082019050919050565b6000614170602b83614bc1565b915061417b8261541c565b604082019050919050565b6000614193602083614bc1565b915061419e8261546b565b602082019050919050565b60006141b6602c83614bc1565b91506141c182615494565b604082019050919050565b60006141d9602083614bc1565b91506141e4826154e3565b602082019050919050565b60006141fc603483614bc1565b91506142078261550c565b604082019050919050565b600061421f602983614bc1565b915061422a8261555b565b604082019050919050565b6000614242601a83614bc1565b915061424d826155aa565b602082019050919050565b6000614265602f83614bc1565b9150614270826155d3565b604082019050919050565b6000614288601883614bc1565b915061429382615622565b602082019050919050565b60006142ab602183614bc1565b91506142b68261564b565b604082019050919050565b60006142ce600083614bb6565b91506142d98261569a565b600082019050919050565b60006142f1603183614bc1565b91506142fc8261569d565b604082019050919050565b6000614314602683614bc1565b915061431f826156ec565b604082019050919050565b6000614337600b83614bc1565b91506143428261573b565b602082019050919050565b600061435a600e83614bc1565b915061436582615764565b602082019050919050565b61437981614d58565b82525050565b61439061438b82614d58565b614e9f565b82525050565b61439f81614d86565b82525050565b6143b66143b182614d86565b614eb1565b82525050565b6143c581614d90565b82525050565b6143d481614da4565b82525050565b60006143e7828486613d5e565b91508190509392505050565b60006143ff8284613dbc565b915081905092915050565b60006144168284613e6d565b915081905092915050565b600061442d8285613f25565b91506144398284613f25565b91508190509392505050565b6000614450826142c1565b9150819050919050565b6000614466828561437f565b60028201915061447682846143a5565b6020820191508190509392505050565b600060208201905061449b6000830184613d04565b92915050565b60006080820190506144b66000830187613d04565b6144c36020830186613d04565b6144d06040830185614396565b81810360608301526144e28184613d83565b905095945050505050565b60006040820190506145026000830185613d04565b61450f6020830184614396565b9392505050565b600060208201905061452b6000830184613d13565b92915050565b6000602082019050818103600083015261454b8184613d83565b905092915050565b6000602082019050818103600083015261456d8184613eec565b905092915050565b6000602082019050818103600083015261458e81613f56565b9050919050565b600060208201905081810360008301526145ae81613f79565b9050919050565b600060208201905081810360008301526145ce81613f9c565b9050919050565b600060208201905081810360008301526145ee81613fbf565b9050919050565b6000602082019050818103600083015261460e81613fe2565b9050919050565b6000602082019050818103600083015261462e81614005565b9050919050565b6000602082019050818103600083015261464e81614028565b9050919050565b6000602082019050818103600083015261466e8161404b565b9050919050565b6000602082019050818103600083015261468e8161406e565b9050919050565b600060208201905081810360008301526146ae81614091565b9050919050565b600060208201905081810360008301526146ce816140b4565b9050919050565b600060208201905081810360008301526146ee816140d7565b9050919050565b6000602082019050818103600083015261470e816140fa565b9050919050565b6000602082019050818103600083015261472e8161411d565b9050919050565b6000602082019050818103600083015261474e81614140565b9050919050565b6000602082019050818103600083015261476e81614163565b9050919050565b6000602082019050818103600083015261478e81614186565b9050919050565b600060208201905081810360008301526147ae816141a9565b9050919050565b600060208201905081810360008301526147ce816141cc565b9050919050565b600060208201905081810360008301526147ee816141ef565b9050919050565b6000602082019050818103600083015261480e81614212565b9050919050565b6000602082019050818103600083015261482e81614235565b9050919050565b6000602082019050818103600083015261484e81614258565b9050919050565b6000602082019050818103600083015261486e8161427b565b9050919050565b6000602082019050818103600083015261488e8161429e565b9050919050565b600060208201905081810360008301526148ae816142e4565b9050919050565b600060208201905081810360008301526148ce81614307565b9050919050565b600060208201905081810360008301526148ee8161432a565b9050919050565b6000602082019050818103600083015261490e8161434d565b9050919050565b600060a08201905061492a6000830188614370565b6149376020830187613d04565b81810360408301526149498186613d83565b90506149586060830185613d13565b818103608083015261496a8184613d83565b90509695505050505050565b600060808201905061498b6000830188614370565b818103602083015261499d8187613d83565b90506149ac60408301866143bc565b81810360608301526149bf818486613d31565b90509695505050505050565b60006080820190506149e06000830187614370565b81810360208301526149f28186613d83565b9050614a0160408301856143bc565b8181036060830152614a138184613d83565b905095945050505050565b600060c082019050614a336000830189614370565b8181036020830152614a458188613ded565b90508181036040830152614a598187613d83565b9050614a686060830186613cf5565b614a756080830185613d04565b81810360a0830152614a878184613d83565b9050979650505050505050565b6000602082019050614aa96000830184614396565b92915050565b6000604082019050614ac46000830185614396565b614ad16020830184613d22565b9392505050565b6000602082019050614aed60008301846143cb565b92915050565b6000614afd614b0e565b9050614b098282614e25565b919050565b6000604051905090565b600067ffffffffffffffff821115614b3357614b32614fa8565b5b614b3c82614ff5565b9050602081019050919050565b600067ffffffffffffffff821115614b6457614b63614fa8565b5b614b6d82614ff5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614be882614d86565b9150614bf383614d86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2857614c27614eec565b5b828201905092915050565b6000614c3e82614d86565b9150614c4983614d86565b925082614c5957614c58614f1b565b5b828204905092915050565b6000614c6f82614d86565b9150614c7a83614d86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb357614cb2614eec565b5b828202905092915050565b6000614cc982614d86565b9150614cd483614d86565b925082821015614ce757614ce6614eec565b5b828203905092915050565b6000614cfd82614d66565b9050919050565b6000614d0f82614d66565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614dde578082015181840152602081019050614dc3565b83811115614ded576000848401525b50505050565b60006002820490506001821680614e0b57607f821691505b60208210811415614e1f57614e1e614f4a565b5b50919050565b614e2e82614ff5565b810181811067ffffffffffffffff82111715614e4d57614e4c614fa8565b5b80604052505050565b6000614e6182614d86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9457614e93614eec565b5b600182019050919050565b6000614eaa82615006565b9050919050565b6000819050919050565b6000614ec682614d86565b9150614ed183614d86565b925082614ee157614ee0614f1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f6d73672e76616c7565206e6f7420656e6f75676820746f20636f766572206d6560008201527f73736167654665652e2053656e642067617320666f72206d657373616765206660208201527f6565730000000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f76616c7565206e6f7420656e6f75676800000000000000000000000000000000600082015250565b7f4d696e7420657863656564732031000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320737570706c7900000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d696e742065786365656473206d617850657241646472657373000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4d696e7420657863656564732032000000000000000000000000000000000000600082015250565b61579681614cf2565b81146157a157600080fd5b50565b6157ad81614d04565b81146157b857600080fd5b50565b6157c481614d16565b81146157cf57600080fd5b50565b6157db81614d2c565b81146157e657600080fd5b50565b6157f281614d58565b81146157fd57600080fd5b50565b61580981614d86565b811461581457600080fd5b50565b61582081614d90565b811461582b57600080fd5b50565b61583781614da4565b811461584257600080fd5b5056fea2646970667358221220b5a7b20c87597eca23f7d5c16020d6756f0ea14319a3a7304f7267da975b721764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061022f5760003560e01c806382bc336c1161012e578063c87b56dd116100ab578063e985e9c51161006f578063e985e9c514610806578063eb8d72b714610843578063ed88c68e1461086c578063f0777c1f14610876578063f2fde38b1461089f5761022f565b8063c87b56dd1461073f578063cf89fa031461077c578063d1deba1f14610798578063d58eafb1146107b4578063da5ee195146107dd5761022f565b8063943fb872116100f2578063943fb8721461066e57806395d89b4114610697578063a22cb465146106c2578063b2bdfa7b146106eb578063b88d4fde146107165761022f565b806382bc336c146105885780638d859f3e146105b15780638da5cb5b146105dc5780638ee749121461060757806391b7f5ed146106455761022f565b80634039058c116101bc578063639814e011610180578063639814e0146104b05780636ecd2306146104db57806370a08231146104f7578063715018a6146105345780637533d7881461054b5761022f565b80634039058c146103cf57806342842e0e146103f85780635168e54f1461042157806355f804b31461044a5780636352211e146104735761022f565b8063095ea7b311610203578063095ea7b3146103025780631c37a8221461032b57806323b872dd1461035457806325f4c6701461037d5780632e1a7d4d146103a65761022f565b80621d35671461023457806301ffc9a71461025d57806306fdde031461029a578063081812fc146102c5575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613b7c565b6108c8565b005b34801561026957600080fd5b50610284600480360381019061027f9190613939565b610b0a565b6040516102919190614516565b60405180910390f35b3480156102a657600080fd5b506102af610bec565b6040516102bc9190614553565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190613c5b565b610c7e565b6040516102f99190614486565b60405180910390f35b34801561030e57600080fd5b50610329600480360381019061032491906138cc565b610d03565b005b34801561033757600080fd5b50610352600480360381019061034d9190613b7c565b610e1b565b005b34801561036057600080fd5b5061037b600480360381019061037691906137b6565b610e9b565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613cc8565b610efb565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190613c5b565b610f84565b005b3480156103db57600080fd5b506103f660048036038101906103f1919061390c565b6110d2565b005b34801561040457600080fd5b5061041f600480360381019061041a91906137b6565b61116b565b005b34801561042d57600080fd5b5061044860048036038101906104439190613cc8565b61118b565b005b34801561045657600080fd5b50610471600480360381019061046c9190613993565b611225565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613c5b565b6112bb565b6040516104a79190614486565b60405180910390f35b3480156104bc57600080fd5b506104c561136d565b6040516104d29190614ad8565b60405180910390f35b6104f560048036038101906104f09190613cc8565b611380565b005b34801561050357600080fd5b5061051e60048036038101906105199190613709565b6116d4565b60405161052b9190614a94565b60405180910390f35b34801561054057600080fd5b5061054961178c565b005b34801561055757600080fd5b50610572600480360381019061056d91906139dc565b611814565b60405161057f9190614531565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613cc8565b6118b4565b005b3480156105bd57600080fd5b506105c66119ce565b6040516105d39190614a94565b60405180910390f35b3480156105e857600080fd5b506105f16119d4565b6040516105fe9190614486565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190613a69565b6119fd565b60405161063c929190614aaf565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190613c5b565b611a51565b005b34801561067a57600080fd5b5061069560048036038101906106909190613c5b565b611ad7565b005b3480156106a357600080fd5b506106ac611b5d565b6040516106b99190614553565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e4919061388c565b611bef565b005b3480156106f757600080fd5b50610700611c05565b60405161070d9190614486565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613809565b611c2b565b005b34801561074b57600080fd5b5061076660048036038101906107619190613c5b565b611c8d565b6040516107739190614553565b60405180910390f35b61079660048036038101906107919190613c1b565b611d34565b005b6107b260048036038101906107ad9190613ad8565b612027565b005b3480156107c057600080fd5b506107db60048036038101906107d69190613cc8565b6121c7565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613cc8565b612250565b005b34801561081257600080fd5b5061082d60048036038101906108289190613776565b6122d9565b60405161083a9190614516565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613a09565b61236d565b005b610874612419565b005b34801561088257600080fd5b5061089d60048036038101906108989190613cc8565b61241b565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613709565b6124a4565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092257600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461094890614df3565b9050835114801561098e5750600960008561ffff1661ffff16815260200190815260200160002060405161097c919061440a565b60405180910390208380519060200120145b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c4906147d5565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b8152600401610a0c94939291906149cb565b600060405180830381600087803b158015610a2657600080fd5b505af1925050508015610a37575060015b610b03576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610a8191906143f3565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d84848484604051610af694939291906149cb565b60405180910390a1610b04565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be55750610be48261259c565b5b9050919050565b606060018054610bfb90614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790614df3565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c8982612606565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90614795565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d0e826112bb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690614875565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d9e612672565b73ffffffffffffffffffffffffffffffffffffffff161480610dcd5750610dcc81610dc7612672565b6122d9565b5b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e03906146f5565b60405180910390fd5b610e16838361267a565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614755565b60405180910390fd5b610e9584848484612733565b50505050565b610eac610ea6612672565b82612760565b610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290614895565b60405180910390fd5b610ef683838361283e565b505050565b610f03612672565b73ffffffffffffffffffffffffffffffffffffffff16610f216119d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906147b5565b60405180910390fd5b8060ff16600e8190555050565b610f8c612672565b73ffffffffffffffffffffffffffffffffffffffff16610faa6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff7906147b5565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161104890614445565b60006040518083038185875af1925050503d8060008114611085576040519150601f19603f3d011682016040523d82523d6000602084013e61108a565b606091505b50509050806110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614855565b60405180910390fd5b5050565b6110da612672565b73ffffffffffffffffffffffffffffffffffffffff166110f86119d4565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611145906147b5565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b61118683838360405180602001604052806000815250611c2b565b505050565b611193612672565b73ffffffffffffffffffffffffffffffffffffffff166111b16119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906147b5565b60405180910390fd5b80600c60006101000a81548160ff021916908360ff16021790555050565b61122d612672565b73ffffffffffffffffffffffffffffffffffffffff1661124b6119d4565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906147b5565b60405180910390fd5b80600b90805190602001906112b79291906133d8565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90614735565b60405180910390fd5b80915050919050565b600c60009054906101000a900460ff1681565b601260009054906101000a900460ff166113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c6906148d5565b60405180910390fd5b8060ff166011546113e09190614c64565b341015611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906145d5565b60405180910390fd5b600e54600d54101561152657600c60009054906101000a900460ff1660ff168160ff161115611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614815565b60405180910390fd5b600e548160ff16600d5461149a9190614bdd565b11156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d2906146b5565b60405180910390fd5b60005b8160ff16811015611520576114f533600d54612a9a565b600d600081548092919061150890614e56565b9190505550808061151890614e56565b9150506114de565b506116d1565b60028160ff161061156c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611563906148f5565b60405180910390fd5b6010548160ff16600f546115809190614bdd565b11156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906146b5565b60405180910390fd5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a906145f5565b60405180910390fd5b60005b8160ff168110156116cf5761165d33600f54612a9a565b8160ff16601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60008154809291906116b790614e56565b919050555080806116c790614e56565b915050611646565b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614715565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611794612672565b73ffffffffffffffffffffffffffffffffffffffff166117b26119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906147b5565b60405180910390fd5b6118126000612ab8565b565b6009602052806000526040600020600091509050805461183390614df3565b80601f016020809104026020016040519081016040528092919081815260200182805461185f90614df3565b80156118ac5780601f10611881576101008083540402835291602001916118ac565b820191906000526020600020905b81548152906001019060200180831161188f57829003601f168201915b505050505081565b6118bc612672565b73ffffffffffffffffffffffffffffffffffffffff166118da6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611930576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611927906147b5565b60405180910390fd5b6010548160ff16600f546119449190614bdd565b1115611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c906146b5565b60405180910390fd5b60005b8160ff168110156119ca5761199f33600f54612a9a565b600f60008154809291906119b290614e56565b919050555080806119c290614e56565b915050611988565b5050565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b611a59612672565b73ffffffffffffffffffffffffffffffffffffffff16611a776119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac4906147b5565b60405180910390fd5b8060118190555050565b611adf612672565b73ffffffffffffffffffffffffffffffffffffffff16611afd6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906147b5565b60405180910390fd5b8060138190555050565b606060028054611b6c90614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9890614df3565b8015611be55780601f10611bba57610100808354040283529160200191611be5565b820191906000526020600020905b815481529060010190602001808311611bc857829003601f168201915b5050505050905090565b611c01611bfa612672565b8383612b7c565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c3c611c36612672565b83612760565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614895565b60405180910390fd5b611c8784848484612ce9565b50505050565b6060611c9882612606565b611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90614835565b60405180910390fd5b6000611ce1612d45565b90506000815111611d015760405180602001604052806000815250611d2c565b80611d0b84612dd7565b604051602001611d1c929190614421565b6040516020818303038152906040525b915050919050565b611d3d816112bb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da190614695565b60405180910390fd5b6000600960008461ffff1661ffff1681526020019081526020016000208054611dd290614df3565b905011611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90614655565b60405180910390fd5b611e1d81612f38565b60003382604051602001611e329291906144ed565b6040516020818303038152906040529050600060019050600081601354604051602001611e6092919061445a565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b8152600401611ed7959493929190614915565b604080518083038186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f269190613c88565b50905080341015611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390614575565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b8152600401611fed96959493929190614a1e565b6000604051808303818588803b15801561200657600080fd5b505af115801561201a573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161205291906143f3565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906148b5565b60405180910390fd5b8060000154838390501480156120f75750806001015483836040516120ed9291906143da565b6040518091039020145b612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614675565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b815260040161218d959493929190614976565b600060405180830381600087803b1580156121a757600080fd5b505af11580156121bb573d6000803e3d6000fd5b50505050505050505050565b6121cf612672565b73ffffffffffffffffffffffffffffffffffffffff166121ed6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a906147b5565b60405180910390fd5b8060ff16600f8190555050565b612258612672565b73ffffffffffffffffffffffffffffffffffffffff166122766119d4565b73ffffffffffffffffffffffffffffffffffffffff16146122cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c3906147b5565b60405180910390fd5b8060ff1660108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612375612672565b73ffffffffffffffffffffffffffffffffffffffff166123936119d4565b73ffffffffffffffffffffffffffffffffffffffff16146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e0906147b5565b60405180910390fd5b8181600960008661ffff1661ffff168152602001908152602001600020919061241392919061345e565b50505050565b565b612423612672565b73ffffffffffffffffffffffffffffffffffffffff166124416119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248e906147b5565b60405180910390fd5b8060ff16600d8190555050565b6124ac612672565b73ffffffffffffffffffffffffffffffffffffffff166124ca6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612587906145b5565b60405180910390fd5b61259981612ab8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ed836112bb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808280602001905181019061274a9190613736565b915091506127588282612a9a565b505050505050565b600061276b82612606565b6127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a1906146d5565b60405180910390fd5b60006127b5836112bb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061282457508373ffffffffffffffffffffffffffffffffffffffff1661280c84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612835575061283481856122d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661285e826112bb565b73ffffffffffffffffffffffffffffffffffffffff16146128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab906147f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90614615565b60405180910390fd5b61292f838383613049565b61293a60008261267a565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461298a9190614cbe565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e19190614bdd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612ab482826040518060200160405280600081525061304e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be290614635565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cdc9190614516565b60405180910390a3505050565b612cf484848461283e565b612d00848484846130a9565b612d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3690614595565b60405180910390fd5b50505050565b6060600b8054612d5490614df3565b80601f0160208091040260200160405190810160405280929190818152602001828054612d8090614df3565b8015612dcd5780601f10612da257610100808354040283529160200191612dcd565b820191906000526020600020905b815481529060010190602001808311612db057829003601f168201915b5050505050905090565b60606000821415612e1f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f33565b600082905060005b60008214612e51578080612e3a90614e56565b915050600a82612e4a9190614c33565b9150612e27565b60008167ffffffffffffffff811115612e6d57612e6c614fa8565b5b6040519080825280601f01601f191660200182016040528015612e9f5781602001600182028036833780820191505090505b5090505b60008514612f2c57600182612eb89190614cbe565b9150600a85612ec79190614ebb565b6030612ed39190614bdd565b60f81b818381518110612ee957612ee8614f79565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f259190614c33565b9450612ea3565b8093505050505b919050565b6000612f43826112bb565b9050612f5181600084613049565b612f5c60008361267a565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fac9190614cbe565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6130588383613240565b61306560008484846130a9565b6130a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309b90614595565b60405180910390fd5b505050565b60006130ca8473ffffffffffffffffffffffffffffffffffffffff166133c5565b15613233578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130f3612672565b8786866040518563ffffffff1660e01b815260040161311594939291906144a1565b602060405180830381600087803b15801561312f57600080fd5b505af192505050801561316057506040513d601f19601f8201168201806040525081019061315d9190613966565b60015b6131e3573d8060008114613190576040519150601f19603f3d011682016040523d82523d6000602084013e613195565b606091505b506000815114156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290614595565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613238565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a790614775565b60405180910390fd5b6132bc60008383613049565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330c9190614bdd565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546133e490614df3565b90600052602060002090601f016020900481019282613406576000855561344d565b82601f1061341f57805160ff191683800117855561344d565b8280016001018555821561344d579182015b8281111561344c578251825591602001919060010190613431565b5b50905061345a91906134e4565b5090565b82805461346a90614df3565b90600052602060002090601f01602090048101928261348c57600085556134d3565b82601f106134a557803560ff19168380011785556134d3565b828001600101855582156134d3579182015b828111156134d25782358255916020019190600101906134b7565b5b5090506134e091906134e4565b5090565b5b808211156134fd5760008160009055506001016134e5565b5090565b600061351461350f84614b18565b614af3565b9050828152602081018484840111156135305761352f614fe6565b5b61353b848285614db1565b509392505050565b600061355661355184614b49565b614af3565b90508281526020810184848401111561357257613571614fe6565b5b61357d848285614db1565b509392505050565b6000813590506135948161578d565b92915050565b6000815190506135a9816157a4565b92915050565b6000813590506135be816157bb565b92915050565b6000813590506135d3816157d2565b92915050565b6000815190506135e8816157d2565b92915050565b60008083601f84011261360457613603614fdc565b5b8235905067ffffffffffffffff81111561362157613620614fd7565b5b60208301915083600182028301111561363d5761363c614fe1565b5b9250929050565b600082601f83011261365957613658614fdc565b5b8135613669848260208601613501565b91505092915050565b600082601f83011261368757613686614fdc565b5b8135613697848260208601613543565b91505092915050565b6000813590506136af816157e9565b92915050565b6000813590506136c481615800565b92915050565b6000815190506136d981615800565b92915050565b6000813590506136ee81615817565b92915050565b6000813590506137038161582e565b92915050565b60006020828403121561371f5761371e614ff0565b5b600061372d84828501613585565b91505092915050565b6000806040838503121561374d5761374c614ff0565b5b600061375b8582860161359a565b925050602061376c858286016136ca565b9150509250929050565b6000806040838503121561378d5761378c614ff0565b5b600061379b85828601613585565b92505060206137ac85828601613585565b9150509250929050565b6000806000606084860312156137cf576137ce614ff0565b5b60006137dd86828701613585565b93505060206137ee86828701613585565b92505060406137ff868287016136b5565b9150509250925092565b6000806000806080858703121561382357613822614ff0565b5b600061383187828801613585565b945050602061384287828801613585565b9350506040613853878288016136b5565b925050606085013567ffffffffffffffff81111561387457613873614feb565b5b61388087828801613644565b91505092959194509250565b600080604083850312156138a3576138a2614ff0565b5b60006138b185828601613585565b92505060206138c2858286016135af565b9150509250929050565b600080604083850312156138e3576138e2614ff0565b5b60006138f185828601613585565b9250506020613902858286016136b5565b9150509250929050565b60006020828403121561392257613921614ff0565b5b6000613930848285016135af565b91505092915050565b60006020828403121561394f5761394e614ff0565b5b600061395d848285016135c4565b91505092915050565b60006020828403121561397c5761397b614ff0565b5b600061398a848285016135d9565b91505092915050565b6000602082840312156139a9576139a8614ff0565b5b600082013567ffffffffffffffff8111156139c7576139c6614feb565b5b6139d384828501613672565b91505092915050565b6000602082840312156139f2576139f1614ff0565b5b6000613a00848285016136a0565b91505092915050565b600080600060408486031215613a2257613a21614ff0565b5b6000613a30868287016136a0565b935050602084013567ffffffffffffffff811115613a5157613a50614feb565b5b613a5d868287016135ee565b92509250509250925092565b600080600060608486031215613a8257613a81614ff0565b5b6000613a90868287016136a0565b935050602084013567ffffffffffffffff811115613ab157613ab0614feb565b5b613abd86828701613644565b9250506040613ace868287016136b5565b9150509250925092565b600080600080600060808688031215613af457613af3614ff0565b5b6000613b02888289016136a0565b955050602086013567ffffffffffffffff811115613b2357613b22614feb565b5b613b2f88828901613644565b9450506040613b40888289016136df565b935050606086013567ffffffffffffffff811115613b6157613b60614feb565b5b613b6d888289016135ee565b92509250509295509295909350565b60008060008060808587031215613b9657613b95614ff0565b5b6000613ba4878288016136a0565b945050602085013567ffffffffffffffff811115613bc557613bc4614feb565b5b613bd187828801613644565b9350506040613be2878288016136df565b925050606085013567ffffffffffffffff811115613c0357613c02614feb565b5b613c0f87828801613644565b91505092959194509250565b60008060408385031215613c3257613c31614ff0565b5b6000613c40858286016136a0565b9250506020613c51858286016136b5565b9150509250929050565b600060208284031215613c7157613c70614ff0565b5b6000613c7f848285016136b5565b91505092915050565b60008060408385031215613c9f57613c9e614ff0565b5b6000613cad858286016136ca565b9250506020613cbe858286016136ca565b9150509250929050565b600060208284031215613cde57613cdd614ff0565b5b6000613cec848285016136f4565b91505092915050565b613cfe81614d04565b82525050565b613d0d81614cf2565b82525050565b613d1c81614d16565b82525050565b613d2b81614d22565b82525050565b6000613d3d8385614ba5565b9350613d4a838584614db1565b613d5383614ff5565b840190509392505050565b6000613d6a8385614bb6565b9350613d77838584614db1565b82840190509392505050565b6000613d8e82614b8f565b613d988185614ba5565b9350613da8818560208601614dc0565b613db181614ff5565b840191505092915050565b6000613dc782614b8f565b613dd18185614bb6565b9350613de1818560208601614dc0565b80840191505092915050565b60008154613dfa81614df3565b613e048186614ba5565b94506001821660008114613e1f5760018114613e3157613e64565b60ff1983168652602086019350613e64565b613e3a85614b7a565b60005b83811015613e5c57815481890152600182019150602081019050613e3d565b808801955050505b50505092915050565b60008154613e7a81614df3565b613e848186614bb6565b94506001821660008114613e9f5760018114613eb057613ee3565b60ff19831686528186019350613ee3565b613eb985614b7a565b60005b83811015613edb57815481890152600182019150602081019050613ebc565b838801955050505b50505092915050565b6000613ef782614b9a565b613f018185614bc1565b9350613f11818560208601614dc0565b613f1a81614ff5565b840191505092915050565b6000613f3082614b9a565b613f3a8185614bd2565b9350613f4a818560208601614dc0565b80840191505092915050565b6000613f63604383614bc1565b9150613f6e82615013565b606082019050919050565b6000613f86603283614bc1565b9150613f9182615088565b604082019050919050565b6000613fa9602683614bc1565b9150613fb4826150d7565b604082019050919050565b6000613fcc601083614bc1565b9150613fd782615126565b602082019050919050565b6000613fef600e83614bc1565b9150613ffa8261514f565b602082019050919050565b6000614012602483614bc1565b915061401d82615178565b604082019050919050565b6000614035601983614bc1565b9150614040826151c7565b602082019050919050565b6000614058602e83614bc1565b9150614063826151f0565b604082019050919050565b600061407b601a83614bc1565b91506140868261523f565b602082019050919050565b600061409e602283614bc1565b91506140a982615268565b604082019050919050565b60006140c1601383614bc1565b91506140cc826152b7565b602082019050919050565b60006140e4602c83614bc1565b91506140ef826152e0565b604082019050919050565b6000614107603883614bc1565b91506141128261532f565b604082019050919050565b600061412a602a83614bc1565b91506141358261537e565b604082019050919050565b600061414d602983614bc1565b9150614158826153cd565b604082019050919050565b6000614170602b83614bc1565b915061417b8261541c565b604082019050919050565b6000614193602083614bc1565b915061419e8261546b565b602082019050919050565b60006141b6602c83614bc1565b91506141c182615494565b604082019050919050565b60006141d9602083614bc1565b91506141e4826154e3565b602082019050919050565b60006141fc603483614bc1565b91506142078261550c565b604082019050919050565b600061421f602983614bc1565b915061422a8261555b565b604082019050919050565b6000614242601a83614bc1565b915061424d826155aa565b602082019050919050565b6000614265602f83614bc1565b9150614270826155d3565b604082019050919050565b6000614288601883614bc1565b915061429382615622565b602082019050919050565b60006142ab602183614bc1565b91506142b68261564b565b604082019050919050565b60006142ce600083614bb6565b91506142d98261569a565b600082019050919050565b60006142f1603183614bc1565b91506142fc8261569d565b604082019050919050565b6000614314602683614bc1565b915061431f826156ec565b604082019050919050565b6000614337600b83614bc1565b91506143428261573b565b602082019050919050565b600061435a600e83614bc1565b915061436582615764565b602082019050919050565b61437981614d58565b82525050565b61439061438b82614d58565b614e9f565b82525050565b61439f81614d86565b82525050565b6143b66143b182614d86565b614eb1565b82525050565b6143c581614d90565b82525050565b6143d481614da4565b82525050565b60006143e7828486613d5e565b91508190509392505050565b60006143ff8284613dbc565b915081905092915050565b60006144168284613e6d565b915081905092915050565b600061442d8285613f25565b91506144398284613f25565b91508190509392505050565b6000614450826142c1565b9150819050919050565b6000614466828561437f565b60028201915061447682846143a5565b6020820191508190509392505050565b600060208201905061449b6000830184613d04565b92915050565b60006080820190506144b66000830187613d04565b6144c36020830186613d04565b6144d06040830185614396565b81810360608301526144e28184613d83565b905095945050505050565b60006040820190506145026000830185613d04565b61450f6020830184614396565b9392505050565b600060208201905061452b6000830184613d13565b92915050565b6000602082019050818103600083015261454b8184613d83565b905092915050565b6000602082019050818103600083015261456d8184613eec565b905092915050565b6000602082019050818103600083015261458e81613f56565b9050919050565b600060208201905081810360008301526145ae81613f79565b9050919050565b600060208201905081810360008301526145ce81613f9c565b9050919050565b600060208201905081810360008301526145ee81613fbf565b9050919050565b6000602082019050818103600083015261460e81613fe2565b9050919050565b6000602082019050818103600083015261462e81614005565b9050919050565b6000602082019050818103600083015261464e81614028565b9050919050565b6000602082019050818103600083015261466e8161404b565b9050919050565b6000602082019050818103600083015261468e8161406e565b9050919050565b600060208201905081810360008301526146ae81614091565b9050919050565b600060208201905081810360008301526146ce816140b4565b9050919050565b600060208201905081810360008301526146ee816140d7565b9050919050565b6000602082019050818103600083015261470e816140fa565b9050919050565b6000602082019050818103600083015261472e8161411d565b9050919050565b6000602082019050818103600083015261474e81614140565b9050919050565b6000602082019050818103600083015261476e81614163565b9050919050565b6000602082019050818103600083015261478e81614186565b9050919050565b600060208201905081810360008301526147ae816141a9565b9050919050565b600060208201905081810360008301526147ce816141cc565b9050919050565b600060208201905081810360008301526147ee816141ef565b9050919050565b6000602082019050818103600083015261480e81614212565b9050919050565b6000602082019050818103600083015261482e81614235565b9050919050565b6000602082019050818103600083015261484e81614258565b9050919050565b6000602082019050818103600083015261486e8161427b565b9050919050565b6000602082019050818103600083015261488e8161429e565b9050919050565b600060208201905081810360008301526148ae816142e4565b9050919050565b600060208201905081810360008301526148ce81614307565b9050919050565b600060208201905081810360008301526148ee8161432a565b9050919050565b6000602082019050818103600083015261490e8161434d565b9050919050565b600060a08201905061492a6000830188614370565b6149376020830187613d04565b81810360408301526149498186613d83565b90506149586060830185613d13565b818103608083015261496a8184613d83565b90509695505050505050565b600060808201905061498b6000830188614370565b818103602083015261499d8187613d83565b90506149ac60408301866143bc565b81810360608301526149bf818486613d31565b90509695505050505050565b60006080820190506149e06000830187614370565b81810360208301526149f28186613d83565b9050614a0160408301856143bc565b8181036060830152614a138184613d83565b905095945050505050565b600060c082019050614a336000830189614370565b8181036020830152614a458188613ded565b90508181036040830152614a598187613d83565b9050614a686060830186613cf5565b614a756080830185613d04565b81810360a0830152614a878184613d83565b9050979650505050505050565b6000602082019050614aa96000830184614396565b92915050565b6000604082019050614ac46000830185614396565b614ad16020830184613d22565b9392505050565b6000602082019050614aed60008301846143cb565b92915050565b6000614afd614b0e565b9050614b098282614e25565b919050565b6000604051905090565b600067ffffffffffffffff821115614b3357614b32614fa8565b5b614b3c82614ff5565b9050602081019050919050565b600067ffffffffffffffff821115614b6457614b63614fa8565b5b614b6d82614ff5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614be882614d86565b9150614bf383614d86565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2857614c27614eec565b5b828201905092915050565b6000614c3e82614d86565b9150614c4983614d86565b925082614c5957614c58614f1b565b5b828204905092915050565b6000614c6f82614d86565b9150614c7a83614d86565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb357614cb2614eec565b5b828202905092915050565b6000614cc982614d86565b9150614cd483614d86565b925082821015614ce757614ce6614eec565b5b828203905092915050565b6000614cfd82614d66565b9050919050565b6000614d0f82614d66565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614dde578082015181840152602081019050614dc3565b83811115614ded576000848401525b50505050565b60006002820490506001821680614e0b57607f821691505b60208210811415614e1f57614e1e614f4a565b5b50919050565b614e2e82614ff5565b810181811067ffffffffffffffff82111715614e4d57614e4c614fa8565b5b80604052505050565b6000614e6182614d86565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9457614e93614eec565b5b600182019050919050565b6000614eaa82615006565b9050919050565b6000819050919050565b6000614ec682614d86565b9150614ed183614d86565b925082614ee157614ee0614f1b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f6d73672e76616c7565206e6f7420656e6f75676820746f20636f766572206d6560008201527f73736167654665652e2053656e642067617320666f72206d657373616765206660208201527f6565730000000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f76616c7565206e6f7420656e6f75676800000000000000000000000000000000600082015250565b7f4d696e7420657863656564732031000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74206578636565647320737570706c7900000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d696e742065786365656473206d617850657241646472657373000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4d696e7420657863656564732032000000000000000000000000000000000000600082015250565b61579681614cf2565b81146157a157600080fd5b50565b6157ad81614d04565b81146157b857600080fd5b50565b6157c481614d16565b81146157cf57600080fd5b50565b6157db81614d2c565b81146157e657600080fd5b50565b6157f281614d58565b81146157fd57600080fd5b50565b61580981614d86565b811461581457600080fd5b50565b61582081614d90565b811461582b57600080fd5b50565b61583781614da4565b811461584257600080fd5b5056fea2646970667358221220b5a7b20c87597eca23f7d5c16020d6756f0ea14319a3a7304f7267da975b721764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string):
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47275:5650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44482:949;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31555:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32500:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34059:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33582:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45439:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34809:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51568:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52004:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51165:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35219:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51272:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51376:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32194:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47403:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48356:986;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31924:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12543:103;;;;;;;;;;;;;:::i;:::-;;44324:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48001:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47585:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11892:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44227:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;51076:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52258:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32669:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34352:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47346:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35475:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32844:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49482:1584;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46271:758;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51672:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51774:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34578:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47037:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51876:65;;;:::i;:::-;;51474:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12801:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44482:949;44644:8;;;;;;;;;;;44622:31;;:10;:31;;;44614:40;;;;;;44765:19;:32;44785:11;44765:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;44743:11;:18;:61;:134;;;;;44844:19;:32;44864:11;44844:32;;;;;;;;;;;;;;;44834:43;;;;;;:::i;:::-;;;;;;;;44818:11;44808:22;;;;;;:69;44743:134;44735:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;45076:4;:16;;;45093:11;45106;45119:6;45127:8;45076:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45072:352;;45283:52;;;;;;;;45298:8;:15;45283:52;;;;45325:8;45315:19;;;;;;45283:52;;;45232:14;:27;45247:11;45232:27;;;;;;;;;;;;;;;45260:11;45232:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;45273:6;45232:48;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;45355:57;45369:11;45382;45395:6;45403:8;45355:57;;;;;;;;;:::i;:::-;;;;;;;;45072:352;;;;44482:949;;;;:::o;31555:305::-;31657:4;31709:25;31694:40;;;:11;:40;;;;:105;;;;31766:33;31751:48;;;:11;:48;;;;31694:105;:158;;;;31816:36;31840:11;31816:23;:36::i;:::-;31694:158;31674:178;;31555:305;;;:::o;32500:100::-;32554:13;32587:5;32580:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32500:100;:::o;34059:221::-;34135:7;34163:16;34171:7;34163;:16::i;:::-;34155:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34248:15;:24;34264:7;34248:24;;;;;;;;;;;;;;;;;;;;;34241:31;;34059:221;;;:::o;33582:411::-;33663:13;33679:23;33694:7;33679:14;:23::i;:::-;33663:39;;33727:5;33721:11;;:2;:11;;;;33713:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:5;33805:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33830:37;33847:5;33854:12;:10;:12::i;:::-;33830:16;:37::i;:::-;33805:62;33783:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33964:21;33973:2;33977:7;33964:8;:21::i;:::-;33652:341;33582:411;;:::o;45439:356::-;45630:4;45608:27;;:10;:27;;;45600:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;45732:55;45744:11;45757;45770:6;45778:8;45732:10;:55::i;:::-;45439:356;;;;:::o;34809:339::-;35004:41;35023:12;:10;:12::i;:::-;35037:7;35004:18;:41::i;:::-;34996:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35112:28;35122:4;35128:2;35132:7;35112:9;:28::i;:::-;34809:339;;;:::o;51568:98::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51656:2:::1;51636:22;;:17;:22;;;;51568:98:::0;:::o;52004:170::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52063:9:::1;52086:6;;;;;;;;;;;52078:20;;52106:3;52078:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52062:52;;;52133:4;52125:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52051:123;52004:170:::0;:::o;51165:99::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51246:10:::1;51234:9;;:22;;;;;;;;;;;;;;;;;;51165:99:::0;:::o;35219:185::-;35357:39;35374:4;35380:2;35384:7;35357:39;;;;;;;;;;;;:16;:39::i;:::-;35219:185;;;:::o;51272:96::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51356:4:::1;51340:13;;:20;;;;;;;;;;;;;;;;;;51272:96:::0;:::o;51376:90::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51455:3:::1;51445:7;:13;;;;;;;;;;;;:::i;:::-;;51376:90:::0;:::o;32194:239::-;32266:7;32286:13;32302:7;:16;32310:7;32302:16;;;;;;;;;;;;;;;;;;;;;32286:32;;32354:1;32337:19;;:5;:19;;;;32329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32420:5;32413:12;;;32194:239;;;:::o;47403:31::-;;;;;;;;;;;;;:::o;48356:986::-;48423:9;;;;;;;;;;;48415:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;48489:9;48481:17;;:5;;:17;;;;:::i;:::-;48467:9;:32;;48459:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48548:17;;48534:11;;:31;48531:801;;;48603:13;;;;;;;;;;;48590:26;;:9;:26;;;;48582:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48697:17;;48684:9;48670:23;;:11;;:23;;;;:::i;:::-;:44;;48662:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;48757:6;48753:130;48768:9;48766:11;;:1;:11;48753:130;;;48801:34;48811:10;48823:11;;48801:9;:34::i;:::-;48854:11;;:13;;;;;;;;;:::i;:::-;;;;;;48778:3;;;;;:::i;:::-;;;;48753:130;;;;48531:801;;;48935:1;48923:9;:13;;;48915:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49009:14;;48996:9;48978:27;;:15;;:27;;;;:::i;:::-;:45;;48970:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49094:1;49070:9;:21;49080:10;49070:21;;;;;;;;;;;;;;;;:25;49062:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;49135:6;49131:190;49146:9;49144:11;;:1;:11;49131:190;;;49179:38;49189:10;49201:15;;49179:9;:38::i;:::-;49260:9;49236:33;;:9;:21;49246:10;49236:21;;;;;;;;;;;;;;;:33;;;;49288:15;;:17;;;;;;;;;:::i;:::-;;;;;;49156:3;;;;;:::i;:::-;;;;49131:190;;;;48531:801;48356:986;:::o;31924:208::-;31996:7;32041:1;32024:19;;:5;:19;;;;32016:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32108:9;:16;32118:5;32108:16;;;;;;;;;;;;;;;;32101:23;;31924:208;;;:::o;12543:103::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12608:30:::1;12635:1;12608:18;:30::i;:::-;12543:103::o:0;44324:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48001:291::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48110:14:::1;;48097:9;48079:27;;:15;;:27;;;;:::i;:::-;:45;;48071:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48163:6;48159:126;48174:9;48172:11;;:1;:11;48159:126;;;48203:38;48213:10;48225:15;;48203:9;:38::i;:::-;48256:15;;:17;;;;;;;;;:::i;:::-;;;;;;48184:3;;;;;:::i;:::-;;;;48159:126;;;;48001:291:::0;:::o;47585:39::-;;;;:::o;11892:87::-;11938:7;11965:6;;;;;;;;;;;11958:13;;11892:87;:::o;44227:90::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51076:83::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51145:6:::1;51137:5;:14;;;;51076:83:::0;:::o;52258:125::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52369:6:::1;52340:26;:35;;;;52258:125:::0;:::o;32669:104::-;32725:13;32758:7;32751:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32669:104;:::o;34352:155::-;34447:52;34466:12;:10;:12::i;:::-;34480:8;34490;34447:18;:52::i;:::-;34352:155;;:::o;47346:21::-;;;;;;;;;;;;;:::o;35475:328::-;35650:41;35669:12;:10;:12::i;:::-;35683:7;35650:18;:41::i;:::-;35642:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35756:39;35770:4;35776:2;35780:7;35789:5;35756:13;:39::i;:::-;35475:328;;;;:::o;32844:334::-;32917:13;32951:16;32959:7;32951;:16::i;:::-;32943:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33032:21;33056:10;:8;:10::i;:::-;33032:34;;33108:1;33090:7;33084:21;:25;:86;;;;;;;;;;;;;;;;;33136:7;33145:18;:7;:16;:18::i;:::-;33119:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33084:86;33077:93;;;32844:334;;;:::o;49482:1584::-;49585:16;49593:7;49585;:16::i;:::-;49571:30;;:10;:30;;;49563:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49698:1;49659:19;:29;49679:8;49659:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;49651:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49830:14;49836:7;49830:5;:14::i;:::-;49918:20;49952:10;49964:7;49941:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49918:54;;50058:14;50075:1;50058:18;;50087:26;50133:7;50142:26;;50116:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50087:82;;50324:15;50345:8;;;;;;;;;;;:21;;;50367:8;50385:4;50392:7;50401:5;50408:13;50345:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50323:99;;;50464:10;50451:9;:23;;50443:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;50559:8;;;;;;;;;;;:13;;;50580:9;50605:8;50677:19;:29;50697:8;50677:29;;;;;;;;;;;;;;;50765:7;50848:10;50915:3;50995:13;50559:499;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49552:1514;;;;49482:1584;;:::o;46271:758::-;46452:32;46487:14;:27;46502:11;46487:27;;;;;;;;;;;;;;;46515:11;46487:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;46528:6;46487:48;;;;;;;;;;;;;46452:83;;46587:1;46579:10;;46554:9;:21;;;:35;;46546:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46670:9;:23;;;46651:8;;:15;;:42;:90;;;;;46720:9;:21;;;46707:8;;46697:19;;;;;;;:::i;:::-;;;;;;;;:44;46651:90;46643:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;46846:1;46820:9;:23;;:27;;;;46890:1;46882:10;;46858:9;:21;;:34;;;;46961:4;:16;;;46978:11;46991;47004:6;47012:8;;46961:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46396:633;46271:758;;;;;:::o;51672:96::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51758:2:::1;51740:20;;:15;:20;;;;51672:96:::0;:::o;51774:94::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51858:2:::1;51841:19;;:14;:19;;;;51774:94:::0;:::o;34578:164::-;34675:4;34699:18;:25;34718:5;34699:25;;;;;;;;;;;;;;;:35;34725:8;34699:35;;;;;;;;;;;;;;;;;;;;;;;;;34692:42;;34578:164;;;;:::o;47037:158::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47173:14:::1;;47141:19;:29;47161:8;47141:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;47037:158:::0;;;:::o;51876:65::-;:::o;51474:88::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51552:2:::1;51538:16;;:11;:16;;;;51474:88:::0;:::o;12801:201::-;12123:12;:10;:12::i;:::-;12112:23;;:7;:5;:7::i;:::-;:23;;;12104:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12910:1:::1;12890:22;;:8;:22;;;;12882:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12966:28;12985:8;12966:18;:28::i;:::-;12801:201:::0;:::o;24324:157::-;24409:4;24448:25;24433:40;;;:11;:40;;;;24426:47;;24324:157;;;:::o;37313:127::-;37378:4;37430:1;37402:30;;:7;:16;37410:7;37402:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37395:37;;37313:127;;;:::o;10616:98::-;10669:7;10696:10;10689:17;;10616:98;:::o;41226:174::-;41328:2;41301:15;:24;41317:7;41301:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41384:7;41380:2;41346:46;;41355:23;41370:7;41355:14;:23::i;:::-;41346:46;;;;;;;;;;;;41226:174;;:::o;52474:338::-;52627:14;52643:12;52670:8;52659:37;;;;;;;;;;;;:::i;:::-;52626:70;;;;52778:26;52788:6;52796:7;52778:9;:26::i;:::-;52596:216;;52474:338;;;;:::o;37607:348::-;37700:4;37725:16;37733:7;37725;:16::i;:::-;37717:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37801:13;37817:23;37832:7;37817:14;:23::i;:::-;37801:39;;37870:5;37859:16;;:7;:16;;;:51;;;;37903:7;37879:31;;:20;37891:7;37879:11;:20::i;:::-;:31;;;37859:51;:87;;;;37914:32;37931:5;37938:7;37914:16;:32::i;:::-;37859:87;37851:96;;;37607:348;;;;:::o;40530:578::-;40689:4;40662:31;;:23;40677:7;40662:14;:23::i;:::-;:31;;;40654:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40772:1;40758:16;;:2;:16;;;;40750:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40828:39;40849:4;40855:2;40859:7;40828:20;:39::i;:::-;40932:29;40949:1;40953:7;40932:8;:29::i;:::-;40993:1;40974:9;:15;40984:4;40974:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41022:1;41005:9;:13;41015:2;41005:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41053:2;41034:7;:16;41042:7;41034:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41092:7;41088:2;41073:27;;41082:4;41073:27;;;;;;;;;;;;40530:578;;;:::o;38297:110::-;38373:26;38383:2;38387:7;38373:26;;;;;;;;;;;;:9;:26::i;:::-;38297:110;;:::o;13162:191::-;13236:16;13255:6;;;;;;;;;;;13236:25;;13281:8;13272:6;;:17;;;;;;;;;;;;;;;;;;13336:8;13305:40;;13326:8;13305:40;;;;;;;;;;;;13225:128;13162:191;:::o;41542:315::-;41697:8;41688:17;;:5;:17;;;;41680:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41784:8;41746:18;:25;41765:5;41746:25;;;;;;;;;;;;;;;:35;41772:8;41746:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41830:8;41808:41;;41823:5;41808:41;;;41840:8;41808:41;;;;;;:::i;:::-;;;;;;;;41542:315;;;:::o;36685:::-;36842:28;36852:4;36858:2;36862:7;36842:9;:28::i;:::-;36889:48;36912:4;36918:2;36922:7;36931:5;36889:22;:48::i;:::-;36881:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36685:315;;;;:::o;52822:100::-;52874:13;52907:7;52900:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52822:100;:::o;8178:723::-;8234:13;8464:1;8455:5;:10;8451:53;;;8482:10;;;;;;;;;;;;;;;;;;;;;8451:53;8514:12;8529:5;8514:20;;8545:14;8570:78;8585:1;8577:4;:9;8570:78;;8603:8;;;;;:::i;:::-;;;;8634:2;8626:10;;;;;:::i;:::-;;;8570:78;;;8658:19;8690:6;8680:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8658:39;;8708:154;8724:1;8715:5;:10;8708:154;;8752:1;8742:11;;;;;:::i;:::-;;;8819:2;8811:5;:10;;;;:::i;:::-;8798:2;:24;;;;:::i;:::-;8785:39;;8768:6;8775;8768:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8848:2;8839:11;;;;;:::i;:::-;;;8708:154;;;8886:6;8872:21;;;;;8178:723;;;;:::o;39833:360::-;39893:13;39909:23;39924:7;39909:14;:23::i;:::-;39893:39;;39945:48;39966:5;39981:1;39985:7;39945:20;:48::i;:::-;40034:29;40051:1;40055:7;40034:8;:29::i;:::-;40096:1;40076:9;:16;40086:5;40076:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;40115:7;:16;40123:7;40115:16;;;;;;;;;;;;40108:23;;;;;;;;;;;40177:7;40173:1;40149:36;;40158:5;40149:36;;;;;;;;;;;;39882:311;39833:360;:::o;43793:126::-;;;;:::o;38634:321::-;38764:18;38770:2;38774:7;38764:5;:18::i;:::-;38815:54;38846:1;38850:2;38854:7;38863:5;38815:22;:54::i;:::-;38793:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38634:321;;;:::o;42422:799::-;42577:4;42598:15;:2;:13;;;:15::i;:::-;42594:620;;;42650:2;42634:36;;;42671:12;:10;:12::i;:::-;42685:4;42691:7;42700:5;42634:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42630:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42893:1;42876:6;:13;:18;42872:272;;;42919:60;;;;;;;;;;:::i;:::-;;;;;;;;42872:272;43094:6;43088:13;43079:6;43075:2;43071:15;43064:38;42630:529;42767:41;;;42757:51;;;:6;:51;;;;42750:58;;;;;42594:620;43198:4;43191:11;;42422:799;;;;;;;:::o;39291:313::-;39385:1;39371:16;;:2;:16;;;;39363:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39437:45;39466:1;39470:2;39474:7;39437:20;:45::i;:::-;39512:1;39495:9;:13;39505:2;39495:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39543:2;39524:7;:16;39532:7;39524:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39588:7;39584:2;39563:33;;39580:1;39563:33;;;;;;;;;;;;39291:313;;:::o;14180:387::-;14240:4;14448:12;14515:7;14503:20;14495:28;;14558:1;14551:4;:8;14544:15;;;14180:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:159::-;1051:5;1082:6;1076:13;1067:22;;1098:41;1133:5;1098:41;:::i;:::-;986:159;;;;:::o;1151:133::-;1194:5;1232:6;1219:20;1210:29;;1248:30;1272:5;1248:30;:::i;:::-;1151:133;;;;:::o;1290:137::-;1335:5;1373:6;1360:20;1351:29;;1389:32;1415:5;1389:32;:::i;:::-;1290:137;;;;:::o;1433:141::-;1489:5;1520:6;1514:13;1505:22;;1536:32;1562:5;1536:32;:::i;:::-;1433:141;;;;:::o;1593:552::-;1650:8;1660:6;1710:3;1703:4;1695:6;1691:17;1687:27;1677:122;;1718:79;;:::i;:::-;1677:122;1831:6;1818:20;1808:30;;1861:18;1853:6;1850:30;1847:117;;;1883:79;;:::i;:::-;1847:117;1997:4;1989:6;1985:17;1973:29;;2051:3;2043:4;2035:6;2031:17;2021:8;2017:32;2014:41;2011:128;;;2058:79;;:::i;:::-;2011:128;1593:552;;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:137::-;3350:5;3388:6;3375:20;3366:29;;3404:32;3430:5;3404:32;:::i;:::-;3305:137;;;;:::o;3448:135::-;3492:5;3530:6;3517:20;3508:29;;3546:31;3571:5;3546:31;:::i;:::-;3448:135;;;;:::o;3589:329::-;3648:6;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3589:329;;;;:::o;3924:523::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:72;4283:7;4274:6;4263:9;4259:22;4219:72;:::i;:::-;4209:82;;4165:136;4340:2;4366:64;4422:7;4413:6;4402:9;4398:22;4366:64;:::i;:::-;4356:74;;4311:129;3924:523;;;;;:::o;4453:474::-;4521:6;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4831:2;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4802:118;4453:474;;;;;:::o;4933:619::-;5010:6;5018;5026;5075:2;5063:9;5054:7;5050:23;5046:32;5043:119;;;5081:79;;:::i;:::-;5043:119;5201:1;5226:53;5271:7;5262:6;5251:9;5247:22;5226:53;:::i;:::-;5216:63;;5172:117;5328:2;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5299:118;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;4933:619;;;;;:::o;5558:943::-;5653:6;5661;5669;5677;5726:3;5714:9;5705:7;5701:23;5697:33;5694:120;;;5733:79;;:::i;:::-;5694:120;5853:1;5878:53;5923:7;5914:6;5903:9;5899:22;5878:53;:::i;:::-;5868:63;;5824:117;5980:2;6006:53;6051:7;6042:6;6031:9;6027:22;6006:53;:::i;:::-;5996:63;;5951:118;6108:2;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6079:118;6264:2;6253:9;6249:18;6236:32;6295:18;6287:6;6284:30;6281:117;;;6317:79;;:::i;:::-;6281:117;6422:62;6476:7;6467:6;6456:9;6452:22;6422:62;:::i;:::-;6412:72;;6207:287;5558:943;;;;;;;:::o;6507:468::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:53;6825:7;6816:6;6805:9;6801:22;6780:53;:::i;:::-;6770:63;;6726:117;6882:2;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6853:115;6507:468;;;;;:::o;6981:474::-;7049:6;7057;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;7359:2;7385:53;7430:7;7421:6;7410:9;7406:22;7385:53;:::i;:::-;7375:63;;7330:118;6981:474;;;;;:::o;7461:323::-;7517:6;7566:2;7554:9;7545:7;7541:23;7537:32;7534:119;;;7572:79;;:::i;:::-;7534:119;7692:1;7717:50;7759:7;7750:6;7739:9;7735:22;7717:50;:::i;:::-;7707:60;;7663:114;7461:323;;;;:::o;7790:327::-;7848:6;7897:2;7885:9;7876:7;7872:23;7868:32;7865:119;;;7903:79;;:::i;:::-;7865:119;8023:1;8048:52;8092:7;8083:6;8072:9;8068:22;8048:52;:::i;:::-;8038:62;;7994:116;7790:327;;;;:::o;8123:349::-;8192:6;8241:2;8229:9;8220:7;8216:23;8212:32;8209:119;;;8247:79;;:::i;:::-;8209:119;8367:1;8392:63;8447:7;8438:6;8427:9;8423:22;8392:63;:::i;:::-;8382:73;;8338:127;8123:349;;;;:::o;8478:509::-;8547:6;8596:2;8584:9;8575:7;8571:23;8567:32;8564:119;;;8602:79;;:::i;:::-;8564:119;8750:1;8739:9;8735:17;8722:31;8780:18;8772:6;8769:30;8766:117;;;8802:79;;:::i;:::-;8766:117;8907:63;8962:7;8953:6;8942:9;8938:22;8907:63;:::i;:::-;8897:73;;8693:287;8478:509;;;;:::o;8993:327::-;9051:6;9100:2;9088:9;9079:7;9075:23;9071:32;9068:119;;;9106:79;;:::i;:::-;9068:119;9226:1;9251:52;9295:7;9286:6;9275:9;9271:22;9251:52;:::i;:::-;9241:62;;9197:116;8993:327;;;;:::o;9326:670::-;9404:6;9412;9420;9469:2;9457:9;9448:7;9444:23;9440:32;9437:119;;;9475:79;;:::i;:::-;9437:119;9595:1;9620:52;9664:7;9655:6;9644:9;9640:22;9620:52;:::i;:::-;9610:62;;9566:116;9749:2;9738:9;9734:18;9721:32;9780:18;9772:6;9769:30;9766:117;;;9802:79;;:::i;:::-;9766:117;9915:64;9971:7;9962:6;9951:9;9947:22;9915:64;:::i;:::-;9897:82;;;;9692:297;9326:670;;;;;:::o;10002:795::-;10087:6;10095;10103;10152:2;10140:9;10131:7;10127:23;10123:32;10120:119;;;10158:79;;:::i;:::-;10120:119;10278:1;10303:52;10347:7;10338:6;10327:9;10323:22;10303:52;:::i;:::-;10293:62;;10249:116;10432:2;10421:9;10417:18;10404:32;10463:18;10455:6;10452:30;10449:117;;;10485:79;;:::i;:::-;10449:117;10590:62;10644:7;10635:6;10624:9;10620:22;10590:62;:::i;:::-;10580:72;;10375:287;10701:2;10727:53;10772:7;10763:6;10752:9;10748:22;10727:53;:::i;:::-;10717:63;;10672:118;10002:795;;;;;:::o;10803:1137::-;10907:6;10915;10923;10931;10939;10988:3;10976:9;10967:7;10963:23;10959:33;10956:120;;;10995:79;;:::i;:::-;10956:120;11115:1;11140:52;11184:7;11175:6;11164:9;11160:22;11140:52;:::i;:::-;11130:62;;11086:116;11269:2;11258:9;11254:18;11241:32;11300:18;11292:6;11289:30;11286:117;;;11322:79;;:::i;:::-;11286:117;11427:62;11481:7;11472:6;11461:9;11457:22;11427:62;:::i;:::-;11417:72;;11212:287;11538:2;11564:52;11608:7;11599:6;11588:9;11584:22;11564:52;:::i;:::-;11554:62;;11509:117;11693:2;11682:9;11678:18;11665:32;11724:18;11716:6;11713:30;11710:117;;;11746:79;;:::i;:::-;11710:117;11859:64;11915:7;11906:6;11895:9;11891:22;11859:64;:::i;:::-;11841:82;;;;11636:297;10803:1137;;;;;;;;:::o;11946:1117::-;12048:6;12056;12064;12072;12121:3;12109:9;12100:7;12096:23;12092:33;12089:120;;;12128:79;;:::i;:::-;12089:120;12248:1;12273:52;12317:7;12308:6;12297:9;12293:22;12273:52;:::i;:::-;12263:62;;12219:116;12402:2;12391:9;12387:18;12374:32;12433:18;12425:6;12422:30;12419:117;;;12455:79;;:::i;:::-;12419:117;12560:62;12614:7;12605:6;12594:9;12590:22;12560:62;:::i;:::-;12550:72;;12345:287;12671:2;12697:52;12741:7;12732:6;12721:9;12717:22;12697:52;:::i;:::-;12687:62;;12642:117;12826:2;12815:9;12811:18;12798:32;12857:18;12849:6;12846:30;12843:117;;;12879:79;;:::i;:::-;12843:117;12984:62;13038:7;13029:6;13018:9;13014:22;12984:62;:::i;:::-;12974:72;;12769:287;11946:1117;;;;;;;:::o;13069:472::-;13136:6;13144;13193:2;13181:9;13172:7;13168:23;13164:32;13161:119;;;13199:79;;:::i;:::-;13161:119;13319:1;13344:52;13388:7;13379:6;13368:9;13364:22;13344:52;:::i;:::-;13334:62;;13290:116;13445:2;13471:53;13516:7;13507:6;13496:9;13492:22;13471:53;:::i;:::-;13461:63;;13416:118;13069:472;;;;;:::o;13547:329::-;13606:6;13655:2;13643:9;13634:7;13630:23;13626:32;13623:119;;;13661:79;;:::i;:::-;13623:119;13781:1;13806:53;13851:7;13842:6;13831:9;13827:22;13806:53;:::i;:::-;13796:63;;13752:117;13547:329;;;;:::o;13882:507::-;13961:6;13969;14018:2;14006:9;13997:7;13993:23;13989:32;13986:119;;;14024:79;;:::i;:::-;13986:119;14144:1;14169:64;14225:7;14216:6;14205:9;14201:22;14169:64;:::i;:::-;14159:74;;14115:128;14282:2;14308:64;14364:7;14355:6;14344:9;14340:22;14308:64;:::i;:::-;14298:74;;14253:129;13882:507;;;;;:::o;14395:325::-;14452:6;14501:2;14489:9;14480:7;14476:23;14472:32;14469:119;;;14507:79;;:::i;:::-;14469:119;14627:1;14652:51;14695:7;14686:6;14675:9;14671:22;14652:51;:::i;:::-;14642:61;;14598:115;14395:325;;;;:::o;14726:142::-;14829:32;14855:5;14829:32;:::i;:::-;14824:3;14817:45;14726:142;;:::o;14874:118::-;14961:24;14979:5;14961:24;:::i;:::-;14956:3;14949:37;14874:118;;:::o;14998:109::-;15079:21;15094:5;15079:21;:::i;:::-;15074:3;15067:34;14998:109;;:::o;15113:118::-;15200:24;15218:5;15200:24;:::i;:::-;15195:3;15188:37;15113:118;;:::o;15259:301::-;15355:3;15376:70;15439:6;15434:3;15376:70;:::i;:::-;15369:77;;15456:43;15492:6;15487:3;15480:5;15456:43;:::i;:::-;15524:29;15546:6;15524:29;:::i;:::-;15519:3;15515:39;15508:46;;15259:301;;;;;:::o;15588:314::-;15702:3;15723:88;15804:6;15799:3;15723:88;:::i;:::-;15716:95;;15821:43;15857:6;15852:3;15845:5;15821:43;:::i;:::-;15889:6;15884:3;15880:16;15873:23;;15588:314;;;;;:::o;15908:360::-;15994:3;16022:38;16054:5;16022:38;:::i;:::-;16076:70;16139:6;16134:3;16076:70;:::i;:::-;16069:77;;16155:52;16200:6;16195:3;16188:4;16181:5;16177:16;16155:52;:::i;:::-;16232:29;16254:6;16232:29;:::i;:::-;16227:3;16223:39;16216:46;;15998:270;15908:360;;;;:::o;16274:373::-;16378:3;16406:38;16438:5;16406:38;:::i;:::-;16460:88;16541:6;16536:3;16460:88;:::i;:::-;16453:95;;16557:52;16602:6;16597:3;16590:4;16583:5;16579:16;16557:52;:::i;:::-;16634:6;16629:3;16625:16;16618:23;;16382:265;16274:373;;;;:::o;16675:798::-;16758:3;16795:5;16789:12;16824:36;16850:9;16824:36;:::i;:::-;16876:70;16939:6;16934:3;16876:70;:::i;:::-;16869:77;;16977:1;16966:9;16962:17;16993:1;16988:135;;;;17137:1;17132:335;;;;16955:512;;16988:135;17072:4;17068:9;17057;17053:25;17048:3;17041:38;17108:4;17103:3;17099:14;17092:21;;16988:135;;17132:335;17199:37;17230:5;17199:37;:::i;:::-;17258:1;17272:154;17286:6;17283:1;17280:13;17272:154;;;17360:7;17354:14;17350:1;17345:3;17341:11;17334:35;17410:1;17401:7;17397:15;17386:26;;17308:4;17305:1;17301:12;17296:17;;17272:154;;;17455:1;17450:3;17446:11;17439:18;;17139:328;;16955:512;;16762:711;;16675:798;;;;:::o;17501:841::-;17602:3;17639:5;17633:12;17668:36;17694:9;17668:36;:::i;:::-;17720:88;17801:6;17796:3;17720:88;:::i;:::-;17713:95;;17839:1;17828:9;17824:17;17855:1;17850:137;;;;18001:1;17996:340;;;;17817:519;;17850:137;17934:4;17930:9;17919;17915:25;17910:3;17903:38;17970:6;17965:3;17961:16;17954:23;;17850:137;;17996:340;18063:37;18094:5;18063:37;:::i;:::-;18122:1;18136:154;18150:6;18147:1;18144:13;18136:154;;;18224:7;18218:14;18214:1;18209:3;18205:11;18198:35;18274:1;18265:7;18261:15;18250:26;;18172:4;18169:1;18165:12;18160:17;;18136:154;;;18319:6;18314:3;18310:16;18303:23;;18003:333;;17817:519;;17606:736;;17501:841;;;;:::o;18348:364::-;18436:3;18464:39;18497:5;18464:39;:::i;:::-;18519:71;18583:6;18578:3;18519:71;:::i;:::-;18512:78;;18599:52;18644:6;18639:3;18632:4;18625:5;18621:16;18599:52;:::i;:::-;18676:29;18698:6;18676:29;:::i;:::-;18671:3;18667:39;18660:46;;18440:272;18348:364;;;;:::o;18718:377::-;18824:3;18852:39;18885:5;18852:39;:::i;:::-;18907:89;18989:6;18984:3;18907:89;:::i;:::-;18900:96;;19005:52;19050:6;19045:3;19038:4;19031:5;19027:16;19005:52;:::i;:::-;19082:6;19077:3;19073:16;19066:23;;18828:267;18718:377;;;;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:::-;19615:3;19636:67;19700:2;19695:3;19636:67;:::i;:::-;19629:74;;19712:93;19801:3;19712:93;:::i;:::-;19830:2;19825:3;19821:12;19814:19;;19473:366;;;:::o;19845:::-;19987:3;20008:67;20072:2;20067:3;20008:67;:::i;:::-;20001:74;;20084:93;20173:3;20084:93;:::i;:::-;20202:2;20197:3;20193:12;20186:19;;19845:366;;;:::o;20217:::-;20359:3;20380:67;20444:2;20439:3;20380:67;:::i;:::-;20373:74;;20456:93;20545:3;20456:93;:::i;:::-;20574:2;20569:3;20565:12;20558:19;;20217:366;;;:::o;20589:::-;20731:3;20752:67;20816:2;20811:3;20752:67;:::i;:::-;20745:74;;20828:93;20917:3;20828:93;:::i;:::-;20946:2;20941:3;20937:12;20930:19;;20589:366;;;:::o;20961:::-;21103:3;21124:67;21188:2;21183:3;21124:67;:::i;:::-;21117:74;;21200:93;21289:3;21200:93;:::i;:::-;21318:2;21313:3;21309:12;21302:19;;20961:366;;;:::o;21333:::-;21475:3;21496:67;21560:2;21555:3;21496:67;:::i;:::-;21489:74;;21572:93;21661:3;21572:93;:::i;:::-;21690:2;21685:3;21681:12;21674:19;;21333:366;;;:::o;21705:::-;21847:3;21868:67;21932:2;21927:3;21868:67;:::i;:::-;21861:74;;21944:93;22033:3;21944:93;:::i;:::-;22062:2;22057:3;22053:12;22046:19;;21705:366;;;:::o;22077:::-;22219:3;22240:67;22304:2;22299:3;22240:67;:::i;:::-;22233:74;;22316:93;22405:3;22316:93;:::i;:::-;22434:2;22429:3;22425:12;22418:19;;22077:366;;;:::o;22449:::-;22591:3;22612:67;22676:2;22671:3;22612:67;:::i;:::-;22605:74;;22688:93;22777:3;22688:93;:::i;:::-;22806:2;22801:3;22797:12;22790:19;;22449:366;;;:::o;22821:::-;22963:3;22984:67;23048:2;23043:3;22984:67;:::i;:::-;22977:74;;23060:93;23149:3;23060:93;:::i;:::-;23178:2;23173:3;23169:12;23162:19;;22821:366;;;:::o;23193:::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:::-;23707:3;23728:67;23792:2;23787:3;23728:67;:::i;:::-;23721:74;;23804:93;23893:3;23804:93;:::i;:::-;23922:2;23917:3;23913:12;23906:19;;23565:366;;;:::o;23937:::-;24079:3;24100:67;24164:2;24159:3;24100:67;:::i;:::-;24093:74;;24176:93;24265:3;24176:93;:::i;:::-;24294:2;24289:3;24285:12;24278:19;;23937:366;;;:::o;24309:::-;24451:3;24472:67;24536:2;24531:3;24472:67;:::i;:::-;24465:74;;24548:93;24637:3;24548:93;:::i;:::-;24666:2;24661:3;24657:12;24650:19;;24309:366;;;:::o;24681:::-;24823:3;24844:67;24908:2;24903:3;24844:67;:::i;:::-;24837:74;;24920:93;25009:3;24920:93;:::i;:::-;25038:2;25033:3;25029:12;25022:19;;24681:366;;;:::o;25053:::-;25195:3;25216:67;25280:2;25275:3;25216:67;:::i;:::-;25209:74;;25292:93;25381:3;25292:93;:::i;:::-;25410:2;25405:3;25401:12;25394:19;;25053:366;;;:::o;25425:::-;25567:3;25588:67;25652:2;25647:3;25588:67;:::i;:::-;25581:74;;25664:93;25753:3;25664:93;:::i;:::-;25782:2;25777:3;25773:12;25766:19;;25425:366;;;:::o;25797:::-;25939:3;25960:67;26024:2;26019:3;25960:67;:::i;:::-;25953:74;;26036:93;26125:3;26036:93;:::i;:::-;26154:2;26149:3;26145:12;26138:19;;25797:366;;;:::o;26169:::-;26311:3;26332:67;26396:2;26391:3;26332:67;:::i;:::-;26325:74;;26408:93;26497:3;26408:93;:::i;:::-;26526:2;26521:3;26517:12;26510:19;;26169:366;;;:::o;26541:::-;26683:3;26704:67;26768:2;26763:3;26704:67;:::i;:::-;26697:74;;26780:93;26869:3;26780:93;:::i;:::-;26898:2;26893:3;26889:12;26882:19;;26541:366;;;:::o;26913:::-;27055:3;27076:67;27140:2;27135:3;27076:67;:::i;:::-;27069:74;;27152:93;27241:3;27152:93;:::i;:::-;27270:2;27265:3;27261:12;27254:19;;26913:366;;;:::o;27285:::-;27427:3;27448:67;27512:2;27507:3;27448:67;:::i;:::-;27441:74;;27524:93;27613:3;27524:93;:::i;:::-;27642:2;27637:3;27633:12;27626:19;;27285:366;;;:::o;27657:::-;27799:3;27820:67;27884:2;27879:3;27820:67;:::i;:::-;27813:74;;27896:93;27985:3;27896:93;:::i;:::-;28014:2;28009:3;28005:12;27998:19;;27657:366;;;:::o;28029:::-;28171:3;28192:67;28256:2;28251:3;28192:67;:::i;:::-;28185:74;;28268:93;28357:3;28268:93;:::i;:::-;28386:2;28381:3;28377:12;28370:19;;28029:366;;;:::o;28401:398::-;28560:3;28581:83;28662:1;28657:3;28581:83;:::i;:::-;28574:90;;28673:93;28762:3;28673:93;:::i;:::-;28791:1;28786:3;28782:11;28775:18;;28401:398;;;:::o;28805:366::-;28947:3;28968:67;29032:2;29027:3;28968:67;:::i;:::-;28961:74;;29044:93;29133:3;29044:93;:::i;:::-;29162:2;29157:3;29153:12;29146:19;;28805:366;;;:::o;29177:::-;29319:3;29340:67;29404:2;29399:3;29340:67;:::i;:::-;29333:74;;29416:93;29505:3;29416:93;:::i;:::-;29534:2;29529:3;29525:12;29518:19;;29177:366;;;:::o;29549:::-;29691:3;29712:67;29776:2;29771:3;29712:67;:::i;:::-;29705:74;;29788:93;29877:3;29788:93;:::i;:::-;29906:2;29901:3;29897:12;29890:19;;29549:366;;;:::o;29921:::-;30063:3;30084:67;30148:2;30143:3;30084:67;:::i;:::-;30077:74;;30160:93;30249:3;30160:93;:::i;:::-;30278:2;30273:3;30269:12;30262:19;;29921:366;;;:::o;30293:115::-;30378:23;30395:5;30378:23;:::i;:::-;30373:3;30366:36;30293:115;;:::o;30414:153::-;30517:43;30536:23;30553:5;30536:23;:::i;:::-;30517:43;:::i;:::-;30512:3;30505:56;30414:153;;:::o;30573:118::-;30660:24;30678:5;30660:24;:::i;:::-;30655:3;30648:37;30573:118;;:::o;30697:157::-;30802:45;30822:24;30840:5;30822:24;:::i;:::-;30802:45;:::i;:::-;30797:3;30790:58;30697:157;;:::o;30860:115::-;30945:23;30962:5;30945:23;:::i;:::-;30940:3;30933:36;30860:115;;:::o;30981:112::-;31064:22;31080:5;31064:22;:::i;:::-;31059:3;31052:35;30981:112;;:::o;31099:291::-;31239:3;31261:103;31360:3;31351:6;31343;31261:103;:::i;:::-;31254:110;;31381:3;31374:10;;31099:291;;;;;:::o;31396:271::-;31526:3;31548:93;31637:3;31628:6;31548:93;:::i;:::-;31541:100;;31658:3;31651:10;;31396:271;;;;:::o;31673:265::-;31800:3;31822:90;31908:3;31899:6;31822:90;:::i;:::-;31815:97;;31929:3;31922:10;;31673:265;;;;:::o;31944:435::-;32124:3;32146:95;32237:3;32228:6;32146:95;:::i;:::-;32139:102;;32258:95;32349:3;32340:6;32258:95;:::i;:::-;32251:102;;32370:3;32363:10;;31944:435;;;;;:::o;32385:379::-;32569:3;32591:147;32734:3;32591:147;:::i;:::-;32584:154;;32755:3;32748:10;;32385:379;;;:::o;32770:392::-;32908:3;32923:73;32992:3;32983:6;32923:73;:::i;:::-;33021:1;33016:3;33012:11;33005:18;;33033:75;33104:3;33095:6;33033:75;:::i;:::-;33133:2;33128:3;33124:12;33117:19;;33153:3;33146:10;;32770:392;;;;;:::o;33168:222::-;33261:4;33299:2;33288:9;33284:18;33276:26;;33312:71;33380:1;33369:9;33365:17;33356:6;33312:71;:::i;:::-;33168:222;;;;:::o;33396:640::-;33591:4;33629:3;33618:9;33614:19;33606:27;;33643:71;33711:1;33700:9;33696:17;33687:6;33643:71;:::i;:::-;33724:72;33792:2;33781:9;33777:18;33768:6;33724:72;:::i;:::-;33806;33874:2;33863:9;33859:18;33850:6;33806:72;:::i;:::-;33925:9;33919:4;33915:20;33910:2;33899:9;33895:18;33888:48;33953:76;34024:4;34015:6;33953:76;:::i;:::-;33945:84;;33396:640;;;;;;;:::o;34042:332::-;34163:4;34201:2;34190:9;34186:18;34178:26;;34214:71;34282:1;34271:9;34267:17;34258:6;34214:71;:::i;:::-;34295:72;34363:2;34352:9;34348:18;34339:6;34295:72;:::i;:::-;34042:332;;;;;:::o;34380:210::-;34467:4;34505:2;34494:9;34490:18;34482:26;;34518:65;34580:1;34569:9;34565:17;34556:6;34518:65;:::i;:::-;34380:210;;;;:::o;34596:309::-;34707:4;34745:2;34734:9;34730:18;34722:26;;34794:9;34788:4;34784:20;34780:1;34769:9;34765:17;34758:47;34822:76;34893:4;34884:6;34822:76;:::i;:::-;34814:84;;34596:309;;;;:::o;34911:313::-;35024:4;35062:2;35051:9;35047:18;35039:26;;35111:9;35105:4;35101:20;35097:1;35086:9;35082:17;35075:47;35139:78;35212:4;35203:6;35139:78;:::i;:::-;35131:86;;34911:313;;;;:::o;35230:419::-;35396:4;35434:2;35423:9;35419:18;35411:26;;35483:9;35477:4;35473:20;35469:1;35458:9;35454:17;35447:47;35511:131;35637:4;35511:131;:::i;:::-;35503:139;;35230:419;;;:::o;35655:::-;35821:4;35859:2;35848:9;35844:18;35836:26;;35908:9;35902:4;35898:20;35894:1;35883:9;35879:17;35872:47;35936:131;36062:4;35936:131;:::i;:::-;35928:139;;35655:419;;;:::o;36080:::-;36246:4;36284:2;36273:9;36269:18;36261:26;;36333:9;36327:4;36323:20;36319:1;36308:9;36304:17;36297:47;36361:131;36487:4;36361:131;:::i;:::-;36353:139;;36080:419;;;:::o;36505:::-;36671:4;36709:2;36698:9;36694:18;36686:26;;36758:9;36752:4;36748:20;36744:1;36733:9;36729:17;36722:47;36786:131;36912:4;36786:131;:::i;:::-;36778:139;;36505:419;;;:::o;36930:::-;37096:4;37134:2;37123:9;37119:18;37111:26;;37183:9;37177:4;37173:20;37169:1;37158:9;37154:17;37147:47;37211:131;37337:4;37211:131;:::i;:::-;37203:139;;36930:419;;;:::o;37355:::-;37521:4;37559:2;37548:9;37544:18;37536:26;;37608:9;37602:4;37598:20;37594:1;37583:9;37579:17;37572:47;37636:131;37762:4;37636:131;:::i;:::-;37628:139;;37355:419;;;:::o;37780:::-;37946:4;37984:2;37973:9;37969:18;37961:26;;38033:9;38027:4;38023:20;38019:1;38008:9;38004:17;37997:47;38061:131;38187:4;38061:131;:::i;:::-;38053:139;;37780:419;;;:::o;38205:::-;38371:4;38409:2;38398:9;38394:18;38386:26;;38458:9;38452:4;38448:20;38444:1;38433:9;38429:17;38422:47;38486:131;38612:4;38486:131;:::i;:::-;38478:139;;38205:419;;;:::o;38630:::-;38796:4;38834:2;38823:9;38819:18;38811:26;;38883:9;38877:4;38873:20;38869:1;38858:9;38854:17;38847:47;38911:131;39037:4;38911:131;:::i;:::-;38903:139;;38630:419;;;:::o;39055:::-;39221:4;39259:2;39248:9;39244:18;39236:26;;39308:9;39302:4;39298:20;39294:1;39283:9;39279:17;39272:47;39336:131;39462:4;39336:131;:::i;:::-;39328:139;;39055:419;;;:::o;39480:::-;39646:4;39684:2;39673:9;39669:18;39661:26;;39733:9;39727:4;39723:20;39719:1;39708:9;39704:17;39697:47;39761:131;39887:4;39761:131;:::i;:::-;39753:139;;39480:419;;;:::o;39905:::-;40071:4;40109:2;40098:9;40094:18;40086:26;;40158:9;40152:4;40148:20;40144:1;40133:9;40129:17;40122:47;40186:131;40312:4;40186:131;:::i;:::-;40178:139;;39905:419;;;:::o;40330:::-;40496:4;40534:2;40523:9;40519:18;40511:26;;40583:9;40577:4;40573:20;40569:1;40558:9;40554:17;40547:47;40611:131;40737:4;40611:131;:::i;:::-;40603:139;;40330:419;;;:::o;40755:::-;40921:4;40959:2;40948:9;40944:18;40936:26;;41008:9;41002:4;40998:20;40994:1;40983:9;40979:17;40972:47;41036:131;41162:4;41036:131;:::i;:::-;41028:139;;40755:419;;;:::o;41180:::-;41346:4;41384:2;41373:9;41369:18;41361:26;;41433:9;41427:4;41423:20;41419:1;41408:9;41404:17;41397:47;41461:131;41587:4;41461:131;:::i;:::-;41453:139;;41180:419;;;:::o;41605:::-;41771:4;41809:2;41798:9;41794:18;41786:26;;41858:9;41852:4;41848:20;41844:1;41833:9;41829:17;41822:47;41886:131;42012:4;41886:131;:::i;:::-;41878:139;;41605:419;;;:::o;42030:::-;42196:4;42234:2;42223:9;42219:18;42211:26;;42283:9;42277:4;42273:20;42269:1;42258:9;42254:17;42247:47;42311:131;42437:4;42311:131;:::i;:::-;42303:139;;42030:419;;;:::o;42455:::-;42621:4;42659:2;42648:9;42644:18;42636:26;;42708:9;42702:4;42698:20;42694:1;42683:9;42679:17;42672:47;42736:131;42862:4;42736:131;:::i;:::-;42728:139;;42455:419;;;:::o;42880:::-;43046:4;43084:2;43073:9;43069:18;43061:26;;43133:9;43127:4;43123:20;43119:1;43108:9;43104:17;43097:47;43161:131;43287:4;43161:131;:::i;:::-;43153:139;;42880:419;;;:::o;43305:::-;43471:4;43509:2;43498:9;43494:18;43486:26;;43558:9;43552:4;43548:20;43544:1;43533:9;43529:17;43522:47;43586:131;43712:4;43586:131;:::i;:::-;43578:139;;43305:419;;;:::o;43730:::-;43896:4;43934:2;43923:9;43919:18;43911:26;;43983:9;43977:4;43973:20;43969:1;43958:9;43954:17;43947:47;44011:131;44137:4;44011:131;:::i;:::-;44003:139;;43730:419;;;:::o;44155:::-;44321:4;44359:2;44348:9;44344:18;44336:26;;44408:9;44402:4;44398:20;44394:1;44383:9;44379:17;44372:47;44436:131;44562:4;44436:131;:::i;:::-;44428:139;;44155:419;;;:::o;44580:::-;44746:4;44784:2;44773:9;44769:18;44761:26;;44833:9;44827:4;44823:20;44819:1;44808:9;44804:17;44797:47;44861:131;44987:4;44861:131;:::i;:::-;44853:139;;44580:419;;;:::o;45005:::-;45171:4;45209:2;45198:9;45194:18;45186:26;;45258:9;45252:4;45248:20;45244:1;45233:9;45229:17;45222:47;45286:131;45412:4;45286:131;:::i;:::-;45278:139;;45005:419;;;:::o;45430:::-;45596:4;45634:2;45623:9;45619:18;45611:26;;45683:9;45677:4;45673:20;45669:1;45658:9;45654:17;45647:47;45711:131;45837:4;45711:131;:::i;:::-;45703:139;;45430:419;;;:::o;45855:::-;46021:4;46059:2;46048:9;46044:18;46036:26;;46108:9;46102:4;46098:20;46094:1;46083:9;46079:17;46072:47;46136:131;46262:4;46136:131;:::i;:::-;46128:139;;45855:419;;;:::o;46280:::-;46446:4;46484:2;46473:9;46469:18;46461:26;;46533:9;46527:4;46523:20;46519:1;46508:9;46504:17;46497:47;46561:131;46687:4;46561:131;:::i;:::-;46553:139;;46280:419;;;:::o;46705:::-;46871:4;46909:2;46898:9;46894:18;46886:26;;46958:9;46952:4;46948:20;46944:1;46933:9;46929:17;46922:47;46986:131;47112:4;46986:131;:::i;:::-;46978:139;;46705:419;;;:::o;47130:::-;47296:4;47334:2;47323:9;47319:18;47311:26;;47383:9;47377:4;47373:20;47369:1;47358:9;47354:17;47347:47;47411:131;47537:4;47411:131;:::i;:::-;47403:139;;47130:419;;;:::o;47555:822::-;47788:4;47826:3;47815:9;47811:19;47803:27;;47840:69;47906:1;47895:9;47891:17;47882:6;47840:69;:::i;:::-;47919:72;47987:2;47976:9;47972:18;47963:6;47919:72;:::i;:::-;48038:9;48032:4;48028:20;48023:2;48012:9;48008:18;48001:48;48066:76;48137:4;48128:6;48066:76;:::i;:::-;48058:84;;48152:66;48214:2;48203:9;48199:18;48190:6;48152:66;:::i;:::-;48266:9;48260:4;48256:20;48250:3;48239:9;48235:19;48228:49;48294:76;48365:4;48356:6;48294:76;:::i;:::-;48286:84;;47555:822;;;;;;;;:::o;48383:739::-;48602:4;48640:3;48629:9;48625:19;48617:27;;48654:69;48720:1;48709:9;48705:17;48696:6;48654:69;:::i;:::-;48770:9;48764:4;48760:20;48755:2;48744:9;48740:18;48733:48;48798:76;48869:4;48860:6;48798:76;:::i;:::-;48790:84;;48884:70;48950:2;48939:9;48935:18;48926:6;48884:70;:::i;:::-;49001:9;48995:4;48991:20;48986:2;48975:9;48971:18;48964:48;49029:86;49110:4;49101:6;49093;49029:86;:::i;:::-;49021:94;;48383:739;;;;;;;;:::o;49128:719::-;49337:4;49375:3;49364:9;49360:19;49352:27;;49389:69;49455:1;49444:9;49440:17;49431:6;49389:69;:::i;:::-;49505:9;49499:4;49495:20;49490:2;49479:9;49475:18;49468:48;49533:76;49604:4;49595:6;49533:76;:::i;:::-;49525:84;;49619:70;49685:2;49674:9;49670:18;49661:6;49619:70;:::i;:::-;49736:9;49730:4;49726:20;49721:2;49710:9;49706:18;49699:48;49764:76;49835:4;49826:6;49764:76;:::i;:::-;49756:84;;49128:719;;;;;;;:::o;49853:1058::-;50151:4;50189:3;50178:9;50174:19;50166:27;;50203:69;50269:1;50258:9;50254:17;50245:6;50203:69;:::i;:::-;50319:9;50313:4;50309:20;50304:2;50293:9;50289:18;50282:48;50347:73;50415:4;50406:6;50347:73;:::i;:::-;50339:81;;50467:9;50461:4;50457:20;50452:2;50441:9;50437:18;50430:48;50495:76;50566:4;50557:6;50495:76;:::i;:::-;50487:84;;50581:88;50665:2;50654:9;50650:18;50641:6;50581:88;:::i;:::-;50679:73;50747:3;50736:9;50732:19;50723:6;50679:73;:::i;:::-;50800:9;50794:4;50790:20;50784:3;50773:9;50769:19;50762:49;50828:76;50899:4;50890:6;50828:76;:::i;:::-;50820:84;;49853:1058;;;;;;;;;:::o;50917:222::-;51010:4;51048:2;51037:9;51033:18;51025:26;;51061:71;51129:1;51118:9;51114:17;51105:6;51061:71;:::i;:::-;50917:222;;;;:::o;51145:332::-;51266:4;51304:2;51293:9;51289:18;51281:26;;51317:71;51385:1;51374:9;51370:17;51361:6;51317:71;:::i;:::-;51398:72;51466:2;51455:9;51451:18;51442:6;51398:72;:::i;:::-;51145:332;;;;;:::o;51483:214::-;51572:4;51610:2;51599:9;51595:18;51587:26;;51623:67;51687:1;51676:9;51672:17;51663:6;51623:67;:::i;:::-;51483:214;;;;:::o;51703:129::-;51737:6;51764:20;;:::i;:::-;51754:30;;51793:33;51821:4;51813:6;51793:33;:::i;:::-;51703:129;;;:::o;51838:75::-;51871:6;51904:2;51898:9;51888:19;;51838:75;:::o;51919:307::-;51980:4;52070:18;52062:6;52059:30;52056:56;;;52092:18;;:::i;:::-;52056:56;52130:29;52152:6;52130:29;:::i;:::-;52122:37;;52214:4;52208;52204:15;52196:23;;51919:307;;;:::o;52232:308::-;52294:4;52384:18;52376:6;52373:30;52370:56;;;52406:18;;:::i;:::-;52370:56;52444:29;52466:6;52444:29;:::i;:::-;52436:37;;52528:4;52522;52518:15;52510:23;;52232:308;;;:::o;52546:140::-;52594:4;52617:3;52609:11;;52640:3;52637:1;52630:14;52674:4;52671:1;52661:18;52653:26;;52546:140;;;:::o;52692:98::-;52743:6;52777:5;52771:12;52761:22;;52692:98;;;:::o;52796:99::-;52848:6;52882:5;52876:12;52866:22;;52796:99;;;:::o;52901:168::-;52984:11;53018:6;53013:3;53006:19;53058:4;53053:3;53049:14;53034:29;;52901:168;;;;:::o;53075:147::-;53176:11;53213:3;53198:18;;53075:147;;;;:::o;53228:169::-;53312:11;53346:6;53341:3;53334:19;53386:4;53381:3;53377:14;53362:29;;53228:169;;;;:::o;53403:148::-;53505:11;53542:3;53527:18;;53403:148;;;;:::o;53557:305::-;53597:3;53616:20;53634:1;53616:20;:::i;:::-;53611:25;;53650:20;53668:1;53650:20;:::i;:::-;53645:25;;53804:1;53736:66;53732:74;53729:1;53726:81;53723:107;;;53810:18;;:::i;:::-;53723:107;53854:1;53851;53847:9;53840:16;;53557:305;;;;:::o;53868:185::-;53908:1;53925:20;53943:1;53925:20;:::i;:::-;53920:25;;53959:20;53977:1;53959:20;:::i;:::-;53954:25;;53998:1;53988:35;;54003:18;;:::i;:::-;53988:35;54045:1;54042;54038:9;54033:14;;53868:185;;;;:::o;54059:348::-;54099:7;54122:20;54140:1;54122:20;:::i;:::-;54117:25;;54156:20;54174:1;54156:20;:::i;:::-;54151:25;;54344:1;54276:66;54272:74;54269:1;54266:81;54261:1;54254:9;54247:17;54243:105;54240:131;;;54351:18;;:::i;:::-;54240:131;54399:1;54396;54392:9;54381:20;;54059:348;;;;:::o;54413:191::-;54453:4;54473:20;54491:1;54473:20;:::i;:::-;54468:25;;54507:20;54525:1;54507:20;:::i;:::-;54502:25;;54546:1;54543;54540:8;54537:34;;;54551:18;;:::i;:::-;54537:34;54596:1;54593;54589:9;54581:17;;54413:191;;;;:::o;54610:96::-;54647:7;54676:24;54694:5;54676:24;:::i;:::-;54665:35;;54610:96;;;:::o;54712:104::-;54757:7;54786:24;54804:5;54786:24;:::i;:::-;54775:35;;54712:104;;;:::o;54822:90::-;54856:7;54899:5;54892:13;54885:21;54874:32;;54822:90;;;:::o;54918:77::-;54955:7;54984:5;54973:16;;54918:77;;;:::o;55001:149::-;55037:7;55077:66;55070:5;55066:78;55055:89;;55001:149;;;:::o;55156:89::-;55192:7;55232:6;55225:5;55221:18;55210:29;;55156:89;;;:::o;55251:126::-;55288:7;55328:42;55321:5;55317:54;55306:65;;55251:126;;;:::o;55383:77::-;55420:7;55449:5;55438:16;;55383:77;;;:::o;55466:101::-;55502:7;55542:18;55535:5;55531:30;55520:41;;55466:101;;;:::o;55573:86::-;55608:7;55648:4;55641:5;55637:16;55626:27;;55573:86;;;:::o;55665:154::-;55749:6;55744:3;55739;55726:30;55811:1;55802:6;55797:3;55793:16;55786:27;55665:154;;;:::o;55825:307::-;55893:1;55903:113;55917:6;55914:1;55911:13;55903:113;;;56002:1;55997:3;55993:11;55987:18;55983:1;55978:3;55974:11;55967:39;55939:2;55936:1;55932:10;55927:15;;55903:113;;;56034:6;56031:1;56028:13;56025:101;;;56114:1;56105:6;56100:3;56096:16;56089:27;56025:101;55874:258;55825:307;;;:::o;56138:320::-;56182:6;56219:1;56213:4;56209:12;56199:22;;56266:1;56260:4;56256:12;56287:18;56277:81;;56343:4;56335:6;56331:17;56321:27;;56277:81;56405:2;56397:6;56394:14;56374:18;56371:38;56368:84;;;56424:18;;:::i;:::-;56368:84;56189:269;56138:320;;;:::o;56464:281::-;56547:27;56569:4;56547:27;:::i;:::-;56539:6;56535:40;56677:6;56665:10;56662:22;56641:18;56629:10;56626:34;56623:62;56620:88;;;56688:18;;:::i;:::-;56620:88;56728:10;56724:2;56717:22;56507:238;56464:281;;:::o;56751:233::-;56790:3;56813:24;56831:5;56813:24;:::i;:::-;56804:33;;56859:66;56852:5;56849:77;56846:103;;;56929:18;;:::i;:::-;56846:103;56976:1;56969:5;56965:13;56958:20;;56751:233;;;:::o;56990:94::-;57028:7;57057:21;57072:5;57057:21;:::i;:::-;57046:32;;56990:94;;;:::o;57090:79::-;57129:7;57158:5;57147:16;;57090:79;;;:::o;57175:176::-;57207:1;57224:20;57242:1;57224:20;:::i;:::-;57219:25;;57258:20;57276:1;57258:20;:::i;:::-;57253:25;;57297:1;57287:35;;57302:18;;:::i;:::-;57287:35;57343:1;57340;57336:9;57331:14;;57175:176;;;;:::o;57357:180::-;57405:77;57402:1;57395:88;57502:4;57499:1;57492:15;57526:4;57523:1;57516:15;57543:180;57591:77;57588:1;57581:88;57688:4;57685:1;57678:15;57712:4;57709:1;57702:15;57729:180;57777:77;57774:1;57767:88;57874:4;57871:1;57864:15;57898:4;57895:1;57888:15;57915:180;57963:77;57960:1;57953:88;58060:4;58057:1;58050:15;58084:4;58081:1;58074:15;58101:180;58149:77;58146:1;58139:88;58246:4;58243:1;58236:15;58270:4;58267:1;58260:15;58287:117;58396:1;58393;58386:12;58410:117;58519:1;58516;58509:12;58533:117;58642:1;58639;58632:12;58656:117;58765:1;58762;58755:12;58779:117;58888:1;58885;58878:12;58902:117;59011:1;59008;59001:12;59025:102;59066:6;59117:2;59113:7;59108:2;59101:5;59097:14;59093:28;59083:38;;59025:102;;;:::o;59133:96::-;59167:8;59216:5;59211:3;59207:15;59186:36;;59133:96;;;:::o;59235:291::-;59375:34;59371:1;59363:6;59359:14;59352:58;59444:34;59439:2;59431:6;59427:15;59420:59;59513:5;59508:2;59500:6;59496:15;59489:30;59235:291;:::o;59532:237::-;59672:34;59668:1;59660:6;59656:14;59649:58;59741:20;59736:2;59728:6;59724:15;59717:45;59532:237;:::o;59775:225::-;59915:34;59911:1;59903:6;59899:14;59892:58;59984:8;59979:2;59971:6;59967:15;59960:33;59775:225;:::o;60006:166::-;60146:18;60142:1;60134:6;60130:14;60123:42;60006:166;:::o;60178:164::-;60318:16;60314:1;60306:6;60302:14;60295:40;60178:164;:::o;60348:223::-;60488:34;60484:1;60476:6;60472:14;60465:58;60557:6;60552:2;60544:6;60540:15;60533:31;60348:223;:::o;60577:175::-;60717:27;60713:1;60705:6;60701:14;60694:51;60577:175;:::o;60758:233::-;60898:34;60894:1;60886:6;60882:14;60875:58;60967:16;60962:2;60954:6;60950:15;60943:41;60758:233;:::o;60997:176::-;61137:28;61133:1;61125:6;61121:14;61114:52;60997:176;:::o;61179:221::-;61319:34;61315:1;61307:6;61303:14;61296:58;61388:4;61383:2;61375:6;61371:15;61364:29;61179:221;:::o;61406:169::-;61546:21;61542:1;61534:6;61530:14;61523:45;61406:169;:::o;61581:231::-;61721:34;61717:1;61709:6;61705:14;61698:58;61790:14;61785:2;61777:6;61773:15;61766:39;61581:231;:::o;61818:243::-;61958:34;61954:1;61946:6;61942:14;61935:58;62027:26;62022:2;62014:6;62010:15;62003:51;61818:243;:::o;62067:229::-;62207:34;62203:1;62195:6;62191:14;62184:58;62276:12;62271:2;62263:6;62259:15;62252:37;62067:229;:::o;62302:228::-;62442:34;62438:1;62430:6;62426:14;62419:58;62511:11;62506:2;62498:6;62494:15;62487:36;62302:228;:::o;62536:230::-;62676:34;62672:1;62664:6;62660:14;62653:58;62745:13;62740:2;62732:6;62728:15;62721:38;62536:230;:::o;62772:182::-;62912:34;62908:1;62900:6;62896:14;62889:58;62772:182;:::o;62960:231::-;63100:34;63096:1;63088:6;63084:14;63077:58;63169:14;63164:2;63156:6;63152:15;63145:39;62960:231;:::o;63197:182::-;63337:34;63333:1;63325:6;63321:14;63314:58;63197:182;:::o;63385:239::-;63525:34;63521:1;63513:6;63509:14;63502:58;63594:22;63589:2;63581:6;63577:15;63570:47;63385:239;:::o;63630:228::-;63770:34;63766:1;63758:6;63754:14;63747:58;63839:11;63834:2;63826:6;63822:15;63815:36;63630:228;:::o;63864:176::-;64004:28;64000:1;63992:6;63988:14;63981:52;63864:176;:::o;64046:234::-;64186:34;64182:1;64174:6;64170:14;64163:58;64255:17;64250:2;64242:6;64238:15;64231:42;64046:234;:::o;64286:174::-;64426:26;64422:1;64414:6;64410:14;64403:50;64286:174;:::o;64466:220::-;64606:34;64602:1;64594:6;64590:14;64583:58;64675:3;64670:2;64662:6;64658:15;64651:28;64466:220;:::o;64692:114::-;;:::o;64812:236::-;64952:34;64948:1;64940:6;64936:14;64929:58;65021:19;65016:2;65008:6;65004:15;64997:44;64812:236;:::o;65054:225::-;65194:34;65190:1;65182:6;65178:14;65171:58;65263:8;65258:2;65250:6;65246:15;65239:33;65054:225;:::o;65285:161::-;65425:13;65421:1;65413:6;65409:14;65402:37;65285:161;:::o;65452:164::-;65592:16;65588:1;65580:6;65576:14;65569:40;65452:164;:::o;65622:122::-;65695:24;65713:5;65695:24;:::i;:::-;65688:5;65685:35;65675:63;;65734:1;65731;65724:12;65675:63;65622:122;:::o;65750:138::-;65831:32;65857:5;65831:32;:::i;:::-;65824:5;65821:43;65811:71;;65878:1;65875;65868:12;65811:71;65750:138;:::o;65894:116::-;65964:21;65979:5;65964:21;:::i;:::-;65957:5;65954:32;65944:60;;66000:1;65997;65990:12;65944:60;65894:116;:::o;66016:120::-;66088:23;66105:5;66088:23;:::i;:::-;66081:5;66078:34;66068:62;;66126:1;66123;66116:12;66068:62;66016:120;:::o;66142:::-;66214:23;66231:5;66214:23;:::i;:::-;66207:5;66204:34;66194:62;;66252:1;66249;66242:12;66194:62;66142:120;:::o;66268:122::-;66341:24;66359:5;66341:24;:::i;:::-;66334:5;66331:35;66321:63;;66380:1;66377;66370:12;66321:63;66268:122;:::o;66396:120::-;66468:23;66485:5;66468:23;:::i;:::-;66461:5;66458:34;66448:62;;66506:1;66503;66496:12;66448:62;66396:120;:::o;66522:118::-;66593:22;66609:5;66593:22;:::i;:::-;66586:5;66583:33;66573:61;;66630:1;66627;66620:12;66573:61;66522:118;:::o
Swarm Source
ipfs://b5a7b20c87597eca23f7d5c16020d6756f0ea14319a3a7304f7267da975b7217
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.