Token Axolittles
Overview ERC-721
Total Supply:
0 AXOLITTLE
Holders:
1 addresses
Contract:
Balance
0 AXOLITTLE
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AxolittlesArb
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-06-09 */ // SPDX-License-Identifier: MIT // 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 contracts/LzBridge/interfaces/IONFT721Core.sol pragma solidity ^0.8.0; /** * @dev Interface of the ONFT Core standard */ interface IONFT721Core is IERC165 { /** * @dev estimate send token `_tokenId` to (`_dstChainId`, `_toAddress`) * _dstChainId - L0 defined chain id to send tokens too * _toAddress - dynamic bytes array which contains the address to whom you are sending tokens to on the dstChain * _tokenIds - token Id array to transfer * _useZro - indicates to use zro to pay L0 fees * _adapterParams - flexible bytes array to indicate messaging adapter services in L0 */ function estimateSendFee(uint16 _dstChainId, bytes calldata _toAddress, uint16[] calldata _tokenIds, bool _useZro, bytes calldata _adapterParams) external view returns (uint nativeFee, uint zroFee); /** * @dev send token `_tokenId` to (`_dstChainId`, `_toAddress`) from `_from` * `_toAddress` can be any size depending on the `dstChainId`. * `_zroPaymentAddress` set to address(0x0) if not paying in ZRO (LayerZero Token) * `_adapterParams` is a flexible bytes array to indicate messaging adapter services */ function sendFrom(address _from, uint16 _dstChainId, bytes calldata _toAddress, uint16[] calldata _tokenIds, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; /** * @dev Emitted when `_tokenId` are moved from the `_sender` to (`_dstChainId`, `_toAddress`) * `_nonce` is the outbound nonce from */ event SendToChain(address indexed _sender, uint16 indexed _dstChainId, bytes indexed _toAddress, uint16[] _tokenIds, uint64 _nonce); /** * @dev Emitted when `_tokenIds` are sent from `_srcChainId` to the `_toAddress` at this chain. `_nonce` is the inbound nonce. */ event ReceiveFromChain(uint16 indexed _srcChainId, bytes indexed _srcAddress, address indexed _toAddress, uint16[] _tokenIds, uint64 _nonce); } // File @openzeppelin/contracts/token/ERC721/[email protected] // 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 contracts/LzBridge/interfaces/IONFT721.sol pragma solidity ^0.8.0; /** * @dev Interface of the ONFT standard */ interface IONFT721 is IONFT721Core, IERC721 { } // File @openzeppelin/contracts/utils/[email protected] // 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/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/LzBridge/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 contracts/LzBridge/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/LzBridge/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 lzApp 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/LzBridge/lib/LzApp.sol pragma solidity ^0.8.0; /* * a generic LzReceiver implementation */ abstract contract LzApp is Ownable, ILayerZeroReceiver, ILayerZeroUserApplicationConfig { ILayerZeroEndpoint public immutable lzEndpoint; mapping(uint16 => bytes) public trustedRemoteLookup; event SetTrustedRemote(uint16 _srcChainId, bytes _srcAddress); constructor(address _endpoint) { lzEndpoint = ILayerZeroEndpoint(_endpoint); } function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public virtual override { // lzReceive must be called by the endpoint for security require(_msgSender() == address(lzEndpoint), "LzApp: invalid endpoint caller"); bytes memory trustedRemote = trustedRemoteLookup[_srcChainId]; // if will still block the message pathway from (srcChainId, srcAddress). should not receive message from untrusted remote. require(_srcAddress.length == trustedRemote.length && keccak256(_srcAddress) == keccak256(trustedRemote), "LzApp: invalid source sending contract"); _blockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } // abstract function - the default behaviour of LayerZero is blocking. See: NonblockingLzApp if you dont need to enforce ordered messaging function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual; function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) internal virtual { bytes memory trustedRemote = trustedRemoteLookup[_dstChainId]; require(trustedRemote.length != 0, "LzApp: destination chain is not a trusted source"); lzEndpoint.send{value: msg.value}(_dstChainId, trustedRemote, _payload, _refundAddress, _zroPaymentAddress, _adapterParams); } //---------------------------UserApplication config---------------------------------------- function getConfig(uint16 _version, uint16 _chainId, address, uint _configType) external view returns (bytes memory) { return lzEndpoint.getConfig(_version, _chainId, address(this), _configType); } // generic config for LayerZero user Application function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external override onlyOwner { lzEndpoint.setConfig(_version, _chainId, _configType, _config); } function setSendVersion(uint16 _version) external override onlyOwner { lzEndpoint.setSendVersion(_version); } function setReceiveVersion(uint16 _version) external override onlyOwner { lzEndpoint.setReceiveVersion(_version); } function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner { lzEndpoint.forceResumeReceive(_srcChainId, _srcAddress); } // allow owner to set it multiple times. function setTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external onlyOwner { trustedRemoteLookup[_srcChainId] = _srcAddress; emit SetTrustedRemote(_srcChainId, _srcAddress); } //--------------------------- VIEW FUNCTION ---------------------------------------- function isTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool) { bytes memory trustedSource = trustedRemoteLookup[_srcChainId]; return keccak256(trustedSource) == keccak256(_srcAddress); } } // File contracts/LzBridge/lib/NonblockingLzApp.sol pragma solidity ^0.8.0; /* * the default LayerZero messaging behaviour is blocking, i.e. any failed message will block the channel * this abstract class try-catch all fail messages and store locally for future retry. hence, non-blocking * NOTE: if the srcAddress is not configured properly, it will still block the message pathway from (srcChainId, srcAddress) */ abstract contract NonblockingLzApp is LzApp { constructor(address _endpoint) LzApp(_endpoint) {} mapping(uint16 => mapping(bytes => mapping(uint64 => bytes32))) public failedMessages; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); // overriding the virtual function in LzReceiver function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { // try-catch all errors/exceptions try this.nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(_payload); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public virtual { // only internal transaction require(_msgSender() == address(this), "NonblockingLzApp: caller must be LzApp"); _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } //@notice override this function function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual; function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public payable virtual { // assert there is message to retry bytes32 payloadHash = failedMessages[_srcChainId][_srcAddress][_nonce]; require(payloadHash != bytes32(0), "NonblockingLzApp: no stored message"); require(keccak256(_payload) == payloadHash, "NonblockingLzApp: invalid payload"); // clear the stored message failedMessages[_srcChainId][_srcAddress][_nonce] = bytes32(0); // execute the message. revert if it fails again _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // 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 contracts/LzBridge/lib/ONFT721Core.sol // copied from: https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft/ONFT721Core.sol pragma solidity ^0.8.0; abstract contract ONFT721Core is NonblockingLzApp, ERC165, IONFT721Core { constructor(address _lzEndpoint) NonblockingLzApp(_lzEndpoint) {} function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IONFT721Core).interfaceId || super.supportsInterface(interfaceId); } function estimateSendFee(uint16 _dstChainId, bytes memory _toAddress, uint16[] memory _tokenIds, bool _useZro, bytes memory _adapterParams) public view virtual override returns (uint nativeFee, uint zroFee) { // mock the payload for send() bytes memory payload = abi.encode(_toAddress, _tokenIds); return lzEndpoint.estimateFees(_dstChainId, address(this), payload, _useZro, _adapterParams); } function sendFrom(address _from, uint16 _dstChainId, bytes memory _toAddress, uint16[] memory _tokenIds, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) public payable virtual override { _send(_from, _dstChainId, _toAddress, _tokenIds, _refundAddress, _zroPaymentAddress, _adapterParams); } function _send(address _from, uint16 _dstChainId, bytes memory _toAddress, uint16[] memory _tokenIds, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) internal virtual { _debitFrom(_from, _dstChainId, _toAddress, _tokenIds); bytes memory payload = abi.encode(_toAddress, _tokenIds); _lzSend(_dstChainId, payload, _refundAddress, _zroPaymentAddress, _adapterParams); uint64 nonce = lzEndpoint.getOutboundNonce(_dstChainId, address(this)); emit SendToChain(_from, _dstChainId, _toAddress, _tokenIds, nonce); } function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { // decode and load the toAddress (bytes memory toAddressBytes, uint16[] memory tokenIds) = abi.decode(_payload, (bytes, uint16[])); address toAddress; assembly { toAddress := mload(add(toAddressBytes, 20)) } _creditTo(_srcChainId, toAddress, tokenIds); emit ReceiveFromChain(_srcChainId, _srcAddress, toAddress, tokenIds, _nonce); } function _debitFrom(address _from, uint16 _dstChainId, bytes memory _toAddress, uint16[] memory _tokenIds) internal virtual; function _creditTo(uint16 _srcChainId, address _toAddress, uint16[] memory _tokenIds) internal virtual; } // File @openzeppelin/contracts/token/ERC721/[email protected] // 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/token/ERC721/extensions/[email protected] // 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/utils/[email protected] // 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/utils/[email protected] // 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/token/ERC721/[email protected] // 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"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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/LzBridge/AxolittlesArb.sol pragma solidity ^0.8.0; contract AxolittlesArb is Ownable, ONFT721Core, ERC721, IONFT721 { uint256 public maxItems = 10000; string public _baseTokenURI; constructor(address _lzEndpoint) ERC721("Axolittles", "AXOLITTLE") ONFT721Core(_lzEndpoint) {} function supportsInterface(bytes4 interfaceId) public view virtual override(ONFT721Core, ERC721, IERC165) returns (bool) { return interfaceId == type(IONFT721).interfaceId || super.supportsInterface(interfaceId); } function _debitFrom(address _from, uint16, bytes memory, uint16[] memory _tokenIds) internal virtual override { for (uint16 i = 0; i < _tokenIds.length;) { require(_isApprovedOrOwner(_msgSender(), _tokenIds[i]), "Axolittles: send caller is not owner nor approved"); require(ERC721.ownerOf(_tokenIds[i]) == _from, "Axolittles: send from incorrect owner"); _burn(_tokenIds[i]); unchecked { ++i; } } } function _creditTo(uint16, address _toAddress, uint16[] memory _tokenIds) internal virtual override { for (uint16 i = 0; i < _tokenIds.length;) { require(!_exists(_tokenIds[i]), "Axolittles: already exist"); _safeMint(_toAddress, _tokenIds[i]); unchecked { ++i; } } } // set base URI for token metadata. Allows file host change to ipfs function setBaseTokenURI(string memory __baseTokenURI) external onlyOwner { _baseTokenURI = __baseTokenURI; } // Returns a URI for a given token ID's metadata function tokenURI(uint256 _tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId))); } function adminRecover(address _to, uint16 _tokenId, bool isMint) external onlyOwner { if (isMint) { _safeMint(_to, _tokenId); } else { require(_exists(_tokenId), "Axolittles: doesn't exist"); _burn(_tokenId); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_lzEndpoint","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":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":true,"internalType":"address","name":"_toAddress","type":"address"},{"indexed":false,"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"ReceiveFromChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_toAddress","type":"bytes"},{"indexed":false,"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"SendToChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"SetTrustedRemote","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":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint16","name":"_tokenId","type":"uint16"},{"internalType":"bool","name":"isMint","type":"bool"}],"name":"adminRecover","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":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"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":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"nonblockingLzReceive","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":"_from","type":"address"},{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendFrom","outputs":[],"stateMutability":"payable","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":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","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":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040526127106009553480156200001757600080fd5b50604051620060253803806200602583398181016040528101906200003d9190620002d4565b6040518060400160405280600a81526020017f41786f6c6974746c6573000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f41584f4c4954544c450000000000000000000000000000000000000000000000815250828080620000cc620000c06200014160201b60201c565b6200014960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050505081600390805190602001906200011e9291906200020d565b508060049080519060200190620001379291906200020d565b50505050620003be565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021b906200033a565b90600052602060002090601f0160209004810192826200023f57600085556200028b565b82601f106200025a57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028a5782518255916020019190600101906200026d565b5b5090506200029a91906200029e565b5090565b5b80821115620002b95760008160009055506001016200029f565b5090565b600081519050620002ce81620003a4565b92915050565b600060208284031215620002ed57620002ec6200039f565b5b6000620002fd84828501620002bd565b91505092915050565b600062000313826200031a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200035357607f821691505b602082108114156200036a576200036962000370565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003af8162000306565b8114620003bb57600080fd5b50565b60805160601c615c096200041c6000396000818161086201528181610b7701528181610dcb01528181610f0601528181611200015281816116de0152818161181401528181611d18015281816126da0152612fd10152615c096000f3fe6080604052600436106102035760003560e01c806370a0823111610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461076b578063eb8d72b7146107a8578063f2fde38b146107d1578063f5ecbdbc146107fa578063fc0cd5eb1461083757610203565b8063c87b56dd146106be578063cbed8b9c146106fb578063cfc86f7b14610724578063d1deba1f1461074f57610203565b80638da5cb5b116100e75780638da5cb5b146105eb57806395d89b4114610616578063a22cb46514610641578063b353aaa71461066a578063b88d4fde1461069557610203565b806370a082311461053e578063715018a61461057b5780637533d78814610592578063895bf166146105cf57610203565b806323b872dd1161019b57806342842e0e1161016a57806342842e0e1461044957806342d65a8d146104725780635b8c41e61461049b5780636352211e146104d857806366ad5c8a1461051557610203565b806323b872dd1461038f57806330176e13146103b85780633c010a3e146103e15780633d8b38f61461040c57610203565b8063081812fc116101d7578063081812fc146102c2578063095ea7b3146102ff5780630a54dda11461032857806310ddb1371461036657610203565b80621d35671461020857806301ffc9a71461023157806306fdde031461026e57806307e0db1714610299575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190613fd7565b610860565b005b34801561023d57600080fd5b5061025860048036038101906102539190613ca8565b610a0d565b60405161026591906148f7565b60405180910390f35b34801561027a57600080fd5b50610283610a67565b60405161029091906149a1565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb9190613e0c565b610af9565b005b3480156102ce57600080fd5b506102e960048036038101906102e49190614165565b610c03565b6040516102f69190614860565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190613c68565b610c88565b005b34801561033457600080fd5b5061034f600480360381019061034a9190613e99565b610da0565b60405161035d929190614f31565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613e0c565b610e88565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613a09565b610f92565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613dc3565b610ff2565b005b3480156103ed57600080fd5b506103f6611088565b6040516104039190614f16565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613e39565b61108e565b60405161044091906148f7565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613a09565b611162565b005b34801561047e57600080fd5b5061049960048036038101906104949190613e39565b611182565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613f68565b611292565b6040516104cf9190614912565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614165565b6112da565b60405161050c9190614860565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613fd7565b61138c565b005b34801561054a57600080fd5b506105656004803603810190610560919061399c565b611413565b6040516105729190614f16565b60405180910390f35b34801561058757600080fd5b506105906114cb565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613e0c565b611553565b6040516105c6919061492d565b60405180910390f35b6105e960048036038101906105e49190613b72565b6115f3565b005b3480156105f757600080fd5b5061060061160b565b60405161060d9190614860565b60405180910390f35b34801561062257600080fd5b5061062b611634565b60405161063891906149a1565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613adf565b6116c6565b005b34801561067657600080fd5b5061067f6116dc565b60405161068c9190614986565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190613a5c565b611700565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614165565b611762565b6040516106f291906149a1565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906140dd565b611796565b005b34801561073057600080fd5b506107396118ac565b60405161074691906149a1565b60405180910390f35b61076960048036038101906107649190613fd7565b61193a565b005b34801561077757600080fd5b50610792600480360381019061078d91906139c9565b611aa1565b60405161079f91906148f7565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613e39565b611b35565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061399c565b611c1c565b005b34801561080657600080fd5b50610821600480360381019061081c9190614076565b611d14565b60405161082e919061492d565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613b1f565b611dd4565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661089f611ec8565b73ffffffffffffffffffffffffffffffffffffffff16146108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614c63565b60405180910390fd5b6000600160008661ffff1661ffff168152602001908152602001600020805461091d9061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546109499061528e565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b50505050509050805184511480156109bb575080805190602001208480519060200120145b6109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614cc3565b60405180910390fd5b610a0685858585611ed0565b5050505050565b6000807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a605750610a5f82611fef565b5b9050919050565b606060038054610a769061528e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa29061528e565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b610b01611ec8565b73ffffffffffffffffffffffffffffffffffffffff16610b1f61160b565b73ffffffffffffffffffffffffffffffffffffffff1614610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90614be3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b8152600401610bce9190614ce3565b600060405180830381600087803b158015610be857600080fd5b505af1158015610bfc573d6000803e3d6000fd5b5050505050565b6000610c0e826120d1565b610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490614bc3565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c93826112da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614c43565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d23611ec8565b73ffffffffffffffffffffffffffffffffffffffff161480610d525750610d5181610d4c611ec8565b611aa1565b5b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890614b23565b60405180910390fd5b610d9b838361213d565b505050565b60008060008686604051602001610db892919061494f565b60405160208183030381529060405290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340a7bb1089308489896040518663ffffffff1660e01b8152600401610e2a959493929190614d27565b604080518083038186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190614192565b92509250509550959350505050565b610e90611ec8565b73ffffffffffffffffffffffffffffffffffffffff16610eae61160b565b73ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90614be3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b8152600401610f5d9190614ce3565b600060405180830381600087803b158015610f7757600080fd5b505af1158015610f8b573d6000803e3d6000fd5b5050505050565b610fa3610f9d611ec8565b826121f6565b610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614c83565b60405180910390fd5b610fed8383836122d4565b505050565b610ffa611ec8565b73ffffffffffffffffffffffffffffffffffffffff1661101861160b565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590614be3565b60405180910390fd5b80600a90805190602001906110849291906134aa565b5050565b60095481565b600080600160008661ffff1661ffff16815260200190815260200160002080546110b79061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e39061528e565b80156111305780601f1061110557610100808354040283529160200191611130565b820191906000526020600020905b81548152906001019060200180831161111357829003601f168201915b50505050509050838360405161114792919061480c565b60405180910390208180519060200120149150509392505050565b61117d83838360405180602001604052806000815250611700565b505050565b61118a611ec8565b73ffffffffffffffffffffffffffffffffffffffff166111a861160b565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614be3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b815260040161125b93929190614d88565b600060405180830381600087803b15801561127557600080fd5b505af1158015611289573d6000803e3d6000fd5b50505050505050565b60026020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90614b63565b60405180910390fd5b80915050919050565b3073ffffffffffffffffffffffffffffffffffffffff166113ab611ec8565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906149c3565b60405180910390fd5b61140d84848484612530565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90614b43565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d3611ec8565b73ffffffffffffffffffffffffffffffffffffffff166114f161160b565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614be3565b60405180910390fd5b61155160006125d3565b565b600160205280600052604060002060009150905080546115729061528e565b80601f016020809104026020016040519081016040528092919081815260200182805461159e9061528e565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b505050505081565b61160287878787878787612697565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546116439061528e565b80601f016020809104026020016040519081016040528092919081815260200182805461166f9061528e565b80156116bc5780601f10611691576101008083540402835291602001916116bc565b820191906000526020600020905b81548152906001019060200180831161169f57829003601f168201915b5050505050905090565b6116d86116d1611ec8565b83836127fb565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61171161170b611ec8565b836121f6565b611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614c83565b60405180910390fd5b61175c84848484612968565b50505050565b6060600a61176f836129c4565b60405160200161178092919061483c565b6040516020818303038152906040529050919050565b61179e611ec8565b73ffffffffffffffffffffffffffffffffffffffff166117bc61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990614be3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611873959493929190614ec8565b600060405180830381600087803b15801561188d57600080fd5b505af11580156118a1573d6000803e3d6000fd5b505050505050505050565b600a80546118b99061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e59061528e565b80156119325780601f1061190757610100808354040283529160200191611932565b820191906000526020600020905b81548152906001019060200180831161191557829003601f168201915b505050505081565b6000600260008661ffff1661ffff168152602001908152602001600020846040516119659190614825565b908152602001604051809103902060008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000801b8114156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614a63565b60405180910390fd5b80828051906020012014611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190614ca3565b60405180910390fd5b6000801b600260008761ffff1661ffff16815260200190815260200160002085604051611a579190614825565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002081905550611a9a85858585612530565b5050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3d611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611b5b61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614be3565b60405180910390fd5b8181600160008661ffff1661ffff1681526020019081526020016000209190611bdb929190613530565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611c0f93929190614d88565b60405180910390a1505050565b611c24611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611c4261160b565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90614be3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90614a03565b60405180910390fd5b611d11816125d3565b50565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc868630866040518563ffffffff1660e01b8152600401611d759493929190614e83565b60006040518083038186803b158015611d8d57600080fd5b505afa158015611da1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611dca9190613d02565b9050949350505050565b611ddc611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611dfa61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614be3565b60405180910390fd5b8015611e6957611e64838361ffff16612b25565b611ec3565b611e768261ffff166120d1565b611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90614c23565b60405180910390fd5b611ec28261ffff16612b43565b5b505050565b600033905090565b3073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a858585856040518563ffffffff1660e01b8152600401611f0f9493929190614e30565b600060405180830381600087803b158015611f2957600080fd5b505af1925050508015611f3a575060015b611fe8578080519060200120600260008661ffff1661ffff16815260200190815260200160002084604051611f6f9190614825565b908152602001604051809103902060008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d84848484604051611fdb9493929190614e30565b60405180910390a1611fe9565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120ca57506120c982612c54565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b0836112da565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612201826120d1565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790614ae3565b60405180910390fd5b600061224b836112da565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122ba57508373ffffffffffffffffffffffffffffffffffffffff166122a284610c03565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cb57506122ca8185611aa1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122f4826112da565b73ffffffffffffffffffffffffffffffffffffffff161461234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614c03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190614aa3565b60405180910390fd5b6123c5838383612cce565b6123d060008261213d565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124209190615130565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247791906150a9565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080828060200190518101906125479190613d4b565b9150915060006014830151905061255f878284612cd3565b8073ffffffffffffffffffffffffffffffffffffffff16866040516125849190614825565b60405180910390208861ffff167fbd66934b09dec04b3aea2d88b8893e2844133810be0e2298aa6f6a28aa65795f85896040516125c29291906148c7565b60405180910390a450505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a387878787612d8b565b600085856040516020016126b892919061494f565b60405160208183030381529060405290506126d68782868686612ee2565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a14574889306040518363ffffffff1660e01b8152600401612733929190614cfe565b60206040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278391906141d2565b9050866040516127939190614825565b60405180910390208861ffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7ea7294afa99e68f724ddc625e6ecf2086863430067ce6ff5cd4404445d322289856040516127e89291906148c7565b60405180910390a4505050505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614ac3565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295b91906148f7565b60405180910390a3505050565b6129738484846122d4565b61297f8484848461306d565b6129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b5906149e3565b60405180910390fd5b50505050565b60606000821415612a0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b20565b600082905060005b60008214612a3e578080612a27906152f1565b915050600a82612a3791906150ff565b9150612a14565b60008167ffffffffffffffff811115612a5a57612a59615427565b5b6040519080825280601f01601f191660200182016040528015612a8c5781602001600182028036833780820191505090505b5090505b60008514612b1957600182612aa59190615130565b9150600a85612ab4919061533a565b6030612ac091906150a9565b60f81b818381518110612ad657612ad56153f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b1291906150ff565b9450612a90565b8093505050505b919050565b612b3f828260405180602001604052806000815250613204565b5050565b6000612b4e826112da565b9050612b5c81600084612cce565b612b6760008361213d565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb79190615130565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f830f2cc7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cc75750612cc68261325f565b5b9050919050565b505050565b60005b81518161ffff161015612d8557612d0e828261ffff1681518110612cfd57612cfc6153f8565b5b602002602001015161ffff166120d1565b15612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614b83565b60405180910390fd5b612d7a83838361ffff1681518110612d6957612d686153f8565b5b602002602001015161ffff16612b25565b806001019050612cd6565b50505050565b60005b81518161ffff161015612edb57612dce612da6611ec8565b838361ffff1681518110612dbd57612dbc6153f8565b5b602002602001015161ffff166121f6565b612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614a43565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16612e4f838361ffff1681518110612e3e57612e3d6153f8565b5b602002602001015161ffff166112da565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614a83565b60405180910390fd5b612ed0828261ffff1681518110612ebf57612ebe6153f8565b5b602002602001015161ffff16612b43565b806001019050612d8e565b5050505050565b6000600160008761ffff1661ffff1681526020019081526020016000208054612f0a9061528e565b80601f0160208091040260200160405190810160405280929190818152602001828054612f369061528e565b8015612f835780601f10612f5857610100808354040283529160200191612f83565b820191906000526020600020905b815481529060010190602001808311612f6657829003601f168201915b50505050509050600081511415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc690614b03565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c5803100348884898989896040518863ffffffff1660e01b815260040161303396959493929190614dba565b6000604051808303818588803b15801561304c57600080fd5b505af1158015613060573d6000803e3d6000fd5b5050505050505050505050565b600061308e8473ffffffffffffffffffffffffffffffffffffffff166132c9565b156131f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130b7611ec8565b8786866040518563ffffffff1660e01b81526004016130d9949392919061487b565b602060405180830381600087803b1580156130f357600080fd5b505af192505050801561312457506040513d601f19601f820116820180604052508101906131219190613cd5565b60015b6131a7573d8060008114613154576040519150601f19603f3d011682016040523d82523d6000602084013e613159565b606091505b5060008151141561319f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613196906149e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131fc565b600190505b949350505050565b61320e83836132dc565b61321b600084848461306d565b61325a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613251906149e3565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334390614ba3565b60405180910390fd5b613355816120d1565b15613395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338c90614a23565b60405180910390fd5b6133a160008383612cce565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f191906150a9565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134b69061528e565b90600052602060002090601f0160209004810192826134d8576000855561351f565b82601f106134f157805160ff191683800117855561351f565b8280016001018555821561351f579182015b8281111561351e578251825591602001919060010190613503565b5b50905061352c91906135b6565b5090565b82805461353c9061528e565b90600052602060002090601f01602090048101928261355e57600085556135a5565b82601f1061357757803560ff19168380011785556135a5565b828001600101855582156135a5579182015b828111156135a4578235825591602001919060010190613589565b5b5090506135b291906135b6565b5090565b5b808211156135cf5760008160009055506001016135b7565b5090565b60006135e66135e184614f7f565b614f5a565b9050808382526020820190508285602086028201111561360957613608615460565b5b60005b85811015613639578161361f888261391e565b84526020840193506020830192505060018101905061360c565b5050509392505050565b600061365661365184614f7f565b614f5a565b9050808382526020820190508285602086028201111561367957613678615460565b5b60005b858110156136a9578161368f8882613933565b84526020840193506020830192505060018101905061367c565b5050509392505050565b60006136c66136c184614fab565b614f5a565b9050828152602081018484840111156136e2576136e1615465565b5b6136ed84828561524c565b509392505050565b600061370861370384614fab565b614f5a565b90508281526020810184848401111561372457613723615465565b5b61372f84828561525b565b509392505050565b600061374a61374584614fdc565b614f5a565b90508281526020810184848401111561376657613765615465565b5b61377184828561524c565b509392505050565b60008135905061378881615b32565b92915050565b60008135905061379d81615b49565b92915050565b600082601f8301126137b8576137b761545b565b5b81356137c88482602086016135d3565b91505092915050565b600082601f8301126137e6576137e561545b565b5b81516137f6848260208601613643565b91505092915050565b60008135905061380e81615b60565b92915050565b60008135905061382381615b77565b92915050565b60008151905061383881615b77565b92915050565b60008083601f8401126138545761385361545b565b5b8235905067ffffffffffffffff81111561387157613870615456565b5b60208301915083600182028301111561388d5761388c615460565b5b9250929050565b600082601f8301126138a9576138a861545b565b5b81356138b98482602086016136b3565b91505092915050565b600082601f8301126138d7576138d661545b565b5b81516138e78482602086016136f5565b91505092915050565b600082601f8301126139055761390461545b565b5b8135613915848260208601613737565b91505092915050565b60008135905061392d81615b8e565b92915050565b60008151905061394281615b8e565b92915050565b60008135905061395781615ba5565b92915050565b60008151905061396c81615ba5565b92915050565b60008135905061398181615bbc565b92915050565b60008151905061399681615bbc565b92915050565b6000602082840312156139b2576139b161546f565b5b60006139c084828501613779565b91505092915050565b600080604083850312156139e0576139df61546f565b5b60006139ee85828601613779565b92505060206139ff85828601613779565b9150509250929050565b600080600060608486031215613a2257613a2161546f565b5b6000613a3086828701613779565b9350506020613a4186828701613779565b9250506040613a5286828701613948565b9150509250925092565b60008060008060808587031215613a7657613a7561546f565b5b6000613a8487828801613779565b9450506020613a9587828801613779565b9350506040613aa687828801613948565b925050606085013567ffffffffffffffff811115613ac757613ac661546a565b5b613ad387828801613894565b91505092959194509250565b60008060408385031215613af657613af561546f565b5b6000613b0485828601613779565b9250506020613b15858286016137ff565b9150509250929050565b600080600060608486031215613b3857613b3761546f565b5b6000613b4686828701613779565b9350506020613b578682870161391e565b9250506040613b68868287016137ff565b9150509250925092565b600080600080600080600060e0888a031215613b9157613b9061546f565b5b6000613b9f8a828b01613779565b9750506020613bb08a828b0161391e565b965050604088013567ffffffffffffffff811115613bd157613bd061546a565b5b613bdd8a828b01613894565b955050606088013567ffffffffffffffff811115613bfe57613bfd61546a565b5b613c0a8a828b016137a3565b9450506080613c1b8a828b0161378e565b93505060a0613c2c8a828b01613779565b92505060c088013567ffffffffffffffff811115613c4d57613c4c61546a565b5b613c598a828b01613894565b91505092959891949750929550565b60008060408385031215613c7f57613c7e61546f565b5b6000613c8d85828601613779565b9250506020613c9e85828601613948565b9150509250929050565b600060208284031215613cbe57613cbd61546f565b5b6000613ccc84828501613814565b91505092915050565b600060208284031215613ceb57613cea61546f565b5b6000613cf984828501613829565b91505092915050565b600060208284031215613d1857613d1761546f565b5b600082015167ffffffffffffffff811115613d3657613d3561546a565b5b613d42848285016138c2565b91505092915050565b60008060408385031215613d6257613d6161546f565b5b600083015167ffffffffffffffff811115613d8057613d7f61546a565b5b613d8c858286016138c2565b925050602083015167ffffffffffffffff811115613dad57613dac61546a565b5b613db9858286016137d1565b9150509250929050565b600060208284031215613dd957613dd861546f565b5b600082013567ffffffffffffffff811115613df757613df661546a565b5b613e03848285016138f0565b91505092915050565b600060208284031215613e2257613e2161546f565b5b6000613e308482850161391e565b91505092915050565b600080600060408486031215613e5257613e5161546f565b5b6000613e608682870161391e565b935050602084013567ffffffffffffffff811115613e8157613e8061546a565b5b613e8d8682870161383e565b92509250509250925092565b600080600080600060a08688031215613eb557613eb461546f565b5b6000613ec38882890161391e565b955050602086013567ffffffffffffffff811115613ee457613ee361546a565b5b613ef088828901613894565b945050604086013567ffffffffffffffff811115613f1157613f1061546a565b5b613f1d888289016137a3565b9350506060613f2e888289016137ff565b925050608086013567ffffffffffffffff811115613f4f57613f4e61546a565b5b613f5b88828901613894565b9150509295509295909350565b600080600060608486031215613f8157613f8061546f565b5b6000613f8f8682870161391e565b935050602084013567ffffffffffffffff811115613fb057613faf61546a565b5b613fbc86828701613894565b9250506040613fcd86828701613972565b9150509250925092565b60008060008060808587031215613ff157613ff061546f565b5b6000613fff8782880161391e565b945050602085013567ffffffffffffffff8111156140205761401f61546a565b5b61402c87828801613894565b935050604061403d87828801613972565b925050606085013567ffffffffffffffff81111561405e5761405d61546a565b5b61406a87828801613894565b91505092959194509250565b600080600080608085870312156140905761408f61546f565b5b600061409e8782880161391e565b94505060206140af8782880161391e565b93505060406140c087828801613779565b92505060606140d187828801613948565b91505092959194509250565b6000806000806000608086880312156140f9576140f861546f565b5b60006141078882890161391e565b95505060206141188882890161391e565b945050604061412988828901613948565b935050606086013567ffffffffffffffff81111561414a5761414961546a565b5b6141568882890161383e565b92509250509295509295909350565b60006020828403121561417b5761417a61546f565b5b600061418984828501613948565b91505092915050565b600080604083850312156141a9576141a861546f565b5b60006141b78582860161395d565b92505060206141c88582860161395d565b9150509250929050565b6000602082840312156141e8576141e761546f565b5b60006141f684828501613987565b91505092915050565b600061420b83836147d0565b60208301905092915050565b61422081615176565b82525050565b61422f81615164565b82525050565b600061424082615032565b61424a8185615060565b93506142558361500d565b8060005b8381101561428657815161426d88826141ff565b975061427883615053565b925050600181019050614259565b5085935050505092915050565b61429c81615188565b82525050565b6142ab81615194565b82525050565b60006142bd8385615071565b93506142ca83858461524c565b6142d383615474565b840190509392505050565b60006142ea8385615082565b93506142f783858461524c565b82840190509392505050565b600061430e8261503d565b6143188185615071565b935061432881856020860161525b565b61433181615474565b840191505092915050565b60006143478261503d565b6143518185615082565b935061436181856020860161525b565b80840191505092915050565b61437681615216565b82525050565b600061438782615048565b614391818561508d565b93506143a181856020860161525b565b6143aa81615474565b840191505092915050565b60006143c082615048565b6143ca818561509e565b93506143da81856020860161525b565b80840191505092915050565b600081546143f38161528e565b6143fd818661509e565b9450600182166000811461441857600181146144295761445c565b60ff1983168652818601935061445c565b6144328561501d565b60005b8381101561445457815481890152600182019150602081019050614435565b838801955050505b50505092915050565b600061447260268361508d565b915061447d82615485565b604082019050919050565b600061449560328361508d565b91506144a0826154d4565b604082019050919050565b60006144b860268361508d565b91506144c382615523565b604082019050919050565b60006144db601c8361508d565b91506144e682615572565b602082019050919050565b60006144fe60318361508d565b91506145098261559b565b604082019050919050565b600061452160238361508d565b915061452c826155ea565b604082019050919050565b600061454460258361508d565b915061454f82615639565b604082019050919050565b600061456760248361508d565b915061457282615688565b604082019050919050565b600061458a60198361508d565b9150614595826156d7565b602082019050919050565b60006145ad602c8361508d565b91506145b882615700565b604082019050919050565b60006145d060308361508d565b91506145db8261574f565b604082019050919050565b60006145f360388361508d565b91506145fe8261579e565b604082019050919050565b6000614616602a8361508d565b9150614621826157ed565b604082019050919050565b600061463960298361508d565b91506146448261583c565b604082019050919050565b600061465c60198361508d565b91506146678261588b565b602082019050919050565b600061467f60208361508d565b915061468a826158b4565b602082019050919050565b60006146a2602c8361508d565b91506146ad826158dd565b604082019050919050565b60006146c560208361508d565b91506146d08261592c565b602082019050919050565b60006146e860298361508d565b91506146f382615955565b604082019050919050565b600061470b60198361508d565b9150614716826159a4565b602082019050919050565b600061472e60218361508d565b9150614739826159cd565b604082019050919050565b6000614751601e8361508d565b915061475c82615a1c565b602082019050919050565b600061477460318361508d565b915061477f82615a45565b604082019050919050565b600061479760218361508d565b91506147a282615a94565b604082019050919050565b60006147ba60268361508d565b91506147c582615ae3565b604082019050919050565b6147d9816151ca565b82525050565b6147e8816151ca565b82525050565b6147f7816151f8565b82525050565b61480681615202565b82525050565b60006148198284866142de565b91508190509392505050565b6000614831828461433c565b915081905092915050565b600061484882856143e6565b915061485482846143b5565b91508190509392505050565b60006020820190506148756000830184614226565b92915050565b60006080820190506148906000830187614226565b61489d6020830186614226565b6148aa60408301856147ee565b81810360608301526148bc8184614303565b905095945050505050565b600060408201905081810360008301526148e18185614235565b90506148f060208301846147fd565b9392505050565b600060208201905061490c6000830184614293565b92915050565b600060208201905061492760008301846142a2565b92915050565b600060208201905081810360008301526149478184614303565b905092915050565b600060408201905081810360008301526149698185614303565b9050818103602083015261497d8184614235565b90509392505050565b600060208201905061499b600083018461436d565b92915050565b600060208201905081810360008301526149bb818461437c565b905092915050565b600060208201905081810360008301526149dc81614465565b9050919050565b600060208201905081810360008301526149fc81614488565b9050919050565b60006020820190508181036000830152614a1c816144ab565b9050919050565b60006020820190508181036000830152614a3c816144ce565b9050919050565b60006020820190508181036000830152614a5c816144f1565b9050919050565b60006020820190508181036000830152614a7c81614514565b9050919050565b60006020820190508181036000830152614a9c81614537565b9050919050565b60006020820190508181036000830152614abc8161455a565b9050919050565b60006020820190508181036000830152614adc8161457d565b9050919050565b60006020820190508181036000830152614afc816145a0565b9050919050565b60006020820190508181036000830152614b1c816145c3565b9050919050565b60006020820190508181036000830152614b3c816145e6565b9050919050565b60006020820190508181036000830152614b5c81614609565b9050919050565b60006020820190508181036000830152614b7c8161462c565b9050919050565b60006020820190508181036000830152614b9c8161464f565b9050919050565b60006020820190508181036000830152614bbc81614672565b9050919050565b60006020820190508181036000830152614bdc81614695565b9050919050565b60006020820190508181036000830152614bfc816146b8565b9050919050565b60006020820190508181036000830152614c1c816146db565b9050919050565b60006020820190508181036000830152614c3c816146fe565b9050919050565b60006020820190508181036000830152614c5c81614721565b9050919050565b60006020820190508181036000830152614c7c81614744565b9050919050565b60006020820190508181036000830152614c9c81614767565b9050919050565b60006020820190508181036000830152614cbc8161478a565b9050919050565b60006020820190508181036000830152614cdc816147ad565b9050919050565b6000602082019050614cf860008301846147df565b92915050565b6000604082019050614d1360008301856147df565b614d206020830184614226565b9392505050565b600060a082019050614d3c60008301886147df565b614d496020830187614226565b8181036040830152614d5b8186614303565b9050614d6a6060830185614293565b8181036080830152614d7c8184614303565b90509695505050505050565b6000604082019050614d9d60008301866147df565b8181036020830152614db08184866142b1565b9050949350505050565b600060c082019050614dcf60008301896147df565b8181036020830152614de18188614303565b90508181036040830152614df58187614303565b9050614e046060830186614217565b614e116080830185614226565b81810360a0830152614e238184614303565b9050979650505050505050565b6000608082019050614e4560008301876147df565b8181036020830152614e578186614303565b9050614e6660408301856147fd565b8181036060830152614e788184614303565b905095945050505050565b6000608082019050614e9860008301876147df565b614ea560208301866147df565b614eb26040830185614226565b614ebf60608301846147ee565b95945050505050565b6000608082019050614edd60008301886147df565b614eea60208301876147df565b614ef760408301866147ee565b8181036060830152614f0a8184866142b1565b90509695505050505050565b6000602082019050614f2b60008301846147ee565b92915050565b6000604082019050614f4660008301856147ee565b614f5360208301846147ee565b9392505050565b6000614f64614f75565b9050614f7082826152c0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f9a57614f99615427565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614fc657614fc5615427565b5b614fcf82615474565b9050602081019050919050565b600067ffffffffffffffff821115614ff757614ff6615427565b5b61500082615474565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006150b4826151f8565b91506150bf836151f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150f4576150f361536b565b5b828201905092915050565b600061510a826151f8565b9150615115836151f8565b9250826151255761512461539a565b5b828204905092915050565b600061513b826151f8565b9150615146836151f8565b9250828210156151595761515861536b565b5b828203905092915050565b600061516f826151d8565b9050919050565b6000615181826151d8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061522182615228565b9050919050565b60006152338261523a565b9050919050565b6000615245826151d8565b9050919050565b82818337600083830152505050565b60005b8381101561527957808201518184015260208101905061525e565b83811115615288576000848401525b50505050565b600060028204905060018216806152a657607f821691505b602082108114156152ba576152b96153c9565b5b50919050565b6152c982615474565b810181811067ffffffffffffffff821117156152e8576152e7615427565b5b80604052505050565b60006152fc826151f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561532f5761532e61536b565b5b600182019050919050565b6000615345826151f8565b9150615350836151f8565b9250826153605761535f61539a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560008201527f204c7a4170700000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f41786f6c6974746c65733a2073656e642063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a2073656e642066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060008201527f61207472757374656420736f7572636500000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a20616c726561647920657869737400000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a20646f65736e277420657869737400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b615b3b81615164565b8114615b4657600080fd5b50565b615b5281615176565b8114615b5d57600080fd5b50565b615b6981615188565b8114615b7457600080fd5b50565b615b808161519e565b8114615b8b57600080fd5b50565b615b97816151ca565b8114615ba257600080fd5b50565b615bae816151f8565b8114615bb957600080fd5b50565b615bc581615202565b8114615bd057600080fd5b5056fea26469706673582212208b8135292f58f8344371e3488b764836e23763d6eb4f9ee3db3c7f479b6c96bf64736f6c634300080700330000000000000000000000003c2269811836af69497e5f486a85d7316753cf62
Deployed Bytecode
0x6080604052600436106102035760003560e01c806370a0823111610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461076b578063eb8d72b7146107a8578063f2fde38b146107d1578063f5ecbdbc146107fa578063fc0cd5eb1461083757610203565b8063c87b56dd146106be578063cbed8b9c146106fb578063cfc86f7b14610724578063d1deba1f1461074f57610203565b80638da5cb5b116100e75780638da5cb5b146105eb57806395d89b4114610616578063a22cb46514610641578063b353aaa71461066a578063b88d4fde1461069557610203565b806370a082311461053e578063715018a61461057b5780637533d78814610592578063895bf166146105cf57610203565b806323b872dd1161019b57806342842e0e1161016a57806342842e0e1461044957806342d65a8d146104725780635b8c41e61461049b5780636352211e146104d857806366ad5c8a1461051557610203565b806323b872dd1461038f57806330176e13146103b85780633c010a3e146103e15780633d8b38f61461040c57610203565b8063081812fc116101d7578063081812fc146102c2578063095ea7b3146102ff5780630a54dda11461032857806310ddb1371461036657610203565b80621d35671461020857806301ffc9a71461023157806306fdde031461026e57806307e0db1714610299575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190613fd7565b610860565b005b34801561023d57600080fd5b5061025860048036038101906102539190613ca8565b610a0d565b60405161026591906148f7565b60405180910390f35b34801561027a57600080fd5b50610283610a67565b60405161029091906149a1565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb9190613e0c565b610af9565b005b3480156102ce57600080fd5b506102e960048036038101906102e49190614165565b610c03565b6040516102f69190614860565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190613c68565b610c88565b005b34801561033457600080fd5b5061034f600480360381019061034a9190613e99565b610da0565b60405161035d929190614f31565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613e0c565b610e88565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613a09565b610f92565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613dc3565b610ff2565b005b3480156103ed57600080fd5b506103f6611088565b6040516104039190614f16565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613e39565b61108e565b60405161044091906148f7565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613a09565b611162565b005b34801561047e57600080fd5b5061049960048036038101906104949190613e39565b611182565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613f68565b611292565b6040516104cf9190614912565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614165565b6112da565b60405161050c9190614860565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190613fd7565b61138c565b005b34801561054a57600080fd5b506105656004803603810190610560919061399c565b611413565b6040516105729190614f16565b60405180910390f35b34801561058757600080fd5b506105906114cb565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613e0c565b611553565b6040516105c6919061492d565b60405180910390f35b6105e960048036038101906105e49190613b72565b6115f3565b005b3480156105f757600080fd5b5061060061160b565b60405161060d9190614860565b60405180910390f35b34801561062257600080fd5b5061062b611634565b60405161063891906149a1565b60405180910390f35b34801561064d57600080fd5b5061066860048036038101906106639190613adf565b6116c6565b005b34801561067657600080fd5b5061067f6116dc565b60405161068c9190614986565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190613a5c565b611700565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614165565b611762565b6040516106f291906149a1565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906140dd565b611796565b005b34801561073057600080fd5b506107396118ac565b60405161074691906149a1565b60405180910390f35b61076960048036038101906107649190613fd7565b61193a565b005b34801561077757600080fd5b50610792600480360381019061078d91906139c9565b611aa1565b60405161079f91906148f7565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190613e39565b611b35565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061399c565b611c1c565b005b34801561080657600080fd5b50610821600480360381019061081c9190614076565b611d14565b60405161082e919061492d565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190613b1f565b611dd4565b005b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1661089f611ec8565b73ffffffffffffffffffffffffffffffffffffffff16146108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec90614c63565b60405180910390fd5b6000600160008661ffff1661ffff168152602001908152602001600020805461091d9061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546109499061528e565b80156109965780601f1061096b57610100808354040283529160200191610996565b820191906000526020600020905b81548152906001019060200180831161097957829003601f168201915b50505050509050805184511480156109bb575080805190602001208480519060200120145b6109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614cc3565b60405180910390fd5b610a0685858585611ed0565b5050505050565b6000807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a605750610a5f82611fef565b5b9050919050565b606060038054610a769061528e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa29061528e565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b610b01611ec8565b73ffffffffffffffffffffffffffffffffffffffff16610b1f61160b565b73ffffffffffffffffffffffffffffffffffffffff1614610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c90614be3565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b8152600401610bce9190614ce3565b600060405180830381600087803b158015610be857600080fd5b505af1158015610bfc573d6000803e3d6000fd5b5050505050565b6000610c0e826120d1565b610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490614bc3565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c93826112da565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90614c43565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d23611ec8565b73ffffffffffffffffffffffffffffffffffffffff161480610d525750610d5181610d4c611ec8565b611aa1565b5b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8890614b23565b60405180910390fd5b610d9b838361213d565b505050565b60008060008686604051602001610db892919061494f565b60405160208183030381529060405290507f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166340a7bb1089308489896040518663ffffffff1660e01b8152600401610e2a959493929190614d27565b604080518083038186803b158015610e4157600080fd5b505afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190614192565b92509250509550959350505050565b610e90611ec8565b73ffffffffffffffffffffffffffffffffffffffff16610eae61160b565b73ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90614be3565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b8152600401610f5d9190614ce3565b600060405180830381600087803b158015610f7757600080fd5b505af1158015610f8b573d6000803e3d6000fd5b5050505050565b610fa3610f9d611ec8565b826121f6565b610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614c83565b60405180910390fd5b610fed8383836122d4565b505050565b610ffa611ec8565b73ffffffffffffffffffffffffffffffffffffffff1661101861160b565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106590614be3565b60405180910390fd5b80600a90805190602001906110849291906134aa565b5050565b60095481565b600080600160008661ffff1661ffff16815260200190815260200160002080546110b79061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546110e39061528e565b80156111305780601f1061110557610100808354040283529160200191611130565b820191906000526020600020905b81548152906001019060200180831161111357829003601f168201915b50505050509050838360405161114792919061480c565b60405180910390208180519060200120149150509392505050565b61117d83838360405180602001604052806000815250611700565b505050565b61118a611ec8565b73ffffffffffffffffffffffffffffffffffffffff166111a861160b565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614be3565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b815260040161125b93929190614d88565b600060405180830381600087803b15801561127557600080fd5b505af1158015611289573d6000803e3d6000fd5b50505050505050565b60026020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a90614b63565b60405180910390fd5b80915050919050565b3073ffffffffffffffffffffffffffffffffffffffff166113ab611ec8565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906149c3565b60405180910390fd5b61140d84848484612530565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90614b43565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d3611ec8565b73ffffffffffffffffffffffffffffffffffffffff166114f161160b565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614be3565b60405180910390fd5b61155160006125d3565b565b600160205280600052604060002060009150905080546115729061528e565b80601f016020809104026020016040519081016040528092919081815260200182805461159e9061528e565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b505050505081565b61160287878787878787612697565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546116439061528e565b80601f016020809104026020016040519081016040528092919081815260200182805461166f9061528e565b80156116bc5780601f10611691576101008083540402835291602001916116bc565b820191906000526020600020905b81548152906001019060200180831161169f57829003601f168201915b5050505050905090565b6116d86116d1611ec8565b83836127fb565b5050565b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6281565b61171161170b611ec8565b836121f6565b611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614c83565b60405180910390fd5b61175c84848484612968565b50505050565b6060600a61176f836129c4565b60405160200161178092919061483c565b6040516020818303038152906040529050919050565b61179e611ec8565b73ffffffffffffffffffffffffffffffffffffffff166117bc61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180990614be3565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611873959493929190614ec8565b600060405180830381600087803b15801561188d57600080fd5b505af11580156118a1573d6000803e3d6000fd5b505050505050505050565b600a80546118b99061528e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e59061528e565b80156119325780601f1061190757610100808354040283529160200191611932565b820191906000526020600020905b81548152906001019060200180831161191557829003601f168201915b505050505081565b6000600260008661ffff1661ffff168152602001908152602001600020846040516119659190614825565b908152602001604051809103902060008467ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000801b8114156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614a63565b60405180910390fd5b80828051906020012014611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190614ca3565b60405180910390fd5b6000801b600260008761ffff1661ffff16815260200190815260200160002085604051611a579190614825565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002081905550611a9a85858585612530565b5050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3d611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611b5b61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614be3565b60405180910390fd5b8181600160008661ffff1661ffff1681526020019081526020016000209190611bdb929190613530565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611c0f93929190614d88565b60405180910390a1505050565b611c24611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611c4261160b565b73ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f90614be3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff90614a03565b60405180910390fd5b611d11816125d3565b50565b60607f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc868630866040518563ffffffff1660e01b8152600401611d759493929190614e83565b60006040518083038186803b158015611d8d57600080fd5b505afa158015611da1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611dca9190613d02565b9050949350505050565b611ddc611ec8565b73ffffffffffffffffffffffffffffffffffffffff16611dfa61160b565b73ffffffffffffffffffffffffffffffffffffffff1614611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790614be3565b60405180910390fd5b8015611e6957611e64838361ffff16612b25565b611ec3565b611e768261ffff166120d1565b611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90614c23565b60405180910390fd5b611ec28261ffff16612b43565b5b505050565b600033905090565b3073ffffffffffffffffffffffffffffffffffffffff166366ad5c8a858585856040518563ffffffff1660e01b8152600401611f0f9493929190614e30565b600060405180830381600087803b158015611f2957600080fd5b505af1925050508015611f3a575060015b611fe8578080519060200120600260008661ffff1661ffff16815260200190815260200160002084604051611f6f9190614825565b908152602001604051809103902060008467ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d84848484604051611fdb9493929190614e30565b60405180910390a1611fe9565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120ca57506120c982612c54565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b0836112da565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612201826120d1565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790614ae3565b60405180910390fd5b600061224b836112da565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122ba57508373ffffffffffffffffffffffffffffffffffffffff166122a284610c03565b73ffffffffffffffffffffffffffffffffffffffff16145b806122cb57506122ca8185611aa1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122f4826112da565b73ffffffffffffffffffffffffffffffffffffffff161461234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614c03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b190614aa3565b60405180910390fd5b6123c5838383612cce565b6123d060008261213d565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124209190615130565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247791906150a9565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080828060200190518101906125479190613d4b565b9150915060006014830151905061255f878284612cd3565b8073ffffffffffffffffffffffffffffffffffffffff16866040516125849190614825565b60405180910390208861ffff167fbd66934b09dec04b3aea2d88b8893e2844133810be0e2298aa6f6a28aa65795f85896040516125c29291906148c7565b60405180910390a450505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a387878787612d8b565b600085856040516020016126b892919061494f565b60405160208183030381529060405290506126d68782868686612ee2565b60007f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff16637a14574889306040518363ffffffff1660e01b8152600401612733929190614cfe565b60206040518083038186803b15801561274b57600080fd5b505afa15801561275f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278391906141d2565b9050866040516127939190614825565b60405180910390208861ffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7ea7294afa99e68f724ddc625e6ecf2086863430067ce6ff5cd4404445d322289856040516127e89291906148c7565b60405180910390a4505050505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614ac3565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295b91906148f7565b60405180910390a3505050565b6129738484846122d4565b61297f8484848461306d565b6129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b5906149e3565b60405180910390fd5b50505050565b60606000821415612a0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b20565b600082905060005b60008214612a3e578080612a27906152f1565b915050600a82612a3791906150ff565b9150612a14565b60008167ffffffffffffffff811115612a5a57612a59615427565b5b6040519080825280601f01601f191660200182016040528015612a8c5781602001600182028036833780820191505090505b5090505b60008514612b1957600182612aa59190615130565b9150600a85612ab4919061533a565b6030612ac091906150a9565b60f81b818381518110612ad657612ad56153f8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b1291906150ff565b9450612a90565b8093505050505b919050565b612b3f828260405180602001604052806000815250613204565b5050565b6000612b4e826112da565b9050612b5c81600084612cce565b612b6760008361213d565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb79190615130565b925050819055506005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f830f2cc7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cc75750612cc68261325f565b5b9050919050565b505050565b60005b81518161ffff161015612d8557612d0e828261ffff1681518110612cfd57612cfc6153f8565b5b602002602001015161ffff166120d1565b15612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614b83565b60405180910390fd5b612d7a83838361ffff1681518110612d6957612d686153f8565b5b602002602001015161ffff16612b25565b806001019050612cd6565b50505050565b60005b81518161ffff161015612edb57612dce612da6611ec8565b838361ffff1681518110612dbd57612dbc6153f8565b5b602002602001015161ffff166121f6565b612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614a43565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16612e4f838361ffff1681518110612e3e57612e3d6153f8565b5b602002602001015161ffff166112da565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614a83565b60405180910390fd5b612ed0828261ffff1681518110612ebf57612ebe6153f8565b5b602002602001015161ffff16612b43565b806001019050612d8e565b5050505050565b6000600160008761ffff1661ffff1681526020019081526020016000208054612f0a9061528e565b80601f0160208091040260200160405190810160405280929190818152602001828054612f369061528e565b8015612f835780601f10612f5857610100808354040283529160200191612f83565b820191906000526020600020905b815481529060010190602001808311612f6657829003601f168201915b50505050509050600081511415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc690614b03565b60405180910390fd5b7f0000000000000000000000003c2269811836af69497e5f486a85d7316753cf6273ffffffffffffffffffffffffffffffffffffffff1663c5803100348884898989896040518863ffffffff1660e01b815260040161303396959493929190614dba565b6000604051808303818588803b15801561304c57600080fd5b505af1158015613060573d6000803e3d6000fd5b5050505050505050505050565b600061308e8473ffffffffffffffffffffffffffffffffffffffff166132c9565b156131f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130b7611ec8565b8786866040518563ffffffff1660e01b81526004016130d9949392919061487b565b602060405180830381600087803b1580156130f357600080fd5b505af192505050801561312457506040513d601f19601f820116820180604052508101906131219190613cd5565b60015b6131a7573d8060008114613154576040519150601f19603f3d011682016040523d82523d6000602084013e613159565b606091505b5060008151141561319f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613196906149e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131fc565b600190505b949350505050565b61320e83836132dc565b61321b600084848461306d565b61325a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613251906149e3565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561334c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334390614ba3565b60405180910390fd5b613355816120d1565b15613395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338c90614a23565b60405180910390fd5b6133a160008383612cce565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f191906150a9565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134b69061528e565b90600052602060002090601f0160209004810192826134d8576000855561351f565b82601f106134f157805160ff191683800117855561351f565b8280016001018555821561351f579182015b8281111561351e578251825591602001919060010190613503565b5b50905061352c91906135b6565b5090565b82805461353c9061528e565b90600052602060002090601f01602090048101928261355e57600085556135a5565b82601f1061357757803560ff19168380011785556135a5565b828001600101855582156135a5579182015b828111156135a4578235825591602001919060010190613589565b5b5090506135b291906135b6565b5090565b5b808211156135cf5760008160009055506001016135b7565b5090565b60006135e66135e184614f7f565b614f5a565b9050808382526020820190508285602086028201111561360957613608615460565b5b60005b85811015613639578161361f888261391e565b84526020840193506020830192505060018101905061360c565b5050509392505050565b600061365661365184614f7f565b614f5a565b9050808382526020820190508285602086028201111561367957613678615460565b5b60005b858110156136a9578161368f8882613933565b84526020840193506020830192505060018101905061367c565b5050509392505050565b60006136c66136c184614fab565b614f5a565b9050828152602081018484840111156136e2576136e1615465565b5b6136ed84828561524c565b509392505050565b600061370861370384614fab565b614f5a565b90508281526020810184848401111561372457613723615465565b5b61372f84828561525b565b509392505050565b600061374a61374584614fdc565b614f5a565b90508281526020810184848401111561376657613765615465565b5b61377184828561524c565b509392505050565b60008135905061378881615b32565b92915050565b60008135905061379d81615b49565b92915050565b600082601f8301126137b8576137b761545b565b5b81356137c88482602086016135d3565b91505092915050565b600082601f8301126137e6576137e561545b565b5b81516137f6848260208601613643565b91505092915050565b60008135905061380e81615b60565b92915050565b60008135905061382381615b77565b92915050565b60008151905061383881615b77565b92915050565b60008083601f8401126138545761385361545b565b5b8235905067ffffffffffffffff81111561387157613870615456565b5b60208301915083600182028301111561388d5761388c615460565b5b9250929050565b600082601f8301126138a9576138a861545b565b5b81356138b98482602086016136b3565b91505092915050565b600082601f8301126138d7576138d661545b565b5b81516138e78482602086016136f5565b91505092915050565b600082601f8301126139055761390461545b565b5b8135613915848260208601613737565b91505092915050565b60008135905061392d81615b8e565b92915050565b60008151905061394281615b8e565b92915050565b60008135905061395781615ba5565b92915050565b60008151905061396c81615ba5565b92915050565b60008135905061398181615bbc565b92915050565b60008151905061399681615bbc565b92915050565b6000602082840312156139b2576139b161546f565b5b60006139c084828501613779565b91505092915050565b600080604083850312156139e0576139df61546f565b5b60006139ee85828601613779565b92505060206139ff85828601613779565b9150509250929050565b600080600060608486031215613a2257613a2161546f565b5b6000613a3086828701613779565b9350506020613a4186828701613779565b9250506040613a5286828701613948565b9150509250925092565b60008060008060808587031215613a7657613a7561546f565b5b6000613a8487828801613779565b9450506020613a9587828801613779565b9350506040613aa687828801613948565b925050606085013567ffffffffffffffff811115613ac757613ac661546a565b5b613ad387828801613894565b91505092959194509250565b60008060408385031215613af657613af561546f565b5b6000613b0485828601613779565b9250506020613b15858286016137ff565b9150509250929050565b600080600060608486031215613b3857613b3761546f565b5b6000613b4686828701613779565b9350506020613b578682870161391e565b9250506040613b68868287016137ff565b9150509250925092565b600080600080600080600060e0888a031215613b9157613b9061546f565b5b6000613b9f8a828b01613779565b9750506020613bb08a828b0161391e565b965050604088013567ffffffffffffffff811115613bd157613bd061546a565b5b613bdd8a828b01613894565b955050606088013567ffffffffffffffff811115613bfe57613bfd61546a565b5b613c0a8a828b016137a3565b9450506080613c1b8a828b0161378e565b93505060a0613c2c8a828b01613779565b92505060c088013567ffffffffffffffff811115613c4d57613c4c61546a565b5b613c598a828b01613894565b91505092959891949750929550565b60008060408385031215613c7f57613c7e61546f565b5b6000613c8d85828601613779565b9250506020613c9e85828601613948565b9150509250929050565b600060208284031215613cbe57613cbd61546f565b5b6000613ccc84828501613814565b91505092915050565b600060208284031215613ceb57613cea61546f565b5b6000613cf984828501613829565b91505092915050565b600060208284031215613d1857613d1761546f565b5b600082015167ffffffffffffffff811115613d3657613d3561546a565b5b613d42848285016138c2565b91505092915050565b60008060408385031215613d6257613d6161546f565b5b600083015167ffffffffffffffff811115613d8057613d7f61546a565b5b613d8c858286016138c2565b925050602083015167ffffffffffffffff811115613dad57613dac61546a565b5b613db9858286016137d1565b9150509250929050565b600060208284031215613dd957613dd861546f565b5b600082013567ffffffffffffffff811115613df757613df661546a565b5b613e03848285016138f0565b91505092915050565b600060208284031215613e2257613e2161546f565b5b6000613e308482850161391e565b91505092915050565b600080600060408486031215613e5257613e5161546f565b5b6000613e608682870161391e565b935050602084013567ffffffffffffffff811115613e8157613e8061546a565b5b613e8d8682870161383e565b92509250509250925092565b600080600080600060a08688031215613eb557613eb461546f565b5b6000613ec38882890161391e565b955050602086013567ffffffffffffffff811115613ee457613ee361546a565b5b613ef088828901613894565b945050604086013567ffffffffffffffff811115613f1157613f1061546a565b5b613f1d888289016137a3565b9350506060613f2e888289016137ff565b925050608086013567ffffffffffffffff811115613f4f57613f4e61546a565b5b613f5b88828901613894565b9150509295509295909350565b600080600060608486031215613f8157613f8061546f565b5b6000613f8f8682870161391e565b935050602084013567ffffffffffffffff811115613fb057613faf61546a565b5b613fbc86828701613894565b9250506040613fcd86828701613972565b9150509250925092565b60008060008060808587031215613ff157613ff061546f565b5b6000613fff8782880161391e565b945050602085013567ffffffffffffffff8111156140205761401f61546a565b5b61402c87828801613894565b935050604061403d87828801613972565b925050606085013567ffffffffffffffff81111561405e5761405d61546a565b5b61406a87828801613894565b91505092959194509250565b600080600080608085870312156140905761408f61546f565b5b600061409e8782880161391e565b94505060206140af8782880161391e565b93505060406140c087828801613779565b92505060606140d187828801613948565b91505092959194509250565b6000806000806000608086880312156140f9576140f861546f565b5b60006141078882890161391e565b95505060206141188882890161391e565b945050604061412988828901613948565b935050606086013567ffffffffffffffff81111561414a5761414961546a565b5b6141568882890161383e565b92509250509295509295909350565b60006020828403121561417b5761417a61546f565b5b600061418984828501613948565b91505092915050565b600080604083850312156141a9576141a861546f565b5b60006141b78582860161395d565b92505060206141c88582860161395d565b9150509250929050565b6000602082840312156141e8576141e761546f565b5b60006141f684828501613987565b91505092915050565b600061420b83836147d0565b60208301905092915050565b61422081615176565b82525050565b61422f81615164565b82525050565b600061424082615032565b61424a8185615060565b93506142558361500d565b8060005b8381101561428657815161426d88826141ff565b975061427883615053565b925050600181019050614259565b5085935050505092915050565b61429c81615188565b82525050565b6142ab81615194565b82525050565b60006142bd8385615071565b93506142ca83858461524c565b6142d383615474565b840190509392505050565b60006142ea8385615082565b93506142f783858461524c565b82840190509392505050565b600061430e8261503d565b6143188185615071565b935061432881856020860161525b565b61433181615474565b840191505092915050565b60006143478261503d565b6143518185615082565b935061436181856020860161525b565b80840191505092915050565b61437681615216565b82525050565b600061438782615048565b614391818561508d565b93506143a181856020860161525b565b6143aa81615474565b840191505092915050565b60006143c082615048565b6143ca818561509e565b93506143da81856020860161525b565b80840191505092915050565b600081546143f38161528e565b6143fd818661509e565b9450600182166000811461441857600181146144295761445c565b60ff1983168652818601935061445c565b6144328561501d565b60005b8381101561445457815481890152600182019150602081019050614435565b838801955050505b50505092915050565b600061447260268361508d565b915061447d82615485565b604082019050919050565b600061449560328361508d565b91506144a0826154d4565b604082019050919050565b60006144b860268361508d565b91506144c382615523565b604082019050919050565b60006144db601c8361508d565b91506144e682615572565b602082019050919050565b60006144fe60318361508d565b91506145098261559b565b604082019050919050565b600061452160238361508d565b915061452c826155ea565b604082019050919050565b600061454460258361508d565b915061454f82615639565b604082019050919050565b600061456760248361508d565b915061457282615688565b604082019050919050565b600061458a60198361508d565b9150614595826156d7565b602082019050919050565b60006145ad602c8361508d565b91506145b882615700565b604082019050919050565b60006145d060308361508d565b91506145db8261574f565b604082019050919050565b60006145f360388361508d565b91506145fe8261579e565b604082019050919050565b6000614616602a8361508d565b9150614621826157ed565b604082019050919050565b600061463960298361508d565b91506146448261583c565b604082019050919050565b600061465c60198361508d565b91506146678261588b565b602082019050919050565b600061467f60208361508d565b915061468a826158b4565b602082019050919050565b60006146a2602c8361508d565b91506146ad826158dd565b604082019050919050565b60006146c560208361508d565b91506146d08261592c565b602082019050919050565b60006146e860298361508d565b91506146f382615955565b604082019050919050565b600061470b60198361508d565b9150614716826159a4565b602082019050919050565b600061472e60218361508d565b9150614739826159cd565b604082019050919050565b6000614751601e8361508d565b915061475c82615a1c565b602082019050919050565b600061477460318361508d565b915061477f82615a45565b604082019050919050565b600061479760218361508d565b91506147a282615a94565b604082019050919050565b60006147ba60268361508d565b91506147c582615ae3565b604082019050919050565b6147d9816151ca565b82525050565b6147e8816151ca565b82525050565b6147f7816151f8565b82525050565b61480681615202565b82525050565b60006148198284866142de565b91508190509392505050565b6000614831828461433c565b915081905092915050565b600061484882856143e6565b915061485482846143b5565b91508190509392505050565b60006020820190506148756000830184614226565b92915050565b60006080820190506148906000830187614226565b61489d6020830186614226565b6148aa60408301856147ee565b81810360608301526148bc8184614303565b905095945050505050565b600060408201905081810360008301526148e18185614235565b90506148f060208301846147fd565b9392505050565b600060208201905061490c6000830184614293565b92915050565b600060208201905061492760008301846142a2565b92915050565b600060208201905081810360008301526149478184614303565b905092915050565b600060408201905081810360008301526149698185614303565b9050818103602083015261497d8184614235565b90509392505050565b600060208201905061499b600083018461436d565b92915050565b600060208201905081810360008301526149bb818461437c565b905092915050565b600060208201905081810360008301526149dc81614465565b9050919050565b600060208201905081810360008301526149fc81614488565b9050919050565b60006020820190508181036000830152614a1c816144ab565b9050919050565b60006020820190508181036000830152614a3c816144ce565b9050919050565b60006020820190508181036000830152614a5c816144f1565b9050919050565b60006020820190508181036000830152614a7c81614514565b9050919050565b60006020820190508181036000830152614a9c81614537565b9050919050565b60006020820190508181036000830152614abc8161455a565b9050919050565b60006020820190508181036000830152614adc8161457d565b9050919050565b60006020820190508181036000830152614afc816145a0565b9050919050565b60006020820190508181036000830152614b1c816145c3565b9050919050565b60006020820190508181036000830152614b3c816145e6565b9050919050565b60006020820190508181036000830152614b5c81614609565b9050919050565b60006020820190508181036000830152614b7c8161462c565b9050919050565b60006020820190508181036000830152614b9c8161464f565b9050919050565b60006020820190508181036000830152614bbc81614672565b9050919050565b60006020820190508181036000830152614bdc81614695565b9050919050565b60006020820190508181036000830152614bfc816146b8565b9050919050565b60006020820190508181036000830152614c1c816146db565b9050919050565b60006020820190508181036000830152614c3c816146fe565b9050919050565b60006020820190508181036000830152614c5c81614721565b9050919050565b60006020820190508181036000830152614c7c81614744565b9050919050565b60006020820190508181036000830152614c9c81614767565b9050919050565b60006020820190508181036000830152614cbc8161478a565b9050919050565b60006020820190508181036000830152614cdc816147ad565b9050919050565b6000602082019050614cf860008301846147df565b92915050565b6000604082019050614d1360008301856147df565b614d206020830184614226565b9392505050565b600060a082019050614d3c60008301886147df565b614d496020830187614226565b8181036040830152614d5b8186614303565b9050614d6a6060830185614293565b8181036080830152614d7c8184614303565b90509695505050505050565b6000604082019050614d9d60008301866147df565b8181036020830152614db08184866142b1565b9050949350505050565b600060c082019050614dcf60008301896147df565b8181036020830152614de18188614303565b90508181036040830152614df58187614303565b9050614e046060830186614217565b614e116080830185614226565b81810360a0830152614e238184614303565b9050979650505050505050565b6000608082019050614e4560008301876147df565b8181036020830152614e578186614303565b9050614e6660408301856147fd565b8181036060830152614e788184614303565b905095945050505050565b6000608082019050614e9860008301876147df565b614ea560208301866147df565b614eb26040830185614226565b614ebf60608301846147ee565b95945050505050565b6000608082019050614edd60008301886147df565b614eea60208301876147df565b614ef760408301866147ee565b8181036060830152614f0a8184866142b1565b90509695505050505050565b6000602082019050614f2b60008301846147ee565b92915050565b6000604082019050614f4660008301856147ee565b614f5360208301846147ee565b9392505050565b6000614f64614f75565b9050614f7082826152c0565b919050565b6000604051905090565b600067ffffffffffffffff821115614f9a57614f99615427565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614fc657614fc5615427565b5b614fcf82615474565b9050602081019050919050565b600067ffffffffffffffff821115614ff757614ff6615427565b5b61500082615474565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006150b4826151f8565b91506150bf836151f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150f4576150f361536b565b5b828201905092915050565b600061510a826151f8565b9150615115836151f8565b9250826151255761512461539a565b5b828204905092915050565b600061513b826151f8565b9150615146836151f8565b9250828210156151595761515861536b565b5b828203905092915050565b600061516f826151d8565b9050919050565b6000615181826151d8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600061522182615228565b9050919050565b60006152338261523a565b9050919050565b6000615245826151d8565b9050919050565b82818337600083830152505050565b60005b8381101561527957808201518184015260208101905061525e565b83811115615288576000848401525b50505050565b600060028204905060018216806152a657607f821691505b602082108114156152ba576152b96153c9565b5b50919050565b6152c982615474565b810181811067ffffffffffffffff821117156152e8576152e7615427565b5b80604052505050565b60006152fc826151f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561532f5761532e61536b565b5b600182019050919050565b6000615345826151f8565b9150615350836151f8565b9250826153605761535f61539a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560008201527f204c7a4170700000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f41786f6c6974746c65733a2073656e642063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a2073656e642066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060008201527f61207472757374656420736f7572636500000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a20616c726561647920657869737400000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f41786f6c6974746c65733a20646f65736e277420657869737400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b615b3b81615164565b8114615b4657600080fd5b50565b615b5281615176565b8114615b5d57600080fd5b50565b615b6981615188565b8114615b7457600080fd5b50565b615b808161519e565b8114615b8b57600080fd5b50565b615b97816151ca565b8114615ba257600080fd5b50565b615bae816151f8565b8114615bb957600080fd5b50565b615bc581615202565b8114615bd057600080fd5b5056fea26469706673582212208b8135292f58f8344371e3488b764836e23763d6eb4f9ee3db3c7f479b6c96bf64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62
-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0x3c2269811836af69497E5F486A85D7316753cf62
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62
Deployed ByteCode Sourcemap
55325:2091:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19742:730;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55573:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43751:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21828:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45310:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44833:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27054:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;21959:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46060:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56700:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55397:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22644:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46470:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22096:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23445:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43445:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24227:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43175:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10583:103;;;;;;;;;;;;;:::i;:::-;;19512:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27487:345;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9932:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45603:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19457:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46726:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56885:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21616:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55435:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24755:681;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45829:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22328:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10841:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21343:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57121:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19742:730;19978:10;19954:35;;:12;:10;:12::i;:::-;:35;;;19946:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;20037:26;20066:19;:32;20086:11;20066:32;;;;;;;;;;;;;;;20037:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20272:13;:20;20250:11;:18;:42;:96;;;;;20332:13;20322:24;;;;;;20306:11;20296:22;;;;;;:50;20250:96;20242:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;20402:62;20421:11;20434;20447:6;20455:8;20402:18;:62::i;:::-;19869:603;19742:730;;;;:::o;55573:228::-;55688:4;55727:26;55712:41;;;:11;:41;;;;:81;;;;55757:36;55781:11;55757:23;:36::i;:::-;55712:81;55705:88;;55573:228;;;:::o;43751:100::-;43805:13;43838:5;43831:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43751:100;:::o;21828:123::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21908:10:::1;:25;;;21934:8;21908:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21828:123:::0;:::o;45310:221::-;45386:7;45414:16;45422:7;45414;:16::i;:::-;45406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45499:15;:24;45515:7;45499:24;;;;;;;;;;;;;;;;;;;;;45492:31;;45310:221;;;:::o;44833:411::-;44914:13;44930:23;44945:7;44930:14;:23::i;:::-;44914:39;;44978:5;44972:11;;:2;:11;;;;44964:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45072:5;45056:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;45081:37;45098:5;45105:12;:10;:12::i;:::-;45081:16;:37::i;:::-;45056:62;45034:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;45215:21;45224:2;45228:7;45215:8;:21::i;:::-;44903:341;44833:411;;:::o;27054:425::-;27232:14;27248:11;27312:20;27346:10;27358:9;27335:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27312:56;;27386:10;:23;;;27410:11;27431:4;27438:7;27447;27456:14;27386:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27379:92;;;;;27054:425;;;;;;;;:::o;21959:129::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22042:10:::1;:28;;;22071:8;22042:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21959:129:::0;:::o;46060:339::-;46255:41;46274:12;:10;:12::i;:::-;46288:7;46255:18;:41::i;:::-;46247:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;46363:28;46373:4;46379:2;46383:7;46363:9;:28::i;:::-;46060:339;;;:::o;56700:123::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56801:14:::1;56785:13;:30;;;;;;;;;;;;:::i;:::-;;56700:123:::0;:::o;55397:31::-;;;;:::o;22644:250::-;22740:4;22757:26;22786:19;:32;22806:11;22786:32;;;;;;;;;;;;;;;22757:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22874:11;;22864:22;;;;;;;:::i;:::-;;;;;;;;22846:13;22836:24;;;;;;:50;22829:57;;;22644:250;;;;;:::o;46470:185::-;46608:39;46625:4;46631:2;46635:7;46608:39;;;;;;;;;;;;:16;:39::i;:::-;46470:185;;;:::o;22096:178::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22211:10:::1;:29;;;22241:11;22254;;22211:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22096:178:::0;;;:::o;23445:85::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43445:239::-;43517:7;43537:13;43553:7;:16;43561:7;43553:16;;;;;;;;;;;;;;;;;;;;;43537:32;;43605:1;43588:19;;:5;:19;;;;43580:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43671:5;43664:12;;;43445:239;;;:::o;24227:342::-;24437:4;24413:29;;:12;:10;:12::i;:::-;:29;;;24405:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24496:65;24518:11;24531;24544:6;24552:8;24496:21;:65::i;:::-;24227:342;;;;:::o;43175:208::-;43247:7;43292:1;43275:19;;:5;:19;;;;43267:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43359:9;:16;43369:5;43359:16;;;;;;;;;;;;;;;;43352:23;;43175:208;;;:::o;10583:103::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10648:30:::1;10675:1;10648:18;:30::i;:::-;10583:103::o:0;19512:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27487:345::-;27724:100;27730:5;27737:11;27750:10;27762:9;27773:14;27789:18;27809:14;27724:5;:100::i;:::-;27487:345;;;;;;;:::o;9932:87::-;9978:7;10005:6;;;;;;;;;;;9998:13;;9932:87;:::o;43920:104::-;43976:13;44009:7;44002:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43920:104;:::o;45603:155::-;45698:52;45717:12;:10;:12::i;:::-;45731:8;45741;45698:18;:52::i;:::-;45603:155;;:::o;19457:46::-;;;:::o;46726:328::-;46901:41;46920:12;:10;:12::i;:::-;46934:7;46901:18;:41::i;:::-;46893:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;47007:39;47021:4;47027:2;47031:7;47040:5;47007:13;:39::i;:::-;46726:328;;;;:::o;56885:228::-;56987:13;57062;57077:26;57094:8;57077:16;:26::i;:::-;57045:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57018:87;;56885:228;;;:::o;21616:204::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21750:10:::1;:20;;;21771:8;21781;21791:11;21804:7;;21750:62;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21616:204:::0;;;;;:::o;55435:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24755:681::-;24940:19;24962:14;:27;24977:11;24962:27;;;;;;;;;;;;;;;24990:11;24962:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;25003:6;24962:48;;;;;;;;;;;;;;;;24940:70;;25052:1;25044:10;;25029:11;:25;;25021:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25136:11;25123:8;25113:19;;;;;;:34;25105:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:1;25284:10;;25233:14;:27;25248:11;25233:27;;;;;;;;;;;;;;;25261:11;25233:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;25274:6;25233:48;;;;;;;;;;;;;;;:61;;;;25363:65;25385:11;25398;25411:6;25419:8;25363:21;:65::i;:::-;24884:552;24755:681;;;;:::o;45829:164::-;45926:4;45950:18;:25;45969:5;45950:25;;;;;;;;;;;;;;;:35;45976:8;45950:35;;;;;;;;;;;;;;;;;;;;;;;;;45943:42;;45829:164;;;;:::o;22328:216::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:11:::1;;22432:19;:32;22452:11;22432:32;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;22494:42;22511:11;22524;;22494:42;;;;;;;;:::i;:::-;;;;;;;;22328:216:::0;;;:::o;10841:201::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10950:1:::1;10930:22;;:8;:22;;;;10922:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11006:28;11025:8;11006:18;:28::i;:::-;10841:201:::0;:::o;21343:211::-;21446:12;21478:10;:20;;;21499:8;21509;21527:4;21534:11;21478:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21471:75;;21343:211;;;;;;:::o;57121:292::-;10163:12;:10;:12::i;:::-;10152:23;;:7;:5;:7::i;:::-;:23;;;10144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57220:6:::1;57216:190;;;57243:24;57253:3;57258:8;57243:24;;:9;:24::i;:::-;57216:190;;;57317:17;57325:8;57317:17;;:7;:17::i;:::-;57309:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;57379:15;57385:8;57379:15;;:5;:15::i;:::-;57216:190;57121:292:::0;;;:::o;8650:98::-;8703:7;8730:10;8723:17;;8650:98;:::o;23691:528::-;23888:4;:25;;;23914:11;23927;23940:6;23948:8;23888:69;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23884:328;;24114:8;24104:19;;;;;;24053:14;:27;24068:11;24053:27;;;;;;;;;;;;;;;24081:11;24053:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;24094:6;24053:48;;;;;;;;;;;;;;;:70;;;;24143:57;24157:11;24170;24183:6;24191:8;24143:57;;;;;;;;;:::i;:::-;;;;;;;;23884:328;;;;23691:528;;;;:::o;42806:305::-;42908:4;42960:25;42945:40;;;:11;:40;;;;:105;;;;43017:33;43002:48;;;:11;:48;;;;42945:105;:158;;;;43067:36;43091:11;43067:23;:36::i;:::-;42945:158;42925:178;;42806:305;;;:::o;48564:127::-;48629:4;48681:1;48653:30;;:7;:16;48661:7;48653:16;;;;;;;;;;;;;;;;;;;;;:30;;;;48646:37;;48564:127;;;:::o;52546:174::-;52648:2;52621:15;:24;52637:7;52621:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;52704:7;52700:2;52666:46;;52675:23;52690:7;52675:14;:23::i;:::-;52666:46;;;;;;;;;;;;52546:174;;:::o;48858:348::-;48951:4;48976:16;48984:7;48976;:16::i;:::-;48968:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49052:13;49068:23;49083:7;49068:14;:23::i;:::-;49052:39;;49121:5;49110:16;;:7;:16;;;:51;;;;49154:7;49130:31;;:20;49142:7;49130:11;:20::i;:::-;:31;;;49110:51;:87;;;;49165:32;49182:5;49189:7;49165:16;:32::i;:::-;49110:87;49102:96;;;48858:348;;;;:::o;51850:578::-;52009:4;51982:31;;:23;51997:7;51982:14;:23::i;:::-;:31;;;51974:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;52092:1;52078:16;;:2;:16;;;;52070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52148:39;52169:4;52175:2;52179:7;52148:20;:39::i;:::-;52252:29;52269:1;52273:7;52252:8;:29::i;:::-;52313:1;52294:9;:15;52304:4;52294:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;52342:1;52325:9;:13;52335:2;52325:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;52373:2;52354:7;:16;52362:7;52354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;52412:7;52408:2;52393:27;;52402:4;52393:27;;;;;;;;;;;;51850:578;;;:::o;28449:560::-;28644:27;28673:24;28712:8;28701:39;;;;;;;;;;;;:::i;:::-;28643:97;;;;28751:17;28842:2;28826:14;28822:23;28816:30;28803:43;;28869;28879:11;28892:9;28903:8;28869:9;:43::i;:::-;28973:9;28930:71;;28960:11;28930:71;;;;;;:::i;:::-;;;;;;;;28947:11;28930:71;;;28984:8;28994:6;28930:71;;;;;;;:::i;:::-;;;;;;;;28590:419;;;28449:560;;;;:::o;11202:191::-;11276:16;11295:6;;;;;;;;;;;11276:25;;11321:8;11312:6;;:17;;;;;;;;;;;;;;;;;;11376:8;11345:40;;11366:8;11345:40;;;;;;;;;;;;11265:128;11202:191;:::o;27840:601::-;28059:53;28070:5;28077:11;28090:10;28102:9;28059:10;:53::i;:::-;28125:20;28159:10;28171:9;28148:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28125:56;;28192:81;28200:11;28213:7;28222:14;28238:18;28258:14;28192:7;:81::i;:::-;28286:12;28301:10;:27;;;28329:11;28350:4;28301:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28286:70;;28404:10;28372:61;;;;;;:::i;:::-;;;;;;;;28391:11;28372:61;;28384:5;28372:61;;;28416:9;28427:5;28372:61;;;;;;;:::i;:::-;;;;;;;;28048:393;;27840:601;;;;;;;:::o;52862:315::-;53017:8;53008:17;;:5;:17;;;;53000:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;53104:8;53066:18;:25;53085:5;53066:25;;;;;;;;;;;;;;;:35;53092:8;53066:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;53150:8;53128:41;;53143:5;53128:41;;;53160:8;53128:41;;;;;;:::i;:::-;;;;;;;;52862:315;;;:::o;47936:::-;48093:28;48103:4;48109:2;48113:7;48093:9;:28::i;:::-;48140:48;48163:4;48169:2;48173:7;48182:5;48140:22;:48::i;:::-;48132:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;47936:315;;;;:::o;39649:723::-;39705:13;39935:1;39926:5;:10;39922:53;;;39953:10;;;;;;;;;;;;;;;;;;;;;39922:53;39985:12;40000:5;39985:20;;40016:14;40041:78;40056:1;40048:4;:9;40041:78;;40074:8;;;;;:::i;:::-;;;;40105:2;40097:10;;;;;:::i;:::-;;;40041:78;;;40129:19;40161:6;40151:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40129:39;;40179:154;40195:1;40186:5;:10;40179:154;;40223:1;40213:11;;;;;:::i;:::-;;;40290:2;40282:5;:10;;;;:::i;:::-;40269:2;:24;;;;:::i;:::-;40256:39;;40239:6;40246;40239:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;40319:2;40310:11;;;;;:::i;:::-;;;40179:154;;;40357:6;40343:21;;;;;39649:723;;;;:::o;49548:110::-;49624:26;49634:2;49638:7;49624:26;;;;;;;;;;;;:9;:26::i;:::-;49548:110;;:::o;51153:360::-;51213:13;51229:23;51244:7;51229:14;:23::i;:::-;51213:39;;51265:48;51286:5;51301:1;51305:7;51265:20;:48::i;:::-;51354:29;51371:1;51375:7;51354:8;:29::i;:::-;51416:1;51396:9;:16;51406:5;51396:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;51435:7;:16;51443:7;51435:16;;;;;;;;;;;;51428:23;;;;;;;;;;;51497:7;51493:1;51469:36;;51478:5;51469:36;;;;;;;;;;;;51202:311;51153:360;:::o;26827:219::-;26929:4;26968:30;26953:45;;;:11;:45;;;;:85;;;;27002:36;27026:11;27002:23;:36::i;:::-;26953:85;26946:92;;26827:219;;;:::o;55113:126::-;;;;:::o;56290:329::-;56406:8;56401:211;56424:9;:16;56420:1;:20;;;56401:211;;;56467:21;56475:9;56485:1;56475:12;;;;;;;;;;:::i;:::-;;;;;;;;56467:21;;:7;:21::i;:::-;56466:22;56458:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;56533:35;56543:10;56555:9;56565:1;56555:12;;;;;;;;;;:::i;:::-;;;;;;;;56533:35;;:9;:35::i;:::-;56595:3;;;;;56401:211;;;;56290:329;;;:::o;55809:473::-;55935:8;55930:345;55953:9;:16;55949:1;:20;;;55930:345;;;55995:46;56014:12;:10;:12::i;:::-;56028:9;56038:1;56028:12;;;;;;;;;;:::i;:::-;;;;;;;;55995:46;;:18;:46::i;:::-;55987:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;56150:5;56118:37;;:28;56133:9;56143:1;56133:12;;;;;;;;;;:::i;:::-;;;;;;;;56118:28;;:14;:28::i;:::-;:37;;;56110:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;56212:19;56218:9;56228:1;56218:12;;;;;;;;;;:::i;:::-;;;;;;;;56212:19;;:5;:19::i;:::-;56258:3;;;;;55930:345;;;;55809:473;;;;:::o;20761:477::-;20938:26;20967:19;:32;20987:11;20967:32;;;;;;;;;;;;;;;20938:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21042:1;21018:13;:20;:25;;21010:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;21107:10;:15;;;21130:9;21141:11;21154:13;21169:8;21179:14;21195:18;21215:14;21107:123;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20927:311;20761:477;;;;;:::o;53742:799::-;53897:4;53918:15;:2;:13;;;:15::i;:::-;53914:620;;;53970:2;53954:36;;;53991:12;:10;:12::i;:::-;54005:4;54011:7;54020:5;53954:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53950:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54213:1;54196:6;:13;:18;54192:272;;;54239:60;;;;;;;;;;:::i;:::-;;;;;;;;54192:272;54414:6;54408:13;54399:6;54395:2;54391:15;54384:38;53950:529;54087:41;;;54077:51;;;:6;:51;;;;54070:58;;;;;53914:620;54518:4;54511:11;;53742:799;;;;;;;:::o;49885:321::-;50015:18;50021:2;50025:7;50015:5;:18::i;:::-;50066:54;50097:1;50101:2;50105:7;50114:5;50066:22;:54::i;:::-;50044:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;49885:321;;;:::o;26314:157::-;26399:4;26438:25;26423:40;;;:11;:40;;;;26416:47;;26314:157;;;:::o;31945:387::-;32005:4;32213:12;32280:7;32268:20;32260:28;;32323:1;32316:4;:8;32309:15;;;31945:387;;;:::o;50542:382::-;50636:1;50622:16;;:2;:16;;;;50614:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50695:16;50703:7;50695;:16::i;:::-;50694:17;50686:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;50757:45;50786:1;50790:2;50794:7;50757:20;:45::i;:::-;50832:1;50815:9;:13;50825:2;50815:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;50863:2;50844:7;:16;50852:7;50844:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;50908:7;50904:2;50883:33;;50900:1;50883:33;;;;;;;;;;;;50542:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;23:719:1:-;118:5;143:80;159:63;215:6;159:63;:::i;:::-;143:80;:::i;:::-;134:89;;243:5;272:6;265:5;258:21;306:4;299:5;295:16;288:23;;332:6;382:3;374:4;366:6;362:17;357:3;353:27;350:36;347:143;;;401:79;;:::i;:::-;347:143;514:1;499:237;524:6;521:1;518:13;499:237;;;592:3;621:36;653:3;641:10;621:36;:::i;:::-;616:3;609:49;687:4;682:3;678:14;671:21;;721:4;716:3;712:14;705:21;;559:177;546:1;543;539:9;534:14;;499:237;;;503:14;124:618;;23:719;;;;;:::o;764:741::-;870:5;895:80;911:63;967:6;911:63;:::i;:::-;895:80;:::i;:::-;886:89;;995:5;1024:6;1017:5;1010:21;1058:4;1051:5;1047:16;1040:23;;1084:6;1134:3;1126:4;1118:6;1114:17;1109:3;1105:27;1102:36;1099:143;;;1153:79;;:::i;:::-;1099:143;1266:1;1251:248;1276:6;1273:1;1270:13;1251:248;;;1344:3;1373:47;1416:3;1404:10;1373:47;:::i;:::-;1368:3;1361:60;1450:4;1445:3;1441:14;1434:21;;1484:4;1479:3;1475:14;1468:21;;1311:188;1298:1;1295;1291:9;1286:14;;1251:248;;;1255:14;876:629;;764:741;;;;;:::o;1511:410::-;1588:5;1613:65;1629:48;1670:6;1629:48;:::i;:::-;1613:65;:::i;:::-;1604:74;;1701:6;1694:5;1687:21;1739:4;1732:5;1728:16;1777:3;1768:6;1763:3;1759:16;1756:25;1753:112;;;1784:79;;:::i;:::-;1753:112;1874:41;1908:6;1903:3;1898;1874:41;:::i;:::-;1594:327;1511:410;;;;;:::o;1927:419::-;2015:5;2040:65;2056:48;2097:6;2056:48;:::i;:::-;2040:65;:::i;:::-;2031:74;;2128:6;2121:5;2114:21;2166:4;2159:5;2155:16;2204:3;2195:6;2190:3;2186:16;2183:25;2180:112;;;2211:79;;:::i;:::-;2180:112;2301:39;2333:6;2328:3;2323;2301:39;:::i;:::-;2021:325;1927:419;;;;;:::o;2352:412::-;2430:5;2455:66;2471:49;2513:6;2471:49;:::i;:::-;2455:66;:::i;:::-;2446:75;;2544:6;2537:5;2530:21;2582:4;2575:5;2571:16;2620:3;2611:6;2606:3;2602:16;2599:25;2596:112;;;2627:79;;:::i;:::-;2596:112;2717:41;2751:6;2746:3;2741;2717:41;:::i;:::-;2436:328;2352:412;;;;;:::o;2770:139::-;2816:5;2854:6;2841:20;2832:29;;2870:33;2897:5;2870:33;:::i;:::-;2770:139;;;;:::o;2915:155::-;2969:5;3007:6;2994:20;2985:29;;3023:41;3058:5;3023:41;:::i;:::-;2915:155;;;;:::o;3092:368::-;3162:5;3211:3;3204:4;3196:6;3192:17;3188:27;3178:122;;3219:79;;:::i;:::-;3178:122;3336:6;3323:20;3361:93;3450:3;3442:6;3435:4;3427:6;3423:17;3361:93;:::i;:::-;3352:102;;3168:292;3092:368;;;;:::o;3482:383::-;3563:5;3612:3;3605:4;3597:6;3593:17;3589:27;3579:122;;3620:79;;:::i;:::-;3579:122;3730:6;3724:13;3755:104;3855:3;3847:6;3840:4;3832:6;3828:17;3755:104;:::i;:::-;3746:113;;3569:296;3482:383;;;;:::o;3871:133::-;3914:5;3952:6;3939:20;3930:29;;3968:30;3992:5;3968:30;:::i;:::-;3871:133;;;;:::o;4010:137::-;4055:5;4093:6;4080:20;4071:29;;4109:32;4135:5;4109:32;:::i;:::-;4010:137;;;;:::o;4153:141::-;4209:5;4240:6;4234:13;4225:22;;4256:32;4282:5;4256:32;:::i;:::-;4153:141;;;;:::o;4313:552::-;4370:8;4380:6;4430:3;4423:4;4415:6;4411:17;4407:27;4397:122;;4438:79;;:::i;:::-;4397:122;4551:6;4538:20;4528:30;;4581:18;4573:6;4570:30;4567:117;;;4603:79;;:::i;:::-;4567:117;4717:4;4709:6;4705:17;4693:29;;4771:3;4763:4;4755:6;4751:17;4741:8;4737:32;4734:41;4731:128;;;4778:79;;:::i;:::-;4731:128;4313:552;;;;;:::o;4884:338::-;4939:5;4988:3;4981:4;4973:6;4969:17;4965:27;4955:122;;4996:79;;:::i;:::-;4955:122;5113:6;5100:20;5138:78;5212:3;5204:6;5197:4;5189:6;5185:17;5138:78;:::i;:::-;5129:87;;4945:277;4884:338;;;;:::o;5241:353::-;5307:5;5356:3;5349:4;5341:6;5337:17;5333:27;5323:122;;5364:79;;:::i;:::-;5323:122;5474:6;5468:13;5499:89;5584:3;5576:6;5569:4;5561:6;5557:17;5499:89;:::i;:::-;5490:98;;5313:281;5241:353;;;;:::o;5614:340::-;5670:5;5719:3;5712:4;5704:6;5700:17;5696:27;5686:122;;5727:79;;:::i;:::-;5686:122;5844:6;5831:20;5869:79;5944:3;5936:6;5929:4;5921:6;5917:17;5869:79;:::i;:::-;5860:88;;5676:278;5614:340;;;;:::o;5960:137::-;6005:5;6043:6;6030:20;6021:29;;6059:32;6085:5;6059:32;:::i;:::-;5960:137;;;;:::o;6103:141::-;6159:5;6190:6;6184:13;6175:22;;6206:32;6232:5;6206:32;:::i;:::-;6103:141;;;;:::o;6250:139::-;6296:5;6334:6;6321:20;6312:29;;6350:33;6377:5;6350:33;:::i;:::-;6250:139;;;;:::o;6395:143::-;6452:5;6483:6;6477:13;6468:22;;6499:33;6526:5;6499:33;:::i;:::-;6395:143;;;;:::o;6544:137::-;6589:5;6627:6;6614:20;6605:29;;6643:32;6669:5;6643:32;:::i;:::-;6544:137;;;;:::o;6687:141::-;6743:5;6774:6;6768:13;6759:22;;6790:32;6816:5;6790:32;:::i;:::-;6687:141;;;;:::o;6834:329::-;6893:6;6942:2;6930:9;6921:7;6917:23;6913:32;6910:119;;;6948:79;;:::i;:::-;6910:119;7068:1;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7039:117;6834:329;;;;:::o;7169:474::-;7237:6;7245;7294:2;7282:9;7273:7;7269:23;7265:32;7262:119;;;7300:79;;:::i;:::-;7262:119;7420:1;7445:53;7490:7;7481:6;7470:9;7466:22;7445:53;:::i;:::-;7435:63;;7391:117;7547:2;7573:53;7618:7;7609:6;7598:9;7594:22;7573:53;:::i;:::-;7563:63;;7518:118;7169:474;;;;;:::o;7649:619::-;7726:6;7734;7742;7791:2;7779:9;7770:7;7766:23;7762:32;7759:119;;;7797:79;;:::i;:::-;7759:119;7917:1;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7888:117;8044:2;8070:53;8115:7;8106:6;8095:9;8091:22;8070:53;:::i;:::-;8060:63;;8015:118;8172:2;8198:53;8243:7;8234:6;8223:9;8219:22;8198:53;:::i;:::-;8188:63;;8143:118;7649:619;;;;;:::o;8274:943::-;8369:6;8377;8385;8393;8442:3;8430:9;8421:7;8417:23;8413:33;8410:120;;;8449:79;;:::i;:::-;8410:120;8569:1;8594:53;8639:7;8630:6;8619:9;8615:22;8594:53;:::i;:::-;8584:63;;8540:117;8696:2;8722:53;8767:7;8758:6;8747:9;8743:22;8722:53;:::i;:::-;8712:63;;8667:118;8824:2;8850:53;8895:7;8886:6;8875:9;8871:22;8850:53;:::i;:::-;8840:63;;8795:118;8980:2;8969:9;8965:18;8952:32;9011:18;9003:6;9000:30;8997:117;;;9033:79;;:::i;:::-;8997:117;9138:62;9192:7;9183:6;9172:9;9168:22;9138:62;:::i;:::-;9128:72;;8923:287;8274:943;;;;;;;:::o;9223:468::-;9288:6;9296;9345:2;9333:9;9324:7;9320:23;9316:32;9313:119;;;9351:79;;:::i;:::-;9313:119;9471:1;9496:53;9541:7;9532:6;9521:9;9517:22;9496:53;:::i;:::-;9486:63;;9442:117;9598:2;9624:50;9666:7;9657:6;9646:9;9642:22;9624:50;:::i;:::-;9614:60;;9569:115;9223:468;;;;;:::o;9697:611::-;9770:6;9778;9786;9835:2;9823:9;9814:7;9810:23;9806:32;9803:119;;;9841:79;;:::i;:::-;9803:119;9961:1;9986:53;10031:7;10022:6;10011:9;10007:22;9986:53;:::i;:::-;9976:63;;9932:117;10088:2;10114:52;10158:7;10149:6;10138:9;10134:22;10114:52;:::i;:::-;10104:62;;10059:117;10215:2;10241:50;10283:7;10274:6;10263:9;10259:22;10241:50;:::i;:::-;10231:60;;10186:115;9697:611;;;;;:::o;10314:1781::-;10476:6;10484;10492;10500;10508;10516;10524;10573:3;10561:9;10552:7;10548:23;10544:33;10541:120;;;10580:79;;:::i;:::-;10541:120;10700:1;10725:53;10770:7;10761:6;10750:9;10746:22;10725:53;:::i;:::-;10715:63;;10671:117;10827:2;10853:52;10897:7;10888:6;10877:9;10873:22;10853:52;:::i;:::-;10843:62;;10798:117;10982:2;10971:9;10967:18;10954:32;11013:18;11005:6;11002:30;10999:117;;;11035:79;;:::i;:::-;10999:117;11140:62;11194:7;11185:6;11174:9;11170:22;11140:62;:::i;:::-;11130:72;;10925:287;11279:2;11268:9;11264:18;11251:32;11310:18;11302:6;11299:30;11296:117;;;11332:79;;:::i;:::-;11296:117;11437:77;11506:7;11497:6;11486:9;11482:22;11437:77;:::i;:::-;11427:87;;11222:302;11563:3;11590:61;11643:7;11634:6;11623:9;11619:22;11590:61;:::i;:::-;11580:71;;11534:127;11700:3;11727:53;11772:7;11763:6;11752:9;11748:22;11727:53;:::i;:::-;11717:63;;11671:119;11857:3;11846:9;11842:19;11829:33;11889:18;11881:6;11878:30;11875:117;;;11911:79;;:::i;:::-;11875:117;12016:62;12070:7;12061:6;12050:9;12046:22;12016:62;:::i;:::-;12006:72;;11800:288;10314:1781;;;;;;;;;;:::o;12101:474::-;12169:6;12177;12226:2;12214:9;12205:7;12201:23;12197:32;12194:119;;;12232:79;;:::i;:::-;12194:119;12352:1;12377:53;12422:7;12413:6;12402:9;12398:22;12377:53;:::i;:::-;12367:63;;12323:117;12479:2;12505:53;12550:7;12541:6;12530:9;12526:22;12505:53;:::i;:::-;12495:63;;12450:118;12101:474;;;;;:::o;12581:327::-;12639:6;12688:2;12676:9;12667:7;12663:23;12659:32;12656:119;;;12694:79;;:::i;:::-;12656:119;12814:1;12839:52;12883:7;12874:6;12863:9;12859:22;12839:52;:::i;:::-;12829:62;;12785:116;12581:327;;;;:::o;12914:349::-;12983:6;13032:2;13020:9;13011:7;13007:23;13003:32;13000:119;;;13038:79;;:::i;:::-;13000:119;13158:1;13183:63;13238:7;13229:6;13218:9;13214:22;13183:63;:::i;:::-;13173:73;;13129:127;12914:349;;;;:::o;13269:522::-;13348:6;13397:2;13385:9;13376:7;13372:23;13368:32;13365:119;;;13403:79;;:::i;:::-;13365:119;13544:1;13533:9;13529:17;13523:24;13574:18;13566:6;13563:30;13560:117;;;13596:79;;:::i;:::-;13560:117;13701:73;13766:7;13757:6;13746:9;13742:22;13701:73;:::i;:::-;13691:83;;13494:290;13269:522;;;;:::o;13797:879::-;13909:6;13917;13966:2;13954:9;13945:7;13941:23;13937:32;13934:119;;;13972:79;;:::i;:::-;13934:119;14113:1;14102:9;14098:17;14092:24;14143:18;14135:6;14132:30;14129:117;;;14165:79;;:::i;:::-;14129:117;14270:73;14335:7;14326:6;14315:9;14311:22;14270:73;:::i;:::-;14260:83;;14063:290;14413:2;14402:9;14398:18;14392:25;14444:18;14436:6;14433:30;14430:117;;;14466:79;;:::i;:::-;14430:117;14571:88;14651:7;14642:6;14631:9;14627:22;14571:88;:::i;:::-;14561:98;;14363:306;13797:879;;;;;:::o;14682:509::-;14751:6;14800:2;14788:9;14779:7;14775:23;14771:32;14768:119;;;14806:79;;:::i;:::-;14768:119;14954:1;14943:9;14939:17;14926:31;14984:18;14976:6;14973:30;14970:117;;;15006:79;;:::i;:::-;14970:117;15111:63;15166:7;15157:6;15146:9;15142:22;15111:63;:::i;:::-;15101:73;;14897:287;14682:509;;;;:::o;15197:327::-;15255:6;15304:2;15292:9;15283:7;15279:23;15275:32;15272:119;;;15310:79;;:::i;:::-;15272:119;15430:1;15455:52;15499:7;15490:6;15479:9;15475:22;15455:52;:::i;:::-;15445:62;;15401:116;15197:327;;;;:::o;15530:670::-;15608:6;15616;15624;15673:2;15661:9;15652:7;15648:23;15644:32;15641:119;;;15679:79;;:::i;:::-;15641:119;15799:1;15824:52;15868:7;15859:6;15848:9;15844:22;15824:52;:::i;:::-;15814:62;;15770:116;15953:2;15942:9;15938:18;15925:32;15984:18;15976:6;15973:30;15970:117;;;16006:79;;:::i;:::-;15970:117;16119:64;16175:7;16166:6;16155:9;16151:22;16119:64;:::i;:::-;16101:82;;;;15896:297;15530:670;;;;;:::o;16206:1467::-;16339:6;16347;16355;16363;16371;16420:3;16408:9;16399:7;16395:23;16391:33;16388:120;;;16427:79;;:::i;:::-;16388:120;16547:1;16572:52;16616:7;16607:6;16596:9;16592:22;16572:52;:::i;:::-;16562:62;;16518:116;16701:2;16690:9;16686:18;16673:32;16732:18;16724:6;16721:30;16718:117;;;16754:79;;:::i;:::-;16718:117;16859:62;16913:7;16904:6;16893:9;16889:22;16859:62;:::i;:::-;16849:72;;16644:287;16998:2;16987:9;16983:18;16970:32;17029:18;17021:6;17018:30;17015:117;;;17051:79;;:::i;:::-;17015:117;17156:77;17225:7;17216:6;17205:9;17201:22;17156:77;:::i;:::-;17146:87;;16941:302;17282:2;17308:50;17350:7;17341:6;17330:9;17326:22;17308:50;:::i;:::-;17298:60;;17253:115;17435:3;17424:9;17420:19;17407:33;17467:18;17459:6;17456:30;17453:117;;;17489:79;;:::i;:::-;17453:117;17594:62;17648:7;17639:6;17628:9;17624:22;17594:62;:::i;:::-;17584:72;;17378:288;16206:1467;;;;;;;;:::o;17679:793::-;17763:6;17771;17779;17828:2;17816:9;17807:7;17803:23;17799:32;17796:119;;;17834:79;;:::i;:::-;17796:119;17954:1;17979:52;18023:7;18014:6;18003:9;17999:22;17979:52;:::i;:::-;17969:62;;17925:116;18108:2;18097:9;18093:18;18080:32;18139:18;18131:6;18128:30;18125:117;;;18161:79;;:::i;:::-;18125:117;18266:62;18320:7;18311:6;18300:9;18296:22;18266:62;:::i;:::-;18256:72;;18051:287;18377:2;18403:52;18447:7;18438:6;18427:9;18423:22;18403:52;:::i;:::-;18393:62;;18348:117;17679:793;;;;;:::o;18478:1117::-;18580:6;18588;18596;18604;18653:3;18641:9;18632:7;18628:23;18624:33;18621:120;;;18660:79;;:::i;:::-;18621:120;18780:1;18805:52;18849:7;18840:6;18829:9;18825:22;18805:52;:::i;:::-;18795:62;;18751:116;18934:2;18923:9;18919:18;18906:32;18965:18;18957:6;18954:30;18951:117;;;18987:79;;:::i;:::-;18951:117;19092:62;19146:7;19137:6;19126:9;19122:22;19092:62;:::i;:::-;19082:72;;18877:287;19203:2;19229:52;19273:7;19264:6;19253:9;19249:22;19229:52;:::i;:::-;19219:62;;19174:117;19358:2;19347:9;19343:18;19330:32;19389:18;19381:6;19378:30;19375:117;;;19411:79;;:::i;:::-;19375:117;19516:62;19570:7;19561:6;19550:9;19546:22;19516:62;:::i;:::-;19506:72;;19301:287;18478:1117;;;;;;;:::o;19601:761::-;19685:6;19693;19701;19709;19758:3;19746:9;19737:7;19733:23;19729:33;19726:120;;;19765:79;;:::i;:::-;19726:120;19885:1;19910:52;19954:7;19945:6;19934:9;19930:22;19910:52;:::i;:::-;19900:62;;19856:116;20011:2;20037:52;20081:7;20072:6;20061:9;20057:22;20037:52;:::i;:::-;20027:62;;19982:117;20138:2;20164:53;20209:7;20200:6;20189:9;20185:22;20164:53;:::i;:::-;20154:63;;20109:118;20266:2;20292:53;20337:7;20328:6;20317:9;20313:22;20292:53;:::i;:::-;20282:63;;20237:118;19601:761;;;;;;;:::o;20368:959::-;20463:6;20471;20479;20487;20495;20544:3;20532:9;20523:7;20519:23;20515:33;20512:120;;;20551:79;;:::i;:::-;20512:120;20671:1;20696:52;20740:7;20731:6;20720:9;20716:22;20696:52;:::i;:::-;20686:62;;20642:116;20797:2;20823:52;20867:7;20858:6;20847:9;20843:22;20823:52;:::i;:::-;20813:62;;20768:117;20924:2;20950:53;20995:7;20986:6;20975:9;20971:22;20950:53;:::i;:::-;20940:63;;20895:118;21080:2;21069:9;21065:18;21052:32;21111:18;21103:6;21100:30;21097:117;;;21133:79;;:::i;:::-;21097:117;21246:64;21302:7;21293:6;21282:9;21278:22;21246:64;:::i;:::-;21228:82;;;;21023:297;20368:959;;;;;;;;:::o;21333:329::-;21392:6;21441:2;21429:9;21420:7;21416:23;21412:32;21409:119;;;21447:79;;:::i;:::-;21409:119;21567:1;21592:53;21637:7;21628:6;21617:9;21613:22;21592:53;:::i;:::-;21582:63;;21538:117;21333:329;;;;:::o;21668:507::-;21747:6;21755;21804:2;21792:9;21783:7;21779:23;21775:32;21772:119;;;21810:79;;:::i;:::-;21772:119;21930:1;21955:64;22011:7;22002:6;21991:9;21987:22;21955:64;:::i;:::-;21945:74;;21901:128;22068:2;22094:64;22150:7;22141:6;22130:9;22126:22;22094:64;:::i;:::-;22084:74;;22039:129;21668:507;;;;;:::o;22181:349::-;22250:6;22299:2;22287:9;22278:7;22274:23;22270:32;22267:119;;;22305:79;;:::i;:::-;22267:119;22425:1;22450:63;22505:7;22496:6;22485:9;22481:22;22450:63;:::i;:::-;22440:73;;22396:127;22181:349;;;;:::o;22536:175::-;22603:10;22624:44;22664:3;22656:6;22624:44;:::i;:::-;22700:4;22695:3;22691:14;22677:28;;22536:175;;;;:::o;22717:142::-;22820:32;22846:5;22820:32;:::i;:::-;22815:3;22808:45;22717:142;;:::o;22865:118::-;22952:24;22970:5;22952:24;:::i;:::-;22947:3;22940:37;22865:118;;:::o;23017:724::-;23134:3;23163:53;23210:5;23163:53;:::i;:::-;23232:85;23310:6;23305:3;23232:85;:::i;:::-;23225:92;;23341:55;23390:5;23341:55;:::i;:::-;23419:7;23450:1;23435:281;23460:6;23457:1;23454:13;23435:281;;;23536:6;23530:13;23563:61;23620:3;23605:13;23563:61;:::i;:::-;23556:68;;23647:59;23699:6;23647:59;:::i;:::-;23637:69;;23495:221;23482:1;23479;23475:9;23470:14;;23435:281;;;23439:14;23732:3;23725:10;;23139:602;;;23017:724;;;;:::o;23747:109::-;23828:21;23843:5;23828:21;:::i;:::-;23823:3;23816:34;23747:109;;:::o;23862:118::-;23949:24;23967:5;23949:24;:::i;:::-;23944:3;23937:37;23862:118;;:::o;24008:301::-;24104:3;24125:70;24188:6;24183:3;24125:70;:::i;:::-;24118:77;;24205:43;24241:6;24236:3;24229:5;24205:43;:::i;:::-;24273:29;24295:6;24273:29;:::i;:::-;24268:3;24264:39;24257:46;;24008:301;;;;;:::o;24337:314::-;24451:3;24472:88;24553:6;24548:3;24472:88;:::i;:::-;24465:95;;24570:43;24606:6;24601:3;24594:5;24570:43;:::i;:::-;24638:6;24633:3;24629:16;24622:23;;24337:314;;;;;:::o;24657:360::-;24743:3;24771:38;24803:5;24771:38;:::i;:::-;24825:70;24888:6;24883:3;24825:70;:::i;:::-;24818:77;;24904:52;24949:6;24944:3;24937:4;24930:5;24926:16;24904:52;:::i;:::-;24981:29;25003:6;24981:29;:::i;:::-;24976:3;24972:39;24965:46;;24747:270;24657:360;;;;:::o;25023:373::-;25127:3;25155:38;25187:5;25155:38;:::i;:::-;25209:88;25290:6;25285:3;25209:88;:::i;:::-;25202:95;;25306:52;25351:6;25346:3;25339:4;25332:5;25328:16;25306:52;:::i;:::-;25383:6;25378:3;25374:16;25367:23;;25131:265;25023:373;;;;:::o;25402:183::-;25515:63;25572:5;25515:63;:::i;:::-;25510:3;25503:76;25402:183;;:::o;25591:364::-;25679:3;25707:39;25740:5;25707:39;:::i;:::-;25762:71;25826:6;25821:3;25762:71;:::i;:::-;25755:78;;25842:52;25887:6;25882:3;25875:4;25868:5;25864:16;25842:52;:::i;:::-;25919:29;25941:6;25919:29;:::i;:::-;25914:3;25910:39;25903:46;;25683:272;25591:364;;;;:::o;25961:377::-;26067:3;26095:39;26128:5;26095:39;:::i;:::-;26150:89;26232:6;26227:3;26150:89;:::i;:::-;26143:96;;26248:52;26293:6;26288:3;26281:4;26274:5;26270:16;26248:52;:::i;:::-;26325:6;26320:3;26316:16;26309:23;;26071:267;25961:377;;;;:::o;26368:845::-;26471:3;26508:5;26502:12;26537:36;26563:9;26537:36;:::i;:::-;26589:89;26671:6;26666:3;26589:89;:::i;:::-;26582:96;;26709:1;26698:9;26694:17;26725:1;26720:137;;;;26871:1;26866:341;;;;26687:520;;26720:137;26804:4;26800:9;26789;26785:25;26780:3;26773:38;26840:6;26835:3;26831:16;26824:23;;26720:137;;26866:341;26933:38;26965:5;26933:38;:::i;:::-;26993:1;27007:154;27021:6;27018:1;27015:13;27007:154;;;27095:7;27089:14;27085:1;27080:3;27076:11;27069:35;27145:1;27136:7;27132:15;27121:26;;27043:4;27040:1;27036:12;27031:17;;27007:154;;;27190:6;27185:3;27181:16;27174:23;;26873:334;;26687:520;;26475:738;;26368:845;;;;:::o;27219:366::-;27361:3;27382:67;27446:2;27441:3;27382:67;:::i;:::-;27375:74;;27458:93;27547:3;27458:93;:::i;:::-;27576:2;27571:3;27567:12;27560:19;;27219:366;;;:::o;27591:::-;27733:3;27754:67;27818:2;27813:3;27754:67;:::i;:::-;27747:74;;27830:93;27919:3;27830:93;:::i;:::-;27948:2;27943:3;27939:12;27932:19;;27591:366;;;:::o;27963:::-;28105:3;28126:67;28190:2;28185:3;28126:67;:::i;:::-;28119:74;;28202:93;28291:3;28202:93;:::i;:::-;28320:2;28315:3;28311:12;28304:19;;27963:366;;;:::o;28335:::-;28477:3;28498:67;28562:2;28557:3;28498:67;:::i;:::-;28491:74;;28574:93;28663:3;28574:93;:::i;:::-;28692:2;28687:3;28683:12;28676:19;;28335:366;;;:::o;28707:::-;28849:3;28870:67;28934:2;28929:3;28870:67;:::i;:::-;28863:74;;28946:93;29035:3;28946:93;:::i;:::-;29064:2;29059:3;29055:12;29048:19;;28707:366;;;:::o;29079:::-;29221:3;29242:67;29306:2;29301:3;29242:67;:::i;:::-;29235:74;;29318:93;29407:3;29318:93;:::i;:::-;29436:2;29431:3;29427:12;29420:19;;29079:366;;;:::o;29451:::-;29593:3;29614:67;29678:2;29673:3;29614:67;:::i;:::-;29607:74;;29690:93;29779:3;29690:93;:::i;:::-;29808:2;29803:3;29799:12;29792:19;;29451:366;;;:::o;29823:::-;29965:3;29986:67;30050:2;30045:3;29986:67;:::i;:::-;29979:74;;30062:93;30151:3;30062:93;:::i;:::-;30180:2;30175:3;30171:12;30164:19;;29823:366;;;:::o;30195:::-;30337:3;30358:67;30422:2;30417:3;30358:67;:::i;:::-;30351:74;;30434:93;30523:3;30434:93;:::i;:::-;30552:2;30547:3;30543:12;30536:19;;30195:366;;;:::o;30567:::-;30709:3;30730:67;30794:2;30789:3;30730:67;:::i;:::-;30723:74;;30806:93;30895:3;30806:93;:::i;:::-;30924:2;30919:3;30915:12;30908:19;;30567:366;;;:::o;30939:::-;31081:3;31102:67;31166:2;31161:3;31102:67;:::i;:::-;31095:74;;31178:93;31267:3;31178:93;:::i;:::-;31296:2;31291:3;31287:12;31280:19;;30939:366;;;:::o;31311:::-;31453:3;31474:67;31538:2;31533:3;31474:67;:::i;:::-;31467:74;;31550:93;31639:3;31550:93;:::i;:::-;31668:2;31663:3;31659:12;31652:19;;31311:366;;;:::o;31683:::-;31825:3;31846:67;31910:2;31905:3;31846:67;:::i;:::-;31839:74;;31922:93;32011:3;31922:93;:::i;:::-;32040:2;32035:3;32031:12;32024:19;;31683:366;;;:::o;32055:::-;32197:3;32218:67;32282:2;32277:3;32218:67;:::i;:::-;32211:74;;32294:93;32383:3;32294:93;:::i;:::-;32412:2;32407:3;32403:12;32396:19;;32055:366;;;:::o;32427:::-;32569:3;32590:67;32654:2;32649:3;32590:67;:::i;:::-;32583:74;;32666:93;32755:3;32666:93;:::i;:::-;32784:2;32779:3;32775:12;32768:19;;32427:366;;;:::o;32799:::-;32941:3;32962:67;33026:2;33021:3;32962:67;:::i;:::-;32955:74;;33038:93;33127:3;33038:93;:::i;:::-;33156:2;33151:3;33147:12;33140:19;;32799:366;;;:::o;33171:::-;33313:3;33334:67;33398:2;33393:3;33334:67;:::i;:::-;33327:74;;33410:93;33499:3;33410:93;:::i;:::-;33528:2;33523:3;33519:12;33512:19;;33171:366;;;:::o;33543:::-;33685:3;33706:67;33770:2;33765:3;33706:67;:::i;:::-;33699:74;;33782:93;33871:3;33782:93;:::i;:::-;33900:2;33895:3;33891:12;33884:19;;33543:366;;;:::o;33915:::-;34057:3;34078:67;34142:2;34137:3;34078:67;:::i;:::-;34071:74;;34154:93;34243:3;34154:93;:::i;:::-;34272:2;34267:3;34263:12;34256:19;;33915:366;;;:::o;34287:::-;34429:3;34450:67;34514:2;34509:3;34450:67;:::i;:::-;34443:74;;34526:93;34615:3;34526:93;:::i;:::-;34644:2;34639:3;34635:12;34628:19;;34287:366;;;:::o;34659:::-;34801:3;34822:67;34886:2;34881:3;34822:67;:::i;:::-;34815:74;;34898:93;34987:3;34898:93;:::i;:::-;35016:2;35011:3;35007:12;35000:19;;34659:366;;;:::o;35031:::-;35173:3;35194:67;35258:2;35253:3;35194:67;:::i;:::-;35187:74;;35270:93;35359:3;35270:93;:::i;:::-;35388:2;35383:3;35379:12;35372:19;;35031:366;;;:::o;35403:::-;35545:3;35566:67;35630:2;35625:3;35566:67;:::i;:::-;35559:74;;35642:93;35731:3;35642:93;:::i;:::-;35760:2;35755:3;35751:12;35744:19;;35403:366;;;:::o;35775:::-;35917:3;35938:67;36002:2;35997:3;35938:67;:::i;:::-;35931:74;;36014:93;36103:3;36014:93;:::i;:::-;36132:2;36127:3;36123:12;36116:19;;35775:366;;;:::o;36147:::-;36289:3;36310:67;36374:2;36369:3;36310:67;:::i;:::-;36303:74;;36386:93;36475:3;36386:93;:::i;:::-;36504:2;36499:3;36495:12;36488:19;;36147:366;;;:::o;36519:105::-;36594:23;36611:5;36594:23;:::i;:::-;36589:3;36582:36;36519:105;;:::o;36630:115::-;36715:23;36732:5;36715:23;:::i;:::-;36710:3;36703:36;36630:115;;:::o;36751:118::-;36838:24;36856:5;36838:24;:::i;:::-;36833:3;36826:37;36751:118;;:::o;36875:115::-;36960:23;36977:5;36960:23;:::i;:::-;36955:3;36948:36;36875:115;;:::o;36996:291::-;37136:3;37158:103;37257:3;37248:6;37240;37158:103;:::i;:::-;37151:110;;37278:3;37271:10;;36996:291;;;;;:::o;37293:271::-;37423:3;37445:93;37534:3;37525:6;37445:93;:::i;:::-;37438:100;;37555:3;37548:10;;37293:271;;;;:::o;37570:429::-;37747:3;37769:92;37857:3;37848:6;37769:92;:::i;:::-;37762:99;;37878:95;37969:3;37960:6;37878:95;:::i;:::-;37871:102;;37990:3;37983:10;;37570:429;;;;;:::o;38005:222::-;38098:4;38136:2;38125:9;38121:18;38113:26;;38149:71;38217:1;38206:9;38202:17;38193:6;38149:71;:::i;:::-;38005:222;;;;:::o;38233:640::-;38428:4;38466:3;38455:9;38451:19;38443:27;;38480:71;38548:1;38537:9;38533:17;38524:6;38480:71;:::i;:::-;38561:72;38629:2;38618:9;38614:18;38605:6;38561:72;:::i;:::-;38643;38711:2;38700:9;38696:18;38687:6;38643:72;:::i;:::-;38762:9;38756:4;38752:20;38747:2;38736:9;38732:18;38725:48;38790:76;38861:4;38852:6;38790:76;:::i;:::-;38782:84;;38233:640;;;;;;;:::o;38879:475::-;39046:4;39084:2;39073:9;39069:18;39061:26;;39133:9;39127:4;39123:20;39119:1;39108:9;39104:17;39097:47;39161:106;39262:4;39253:6;39161:106;:::i;:::-;39153:114;;39277:70;39343:2;39332:9;39328:18;39319:6;39277:70;:::i;:::-;38879:475;;;;;:::o;39360:210::-;39447:4;39485:2;39474:9;39470:18;39462:26;;39498:65;39560:1;39549:9;39545:17;39536:6;39498:65;:::i;:::-;39360:210;;;;:::o;39576:222::-;39669:4;39707:2;39696:9;39692:18;39684:26;;39720:71;39788:1;39777:9;39773:17;39764:6;39720:71;:::i;:::-;39576:222;;;;:::o;39804:309::-;39915:4;39953:2;39942:9;39938:18;39930:26;;40002:9;39996:4;39992:20;39988:1;39977:9;39973:17;39966:47;40030:76;40101:4;40092:6;40030:76;:::i;:::-;40022:84;;39804:309;;;;:::o;40119:566::-;40306:4;40344:2;40333:9;40329:18;40321:26;;40393:9;40387:4;40383:20;40379:1;40368:9;40364:17;40357:47;40421:76;40492:4;40483:6;40421:76;:::i;:::-;40413:84;;40544:9;40538:4;40534:20;40529:2;40518:9;40514:18;40507:48;40572:106;40673:4;40664:6;40572:106;:::i;:::-;40564:114;;40119:566;;;;;:::o;40691:274::-;40810:4;40848:2;40837:9;40833:18;40825:26;;40861:97;40955:1;40944:9;40940:17;40931:6;40861:97;:::i;:::-;40691:274;;;;:::o;40971:313::-;41084:4;41122:2;41111:9;41107:18;41099:26;;41171:9;41165:4;41161:20;41157:1;41146:9;41142:17;41135:47;41199:78;41272:4;41263:6;41199:78;:::i;:::-;41191:86;;40971:313;;;;:::o;41290:419::-;41456:4;41494:2;41483:9;41479:18;41471:26;;41543:9;41537:4;41533:20;41529:1;41518:9;41514:17;41507:47;41571:131;41697:4;41571:131;:::i;:::-;41563:139;;41290:419;;;:::o;41715:::-;41881:4;41919:2;41908:9;41904:18;41896:26;;41968:9;41962:4;41958:20;41954:1;41943:9;41939:17;41932:47;41996:131;42122:4;41996:131;:::i;:::-;41988:139;;41715:419;;;:::o;42140:::-;42306:4;42344:2;42333:9;42329:18;42321:26;;42393:9;42387:4;42383:20;42379:1;42368:9;42364:17;42357:47;42421:131;42547:4;42421:131;:::i;:::-;42413:139;;42140:419;;;:::o;42565:::-;42731:4;42769:2;42758:9;42754:18;42746:26;;42818:9;42812:4;42808:20;42804:1;42793:9;42789:17;42782:47;42846:131;42972:4;42846:131;:::i;:::-;42838:139;;42565:419;;;:::o;42990:::-;43156:4;43194:2;43183:9;43179:18;43171:26;;43243:9;43237:4;43233:20;43229:1;43218:9;43214:17;43207:47;43271:131;43397:4;43271:131;:::i;:::-;43263:139;;42990:419;;;:::o;43415:::-;43581:4;43619:2;43608:9;43604:18;43596:26;;43668:9;43662:4;43658:20;43654:1;43643:9;43639:17;43632:47;43696:131;43822:4;43696:131;:::i;:::-;43688:139;;43415:419;;;:::o;43840:::-;44006:4;44044:2;44033:9;44029:18;44021:26;;44093:9;44087:4;44083:20;44079:1;44068:9;44064:17;44057:47;44121:131;44247:4;44121:131;:::i;:::-;44113:139;;43840:419;;;:::o;44265:::-;44431:4;44469:2;44458:9;44454:18;44446:26;;44518:9;44512:4;44508:20;44504:1;44493:9;44489:17;44482:47;44546:131;44672:4;44546:131;:::i;:::-;44538:139;;44265:419;;;:::o;44690:::-;44856:4;44894:2;44883:9;44879:18;44871:26;;44943:9;44937:4;44933:20;44929:1;44918:9;44914:17;44907:47;44971:131;45097:4;44971:131;:::i;:::-;44963:139;;44690:419;;;:::o;45115:::-;45281:4;45319:2;45308:9;45304:18;45296:26;;45368:9;45362:4;45358:20;45354:1;45343:9;45339:17;45332:47;45396:131;45522:4;45396:131;:::i;:::-;45388:139;;45115:419;;;:::o;45540:::-;45706:4;45744:2;45733:9;45729:18;45721:26;;45793:9;45787:4;45783:20;45779:1;45768:9;45764:17;45757:47;45821:131;45947:4;45821:131;:::i;:::-;45813:139;;45540:419;;;:::o;45965:::-;46131:4;46169:2;46158:9;46154:18;46146:26;;46218:9;46212:4;46208:20;46204:1;46193:9;46189:17;46182:47;46246:131;46372:4;46246:131;:::i;:::-;46238:139;;45965:419;;;:::o;46390:::-;46556:4;46594:2;46583:9;46579:18;46571:26;;46643:9;46637:4;46633:20;46629:1;46618:9;46614:17;46607:47;46671:131;46797:4;46671:131;:::i;:::-;46663:139;;46390:419;;;:::o;46815:::-;46981:4;47019:2;47008:9;47004:18;46996:26;;47068:9;47062:4;47058:20;47054:1;47043:9;47039:17;47032:47;47096:131;47222:4;47096:131;:::i;:::-;47088:139;;46815:419;;;:::o;47240:::-;47406:4;47444:2;47433:9;47429:18;47421:26;;47493:9;47487:4;47483:20;47479:1;47468:9;47464:17;47457:47;47521:131;47647:4;47521:131;:::i;:::-;47513:139;;47240:419;;;:::o;47665:::-;47831:4;47869:2;47858:9;47854:18;47846:26;;47918:9;47912:4;47908:20;47904:1;47893:9;47889:17;47882:47;47946:131;48072:4;47946:131;:::i;:::-;47938:139;;47665:419;;;:::o;48090:::-;48256:4;48294:2;48283:9;48279:18;48271:26;;48343:9;48337:4;48333:20;48329:1;48318:9;48314:17;48307:47;48371:131;48497:4;48371:131;:::i;:::-;48363:139;;48090:419;;;:::o;48515:::-;48681:4;48719:2;48708:9;48704:18;48696:26;;48768:9;48762:4;48758:20;48754:1;48743:9;48739:17;48732:47;48796:131;48922:4;48796:131;:::i;:::-;48788:139;;48515:419;;;:::o;48940:::-;49106:4;49144:2;49133:9;49129:18;49121:26;;49193:9;49187:4;49183:20;49179:1;49168:9;49164:17;49157:47;49221:131;49347:4;49221:131;:::i;:::-;49213:139;;48940:419;;;:::o;49365:::-;49531:4;49569:2;49558:9;49554:18;49546:26;;49618:9;49612:4;49608:20;49604:1;49593:9;49589:17;49582:47;49646:131;49772:4;49646:131;:::i;:::-;49638:139;;49365:419;;;:::o;49790:::-;49956:4;49994:2;49983:9;49979:18;49971:26;;50043:9;50037:4;50033:20;50029:1;50018:9;50014:17;50007:47;50071:131;50197:4;50071:131;:::i;:::-;50063:139;;49790:419;;;:::o;50215:::-;50381:4;50419:2;50408:9;50404:18;50396:26;;50468:9;50462:4;50458:20;50454:1;50443:9;50439:17;50432:47;50496:131;50622:4;50496:131;:::i;:::-;50488:139;;50215:419;;;:::o;50640:::-;50806:4;50844:2;50833:9;50829:18;50821:26;;50893:9;50887:4;50883:20;50879:1;50868:9;50864:17;50857:47;50921:131;51047:4;50921:131;:::i;:::-;50913:139;;50640:419;;;:::o;51065:::-;51231:4;51269:2;51258:9;51254:18;51246:26;;51318:9;51312:4;51308:20;51304:1;51293:9;51289:17;51282:47;51346:131;51472:4;51346:131;:::i;:::-;51338:139;;51065:419;;;:::o;51490:::-;51656:4;51694:2;51683:9;51679:18;51671:26;;51743:9;51737:4;51733:20;51729:1;51718:9;51714:17;51707:47;51771:131;51897:4;51771:131;:::i;:::-;51763:139;;51490:419;;;:::o;51915:218::-;52006:4;52044:2;52033:9;52029:18;52021:26;;52057:69;52123:1;52112:9;52108:17;52099:6;52057:69;:::i;:::-;51915:218;;;;:::o;52139:328::-;52258:4;52296:2;52285:9;52281:18;52273:26;;52309:69;52375:1;52364:9;52360:17;52351:6;52309:69;:::i;:::-;52388:72;52456:2;52445:9;52441:18;52432:6;52388:72;:::i;:::-;52139:328;;;;;:::o;52473:822::-;52706:4;52744:3;52733:9;52729:19;52721:27;;52758:69;52824:1;52813:9;52809:17;52800:6;52758:69;:::i;:::-;52837:72;52905:2;52894:9;52890:18;52881:6;52837:72;:::i;:::-;52956:9;52950:4;52946:20;52941:2;52930:9;52926:18;52919:48;52984:76;53055:4;53046:6;52984:76;:::i;:::-;52976:84;;53070:66;53132:2;53121:9;53117:18;53108:6;53070:66;:::i;:::-;53184:9;53178:4;53174:20;53168:3;53157:9;53153:19;53146:49;53212:76;53283:4;53274:6;53212:76;:::i;:::-;53204:84;;52473:822;;;;;;;;:::o;53301:435::-;53448:4;53486:2;53475:9;53471:18;53463:26;;53499:69;53565:1;53554:9;53550:17;53541:6;53499:69;:::i;:::-;53615:9;53609:4;53605:20;53600:2;53589:9;53585:18;53578:48;53643:86;53724:4;53715:6;53707;53643:86;:::i;:::-;53635:94;;53301:435;;;;;;:::o;53742:1064::-;54043:4;54081:3;54070:9;54066:19;54058:27;;54095:69;54161:1;54150:9;54146:17;54137:6;54095:69;:::i;:::-;54211:9;54205:4;54201:20;54196:2;54185:9;54181:18;54174:48;54239:76;54310:4;54301:6;54239:76;:::i;:::-;54231:84;;54362:9;54356:4;54352:20;54347:2;54336:9;54332:18;54325:48;54390:76;54461:4;54452:6;54390:76;:::i;:::-;54382:84;;54476:88;54560:2;54549:9;54545:18;54536:6;54476:88;:::i;:::-;54574:73;54642:3;54631:9;54627:19;54618:6;54574:73;:::i;:::-;54695:9;54689:4;54685:20;54679:3;54668:9;54664:19;54657:49;54723:76;54794:4;54785:6;54723:76;:::i;:::-;54715:84;;53742:1064;;;;;;;;;:::o;54812:719::-;55021:4;55059:3;55048:9;55044:19;55036:27;;55073:69;55139:1;55128:9;55124:17;55115:6;55073:69;:::i;:::-;55189:9;55183:4;55179:20;55174:2;55163:9;55159:18;55152:48;55217:76;55288:4;55279:6;55217:76;:::i;:::-;55209:84;;55303:70;55369:2;55358:9;55354:18;55345:6;55303:70;:::i;:::-;55420:9;55414:4;55410:20;55405:2;55394:9;55390:18;55383:48;55448:76;55519:4;55510:6;55448:76;:::i;:::-;55440:84;;54812:719;;;;;;;:::o;55537:545::-;55710:4;55748:3;55737:9;55733:19;55725:27;;55762:69;55828:1;55817:9;55813:17;55804:6;55762:69;:::i;:::-;55841:70;55907:2;55896:9;55892:18;55883:6;55841:70;:::i;:::-;55921:72;55989:2;55978:9;55974:18;55965:6;55921:72;:::i;:::-;56003;56071:2;56060:9;56056:18;56047:6;56003:72;:::i;:::-;55537:545;;;;;;;:::o;56088:652::-;56289:4;56327:3;56316:9;56312:19;56304:27;;56341:69;56407:1;56396:9;56392:17;56383:6;56341:69;:::i;:::-;56420:70;56486:2;56475:9;56471:18;56462:6;56420:70;:::i;:::-;56500:72;56568:2;56557:9;56553:18;56544:6;56500:72;:::i;:::-;56619:9;56613:4;56609:20;56604:2;56593:9;56589:18;56582:48;56647:86;56728:4;56719:6;56711;56647:86;:::i;:::-;56639:94;;56088:652;;;;;;;;:::o;56746:222::-;56839:4;56877:2;56866:9;56862:18;56854:26;;56890:71;56958:1;56947:9;56943:17;56934:6;56890:71;:::i;:::-;56746:222;;;;:::o;56974:332::-;57095:4;57133:2;57122:9;57118:18;57110:26;;57146:71;57214:1;57203:9;57199:17;57190:6;57146:71;:::i;:::-;57227:72;57295:2;57284:9;57280:18;57271:6;57227:72;:::i;:::-;56974:332;;;;;:::o;57312:129::-;57346:6;57373:20;;:::i;:::-;57363:30;;57402:33;57430:4;57422:6;57402:33;:::i;:::-;57312:129;;;:::o;57447:75::-;57480:6;57513:2;57507:9;57497:19;;57447:75;:::o;57528:310::-;57604:4;57694:18;57686:6;57683:30;57680:56;;;57716:18;;:::i;:::-;57680:56;57766:4;57758:6;57754:17;57746:25;;57826:4;57820;57816:15;57808:23;;57528:310;;;:::o;57844:307::-;57905:4;57995:18;57987:6;57984:30;57981:56;;;58017:18;;:::i;:::-;57981:56;58055:29;58077:6;58055:29;:::i;:::-;58047:37;;58139:4;58133;58129:15;58121:23;;57844:307;;;:::o;58157:308::-;58219:4;58309:18;58301:6;58298:30;58295:56;;;58331:18;;:::i;:::-;58295:56;58369:29;58391:6;58369:29;:::i;:::-;58361:37;;58453:4;58447;58443:15;58435:23;;58157:308;;;:::o;58471:131::-;58537:4;58560:3;58552:11;;58590:4;58585:3;58581:14;58573:22;;58471:131;;;:::o;58608:141::-;58657:4;58680:3;58672:11;;58703:3;58700:1;58693:14;58737:4;58734:1;58724:18;58716:26;;58608:141;;;:::o;58755:113::-;58821:6;58855:5;58849:12;58839:22;;58755:113;;;:::o;58874:98::-;58925:6;58959:5;58953:12;58943:22;;58874:98;;;:::o;58978:99::-;59030:6;59064:5;59058:12;59048:22;;58978:99;;;:::o;59083:112::-;59152:4;59184;59179:3;59175:14;59167:22;;59083:112;;;:::o;59201:183::-;59299:11;59333:6;59328:3;59321:19;59373:4;59368:3;59364:14;59349:29;;59201:183;;;;:::o;59390:168::-;59473:11;59507:6;59502:3;59495:19;59547:4;59542:3;59538:14;59523:29;;59390:168;;;;:::o;59564:147::-;59665:11;59702:3;59687:18;;59564:147;;;;:::o;59717:169::-;59801:11;59835:6;59830:3;59823:19;59875:4;59870:3;59866:14;59851:29;;59717:169;;;;:::o;59892:148::-;59994:11;60031:3;60016:18;;59892:148;;;;:::o;60046:305::-;60086:3;60105:20;60123:1;60105:20;:::i;:::-;60100:25;;60139:20;60157:1;60139:20;:::i;:::-;60134:25;;60293:1;60225:66;60221:74;60218:1;60215:81;60212:107;;;60299:18;;:::i;:::-;60212:107;60343:1;60340;60336:9;60329:16;;60046:305;;;;:::o;60357:185::-;60397:1;60414:20;60432:1;60414:20;:::i;:::-;60409:25;;60448:20;60466:1;60448:20;:::i;:::-;60443:25;;60487:1;60477:35;;60492:18;;:::i;:::-;60477:35;60534:1;60531;60527:9;60522:14;;60357:185;;;;:::o;60548:191::-;60588:4;60608:20;60626:1;60608:20;:::i;:::-;60603:25;;60642:20;60660:1;60642:20;:::i;:::-;60637:25;;60681:1;60678;60675:8;60672:34;;;60686:18;;:::i;:::-;60672:34;60731:1;60728;60724:9;60716:17;;60548:191;;;;:::o;60745:96::-;60782:7;60811:24;60829:5;60811:24;:::i;:::-;60800:35;;60745:96;;;:::o;60847:104::-;60892:7;60921:24;60939:5;60921:24;:::i;:::-;60910:35;;60847:104;;;:::o;60957:90::-;60991:7;61034:5;61027:13;61020:21;61009:32;;60957:90;;;:::o;61053:77::-;61090:7;61119:5;61108:16;;61053:77;;;:::o;61136:149::-;61172:7;61212:66;61205:5;61201:78;61190:89;;61136:149;;;:::o;61291:89::-;61327:7;61367:6;61360:5;61356:18;61345:29;;61291:89;;;:::o;61386:126::-;61423:7;61463:42;61456:5;61452:54;61441:65;;61386:126;;;:::o;61518:77::-;61555:7;61584:5;61573:16;;61518:77;;;:::o;61601:101::-;61637:7;61677:18;61670:5;61666:30;61655:41;;61601:101;;;:::o;61708:152::-;61784:9;61817:37;61848:5;61817:37;:::i;:::-;61804:50;;61708:152;;;:::o;61866:126::-;61916:9;61949:37;61980:5;61949:37;:::i;:::-;61936:50;;61866:126;;;:::o;61998:113::-;62048:9;62081:24;62099:5;62081:24;:::i;:::-;62068:37;;61998:113;;;:::o;62117:154::-;62201:6;62196:3;62191;62178:30;62263:1;62254:6;62249:3;62245:16;62238:27;62117:154;;;:::o;62277:307::-;62345:1;62355:113;62369:6;62366:1;62363:13;62355:113;;;62454:1;62449:3;62445:11;62439:18;62435:1;62430:3;62426:11;62419:39;62391:2;62388:1;62384:10;62379:15;;62355:113;;;62486:6;62483:1;62480:13;62477:101;;;62566:1;62557:6;62552:3;62548:16;62541:27;62477:101;62326:258;62277:307;;;:::o;62590:320::-;62634:6;62671:1;62665:4;62661:12;62651:22;;62718:1;62712:4;62708:12;62739:18;62729:81;;62795:4;62787:6;62783:17;62773:27;;62729:81;62857:2;62849:6;62846:14;62826:18;62823:38;62820:84;;;62876:18;;:::i;:::-;62820:84;62641:269;62590:320;;;:::o;62916:281::-;62999:27;63021:4;62999:27;:::i;:::-;62991:6;62987:40;63129:6;63117:10;63114:22;63093:18;63081:10;63078:34;63075:62;63072:88;;;63140:18;;:::i;:::-;63072:88;63180:10;63176:2;63169:22;62959:238;62916:281;;:::o;63203:233::-;63242:3;63265:24;63283:5;63265:24;:::i;:::-;63256:33;;63311:66;63304:5;63301:77;63298:103;;;63381:18;;:::i;:::-;63298:103;63428:1;63421:5;63417:13;63410:20;;63203:233;;;:::o;63442:176::-;63474:1;63491:20;63509:1;63491:20;:::i;:::-;63486:25;;63525:20;63543:1;63525:20;:::i;:::-;63520:25;;63564:1;63554:35;;63569:18;;:::i;:::-;63554:35;63610:1;63607;63603:9;63598:14;;63442:176;;;;:::o;63624:180::-;63672:77;63669:1;63662:88;63769:4;63766:1;63759:15;63793:4;63790:1;63783:15;63810:180;63858:77;63855:1;63848:88;63955:4;63952:1;63945:15;63979:4;63976:1;63969:15;63996:180;64044:77;64041:1;64034:88;64141:4;64138:1;64131:15;64165:4;64162:1;64155:15;64182:180;64230:77;64227:1;64220:88;64327:4;64324:1;64317:15;64351:4;64348:1;64341:15;64368:180;64416:77;64413:1;64406:88;64513:4;64510:1;64503:15;64537:4;64534:1;64527:15;64554:117;64663:1;64660;64653:12;64677:117;64786:1;64783;64776:12;64800:117;64909:1;64906;64899:12;64923:117;65032:1;65029;65022:12;65046:117;65155:1;65152;65145:12;65169:117;65278:1;65275;65268:12;65292:102;65333:6;65384:2;65380:7;65375:2;65368:5;65364:14;65360:28;65350:38;;65292:102;;;:::o;65400:225::-;65540:34;65536:1;65528:6;65524:14;65517:58;65609:8;65604:2;65596:6;65592:15;65585:33;65400:225;:::o;65631:237::-;65771:34;65767:1;65759:6;65755:14;65748:58;65840:20;65835:2;65827:6;65823:15;65816:45;65631:237;:::o;65874:225::-;66014:34;66010:1;66002:6;65998:14;65991:58;66083:8;66078:2;66070:6;66066:15;66059:33;65874:225;:::o;66105:178::-;66245:30;66241:1;66233:6;66229:14;66222:54;66105:178;:::o;66289:236::-;66429:34;66425:1;66417:6;66413:14;66406:58;66498:19;66493:2;66485:6;66481:15;66474:44;66289:236;:::o;66531:222::-;66671:34;66667:1;66659:6;66655:14;66648:58;66740:5;66735:2;66727:6;66723:15;66716:30;66531:222;:::o;66759:224::-;66899:34;66895:1;66887:6;66883:14;66876:58;66968:7;66963:2;66955:6;66951:15;66944:32;66759:224;:::o;66989:223::-;67129:34;67125:1;67117:6;67113:14;67106:58;67198:6;67193:2;67185:6;67181:15;67174:31;66989:223;:::o;67218:175::-;67358:27;67354:1;67346:6;67342:14;67335:51;67218:175;:::o;67399:231::-;67539:34;67535:1;67527:6;67523:14;67516:58;67608:14;67603:2;67595:6;67591:15;67584:39;67399:231;:::o;67636:235::-;67776:34;67772:1;67764:6;67760:14;67753:58;67845:18;67840:2;67832:6;67828:15;67821:43;67636:235;:::o;67877:243::-;68017:34;68013:1;68005:6;68001:14;67994:58;68086:26;68081:2;68073:6;68069:15;68062:51;67877:243;:::o;68126:229::-;68266:34;68262:1;68254:6;68250:14;68243:58;68335:12;68330:2;68322:6;68318:15;68311:37;68126:229;:::o;68361:228::-;68501:34;68497:1;68489:6;68485:14;68478:58;68570:11;68565:2;68557:6;68553:15;68546:36;68361:228;:::o;68595:175::-;68735:27;68731:1;68723:6;68719:14;68712:51;68595:175;:::o;68776:182::-;68916:34;68912:1;68904:6;68900:14;68893:58;68776:182;:::o;68964:231::-;69104:34;69100:1;69092:6;69088:14;69081:58;69173:14;69168:2;69160:6;69156:15;69149:39;68964:231;:::o;69201:182::-;69341:34;69337:1;69329:6;69325:14;69318:58;69201:182;:::o;69389:228::-;69529:34;69525:1;69517:6;69513:14;69506:58;69598:11;69593:2;69585:6;69581:15;69574:36;69389:228;:::o;69623:175::-;69763:27;69759:1;69751:6;69747:14;69740:51;69623:175;:::o;69804:220::-;69944:34;69940:1;69932:6;69928:14;69921:58;70013:3;70008:2;70000:6;69996:15;69989:28;69804:220;:::o;70030:180::-;70170:32;70166:1;70158:6;70154:14;70147:56;70030:180;:::o;70216:236::-;70356:34;70352:1;70344:6;70340:14;70333:58;70425:19;70420:2;70412:6;70408:15;70401:44;70216:236;:::o;70458:220::-;70598:34;70594:1;70586:6;70582:14;70575:58;70667:3;70662:2;70654:6;70650:15;70643:28;70458:220;:::o;70684:225::-;70824:34;70820:1;70812:6;70808:14;70801:58;70893:8;70888:2;70880:6;70876:15;70869:33;70684:225;:::o;70915:122::-;70988:24;71006:5;70988:24;:::i;:::-;70981:5;70978:35;70968:63;;71027:1;71024;71017:12;70968:63;70915:122;:::o;71043:138::-;71124:32;71150:5;71124:32;:::i;:::-;71117:5;71114:43;71104:71;;71171:1;71168;71161:12;71104:71;71043:138;:::o;71187:116::-;71257:21;71272:5;71257:21;:::i;:::-;71250:5;71247:32;71237:60;;71293:1;71290;71283:12;71237:60;71187:116;:::o;71309:120::-;71381:23;71398:5;71381:23;:::i;:::-;71374:5;71371:34;71361:62;;71419:1;71416;71409:12;71361:62;71309:120;:::o;71435:::-;71507:23;71524:5;71507:23;:::i;:::-;71500:5;71497:34;71487:62;;71545:1;71542;71535:12;71487:62;71435:120;:::o;71561:122::-;71634:24;71652:5;71634:24;:::i;:::-;71627:5;71624:35;71614:63;;71673:1;71670;71663:12;71614:63;71561:122;:::o;71689:120::-;71761:23;71778:5;71761:23;:::i;:::-;71754:5;71751:34;71741:62;;71799:1;71796;71789:12;71741:62;71689:120;:::o
Metadata Hash
ipfs://8b8135292f58f8344371e3488b764836e23763d6eb4f9ee3db3c7f479b6c96bf