ERC-721
NFT
Overview
Max Total Supply
3,981 SYAC
Holders
1,365
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 SYACLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
syac
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-13 */ /** *Submitted for verification at Etherscan.io on 2022-01-12 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) // pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) // pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) // pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) // pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) // pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) // pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) // pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) // pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) // pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) // pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); 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: syac.sol // pragma solidity ^0.8.7; contract syac is ERC721, Ownable, Pausable { using Strings for uint256; uint256 public constant MAX_SUPPLY = 5555; uint256 public constant MINT_PRICE = 0.05 ether; uint256 public constant MAX_MINT_PER_TX = 5; uint256 constant public LEGENDARY_SUPPLY = 200; uint256 public totalLegendaryMinted; mapping(address=>uint) public totalWhiteListMinted; mapping(address=>uint256) public totalPublicMinted; mapping(address => bool) public isWhitelisted; mapping(address=>bool) legandaryAddress; mapping(bytes32 => bool) private _usedHashes; bool public saleStarted = false; bool public preSaleStarted = false; bool public lock = false; uint256 public totalSupply = 0; string public prefixURI; string public commonURI; mapping(uint256 => string) public tokenURIs; constructor() ERC721("Spoiled Young Ape Club", "SYAC") { mintOwner(); } //modifier modifier onlyLegandry() { require(legandaryAddress[msg.sender],"Only Legendary Address can call!"); _; } //function to convert uint into string function uint2str( uint256 _i ) internal pure returns (string memory str) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 length; while (j != 0) { length++; j /= 10; } bytes memory bstr = new bytes(length); uint256 k = length; j = _i; while (j != 0) { bstr[--k] = bytes1(uint8(48 + j % 10)); j /= 10; } str = string(bstr); } //Encoded Token id function getTokenId(uint256 _value)public pure returns(string memory){ string memory tokenId; if(_value<10){ tokenId= string(abi.encodePacked("000", _value.toString())); }else if(_value<100){ tokenId= string(abi.encodePacked("00", _value.toString())); }else if(_value<1000){ tokenId= string(abi.encodePacked("0", _value.toString())); }else{ tokenId=uint2str(_value); } return (tokenId); } function mintOwner() public onlyOwner { require(totalLegendaryMinted<LEGENDARY_SUPPLY,"Legendary Total Minted Reached"); for(uint256 i=1; i <= LEGENDARY_SUPPLY ; i++){ _safeMint(msg.sender, (totalSupply+i)); } totalSupply += LEGENDARY_SUPPLY; totalLegendaryMinted += LEGENDARY_SUPPLY; } function mintLegendary(uint256 _count, address _account) external onlyLegandry { require(totalSupply + _count <= MAX_SUPPLY, "MAX_SUPPLY_REACHED"); require(totalLegendaryMinted >= LEGENDARY_SUPPLY, "LEGENDARY_NOT_MINTED"); for (uint256 i = 1; i <= _count; i++) { _safeMint(_account,(totalSupply + i)); } totalSupply += _count; } function mintWhitelist( uint256 _count) external payable { require(preSaleStarted, "MINT_NOT_STARTED"); require(totalSupply + _count <= MAX_SUPPLY, "MAX_SUPPLY_REACHED"); require(totalLegendaryMinted >= LEGENDARY_SUPPLY, "LEGENDARY_NOT_MINTED"); require(msg.value >= (_count * MINT_PRICE), "INVALID_ETH_SENT"); require(_count<=3,"You can't mint more than 3"); require(isWhitelisted[msg.sender],"Address isn't Whitelisted"); require(totalWhiteListMinted[msg.sender]+_count<=3,"you can't mint more than 3"); for (uint256 i = 1; i <= _count; i++) { _safeMint(msg.sender,(totalSupply + i)); } totalSupply += _count; totalWhiteListMinted[msg.sender]+=_count; } // Public Mint function mint(uint256 _count) public payable { require(saleStarted, "MINT_NOT_STARTED"); require(_count > 0 && _count <= MAX_MINT_PER_TX, "COUNT_INVALID"); require(totalLegendaryMinted >= LEGENDARY_SUPPLY, "LEGENDARY_NOT_MINTED"); require(totalSupply + _count <= MAX_SUPPLY, "MAX_SUPPLY_REACHED"); require(msg.value >=(_count * MINT_PRICE), "INVALID_ETH_SENT"); require(totalPublicMinted[msg.sender]+_count<=8,"Maximum NFT Limit reached"); for (uint256 i = 1; i <= _count; i++) { _safeMint(msg.sender, (totalSupply + i)); } totalSupply += _count; totalPublicMinted[msg.sender]+=_count; } function addWhitelist(address[] memory _addresses) external onlyOwner { for(uint i = 0; i < _addresses.length; i++) { isWhitelisted[_addresses[i]] = true; } } function removeWhitelist(address[] memory _addresses) external onlyOwner { for(uint i = 0; i < _addresses.length; i++) { isWhitelisted[_addresses[i]] = false; } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if (bytes(tokenURIs[tokenId]).length != 0) { return tokenURIs[tokenId]; } if (bytes(commonURI).length != 0) { return commonURI; } return string(abi.encodePacked(prefixURI, getTokenId(tokenId))); } // ** Admin Fuctions ** // function withdraw(address payable _to) external onlyOwner { require(_to != address(0), "WITHDRAW_ADDRESS_ZERO"); require(address(this).balance > 0, "EMPTY_BALANCE"); _to.transfer(address(this).balance); } function setSaleStarted(bool _hasStarted) external onlyOwner { require(saleStarted != _hasStarted, "SALE_STARTED_ALREADY_SET"); saleStarted = _hasStarted; } function setLegendary(address[] memory _legandaryAddress) external onlyOwner { for(uint8 i=0;i<_legandaryAddress.length;i++){ legandaryAddress[_legandaryAddress[i]]=true; } } function setPreSaleStarted(bool _hasStarted) external onlyOwner { require(preSaleStarted != _hasStarted, "SALE_STARTED_ALREADY_SET"); preSaleStarted = _hasStarted; } function lockBaseURI() external onlyOwner { require(!lock, "ALREADY_LOCKED"); lock = true; } function setPrefixURI(string calldata _uri) external onlyOwner { require(!lock, "ALREADY_LOCKED"); prefixURI = _uri; commonURI = ''; } function setCommonURI(string calldata _uri) external onlyOwner { require(!lock, "ALREADY_LOCKED"); commonURI = _uri; prefixURI = ''; } function setTokenURI(string calldata _uri, uint256 _tokenId) external onlyOwner { require(!lock, "ALREADY_LOCKED"); tokenURIs[_tokenId] = _uri; } function pause() external onlyOwner { require(!paused(), "ALREADY_PAUSED"); _pause(); } function unpause() external onlyOwner { require(paused(), "ALREADY_UNPAUSED"); _unpause(); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) override internal virtual { require(!paused(), "TRANSFER_PAUSED"); super._beforeTokenTransfer(from, to, tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"LEGENDARY_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"commonURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"getTokenId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"mintLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prefixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setCommonURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_legandaryAddress","type":"address[]"}],"name":"setLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasStarted","type":"bool"}],"name":"setPreSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setPrefixURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_hasStarted","type":"bool"}],"name":"setSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setTokenURI","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":"uint256","name":"","type":"uint256"}],"name":"tokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLegendaryMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPublicMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWhiteListMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506000600e553480156200006757600080fd5b506040518060400160405280601681526020017f53706f696c656420596f756e672041706520436c7562000000000000000000008152506040518060400160405280600481526020017f53594143000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000ec929190620008e9565b50806001908051906020019062000105929190620008e9565b505050620001286200011c6200015960201b60201c565b6200016160201b60201c565b6000600660146101000a81548160ff021916908315150217905550620001536200022760201b60201c565b62000f48565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002376200015960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025d6200038060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad9062000cef565b60405180910390fd5b60c860075410620002fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f59062000c89565b60405180910390fd5b6000600190505b60c8811162000345576200032f3382600e5462000323919062000d3e565b620003aa60201b60201c565b80806200033c9062000e71565b91505062000305565b5060c8600e60008282546200035b919062000d3e565b9250508190555060c86007600082825462000377919062000d3e565b92505081905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003cc828260405180602001604052806000815250620003d060201b60201c565b5050565b620003e283836200043e60201b60201c565b620003f760008484846200062460201b60201c565b62000439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004309062000c45565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a89062000cab565b60405180910390fd5b620004c281620007de60201b60201c565b1562000505576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fc9062000c67565b60405180910390fd5b62000519600083836200084a60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200056b919062000d3e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006528473ffffffffffffffffffffffffffffffffffffffff16620008ba60201b62002dc81760201c565b15620007d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006846200015960201b60201c565b8786866040518563ffffffff1660e01b8152600401620006a8949392919062000bf1565b602060405180830381600087803b158015620006c357600080fd5b505af1925050508015620006f757506040513d601f19601f82011682018060405250810190620006f49190620009b0565b60015b62000780573d80600081146200072a576040519150601f19603f3d011682016040523d82523d6000602084013e6200072f565b606091505b5060008151141562000778576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076f9062000c45565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007d6565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200085a620008cd60201b60201c565b156200089d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008949062000ccd565b60405180910390fd5b620008b5838383620008e460201b62002ddb1760201c565b505050565b600080823b905060008111915050919050565b6000600660149054906101000a900460ff16905090565b505050565b828054620008f79062000e3b565b90600052602060002090601f0160209004810192826200091b576000855562000967565b82601f106200093657805160ff191683800117855562000967565b8280016001018555821562000967579182015b828111156200096657825182559160200191906001019062000949565b5b5090506200097691906200097a565b5090565b5b80821115620009955760008160009055506001016200097b565b5090565b600081519050620009aa8162000f2e565b92915050565b600060208284031215620009c357600080fd5b6000620009d38482850162000999565b91505092915050565b620009e78162000d9b565b82525050565b6000620009fa8262000d11565b62000a06818562000d1c565b935062000a1881856020860162000e05565b62000a238162000f1d565b840191505092915050565b600062000a3d60328362000d2d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062000aa5601c8362000d2d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600062000ae7601e8362000d2d565b91507f4c6567656e6461727920546f74616c204d696e746564205265616368656400006000830152602082019050919050565b600062000b2960208362000d2d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600062000b6b600f8362000d2d565b91507f5452414e534645525f50415553454400000000000000000000000000000000006000830152602082019050919050565b600062000bad60208362000d2d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b62000beb8162000dfb565b82525050565b600060808201905062000c086000830187620009dc565b62000c176020830186620009dc565b62000c26604083018562000be0565b818103606083015262000c3a8184620009ed565b905095945050505050565b6000602082019050818103600083015262000c608162000a2e565b9050919050565b6000602082019050818103600083015262000c828162000a96565b9050919050565b6000602082019050818103600083015262000ca48162000ad8565b9050919050565b6000602082019050818103600083015262000cc68162000b1a565b9050919050565b6000602082019050818103600083015262000ce88162000b5c565b9050919050565b6000602082019050818103600083015262000d0a8162000b9e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000d4b8262000dfb565b915062000d588362000dfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d905762000d8f62000ebf565b5b828201905092915050565b600062000da88262000ddb565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000e2557808201518184015260208101905062000e08565b8381111562000e35576000848401525b50505050565b6000600282049050600182168062000e5457607f821691505b6020821081141562000e6b5762000e6a62000eee565b5b50919050565b600062000e7e8262000dfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000eb45762000eb362000ebf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62000f398162000daf565b811462000f4557600080fd5b50565b615c7d8062000f586000396000f3fe6080604052600436106102ad5760003560e01c80636ab6591511610175578063a22cb465116100dc578063cecb06d011610095578063e985e9c51161006f578063e985e9c514610a57578063edac985b14610a94578063f2fde38b14610abd578063f83d08ba14610ae6576102ad565b8063cecb06d0146109da578063d3421518146109f1578063e59ee01414610a2e576102ad565b8063a22cb465146108ce578063a854ffba146108f7578063b2c94ee614610920578063b88d4fde14610949578063c002d23d14610972578063c87b56dd1461099d576102ad565b80638d40fb4e1161012e5780638d40fb4e146107db5780638da5cb5b146108065780638ecad7211461083157806395d89b411461085c578063a0712d6814610887578063a0c54078146108a3576102ad565b80636ab65915146106dd5780636c8b703f1461070857806370a0823114610745578063715018a614610782578063784b383b146107995780638456cb59146107c4576102ad565b80633af32abf1161021957806355fc9893116101d257806355fc9893146105cd5780635c474f9e146105f65780635c975abb146106215780635ca77e311461064c5780636352211e14610675578063690cf0d1146106b2576102ad565b80633af32abf146104f45780633f4ba83a1461053157806342842e0e146105485780634618163e1461057157806351cff8d91461058d57806353df5c7c146105b6576102ad565b806314ff5ea31161026b57806314ff5ea3146103d257806318160ddd1461040f5780631b35c0d11461043a578063232452161461047757806323b872dd146104a057806332cb6b0c146104c9576102ad565b8062bb16bd146102b257806301ffc9a7146102db57806306fdde0314610318578063081812fc14610343578063095ea7b31461038057806309a3beef146103a9575b600080fd5b3480156102be57600080fd5b506102d960048036038101906102d491906142da565b610b11565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190614344565b610c4e565b60405161030f9190615260565b60405180910390f35b34801561032457600080fd5b5061032d610d30565b60405161033a919061527b565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190614433565b610dc2565b60405161037791906151f9565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a2919061429e565b610e47565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906143db565b610f5f565b005b3480156103de57600080fd5b506103f960048036038101906103f49190614433565b611053565b604051610406919061527b565b60405180910390f35b34801561041b57600080fd5b50610424611116565b604051610431919061571d565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061410a565b61111c565b60405161046e919061571d565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906142da565b611134565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190614198565b61126b565b005b3480156104d557600080fd5b506104de6112cb565b6040516104eb919061571d565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061410a565b6112d1565b6040516105289190615260565b60405180910390f35b34801561053d57600080fd5b506105466112f1565b005b34801561055457600080fd5b5061056f600480360381019061056a9190614198565b6113be565b005b61058b60048036038101906105869190614433565b6113de565b005b34801561059957600080fd5b506105b460048036038101906105af9190614133565b611723565b005b3480156105c257600080fd5b506105cb61189c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190614396565b611985565b005b34801561060257600080fd5b5061060b611a8d565b6040516106189190615260565b60405180910390f35b34801561062d57600080fd5b50610636611aa0565b6040516106439190615260565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e919061445c565b611ab7565b005b34801561068157600080fd5b5061069c60048036038101906106979190614433565b611c31565b6040516106a991906151f9565b60405180910390f35b3480156106be57600080fd5b506106c7611ce3565b6040516106d49190615260565b60405180910390f35b3480156106e957600080fd5b506106f2611cf6565b6040516106ff919061571d565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190614433565b611cfb565b60405161073c919061527b565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061410a565b611d9b565b604051610779919061571d565b60405180910390f35b34801561078e57600080fd5b50610797611e53565b005b3480156107a557600080fd5b506107ae611edb565b6040516107bb919061571d565b60405180910390f35b3480156107d057600080fd5b506107d9611ee1565b005b3480156107e757600080fd5b506107f0611faf565b6040516107fd919061527b565b60405180910390f35b34801561081257600080fd5b5061081b61203d565b60405161082891906151f9565b60405180910390f35b34801561083d57600080fd5b50610846612067565b604051610853919061571d565b60405180910390f35b34801561086857600080fd5b5061087161206c565b60405161087e919061527b565b60405180910390f35b6108a1600480360381019061089c9190614433565b6120fe565b005b3480156108af57600080fd5b506108b86123c3565b6040516108c5919061527b565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614262565b612451565b005b34801561090357600080fd5b5061091e6004803603810190610919919061431b565b612467565b005b34801561092c57600080fd5b5061094760048036038101906109429190614396565b612556565b005b34801561095557600080fd5b50610970600480360381019061096b91906141e7565b61265e565b005b34801561097e57600080fd5b506109876126c0565b604051610994919061571d565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190614433565b6126cb565b6040516109d1919061527b565b60405180910390f35b3480156109e657600080fd5b506109ef6128ba565b005b3480156109fd57600080fd5b50610a186004803603810190610a13919061410a565b6129eb565b604051610a25919061571d565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a50919061431b565b612a03565b005b348015610a6357600080fd5b50610a7e6004803603810190610a79919061415c565b612af2565b604051610a8b9190615260565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab691906142da565b612b86565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061410a565b612cbd565b005b348015610af257600080fd5b50610afb612db5565b604051610b089190615260565b60405180910390f35b610b19612de0565b73ffffffffffffffffffffffffffffffffffffffff16610b3761203d565b73ffffffffffffffffffffffffffffffffffffffff1614610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b849061559d565b60405180910390fd5b60005b81518160ff161015610c4a576001600b6000848460ff1681518110610bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c4290615aac565b915050610b90565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d295750610d2882612de8565b5b9050919050565b606060008054610d3f90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6b90615a31565b8015610db85780601f10610d8d57610100808354040283529160200191610db8565b820191906000526020600020905b815481529060010190602001808311610d9b57829003601f168201915b5050505050905090565b6000610dcd82612e52565b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061553d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e5282611c31565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061561d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee2612de0565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610f1081610f0b612de0565b612af2565b5b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f479061543d565b60405180910390fd5b610f5a8383612ebe565b505050565b610f67612de0565b73ffffffffffffffffffffffffffffffffffffffff16610f8561203d565b73ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd29061559d565b60405180910390fd5b600d60029054906101000a900460ff161561102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906154dd565b60405180910390fd5b828260116000848152602001908152602001600020919061104d929190613e1b565b50505050565b606080600a83101561108e5761106883612f77565b60405160200161107891906151b5565b604051602081830303815290604052905061110d565b60648310156110c6576110a083612f77565b6040516020016110b091906151d7565b604051602081830303815290604052905061110c565b6103e88310156110ff576110d983612f77565b6040516020016110e99190615193565b604051602081830303815290604052905061110b565b61110883613124565b90505b5b5b80915050919050565b600e5481565b60096020528060005260406000206000915090505481565b61113c612de0565b73ffffffffffffffffffffffffffffffffffffffff1661115a61203d565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a79061559d565b60405180910390fd5b60005b8151811015611267576000600a60008484815181106111fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125f90615a63565b9150506111b3565b5050565b61127c611276612de0565b826132d7565b6112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061563d565b60405180910390fd5b6112c68383836133b5565b505050565b6115b381565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f9612de0565b73ffffffffffffffffffffffffffffffffffffffff1661131761203d565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061559d565b60405180910390fd5b611375611aa0565b6113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab906152bd565b60405180910390fd5b6113bc613611565b565b6113d98383836040518060200160405280600081525061265e565b505050565b600d60019054906101000a900460ff1661142d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114249061533d565b60405180910390fd5b6115b381600e5461143e919061581d565b111561147f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611476906156bd565b60405180910390fd5b60c860075410156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906154bd565b60405180910390fd5b66b1a2bc2ec50000816114d891906158a4565b34101561151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906156fd565b60405180910390fd5b600381111561155e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611555906154fd565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061557d565b60405180910390fd5b600381600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611637919061581d565b1115611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906155fd565b60405180910390fd5b6000600190505b8181116116b05761169d3382600e54611698919061581d565b6136b3565b80806116a890615a63565b91505061167f565b5080600e60008282546116c3919061581d565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611719919061581d565b9250508190555050565b61172b612de0565b73ffffffffffffffffffffffffffffffffffffffff1661174961203d565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117969061559d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611806906153dd565b60405180910390fd5b60004711611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061565d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611898573d6000803e3d6000fd5b5050565b6118a4612de0565b73ffffffffffffffffffffffffffffffffffffffff166118c261203d565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061559d565b60405180910390fd5b600d60029054906101000a900460ff1615611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f906154dd565b60405180910390fd5b6001600d60026101000a81548160ff021916908315150217905550565b61198d612de0565b73ffffffffffffffffffffffffffffffffffffffff166119ab61203d565b73ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061559d565b60405180910390fd5b600d60029054906101000a900460ff1615611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a48906154dd565b60405180910390fd5b818160109190611a62929190613e1b565b5060405180602001604052806000815250600f9080519060200190611a88929190613ea1565b505050565b600d60009054906101000a900460ff1681565b6000600660149054906101000a900460ff16905090565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061567d565b60405180910390fd5b6115b382600e54611b54919061581d565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906156bd565b60405180910390fd5b60c86007541015611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906154bd565b60405180910390fd5b6000600190505b828111611c1357611c008282600e54611bfb919061581d565b6136b3565b8080611c0b90615a63565b915050611be2565b5081600e6000828254611c26919061581d565b925050819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19061549d565b60405180910390fd5b80915050919050565b600d60019054906101000a900460ff1681565b60c881565b60116020528060005260406000206000915090508054611d1a90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4690615a31565b8015611d935780601f10611d6857610100808354040283529160200191611d93565b820191906000526020600020905b815481529060010190602001808311611d7657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061547d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e5b612de0565b73ffffffffffffffffffffffffffffffffffffffff16611e7961203d565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061559d565b60405180910390fd5b611ed960006136d1565b565b60075481565b611ee9612de0565b73ffffffffffffffffffffffffffffffffffffffff16611f0761203d565b73ffffffffffffffffffffffffffffffffffffffff1614611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f549061559d565b60405180910390fd5b611f65611aa0565b15611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061537d565b60405180910390fd5b611fad613797565b565b60108054611fbc90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890615a31565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b60606001805461207b90615a31565b80601f01602080910402602001604051908101604052809291908181526020018280546120a790615a31565b80156120f45780601f106120c9576101008083540402835291602001916120f4565b820191906000526020600020905b8154815290600101906020018083116120d757829003601f168201915b5050505050905090565b600d60009054906101000a900460ff1661214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121449061533d565b60405180910390fd5b60008111801561215e575060058111155b61219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061569d565b60405180910390fd5b60c860075410156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da906154bd565b60405180910390fd5b6115b381600e546121f4919061581d565b1115612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c906156bd565b60405180910390fd5b66b1a2bc2ec500008161224891906158a4565b34101561228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906156fd565b60405180910390fd5b600881600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d7919061581d565b1115612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906156dd565b60405180910390fd5b6000600190505b8181116123505761233d3382600e54612338919061581d565b6136b3565b808061234890615a63565b91505061231f565b5080600e6000828254612363919061581d565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b9919061581d565b9250508190555050565b600f80546123d090615a31565b80601f01602080910402602001604051908101604052809291908181526020018280546123fc90615a31565b80156124495780601f1061241e57610100808354040283529160200191612449565b820191906000526020600020905b81548152906001019060200180831161242c57829003601f168201915b505050505081565b61246361245c612de0565b838361383a565b5050565b61246f612de0565b73ffffffffffffffffffffffffffffffffffffffff1661248d61203d565b73ffffffffffffffffffffffffffffffffffffffff16146124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da9061559d565b60405180910390fd5b801515600d60009054906101000a900460ff1615151415612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061529d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b61255e612de0565b73ffffffffffffffffffffffffffffffffffffffff1661257c61203d565b73ffffffffffffffffffffffffffffffffffffffff16146125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061559d565b60405180910390fd5b600d60029054906101000a900460ff1615612622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612619906154dd565b60405180910390fd5b8181600f9190612633929190613e1b565b506040518060200160405280600081525060109080519060200190612659929190613ea1565b505050565b61266f612669612de0565b836132d7565b6126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a59061563d565b60405180910390fd5b6126ba848484846139a7565b50505050565b66b1a2bc2ec5000081565b60606126d682612e52565b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c906155dd565b60405180910390fd5b600060116000848152602001908152602001600020805461273590615a31565b9050146127df5760116000838152602001908152602001600020805461275a90615a31565b80601f016020809104026020016040519081016040528092919081815260200182805461278690615a31565b80156127d35780601f106127a8576101008083540402835291602001916127d3565b820191906000526020600020905b8154815290600101906020018083116127b657829003601f168201915b505050505090506128b5565b6000601080546127ee90615a31565b905014612887576010805461280290615a31565b80601f016020809104026020016040519081016040528092919081815260200182805461282e90615a31565b801561287b5780601f106128505761010080835404028352916020019161287b565b820191906000526020600020905b81548152906001019060200180831161285e57829003601f168201915b505050505090506128b5565b600f61289283611053565b6040516020016128a392919061516f565b60405160208183030381529060405290505b919050565b6128c2612de0565b73ffffffffffffffffffffffffffffffffffffffff166128e061203d565b73ffffffffffffffffffffffffffffffffffffffff1614612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d9061559d565b60405180910390fd5b60c86007541061297b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129729061545d565b60405180910390fd5b6000600190505b60c881116129b4576129a13382600e5461299c919061581d565b6136b3565b80806129ac90615a63565b915050612982565b5060c8600e60008282546129c8919061581d565b9250508190555060c8600760008282546129e2919061581d565b92505081905550565b60086020528060005260406000206000915090505481565b612a0b612de0565b73ffffffffffffffffffffffffffffffffffffffff16612a2961203d565b73ffffffffffffffffffffffffffffffffffffffff1614612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a769061559d565b60405180910390fd5b801515600d60019054906101000a900460ff1615151415612ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acc9061529d565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b8e612de0565b73ffffffffffffffffffffffffffffffffffffffff16612bac61203d565b73ffffffffffffffffffffffffffffffffffffffff1614612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf99061559d565b60405180910390fd5b60005b8151811015612cb9576001600a6000848481518110612c4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612cb190615a63565b915050612c05565b5050565b612cc5612de0565b73ffffffffffffffffffffffffffffffffffffffff16612ce361203d565b73ffffffffffffffffffffffffffffffffffffffff1614612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d309061559d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da09061531d565b60405180910390fd5b612db2816136d1565b50565b600d60029054906101000a900460ff1681565b600080823b905060008111915050919050565b505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f3183611c31565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000821415612fbf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061311f565b600082905060005b60008214612ff1578080612fda90615a63565b915050600a82612fea9190615873565b9150612fc7565b60008167ffffffffffffffff811115613033577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130655781602001600182028036833780820191505090505b5090505b600085146131185760018261307e91906158fe565b9150600a8561308d9190615ad6565b6030613099919061581d565b60f81b8183815181106130d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131119190615873565b9450613069565b8093505050505b919050565b6060600082141561316c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d2565b600082905060005b6000821461319e57808061318790615a63565b915050600a826131979190615873565b9150613174565b60008167ffffffffffffffff8111156131e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132125781602001600182028036833780820191505090505b50905060008290508593505b600084146132ca57600a846132339190615ad6565b603061323f919061581d565b60f81b828261324d90615a07565b92508281518110613287577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a846132c39190615873565b935061321e565b819450505050505b919050565b60006132e282612e52565b613321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613318906153fd565b60405180910390fd5b600061332c83611c31565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061339b57508373ffffffffffffffffffffffffffffffffffffffff1661338384610dc2565b73ffffffffffffffffffffffffffffffffffffffff16145b806133ac57506133ab8185612af2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133d582611c31565b73ffffffffffffffffffffffffffffffffffffffff161461342b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613422906155bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134929061539d565b60405180910390fd5b6134a6838383613a03565b6134b1600082612ebe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350191906158fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613558919061581d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613619611aa0565b613658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364f906152dd565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61369c612de0565b6040516136a991906151f9565b60405180910390a1565b6136cd828260405180602001604052806000815250613a5b565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61379f611aa0565b156137df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d69061541d565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613823612de0565b60405161383091906151f9565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a0906153bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161399a9190615260565b60405180910390a3505050565b6139b28484846133b5565b6139be84848484613ab6565b6139fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f4906152fd565b60405180910390fd5b50505050565b613a0b611aa0565b15613a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a429061555d565b60405180910390fd5b613a56838383612ddb565b505050565b613a658383613c4d565b613a726000848484613ab6565b613ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aa8906152fd565b60405180910390fd5b505050565b6000613ad78473ffffffffffffffffffffffffffffffffffffffff16612dc8565b15613c40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b00612de0565b8786866040518563ffffffff1660e01b8152600401613b229493929190615214565b602060405180830381600087803b158015613b3c57600080fd5b505af1925050508015613b6d57506040513d601f19601f82011682018060405250810190613b6a919061436d565b60015b613bf0573d8060008114613b9d576040519150601f19603f3d011682016040523d82523d6000602084013e613ba2565b606091505b50600081511415613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf906152fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c45565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb49061551d565b60405180910390fd5b613cc681612e52565b15613d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfd9061535d565b60405180910390fd5b613d1260008383613a03565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d62919061581d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e2790615a31565b90600052602060002090601f016020900481019282613e495760008555613e90565b82601f10613e6257803560ff1916838001178555613e90565b82800160010185558215613e90579182015b82811115613e8f578235825591602001919060010190613e74565b5b509050613e9d9190613f27565b5090565b828054613ead90615a31565b90600052602060002090601f016020900481019282613ecf5760008555613f16565b82601f10613ee857805160ff1916838001178555613f16565b82800160010185558215613f16579182015b82811115613f15578251825591602001919060010190613efa565b5b509050613f239190613f27565b5090565b5b80821115613f40576000816000905550600101613f28565b5090565b6000613f57613f5284615769565b615738565b90508083825260208201905082856020860282011115613f7657600080fd5b60005b85811015613fa65781613f8c8882613fee565b845260208401935060208301925050600181019050613f79565b5050509392505050565b6000613fc3613fbe84615795565b615738565b905082815260208101848484011115613fdb57600080fd5b613fe68482856159c5565b509392505050565b600081359050613ffd81615bd4565b92915050565b60008135905061401281615beb565b92915050565b600082601f83011261402957600080fd5b8135614039848260208601613f44565b91505092915050565b60008135905061405181615c02565b92915050565b60008135905061406681615c19565b92915050565b60008151905061407b81615c19565b92915050565b600082601f83011261409257600080fd5b81356140a2848260208601613fb0565b91505092915050565b60008083601f8401126140bd57600080fd5b8235905067ffffffffffffffff8111156140d657600080fd5b6020830191508360018202830111156140ee57600080fd5b9250929050565b60008135905061410481615c30565b92915050565b60006020828403121561411c57600080fd5b600061412a84828501613fee565b91505092915050565b60006020828403121561414557600080fd5b600061415384828501614003565b91505092915050565b6000806040838503121561416f57600080fd5b600061417d85828601613fee565b925050602061418e85828601613fee565b9150509250929050565b6000806000606084860312156141ad57600080fd5b60006141bb86828701613fee565b93505060206141cc86828701613fee565b92505060406141dd868287016140f5565b9150509250925092565b600080600080608085870312156141fd57600080fd5b600061420b87828801613fee565b945050602061421c87828801613fee565b935050604061422d878288016140f5565b925050606085013567ffffffffffffffff81111561424a57600080fd5b61425687828801614081565b91505092959194509250565b6000806040838503121561427557600080fd5b600061428385828601613fee565b925050602061429485828601614042565b9150509250929050565b600080604083850312156142b157600080fd5b60006142bf85828601613fee565b92505060206142d0858286016140f5565b9150509250929050565b6000602082840312156142ec57600080fd5b600082013567ffffffffffffffff81111561430657600080fd5b61431284828501614018565b91505092915050565b60006020828403121561432d57600080fd5b600061433b84828501614042565b91505092915050565b60006020828403121561435657600080fd5b600061436484828501614057565b91505092915050565b60006020828403121561437f57600080fd5b600061438d8482850161406c565b91505092915050565b600080602083850312156143a957600080fd5b600083013567ffffffffffffffff8111156143c357600080fd5b6143cf858286016140ab565b92509250509250929050565b6000806000604084860312156143f057600080fd5b600084013567ffffffffffffffff81111561440a57600080fd5b614416868287016140ab565b93509350506020614429868287016140f5565b9150509250925092565b60006020828403121561444557600080fd5b6000614453848285016140f5565b91505092915050565b6000806040838503121561446f57600080fd5b600061447d858286016140f5565b925050602061448e85828601613fee565b9150509250929050565b6144a181615932565b82525050565b6144b081615956565b82525050565b60006144c1826157da565b6144cb81856157f0565b93506144db8185602086016159d4565b6144e481615bc3565b840191505092915050565b60006144fa826157e5565b6145048185615801565b93506145148185602086016159d4565b61451d81615bc3565b840191505092915050565b6000614533826157e5565b61453d8185615812565b935061454d8185602086016159d4565b80840191505092915050565b6000815461456681615a31565b6145708186615812565b9450600182166000811461458b576001811461459c576145cf565b60ff198316865281860193506145cf565b6145a5856157c5565b60005b838110156145c7578154818901526001820191506020810190506145a8565b838801955050505b50505092915050565b60006145e5600183615812565b91507f30000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614625601883615801565b91507f53414c455f535441525445445f414c52454144595f53455400000000000000006000830152602082019050919050565b6000614665601083615801565b91507f414c52454144595f554e504155534544000000000000000000000000000000006000830152602082019050919050565b60006146a5601483615801565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006146e5603283615801565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061474b602683615801565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b1601083615801565b91507f4d494e545f4e4f545f53544152544544000000000000000000000000000000006000830152602082019050919050565b60006147f1601c83615801565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614831600e83615801565b91507f414c52454144595f5041555345440000000000000000000000000000000000006000830152602082019050919050565b6000614871600383615812565b91507f30303000000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b60006148b1602483615801565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614917601983615801565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614957601583615801565b91507f57495448445241575f414444524553535f5a45524f00000000000000000000006000830152602082019050919050565b6000614997602c83615801565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006149fd601083615801565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000614a3d603883615801565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614aa3601e83615801565b91507f4c6567656e6461727920546f74616c204d696e746564205265616368656400006000830152602082019050919050565b6000614ae3602a83615801565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b49602983615801565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614baf601483615801565b91507f4c4547454e444152595f4e4f545f4d494e5445440000000000000000000000006000830152602082019050919050565b6000614bef600e83615801565b91507f414c52454144595f4c4f434b45440000000000000000000000000000000000006000830152602082019050919050565b6000614c2f601a83615801565b91507f596f752063616e2774206d696e74206d6f7265207468616e20330000000000006000830152602082019050919050565b6000614c6f602083615801565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614caf602c83615801565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d15600f83615801565b91507f5452414e534645525f50415553454400000000000000000000000000000000006000830152602082019050919050565b6000614d55601983615801565b91507f416464726573732069736e27742057686974656c6973746564000000000000006000830152602082019050919050565b6000614d95602083615801565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614dd5602983615801565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e3b602f83615801565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614ea1601a83615801565b91507f796f752063616e2774206d696e74206d6f7265207468616e20330000000000006000830152602082019050919050565b6000614ee1602183615801565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f47603183615801565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614fad600d83615801565b91507f454d5054595f42414c414e4345000000000000000000000000000000000000006000830152602082019050919050565b6000614fed600283615812565b91507f30300000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061502d602083615801565b91507f4f6e6c79204c6567656e6461727920416464726573732063616e2063616c6c216000830152602082019050919050565b600061506d600d83615801565b91507f434f554e545f494e56414c4944000000000000000000000000000000000000006000830152602082019050919050565b60006150ad601283615801565b91507f4d41585f535550504c595f5245414348454400000000000000000000000000006000830152602082019050919050565b60006150ed601983615801565b91507f4d6178696d756d204e4654204c696d69742072656163686564000000000000006000830152602082019050919050565b600061512d601083615801565b91507f494e56414c49445f4554485f53454e54000000000000000000000000000000006000830152602082019050919050565b615169816159ae565b82525050565b600061517b8285614559565b91506151878284614528565b91508190509392505050565b600061519e826145d8565b91506151aa8284614528565b915081905092915050565b60006151c082614864565b91506151cc8284614528565b915081905092915050565b60006151e282614fe0565b91506151ee8284614528565b915081905092915050565b600060208201905061520e6000830184614498565b92915050565b60006080820190506152296000830187614498565b6152366020830186614498565b6152436040830185615160565b818103606083015261525581846144b6565b905095945050505050565b600060208201905061527560008301846144a7565b92915050565b6000602082019050818103600083015261529581846144ef565b905092915050565b600060208201905081810360008301526152b681614618565b9050919050565b600060208201905081810360008301526152d681614658565b9050919050565b600060208201905081810360008301526152f681614698565b9050919050565b60006020820190508181036000830152615316816146d8565b9050919050565b600060208201905081810360008301526153368161473e565b9050919050565b60006020820190508181036000830152615356816147a4565b9050919050565b60006020820190508181036000830152615376816147e4565b9050919050565b6000602082019050818103600083015261539681614824565b9050919050565b600060208201905081810360008301526153b6816148a4565b9050919050565b600060208201905081810360008301526153d68161490a565b9050919050565b600060208201905081810360008301526153f68161494a565b9050919050565b600060208201905081810360008301526154168161498a565b9050919050565b60006020820190508181036000830152615436816149f0565b9050919050565b6000602082019050818103600083015261545681614a30565b9050919050565b6000602082019050818103600083015261547681614a96565b9050919050565b6000602082019050818103600083015261549681614ad6565b9050919050565b600060208201905081810360008301526154b681614b3c565b9050919050565b600060208201905081810360008301526154d681614ba2565b9050919050565b600060208201905081810360008301526154f681614be2565b9050919050565b6000602082019050818103600083015261551681614c22565b9050919050565b6000602082019050818103600083015261553681614c62565b9050919050565b6000602082019050818103600083015261555681614ca2565b9050919050565b6000602082019050818103600083015261557681614d08565b9050919050565b6000602082019050818103600083015261559681614d48565b9050919050565b600060208201905081810360008301526155b681614d88565b9050919050565b600060208201905081810360008301526155d681614dc8565b9050919050565b600060208201905081810360008301526155f681614e2e565b9050919050565b6000602082019050818103600083015261561681614e94565b9050919050565b6000602082019050818103600083015261563681614ed4565b9050919050565b6000602082019050818103600083015261565681614f3a565b9050919050565b6000602082019050818103600083015261567681614fa0565b9050919050565b6000602082019050818103600083015261569681615020565b9050919050565b600060208201905081810360008301526156b681615060565b9050919050565b600060208201905081810360008301526156d6816150a0565b9050919050565b600060208201905081810360008301526156f6816150e0565b9050919050565b6000602082019050818103600083015261571681615120565b9050919050565b60006020820190506157326000830184615160565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561575f5761575e615b94565b5b8060405250919050565b600067ffffffffffffffff82111561578457615783615b94565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156157b0576157af615b94565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615828826159ae565b9150615833836159ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561586857615867615b07565b5b828201905092915050565b600061587e826159ae565b9150615889836159ae565b92508261589957615898615b36565b5b828204905092915050565b60006158af826159ae565b91506158ba836159ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158f3576158f2615b07565b5b828202905092915050565b6000615909826159ae565b9150615914836159ae565b92508282101561592757615926615b07565b5b828203905092915050565b600061593d8261598e565b9050919050565b600061594f8261598e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156159f25780820151818401526020810190506159d7565b83811115615a01576000848401525b50505050565b6000615a12826159ae565b91506000821415615a2657615a25615b07565b5b600182039050919050565b60006002820490506001821680615a4957607f821691505b60208210811415615a5d57615a5c615b65565b5b50919050565b6000615a6e826159ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615aa157615aa0615b07565b5b600182019050919050565b6000615ab7826159b8565b915060ff821415615acb57615aca615b07565b5b600182019050919050565b6000615ae1826159ae565b9150615aec836159ae565b925082615afc57615afb615b36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615bdd81615932565b8114615be857600080fd5b50565b615bf481615944565b8114615bff57600080fd5b50565b615c0b81615956565b8114615c1657600080fd5b50565b615c2281615962565b8114615c2d57600080fd5b50565b615c39816159ae565b8114615c4457600080fd5b5056fea2646970667358221220269e0c9286bd310987f0acb996ca83ea68c50f4f154d834fa647d02ae5e61c8e64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102ad5760003560e01c80636ab6591511610175578063a22cb465116100dc578063cecb06d011610095578063e985e9c51161006f578063e985e9c514610a57578063edac985b14610a94578063f2fde38b14610abd578063f83d08ba14610ae6576102ad565b8063cecb06d0146109da578063d3421518146109f1578063e59ee01414610a2e576102ad565b8063a22cb465146108ce578063a854ffba146108f7578063b2c94ee614610920578063b88d4fde14610949578063c002d23d14610972578063c87b56dd1461099d576102ad565b80638d40fb4e1161012e5780638d40fb4e146107db5780638da5cb5b146108065780638ecad7211461083157806395d89b411461085c578063a0712d6814610887578063a0c54078146108a3576102ad565b80636ab65915146106dd5780636c8b703f1461070857806370a0823114610745578063715018a614610782578063784b383b146107995780638456cb59146107c4576102ad565b80633af32abf1161021957806355fc9893116101d257806355fc9893146105cd5780635c474f9e146105f65780635c975abb146106215780635ca77e311461064c5780636352211e14610675578063690cf0d1146106b2576102ad565b80633af32abf146104f45780633f4ba83a1461053157806342842e0e146105485780634618163e1461057157806351cff8d91461058d57806353df5c7c146105b6576102ad565b806314ff5ea31161026b57806314ff5ea3146103d257806318160ddd1461040f5780631b35c0d11461043a578063232452161461047757806323b872dd146104a057806332cb6b0c146104c9576102ad565b8062bb16bd146102b257806301ffc9a7146102db57806306fdde0314610318578063081812fc14610343578063095ea7b31461038057806309a3beef146103a9575b600080fd5b3480156102be57600080fd5b506102d960048036038101906102d491906142da565b610b11565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190614344565b610c4e565b60405161030f9190615260565b60405180910390f35b34801561032457600080fd5b5061032d610d30565b60405161033a919061527b565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190614433565b610dc2565b60405161037791906151f9565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a2919061429e565b610e47565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906143db565b610f5f565b005b3480156103de57600080fd5b506103f960048036038101906103f49190614433565b611053565b604051610406919061527b565b60405180910390f35b34801561041b57600080fd5b50610424611116565b604051610431919061571d565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061410a565b61111c565b60405161046e919061571d565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906142da565b611134565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190614198565b61126b565b005b3480156104d557600080fd5b506104de6112cb565b6040516104eb919061571d565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061410a565b6112d1565b6040516105289190615260565b60405180910390f35b34801561053d57600080fd5b506105466112f1565b005b34801561055457600080fd5b5061056f600480360381019061056a9190614198565b6113be565b005b61058b60048036038101906105869190614433565b6113de565b005b34801561059957600080fd5b506105b460048036038101906105af9190614133565b611723565b005b3480156105c257600080fd5b506105cb61189c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190614396565b611985565b005b34801561060257600080fd5b5061060b611a8d565b6040516106189190615260565b60405180910390f35b34801561062d57600080fd5b50610636611aa0565b6040516106439190615260565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e919061445c565b611ab7565b005b34801561068157600080fd5b5061069c60048036038101906106979190614433565b611c31565b6040516106a991906151f9565b60405180910390f35b3480156106be57600080fd5b506106c7611ce3565b6040516106d49190615260565b60405180910390f35b3480156106e957600080fd5b506106f2611cf6565b6040516106ff919061571d565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190614433565b611cfb565b60405161073c919061527b565b60405180910390f35b34801561075157600080fd5b5061076c6004803603810190610767919061410a565b611d9b565b604051610779919061571d565b60405180910390f35b34801561078e57600080fd5b50610797611e53565b005b3480156107a557600080fd5b506107ae611edb565b6040516107bb919061571d565b60405180910390f35b3480156107d057600080fd5b506107d9611ee1565b005b3480156107e757600080fd5b506107f0611faf565b6040516107fd919061527b565b60405180910390f35b34801561081257600080fd5b5061081b61203d565b60405161082891906151f9565b60405180910390f35b34801561083d57600080fd5b50610846612067565b604051610853919061571d565b60405180910390f35b34801561086857600080fd5b5061087161206c565b60405161087e919061527b565b60405180910390f35b6108a1600480360381019061089c9190614433565b6120fe565b005b3480156108af57600080fd5b506108b86123c3565b6040516108c5919061527b565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614262565b612451565b005b34801561090357600080fd5b5061091e6004803603810190610919919061431b565b612467565b005b34801561092c57600080fd5b5061094760048036038101906109429190614396565b612556565b005b34801561095557600080fd5b50610970600480360381019061096b91906141e7565b61265e565b005b34801561097e57600080fd5b506109876126c0565b604051610994919061571d565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190614433565b6126cb565b6040516109d1919061527b565b60405180910390f35b3480156109e657600080fd5b506109ef6128ba565b005b3480156109fd57600080fd5b50610a186004803603810190610a13919061410a565b6129eb565b604051610a25919061571d565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a50919061431b565b612a03565b005b348015610a6357600080fd5b50610a7e6004803603810190610a79919061415c565b612af2565b604051610a8b9190615260565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab691906142da565b612b86565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061410a565b612cbd565b005b348015610af257600080fd5b50610afb612db5565b604051610b089190615260565b60405180910390f35b610b19612de0565b73ffffffffffffffffffffffffffffffffffffffff16610b3761203d565b73ffffffffffffffffffffffffffffffffffffffff1614610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b849061559d565b60405180910390fd5b60005b81518160ff161015610c4a576001600b6000848460ff1681518110610bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c4290615aac565b915050610b90565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d295750610d2882612de8565b5b9050919050565b606060008054610d3f90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6b90615a31565b8015610db85780601f10610d8d57610100808354040283529160200191610db8565b820191906000526020600020905b815481529060010190602001808311610d9b57829003601f168201915b5050505050905090565b6000610dcd82612e52565b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061553d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e5282611c31565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061561d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ee2612de0565b73ffffffffffffffffffffffffffffffffffffffff161480610f115750610f1081610f0b612de0565b612af2565b5b610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f479061543d565b60405180910390fd5b610f5a8383612ebe565b505050565b610f67612de0565b73ffffffffffffffffffffffffffffffffffffffff16610f8561203d565b73ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd29061559d565b60405180910390fd5b600d60029054906101000a900460ff161561102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906154dd565b60405180910390fd5b828260116000848152602001908152602001600020919061104d929190613e1b565b50505050565b606080600a83101561108e5761106883612f77565b60405160200161107891906151b5565b604051602081830303815290604052905061110d565b60648310156110c6576110a083612f77565b6040516020016110b091906151d7565b604051602081830303815290604052905061110c565b6103e88310156110ff576110d983612f77565b6040516020016110e99190615193565b604051602081830303815290604052905061110b565b61110883613124565b90505b5b5b80915050919050565b600e5481565b60096020528060005260406000206000915090505481565b61113c612de0565b73ffffffffffffffffffffffffffffffffffffffff1661115a61203d565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a79061559d565b60405180910390fd5b60005b8151811015611267576000600a60008484815181106111fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125f90615a63565b9150506111b3565b5050565b61127c611276612de0565b826132d7565b6112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061563d565b60405180910390fd5b6112c68383836133b5565b505050565b6115b381565b600a6020528060005260406000206000915054906101000a900460ff1681565b6112f9612de0565b73ffffffffffffffffffffffffffffffffffffffff1661131761203d565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061559d565b60405180910390fd5b611375611aa0565b6113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab906152bd565b60405180910390fd5b6113bc613611565b565b6113d98383836040518060200160405280600081525061265e565b505050565b600d60019054906101000a900460ff1661142d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114249061533d565b60405180910390fd5b6115b381600e5461143e919061581d565b111561147f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611476906156bd565b60405180910390fd5b60c860075410156114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc906154bd565b60405180910390fd5b66b1a2bc2ec50000816114d891906158a4565b34101561151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906156fd565b60405180910390fd5b600381111561155e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611555906154fd565b60405180910390fd5b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061557d565b60405180910390fd5b600381600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611637919061581d565b1115611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f906155fd565b60405180910390fd5b6000600190505b8181116116b05761169d3382600e54611698919061581d565b6136b3565b80806116a890615a63565b91505061167f565b5080600e60008282546116c3919061581d565b9250508190555080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611719919061581d565b9250508190555050565b61172b612de0565b73ffffffffffffffffffffffffffffffffffffffff1661174961203d565b73ffffffffffffffffffffffffffffffffffffffff161461179f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117969061559d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611806906153dd565b60405180910390fd5b60004711611852576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118499061565d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611898573d6000803e3d6000fd5b5050565b6118a4612de0565b73ffffffffffffffffffffffffffffffffffffffff166118c261203d565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061559d565b60405180910390fd5b600d60029054906101000a900460ff1615611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f906154dd565b60405180910390fd5b6001600d60026101000a81548160ff021916908315150217905550565b61198d612de0565b73ffffffffffffffffffffffffffffffffffffffff166119ab61203d565b73ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061559d565b60405180910390fd5b600d60029054906101000a900460ff1615611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a48906154dd565b60405180910390fd5b818160109190611a62929190613e1b565b5060405180602001604052806000815250600f9080519060200190611a88929190613ea1565b505050565b600d60009054906101000a900460ff1681565b6000600660149054906101000a900460ff16905090565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3a9061567d565b60405180910390fd5b6115b382600e54611b54919061581d565b1115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906156bd565b60405180910390fd5b60c86007541015611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd2906154bd565b60405180910390fd5b6000600190505b828111611c1357611c008282600e54611bfb919061581d565b6136b3565b8080611c0b90615a63565b915050611be2565b5081600e6000828254611c26919061581d565b925050819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd19061549d565b60405180910390fd5b80915050919050565b600d60019054906101000a900460ff1681565b60c881565b60116020528060005260406000206000915090508054611d1a90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4690615a31565b8015611d935780601f10611d6857610100808354040283529160200191611d93565b820191906000526020600020905b815481529060010190602001808311611d7657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061547d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e5b612de0565b73ffffffffffffffffffffffffffffffffffffffff16611e7961203d565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061559d565b60405180910390fd5b611ed960006136d1565b565b60075481565b611ee9612de0565b73ffffffffffffffffffffffffffffffffffffffff16611f0761203d565b73ffffffffffffffffffffffffffffffffffffffff1614611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f549061559d565b60405180910390fd5b611f65611aa0565b15611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061537d565b60405180910390fd5b611fad613797565b565b60108054611fbc90615a31565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe890615a31565b80156120355780601f1061200a57610100808354040283529160200191612035565b820191906000526020600020905b81548152906001019060200180831161201857829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b60606001805461207b90615a31565b80601f01602080910402602001604051908101604052809291908181526020018280546120a790615a31565b80156120f45780601f106120c9576101008083540402835291602001916120f4565b820191906000526020600020905b8154815290600101906020018083116120d757829003601f168201915b5050505050905090565b600d60009054906101000a900460ff1661214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121449061533d565b60405180910390fd5b60008111801561215e575060058111155b61219d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121949061569d565b60405180910390fd5b60c860075410156121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121da906154bd565b60405180910390fd5b6115b381600e546121f4919061581d565b1115612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c906156bd565b60405180910390fd5b66b1a2bc2ec500008161224891906158a4565b34101561228a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612281906156fd565b60405180910390fd5b600881600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d7919061581d565b1115612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906156dd565b60405180910390fd5b6000600190505b8181116123505761233d3382600e54612338919061581d565b6136b3565b808061234890615a63565b91505061231f565b5080600e6000828254612363919061581d565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123b9919061581d565b9250508190555050565b600f80546123d090615a31565b80601f01602080910402602001604051908101604052809291908181526020018280546123fc90615a31565b80156124495780601f1061241e57610100808354040283529160200191612449565b820191906000526020600020905b81548152906001019060200180831161242c57829003601f168201915b505050505081565b61246361245c612de0565b838361383a565b5050565b61246f612de0565b73ffffffffffffffffffffffffffffffffffffffff1661248d61203d565b73ffffffffffffffffffffffffffffffffffffffff16146124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da9061559d565b60405180910390fd5b801515600d60009054906101000a900460ff1615151415612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125309061529d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b61255e612de0565b73ffffffffffffffffffffffffffffffffffffffff1661257c61203d565b73ffffffffffffffffffffffffffffffffffffffff16146125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c99061559d565b60405180910390fd5b600d60029054906101000a900460ff1615612622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612619906154dd565b60405180910390fd5b8181600f9190612633929190613e1b565b506040518060200160405280600081525060109080519060200190612659929190613ea1565b505050565b61266f612669612de0565b836132d7565b6126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a59061563d565b60405180910390fd5b6126ba848484846139a7565b50505050565b66b1a2bc2ec5000081565b60606126d682612e52565b612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c906155dd565b60405180910390fd5b600060116000848152602001908152602001600020805461273590615a31565b9050146127df5760116000838152602001908152602001600020805461275a90615a31565b80601f016020809104026020016040519081016040528092919081815260200182805461278690615a31565b80156127d35780601f106127a8576101008083540402835291602001916127d3565b820191906000526020600020905b8154815290600101906020018083116127b657829003601f168201915b505050505090506128b5565b6000601080546127ee90615a31565b905014612887576010805461280290615a31565b80601f016020809104026020016040519081016040528092919081815260200182805461282e90615a31565b801561287b5780601f106128505761010080835404028352916020019161287b565b820191906000526020600020905b81548152906001019060200180831161285e57829003601f168201915b505050505090506128b5565b600f61289283611053565b6040516020016128a392919061516f565b60405160208183030381529060405290505b919050565b6128c2612de0565b73ffffffffffffffffffffffffffffffffffffffff166128e061203d565b73ffffffffffffffffffffffffffffffffffffffff1614612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d9061559d565b60405180910390fd5b60c86007541061297b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129729061545d565b60405180910390fd5b6000600190505b60c881116129b4576129a13382600e5461299c919061581d565b6136b3565b80806129ac90615a63565b915050612982565b5060c8600e60008282546129c8919061581d565b9250508190555060c8600760008282546129e2919061581d565b92505081905550565b60086020528060005260406000206000915090505481565b612a0b612de0565b73ffffffffffffffffffffffffffffffffffffffff16612a2961203d565b73ffffffffffffffffffffffffffffffffffffffff1614612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a769061559d565b60405180910390fd5b801515600d60019054906101000a900460ff1615151415612ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acc9061529d565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b8e612de0565b73ffffffffffffffffffffffffffffffffffffffff16612bac61203d565b73ffffffffffffffffffffffffffffffffffffffff1614612c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf99061559d565b60405180910390fd5b60005b8151811015612cb9576001600a6000848481518110612c4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080612cb190615a63565b915050612c05565b5050565b612cc5612de0565b73ffffffffffffffffffffffffffffffffffffffff16612ce361203d565b73ffffffffffffffffffffffffffffffffffffffff1614612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d309061559d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da09061531d565b60405180910390fd5b612db2816136d1565b50565b600d60029054906101000a900460ff1681565b600080823b905060008111915050919050565b505050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f3183611c31565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606000821415612fbf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061311f565b600082905060005b60008214612ff1578080612fda90615a63565b915050600a82612fea9190615873565b9150612fc7565b60008167ffffffffffffffff811115613033577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156130655781602001600182028036833780820191505090505b5090505b600085146131185760018261307e91906158fe565b9150600a8561308d9190615ad6565b6030613099919061581d565b60f81b8183815181106130d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131119190615873565b9450613069565b8093505050505b919050565b6060600082141561316c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d2565b600082905060005b6000821461319e57808061318790615a63565b915050600a826131979190615873565b9150613174565b60008167ffffffffffffffff8111156131e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132125781602001600182028036833780820191505090505b50905060008290508593505b600084146132ca57600a846132339190615ad6565b603061323f919061581d565b60f81b828261324d90615a07565b92508281518110613287577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a846132c39190615873565b935061321e565b819450505050505b919050565b60006132e282612e52565b613321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613318906153fd565b60405180910390fd5b600061332c83611c31565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061339b57508373ffffffffffffffffffffffffffffffffffffffff1661338384610dc2565b73ffffffffffffffffffffffffffffffffffffffff16145b806133ac57506133ab8185612af2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166133d582611c31565b73ffffffffffffffffffffffffffffffffffffffff161461342b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613422906155bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561349b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134929061539d565b60405180910390fd5b6134a6838383613a03565b6134b1600082612ebe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461350191906158fe565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613558919061581d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b613619611aa0565b613658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364f906152dd565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61369c612de0565b6040516136a991906151f9565b60405180910390a1565b6136cd828260405180602001604052806000815250613a5b565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61379f611aa0565b156137df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d69061541d565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613823612de0565b60405161383091906151f9565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a0906153bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161399a9190615260565b60405180910390a3505050565b6139b28484846133b5565b6139be84848484613ab6565b6139fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f4906152fd565b60405180910390fd5b50505050565b613a0b611aa0565b15613a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a429061555d565b60405180910390fd5b613a56838383612ddb565b505050565b613a658383613c4d565b613a726000848484613ab6565b613ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aa8906152fd565b60405180910390fd5b505050565b6000613ad78473ffffffffffffffffffffffffffffffffffffffff16612dc8565b15613c40578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b00612de0565b8786866040518563ffffffff1660e01b8152600401613b229493929190615214565b602060405180830381600087803b158015613b3c57600080fd5b505af1925050508015613b6d57506040513d601f19601f82011682018060405250810190613b6a919061436d565b60015b613bf0573d8060008114613b9d576040519150601f19603f3d011682016040523d82523d6000602084013e613ba2565b606091505b50600081511415613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf906152fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c45565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb49061551d565b60405180910390fd5b613cc681612e52565b15613d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfd9061535d565b60405180910390fd5b613d1260008383613a03565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d62919061581d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613e2790615a31565b90600052602060002090601f016020900481019282613e495760008555613e90565b82601f10613e6257803560ff1916838001178555613e90565b82800160010185558215613e90579182015b82811115613e8f578235825591602001919060010190613e74565b5b509050613e9d9190613f27565b5090565b828054613ead90615a31565b90600052602060002090601f016020900481019282613ecf5760008555613f16565b82601f10613ee857805160ff1916838001178555613f16565b82800160010185558215613f16579182015b82811115613f15578251825591602001919060010190613efa565b5b509050613f239190613f27565b5090565b5b80821115613f40576000816000905550600101613f28565b5090565b6000613f57613f5284615769565b615738565b90508083825260208201905082856020860282011115613f7657600080fd5b60005b85811015613fa65781613f8c8882613fee565b845260208401935060208301925050600181019050613f79565b5050509392505050565b6000613fc3613fbe84615795565b615738565b905082815260208101848484011115613fdb57600080fd5b613fe68482856159c5565b509392505050565b600081359050613ffd81615bd4565b92915050565b60008135905061401281615beb565b92915050565b600082601f83011261402957600080fd5b8135614039848260208601613f44565b91505092915050565b60008135905061405181615c02565b92915050565b60008135905061406681615c19565b92915050565b60008151905061407b81615c19565b92915050565b600082601f83011261409257600080fd5b81356140a2848260208601613fb0565b91505092915050565b60008083601f8401126140bd57600080fd5b8235905067ffffffffffffffff8111156140d657600080fd5b6020830191508360018202830111156140ee57600080fd5b9250929050565b60008135905061410481615c30565b92915050565b60006020828403121561411c57600080fd5b600061412a84828501613fee565b91505092915050565b60006020828403121561414557600080fd5b600061415384828501614003565b91505092915050565b6000806040838503121561416f57600080fd5b600061417d85828601613fee565b925050602061418e85828601613fee565b9150509250929050565b6000806000606084860312156141ad57600080fd5b60006141bb86828701613fee565b93505060206141cc86828701613fee565b92505060406141dd868287016140f5565b9150509250925092565b600080600080608085870312156141fd57600080fd5b600061420b87828801613fee565b945050602061421c87828801613fee565b935050604061422d878288016140f5565b925050606085013567ffffffffffffffff81111561424a57600080fd5b61425687828801614081565b91505092959194509250565b6000806040838503121561427557600080fd5b600061428385828601613fee565b925050602061429485828601614042565b9150509250929050565b600080604083850312156142b157600080fd5b60006142bf85828601613fee565b92505060206142d0858286016140f5565b9150509250929050565b6000602082840312156142ec57600080fd5b600082013567ffffffffffffffff81111561430657600080fd5b61431284828501614018565b91505092915050565b60006020828403121561432d57600080fd5b600061433b84828501614042565b91505092915050565b60006020828403121561435657600080fd5b600061436484828501614057565b91505092915050565b60006020828403121561437f57600080fd5b600061438d8482850161406c565b91505092915050565b600080602083850312156143a957600080fd5b600083013567ffffffffffffffff8111156143c357600080fd5b6143cf858286016140ab565b92509250509250929050565b6000806000604084860312156143f057600080fd5b600084013567ffffffffffffffff81111561440a57600080fd5b614416868287016140ab565b93509350506020614429868287016140f5565b9150509250925092565b60006020828403121561444557600080fd5b6000614453848285016140f5565b91505092915050565b6000806040838503121561446f57600080fd5b600061447d858286016140f5565b925050602061448e85828601613fee565b9150509250929050565b6144a181615932565b82525050565b6144b081615956565b82525050565b60006144c1826157da565b6144cb81856157f0565b93506144db8185602086016159d4565b6144e481615bc3565b840191505092915050565b60006144fa826157e5565b6145048185615801565b93506145148185602086016159d4565b61451d81615bc3565b840191505092915050565b6000614533826157e5565b61453d8185615812565b935061454d8185602086016159d4565b80840191505092915050565b6000815461456681615a31565b6145708186615812565b9450600182166000811461458b576001811461459c576145cf565b60ff198316865281860193506145cf565b6145a5856157c5565b60005b838110156145c7578154818901526001820191506020810190506145a8565b838801955050505b50505092915050565b60006145e5600183615812565b91507f30000000000000000000000000000000000000000000000000000000000000006000830152600182019050919050565b6000614625601883615801565b91507f53414c455f535441525445445f414c52454144595f53455400000000000000006000830152602082019050919050565b6000614665601083615801565b91507f414c52454144595f554e504155534544000000000000000000000000000000006000830152602082019050919050565b60006146a5601483615801565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b60006146e5603283615801565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061474b602683615801565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147b1601083615801565b91507f4d494e545f4e4f545f53544152544544000000000000000000000000000000006000830152602082019050919050565b60006147f1601c83615801565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000614831600e83615801565b91507f414c52454144595f5041555345440000000000000000000000000000000000006000830152602082019050919050565b6000614871600383615812565b91507f30303000000000000000000000000000000000000000000000000000000000006000830152600382019050919050565b60006148b1602483615801565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614917601983615801565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000614957601583615801565b91507f57495448445241575f414444524553535f5a45524f00000000000000000000006000830152602082019050919050565b6000614997602c83615801565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006149fd601083615801565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000614a3d603883615801565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614aa3601e83615801565b91507f4c6567656e6461727920546f74616c204d696e746564205265616368656400006000830152602082019050919050565b6000614ae3602a83615801565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b49602983615801565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614baf601483615801565b91507f4c4547454e444152595f4e4f545f4d494e5445440000000000000000000000006000830152602082019050919050565b6000614bef600e83615801565b91507f414c52454144595f4c4f434b45440000000000000000000000000000000000006000830152602082019050919050565b6000614c2f601a83615801565b91507f596f752063616e2774206d696e74206d6f7265207468616e20330000000000006000830152602082019050919050565b6000614c6f602083615801565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614caf602c83615801565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000614d15600f83615801565b91507f5452414e534645525f50415553454400000000000000000000000000000000006000830152602082019050919050565b6000614d55601983615801565b91507f416464726573732069736e27742057686974656c6973746564000000000000006000830152602082019050919050565b6000614d95602083615801565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614dd5602983615801565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614e3b602f83615801565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000614ea1601a83615801565b91507f796f752063616e2774206d696e74206d6f7265207468616e20330000000000006000830152602082019050919050565b6000614ee1602183615801565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f47603183615801565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000614fad600d83615801565b91507f454d5054595f42414c414e4345000000000000000000000000000000000000006000830152602082019050919050565b6000614fed600283615812565b91507f30300000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061502d602083615801565b91507f4f6e6c79204c6567656e6461727920416464726573732063616e2063616c6c216000830152602082019050919050565b600061506d600d83615801565b91507f434f554e545f494e56414c4944000000000000000000000000000000000000006000830152602082019050919050565b60006150ad601283615801565b91507f4d41585f535550504c595f5245414348454400000000000000000000000000006000830152602082019050919050565b60006150ed601983615801565b91507f4d6178696d756d204e4654204c696d69742072656163686564000000000000006000830152602082019050919050565b600061512d601083615801565b91507f494e56414c49445f4554485f53454e54000000000000000000000000000000006000830152602082019050919050565b615169816159ae565b82525050565b600061517b8285614559565b91506151878284614528565b91508190509392505050565b600061519e826145d8565b91506151aa8284614528565b915081905092915050565b60006151c082614864565b91506151cc8284614528565b915081905092915050565b60006151e282614fe0565b91506151ee8284614528565b915081905092915050565b600060208201905061520e6000830184614498565b92915050565b60006080820190506152296000830187614498565b6152366020830186614498565b6152436040830185615160565b818103606083015261525581846144b6565b905095945050505050565b600060208201905061527560008301846144a7565b92915050565b6000602082019050818103600083015261529581846144ef565b905092915050565b600060208201905081810360008301526152b681614618565b9050919050565b600060208201905081810360008301526152d681614658565b9050919050565b600060208201905081810360008301526152f681614698565b9050919050565b60006020820190508181036000830152615316816146d8565b9050919050565b600060208201905081810360008301526153368161473e565b9050919050565b60006020820190508181036000830152615356816147a4565b9050919050565b60006020820190508181036000830152615376816147e4565b9050919050565b6000602082019050818103600083015261539681614824565b9050919050565b600060208201905081810360008301526153b6816148a4565b9050919050565b600060208201905081810360008301526153d68161490a565b9050919050565b600060208201905081810360008301526153f68161494a565b9050919050565b600060208201905081810360008301526154168161498a565b9050919050565b60006020820190508181036000830152615436816149f0565b9050919050565b6000602082019050818103600083015261545681614a30565b9050919050565b6000602082019050818103600083015261547681614a96565b9050919050565b6000602082019050818103600083015261549681614ad6565b9050919050565b600060208201905081810360008301526154b681614b3c565b9050919050565b600060208201905081810360008301526154d681614ba2565b9050919050565b600060208201905081810360008301526154f681614be2565b9050919050565b6000602082019050818103600083015261551681614c22565b9050919050565b6000602082019050818103600083015261553681614c62565b9050919050565b6000602082019050818103600083015261555681614ca2565b9050919050565b6000602082019050818103600083015261557681614d08565b9050919050565b6000602082019050818103600083015261559681614d48565b9050919050565b600060208201905081810360008301526155b681614d88565b9050919050565b600060208201905081810360008301526155d681614dc8565b9050919050565b600060208201905081810360008301526155f681614e2e565b9050919050565b6000602082019050818103600083015261561681614e94565b9050919050565b6000602082019050818103600083015261563681614ed4565b9050919050565b6000602082019050818103600083015261565681614f3a565b9050919050565b6000602082019050818103600083015261567681614fa0565b9050919050565b6000602082019050818103600083015261569681615020565b9050919050565b600060208201905081810360008301526156b681615060565b9050919050565b600060208201905081810360008301526156d6816150a0565b9050919050565b600060208201905081810360008301526156f6816150e0565b9050919050565b6000602082019050818103600083015261571681615120565b9050919050565b60006020820190506157326000830184615160565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561575f5761575e615b94565b5b8060405250919050565b600067ffffffffffffffff82111561578457615783615b94565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156157b0576157af615b94565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615828826159ae565b9150615833836159ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561586857615867615b07565b5b828201905092915050565b600061587e826159ae565b9150615889836159ae565b92508261589957615898615b36565b5b828204905092915050565b60006158af826159ae565b91506158ba836159ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158f3576158f2615b07565b5b828202905092915050565b6000615909826159ae565b9150615914836159ae565b92508282101561592757615926615b07565b5b828203905092915050565b600061593d8261598e565b9050919050565b600061594f8261598e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156159f25780820151818401526020810190506159d7565b83811115615a01576000848401525b50505050565b6000615a12826159ae565b91506000821415615a2657615a25615b07565b5b600182039050919050565b60006002820490506001821680615a4957607f821691505b60208210811415615a5d57615a5c615b65565b5b50919050565b6000615a6e826159ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615aa157615aa0615b07565b5b600182019050919050565b6000615ab7826159b8565b915060ff821415615acb57615aca615b07565b5b600182019050919050565b6000615ae1826159ae565b9150615aec836159ae565b925082615afc57615afb615b36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b615bdd81615932565b8114615be857600080fd5b50565b615bf481615944565b8114615bff57600080fd5b50565b615c0b81615956565b8114615c1657600080fd5b50565b615c2281615962565b8114615c2d57600080fd5b50565b615c39816159ae565b8114615c4457600080fd5b5056fea2646970667358221220269e0c9286bd310987f0acb996ca83ea68c50f4f154d834fa647d02ae5e61c8e64736f6c63430008000033
Deployed Bytecode Sourcemap
38695:7340:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44481:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26200:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27145:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28704:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28227:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45370:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40361:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39399:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39081:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43345:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29454:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38777:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39138:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45664:115;;;;;;;;;;;;;:::i;:::-;;29864:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41599:814;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44046:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44901:115;;;;;;;;;;;;;:::i;:::-;;45198:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39289:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21490:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41200:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26839:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39327:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38929:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39504:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26569:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19538:103;;;;;;;;;;;;;:::i;:::-;;38982:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45546:110;;;;;;;;;;;;;:::i;:::-;;39468:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18887:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38879:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27314:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42445:697;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39438:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28997:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44290:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45024:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30120:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38825:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43557:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40835:357;;;;;;;;;;;;;:::i;:::-;;39024:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44707:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29223:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43147:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19796:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39368:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44481:218;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44579:7:::1;44575:113;44591:17;:24;44589:1;:26;;;44575:113;;;44676:4;44637:16;:38;44654:17;44672:1;44654:20;;;;;;;;;;;;;;;;;;;;;;;;44637:38;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;44616:3;;;;;:::i;:::-;;;;44575:113;;;;44481:218:::0;:::o;26200:305::-;26302:4;26354:25;26339:40;;;:11;:40;;;;:105;;;;26411:33;26396:48;;;:11;:48;;;;26339:105;:158;;;;26461:36;26485:11;26461:23;:36::i;:::-;26339:158;26319:178;;26200:305;;;:::o;27145:100::-;27199:13;27232:5;27225:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27145:100;:::o;28704:221::-;28780:7;28808:16;28816:7;28808;:16::i;:::-;28800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:15;:24;28909:7;28893:24;;;;;;;;;;;;;;;;;;;;;28886:31;;28704:221;;;:::o;28227:411::-;28308:13;28324:23;28339:7;28324:14;:23::i;:::-;28308:39;;28372:5;28366:11;;:2;:11;;;;28358:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28466:5;28450:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28475:37;28492:5;28499:12;:10;:12::i;:::-;28475:16;:37::i;:::-;28450:62;28428:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28609:21;28618:2;28622:7;28609:8;:21::i;:::-;28227:411;;;:::o;45370:168::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45470:4:::1;;;;;;;;;;;45469:5;45461:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45526:4;;45504:9;:19;45514:8;45504:19;;;;;;;;;;;:26;;;;;;;:::i;:::-;;45370:168:::0;;;:::o;40361:466::-;40416:13;40438:21;40477:2;40470:6;:9;40467:330;;;40531:17;:6;:15;:17::i;:::-;40507:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;40491:59;;40467:330;;;40574:3;40567:6;:10;40564:233;;;40628:17;:6;:15;:17::i;:::-;40605:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;40588:59;;40564:233;;;40671:4;40664:6;:11;40661:136;;;40725:17;:6;:15;:17::i;:::-;40703:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;40686:58;;40661:136;;;40773:16;40782:6;40773:8;:16::i;:::-;40765:24;;40661:136;40564:233;40467:330;40811:7;40803:16;;;40361:466;;;:::o;39399:30::-;;;;:::o;39081:50::-;;;;;;;;;;;;;;;;;:::o;43345:206::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43437:6:::1;43433:111;43453:10;:17;43449:1;:21;43433:111;;;43523:5;43492:13;:28;43506:10;43517:1;43506:13;;;;;;;;;;;;;;;;;;;;;;43492:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;43472:3;;;;;:::i;:::-;;;;43433:111;;;;43345:206:::0;:::o;29454:339::-;29649:41;29668:12;:10;:12::i;:::-;29682:7;29649:18;:41::i;:::-;29641:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29757:28;29767:4;29773:2;29777:7;29757:9;:28::i;:::-;29454:339;;;:::o;38777:41::-;38814:4;38777:41;:::o;39138:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;45664:115::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45721:8:::1;:6;:8::i;:::-;45713:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45761:10;:8;:10::i;:::-;45664:115::o:0;29864:185::-;30002:39;30019:4;30025:2;30029:7;30002:39;;;;;;;;;;;;:16;:39::i;:::-;29864:185;;;:::o;41599:814::-;41707:14;;;;;;;;;;;41699:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:4;41775:6;41761:11;;:20;;;;:::i;:::-;:34;;41753:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38972:3;41837:20;;:40;;41829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38862:10;41935:6;:19;;;;:::i;:::-;41921:9;:34;;41913:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42003:1;41995:6;:9;;41987:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42053:13;:25;42067:10;42053:25;;;;;;;;;;;;;;;;;;;;;;;;;42045:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42167:1;42159:6;42126:20;:32;42147:10;42126:32;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:42;;42118:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42214:9;42226:1;42214:13;;42209:104;42234:6;42229:1;:11;42209:104;;42262:39;42272:10;42298:1;42284:11;;:15;;;;:::i;:::-;42262:9;:39::i;:::-;42242:3;;;;;:::i;:::-;;;;42209:104;;;;42338:6;42323:11;;:21;;;;;;;:::i;:::-;;;;;;;;42389:6;42355:20;:32;42376:10;42355:32;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;41599:814;:::o;44046:236::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44138:1:::1;44123:17;;:3;:17;;;;44115:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44209:1;44185:21;:25;44177:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44239:3;:12;;:35;44252:21;44239:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44046:236:::0;:::o;44901:115::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44963:4:::1;;;;;;;;;;;44962:5;44954:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45004:4;44997;;:11;;;;;;;;;;;;;;;;;;44901:115::o:0;45198:166::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45281:4:::1;;;;;;;;;;;45280:5;45272:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45327:4;;45315:9;:16;;;;;;;:::i;:::-;;45342:14;;;;;;;;;;;::::0;:9:::1;:14;;;;;;;;;;;;:::i;:::-;;45198:166:::0;;:::o;39289:31::-;;;;;;;;;;;;;:::o;21490:86::-;21537:4;21561:7;;;;;;;;;;;21554:14;;21490:86;:::o;41200:391::-;39713:16;:28;39730:10;39713:28;;;;;;;;;;;;;;;;;;;;;;;;;39705:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:4:::1;41312:6;41298:11;;:20;;;;:::i;:::-;:34;;41290:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38972:3;41374:20;;:40;;41366:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41455:9;41467:1;41455:13;;41450:102;41475:6;41470:1;:11;41450:102;;41503:37;41513:8;41537:1;41523:11;;:15;;;;:::i;:::-;41503:9;:37::i;:::-;41483:3;;;;;:::i;:::-;;;;41450:102;;;;41577:6;41562:11;;:21;;;;;;;:::i;:::-;;;;;;;;41200:391:::0;;:::o;26839:239::-;26911:7;26931:13;26947:7;:16;26955:7;26947:16;;;;;;;;;;;;;;;;;;;;;26931:32;;26999:1;26982:19;;:5;:19;;;;26974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27065:5;27058:12;;;26839:239;;;:::o;39327:34::-;;;;;;;;;;;;;:::o;38929:46::-;38972:3;38929:46;:::o;39504:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26569:208::-;26641:7;26686:1;26669:19;;:5;:19;;;;26661:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26753:9;:16;26763:5;26753:16;;;;;;;;;;;;;;;;26746:23;;26569:208;;;:::o;19538:103::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19603:30:::1;19630:1;19603:18;:30::i;:::-;19538:103::o:0;38982:35::-;;;;:::o;45546:110::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45602:8:::1;:6;:8::i;:::-;45601:9;45593:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45640:8;:6;:8::i;:::-;45546:110::o:0;39468:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18887:87::-;18933:7;18960:6;;;;;;;;;;;18953:13;;18887:87;:::o;38879:43::-;38921:1;38879:43;:::o;27314:104::-;27370:13;27403:7;27396:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27314:104;:::o;42445:697::-;42509:11;;;;;;;;;;;42501:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42569:1;42560:6;:10;:39;;;;;38921:1;42574:6;:25;;42560:39;42552:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38972:3;42636:20;;:40;;42628:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38814:4;42734:6;42720:11;;:20;;;;:::i;:::-;:34;;42712:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38862:10;42809:6;:19;;;;:::i;:::-;42796:9;:33;;42788:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42907:1;42899:6;42869:17;:29;42887:10;42869:29;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:39;;42861:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42955:9;42967:1;42955:13;;42950:105;42975:6;42970:1;:11;42950:105;;43003:40;43013:10;43040:1;43026:11;;:15;;;;:::i;:::-;43003:9;:40::i;:::-;42983:3;;;;;:::i;:::-;;;;42950:105;;;;43080:6;43065:11;;:21;;;;;;;:::i;:::-;;;;;;;;43128:6;43097:17;:29;43115:10;43097:29;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;42445:697;:::o;39438:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28997:155::-;29092:52;29111:12;:10;:12::i;:::-;29125:8;29135;29092:18;:52::i;:::-;28997:155;;:::o;44290:179::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44385:11:::1;44370:26;;:11;;;;;;;;;;;:26;;;;44362:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44450:11;44436;;:25;;;;;;;;;;;;;;;;;;44290:179:::0;:::o;45024:166::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45107:4:::1;;;;;;;;;;;45106:5;45098:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;45153:4;;45141:9;:16;;;;;;;:::i;:::-;;45168:14;;;;;;;;;;;::::0;:9:::1;:14;;;;;;;;;;;;:::i;:::-;;45024:166:::0;;:::o;30120:328::-;30295:41;30314:12;:10;:12::i;:::-;30328:7;30295:18;:41::i;:::-;30287:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30401:39;30415:4;30421:2;30425:7;30434:5;30401:13;:39::i;:::-;30120:328;;;;:::o;38825:47::-;38862:10;38825:47;:::o;43557:449::-;43630:13;43664:16;43672:7;43664;:16::i;:::-;43656:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43783:1;43753:9;:18;43763:7;43753:18;;;;;;;;;;;43747:32;;;;;:::i;:::-;;;:37;43743:95;;43808:9;:18;43818:7;43808:18;;;;;;;;;;;43801:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43743:95;43879:1;43858:9;43852:23;;;;;:::i;:::-;;;:28;43848:77;;43904:9;43897:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43848:77;43966:9;43977:19;43988:7;43977:10;:19::i;:::-;43949:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43935:63;;43557:449;;;;:::o;40835:357::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38972:3:::1;40892:20;;:37;40884:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;40978:9;40988:1;40978:11;;40974:116;38972:3;40991:1;:21;40974:116;;41030:38;41040:10;41065:1;41053:11;;:13;;;;:::i;:::-;41030:9;:38::i;:::-;41015:3;;;;;:::i;:::-;;;;40974:116;;;;38972:3;41100:11;;:32;;;;;;;:::i;:::-;;;;;;;;38972:3;41143:20;;:41;;;;;;;:::i;:::-;;;;;;;;40835:357::o:0;39024:50::-;;;;;;;;;;;;;;;;;:::o;44707:188::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44808:11:::1;44790:29;;:14;;;;;;;;;;;:29;;;;44782:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44876:11;44859:14;;:28;;;;;;;;;;;;;;;;;;44707:188:::0;:::o;29223:164::-;29320:4;29344:18;:25;29363:5;29344:25;;;;;;;;;;;;;;;:35;29370:8;29344:35;;;;;;;;;;;;;;;;;;;;;;;;;29337:42;;29223:164;;;;:::o;43147:190::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43232:6:::1;43228:102;43248:10;:17;43244:1;:21;43228:102;;;43314:4;43283:13;:28;43297:10;43308:1;43297:13;;;;;;;;;;;;;;;;;;;;;;43283:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43267:3;;;;;:::i;:::-;;;;43228:102;;;;43147:190:::0;:::o;19796:201::-;19118:12;:10;:12::i;:::-;19107:23;;:7;:5;:7::i;:::-;:23;;;19099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19905:1:::1;19885:22;;:8;:22;;;;19877:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19961:28;19980:8;19961:18;:28::i;:::-;19796:201:::0;:::o;39368:24::-;;;;;;;;;;;;;:::o;928:387::-;988:4;1196:12;1263:7;1251:20;1243:28;;1306:1;1299:4;:8;1292:15;;;928:387;;;:::o;38507:126::-;;;;:::o;17608:98::-;17661:7;17688:10;17681:17;;17608:98;:::o;11081:157::-;11166:4;11205:25;11190:40;;;:11;:40;;;;11183:47;;11081:157;;;:::o;31958:127::-;32023:4;32075:1;32047:30;;:7;:16;32055:7;32047:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32040:37;;31958:127;;;:::o;35940:174::-;36042:2;36015:15;:24;36031:7;36015:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36098:7;36094:2;36060:46;;36069:23;36084:7;36069:14;:23::i;:::-;36060:46;;;;;;;;;;;;35940:174;;:::o;23044:723::-;23100:13;23330:1;23321:5;:10;23317:53;;;23348:10;;;;;;;;;;;;;;;;;;;;;23317:53;23380:12;23395:5;23380:20;;23411:14;23436:78;23451:1;23443:4;:9;23436:78;;23469:8;;;;;:::i;:::-;;;;23500:2;23492:10;;;;;:::i;:::-;;;23436:78;;;23524:19;23556:6;23546:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23524:39;;23574:154;23590:1;23581:5;:10;23574:154;;23618:1;23608:11;;;;;:::i;:::-;;;23685:2;23677:5;:10;;;;:::i;:::-;23664:2;:24;;;;:::i;:::-;23651:39;;23634:6;23641;23634:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;23714:2;23705:11;;;;;:::i;:::-;;;23574:154;;;23752:6;23738:21;;;;;23044:723;;;;:::o;39851:474::-;39935:17;39977:1;39971:2;:7;39967:46;;;39993:10;;;;;;;;;;;;;;;;;;;;;39967:46;40019:9;40031:2;40019:14;;40040;40061:57;40073:1;40068;:6;40061:57;;40088:8;;;;;:::i;:::-;;;;40108:2;40103:7;;;;;:::i;:::-;;;40061:57;;;40124:17;40154:6;40144:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40124:37;;40168:9;40180:6;40168:18;;40197:2;40193:6;;40206:87;40218:1;40213;:6;40206:87;;40267:2;40263:1;:6;;;;:::i;:::-;40258:2;:11;;;;:::i;:::-;40245:26;;40233:4;40238:3;;;;:::i;:::-;;;;40233:9;;;;;;;;;;;;;;;;;;;:38;;;;;;;;;;;40283:2;40278:7;;;;;:::i;:::-;;;40206:87;;;40312:4;40299:18;;39851:474;;;;;;;;:::o;32252:348::-;32345:4;32370:16;32378:7;32370;:16::i;:::-;32362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32446:13;32462:23;32477:7;32462:14;:23::i;:::-;32446:39;;32515:5;32504:16;;:7;:16;;;:51;;;;32548:7;32524:31;;:20;32536:7;32524:11;:20::i;:::-;:31;;;32504:51;:87;;;;32559:32;32576:5;32583:7;32559:16;:32::i;:::-;32504:87;32496:96;;;32252:348;;;;:::o;35244:578::-;35403:4;35376:31;;:23;35391:7;35376:14;:23::i;:::-;:31;;;35368:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35486:1;35472:16;;:2;:16;;;;35464:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35542:39;35563:4;35569:2;35573:7;35542:20;:39::i;:::-;35646:29;35663:1;35667:7;35646:8;:29::i;:::-;35707:1;35688:9;:15;35698:4;35688:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35736:1;35719:9;:13;35729:2;35719:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35767:2;35748:7;:16;35756:7;35748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35806:7;35802:2;35787:27;;35796:4;35787:27;;;;;;;;;;;;35244:578;;;:::o;22549:120::-;22093:8;:6;:8::i;:::-;22085:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22618:5:::1;22608:7;;:15;;;;;;;;;;;;;;;;;;22639:22;22648:12;:10;:12::i;:::-;22639:22;;;;;;:::i;:::-;;;;;;;;22549:120::o:0;32942:110::-;33018:26;33028:2;33032:7;33018:26;;;;;;;;;;;;:9;:26::i;:::-;32942:110;;:::o;20157:191::-;20231:16;20250:6;;;;;;;;;;;20231:25;;20276:8;20267:6;;:17;;;;;;;;;;;;;;;;;;20331:8;20300:40;;20321:8;20300:40;;;;;;;;;;;;20157:191;;:::o;22290:118::-;21816:8;:6;:8::i;:::-;21815:9;21807:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22360:4:::1;22350:7;;:14;;;;;;;;;;;;;;;;;;22380:20;22387:12;:10;:12::i;:::-;22380:20;;;;;;:::i;:::-;;;;;;;;22290:118::o:0;36256:315::-;36411:8;36402:17;;:5;:17;;;;36394:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36498:8;36460:18;:25;36479:5;36460:25;;;;;;;;;;;;;;;:35;36486:8;36460:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36544:8;36522:41;;36537:5;36522:41;;;36554:8;36522:41;;;;;;:::i;:::-;;;;;;;;36256:315;;;:::o;31330:::-;31487:28;31497:4;31503:2;31507:7;31487:9;:28::i;:::-;31534:48;31557:4;31563:2;31567:7;31576:5;31534:22;:48::i;:::-;31526:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31330:315;;;;:::o;45787:245::-;45940:8;:6;:8::i;:::-;45939:9;45931:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45979:45;46006:4;46012:2;46016:7;45979:26;:45::i;:::-;45787:245;;;:::o;33279:321::-;33409:18;33415:2;33419:7;33409:5;:18::i;:::-;33460:54;33491:1;33495:2;33499:7;33508:5;33460:22;:54::i;:::-;33438:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33279:321;;;:::o;37136:799::-;37291:4;37312:15;:2;:13;;;:15::i;:::-;37308:620;;;37364:2;37348:36;;;37385:12;:10;:12::i;:::-;37399:4;37405:7;37414:5;37348:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37344:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37607:1;37590:6;:13;:18;37586:272;;;37633:60;;;;;;;;;;:::i;:::-;;;;;;;;37586:272;37808:6;37802:13;37793:6;37789:2;37785:15;37778:38;37344:529;37481:41;;;37471:51;;;:6;:51;;;;37464:58;;;;;37308:620;37912:4;37905:11;;37136:799;;;;;;;:::o;33936:382::-;34030:1;34016:16;;:2;:16;;;;34008:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34089:16;34097:7;34089;:16::i;:::-;34088:17;34080:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34151:45;34180:1;34184:2;34188:7;34151:20;:45::i;:::-;34226:1;34209:9;:13;34219:2;34209:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34257:2;34238:7;:16;34246:7;34238:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34302:7;34298:2;34277:33;;34294:1;34277:33;;;;;;;;;;;;33936:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:139::-;;1084:6;1071:20;1062:29;;1100:33;1127:5;1100:33;:::i;:::-;1052:87;;;;:::o;1145:155::-;;1237:6;1224:20;1215:29;;1253:41;1288:5;1253:41;:::i;:::-;1205:95;;;;:::o;1323:303::-;;1443:3;1436:4;1428:6;1424:17;1420:27;1410:2;;1461:1;1458;1451:12;1410:2;1501:6;1488:20;1526:94;1616:3;1608:6;1601:4;1593:6;1589:17;1526:94;:::i;:::-;1517:103;;1400:226;;;;;:::o;1632:133::-;;1713:6;1700:20;1691:29;;1729:30;1753:5;1729:30;:::i;:::-;1681:84;;;;:::o;1771:137::-;;1854:6;1841:20;1832:29;;1870:32;1896:5;1870:32;:::i;:::-;1822:86;;;;:::o;1914:141::-;;2001:6;1995:13;1986:22;;2017:32;2043:5;2017:32;:::i;:::-;1976:79;;;;:::o;2074:271::-;;2178:3;2171:4;2163:6;2159:17;2155:27;2145:2;;2196:1;2193;2186:12;2145:2;2236:6;2223:20;2261:78;2335:3;2327:6;2320:4;2312:6;2308:17;2261:78;:::i;:::-;2252:87;;2135:210;;;;;:::o;2365:352::-;;;2483:3;2476:4;2468:6;2464:17;2460:27;2450:2;;2501:1;2498;2491:12;2450:2;2537:6;2524:20;2514:30;;2567:18;2559:6;2556:30;2553:2;;;2599:1;2596;2589:12;2553:2;2636:4;2628:6;2624:17;2612:29;;2690:3;2682:4;2674:6;2670:17;2660:8;2656:32;2653:41;2650:2;;;2707:1;2704;2697:12;2650:2;2440:277;;;;;:::o;2723:139::-;;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2775:87;;;;:::o;2868:262::-;;2976:2;2964:9;2955:7;2951:23;2947:32;2944:2;;;2992:1;2989;2982:12;2944:2;3035:1;3060:53;3105:7;3096:6;3085:9;3081:22;3060:53;:::i;:::-;3050:63;;3006:117;2934:196;;;;:::o;3136:278::-;;3252:2;3240:9;3231:7;3227:23;3223:32;3220:2;;;3268:1;3265;3258:12;3220:2;3311:1;3336:61;3389:7;3380:6;3369:9;3365:22;3336:61;:::i;:::-;3326:71;;3282:125;3210:204;;;;:::o;3420:407::-;;;3545:2;3533:9;3524:7;3520:23;3516:32;3513:2;;;3561:1;3558;3551:12;3513:2;3604:1;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3575:117;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3503:324;;;;;:::o;3833:552::-;;;;3975:2;3963:9;3954:7;3950:23;3946:32;3943:2;;;3991:1;3988;3981:12;3943:2;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;4161:2;4187:53;4232:7;4223:6;4212:9;4208:22;4187:53;:::i;:::-;4177:63;;4132:118;4289:2;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4260:118;3933:452;;;;;:::o;4391:809::-;;;;;4559:3;4547:9;4538:7;4534:23;4530:33;4527:2;;;4576:1;4573;4566:12;4527:2;4619:1;4644:53;4689:7;4680:6;4669:9;4665:22;4644:53;:::i;:::-;4634:63;;4590:117;4746:2;4772:53;4817:7;4808:6;4797:9;4793:22;4772:53;:::i;:::-;4762:63;;4717:118;4874:2;4900:53;4945:7;4936:6;4925:9;4921:22;4900:53;:::i;:::-;4890:63;;4845:118;5030:2;5019:9;5015:18;5002:32;5061:18;5053:6;5050:30;5047:2;;;5093:1;5090;5083:12;5047:2;5121:62;5175:7;5166:6;5155:9;5151:22;5121:62;:::i;:::-;5111:72;;4973:220;4517:683;;;;;;;:::o;5206:401::-;;;5328:2;5316:9;5307:7;5303:23;5299:32;5296:2;;;5344:1;5341;5334:12;5296:2;5387:1;5412:53;5457:7;5448:6;5437:9;5433:22;5412:53;:::i;:::-;5402:63;;5358:117;5514:2;5540:50;5582:7;5573:6;5562:9;5558:22;5540:50;:::i;:::-;5530:60;;5485:115;5286:321;;;;;:::o;5613:407::-;;;5738:2;5726:9;5717:7;5713:23;5709:32;5706:2;;;5754:1;5751;5744:12;5706:2;5797:1;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5768:117;5924:2;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5895:118;5696:324;;;;;:::o;6026:405::-;;6159:2;6147:9;6138:7;6134:23;6130:32;6127:2;;;6175:1;6172;6165:12;6127:2;6246:1;6235:9;6231:17;6218:31;6276:18;6268:6;6265:30;6262:2;;;6308:1;6305;6298:12;6262:2;6336:78;6406:7;6397:6;6386:9;6382:22;6336:78;:::i;:::-;6326:88;;6189:235;6117:314;;;;:::o;6437:256::-;;6542:2;6530:9;6521:7;6517:23;6513:32;6510:2;;;6558:1;6555;6548:12;6510:2;6601:1;6626:50;6668:7;6659:6;6648:9;6644:22;6626:50;:::i;:::-;6616:60;;6572:114;6500:193;;;;:::o;6699:260::-;;6806:2;6794:9;6785:7;6781:23;6777:32;6774:2;;;6822:1;6819;6812:12;6774:2;6865:1;6890:52;6934:7;6925:6;6914:9;6910:22;6890:52;:::i;:::-;6880:62;;6836:116;6764:195;;;;:::o;6965:282::-;;7083:2;7071:9;7062:7;7058:23;7054:32;7051:2;;;7099:1;7096;7089:12;7051:2;7142:1;7167:63;7222:7;7213:6;7202:9;7198:22;7167:63;:::i;:::-;7157:73;;7113:127;7041:206;;;;:::o;7253:395::-;;;7381:2;7369:9;7360:7;7356:23;7352:32;7349:2;;;7397:1;7394;7387:12;7349:2;7468:1;7457:9;7453:17;7440:31;7498:18;7490:6;7487:30;7484:2;;;7530:1;7527;7520:12;7484:2;7566:65;7623:7;7614:6;7603:9;7599:22;7566:65;:::i;:::-;7548:83;;;;7411:230;7339:309;;;;;:::o;7654:540::-;;;;7799:2;7787:9;7778:7;7774:23;7770:32;7767:2;;;7815:1;7812;7805:12;7767:2;7886:1;7875:9;7871:17;7858:31;7916:18;7908:6;7905:30;7902:2;;;7948:1;7945;7938:12;7902:2;7984:65;8041:7;8032:6;8021:9;8017:22;7984:65;:::i;:::-;7966:83;;;;7829:230;8098:2;8124:53;8169:7;8160:6;8149:9;8145:22;8124:53;:::i;:::-;8114:63;;8069:118;7757:437;;;;;:::o;8200:262::-;;8308:2;8296:9;8287:7;8283:23;8279:32;8276:2;;;8324:1;8321;8314:12;8276:2;8367:1;8392:53;8437:7;8428:6;8417:9;8413:22;8392:53;:::i;:::-;8382:63;;8338:117;8266:196;;;;:::o;8468:407::-;;;8593:2;8581:9;8572:7;8568:23;8564:32;8561:2;;;8609:1;8606;8599:12;8561:2;8652:1;8677:53;8722:7;8713:6;8702:9;8698:22;8677:53;:::i;:::-;8667:63;;8623:117;8779:2;8805:53;8850:7;8841:6;8830:9;8826:22;8805:53;:::i;:::-;8795:63;;8750:118;8551:324;;;;;:::o;8881:118::-;8968:24;8986:5;8968:24;:::i;:::-;8963:3;8956:37;8946:53;;:::o;9005:109::-;9086:21;9101:5;9086:21;:::i;:::-;9081:3;9074:34;9064:50;;:::o;9120:360::-;;9234:38;9266:5;9234:38;:::i;:::-;9288:70;9351:6;9346:3;9288:70;:::i;:::-;9281:77;;9367:52;9412:6;9407:3;9400:4;9393:5;9389:16;9367:52;:::i;:::-;9444:29;9466:6;9444:29;:::i;:::-;9439:3;9435:39;9428:46;;9210:270;;;;;:::o;9486:364::-;;9602:39;9635:5;9602:39;:::i;:::-;9657:71;9721:6;9716:3;9657:71;:::i;:::-;9650:78;;9737:52;9782:6;9777:3;9770:4;9763:5;9759:16;9737:52;:::i;:::-;9814:29;9836:6;9814:29;:::i;:::-;9809:3;9805:39;9798:46;;9578:272;;;;;:::o;9856:377::-;;9990:39;10023:5;9990:39;:::i;:::-;10045:89;10127:6;10122:3;10045:89;:::i;:::-;10038:96;;10143:52;10188:6;10183:3;10176:4;10169:5;10165:16;10143:52;:::i;:::-;10220:6;10215:3;10211:16;10204:23;;9966:267;;;;;:::o;10263:845::-;;10403:5;10397:12;10432:36;10458:9;10432:36;:::i;:::-;10484:89;10566:6;10561:3;10484:89;:::i;:::-;10477:96;;10604:1;10593:9;10589:17;10620:1;10615:137;;;;10766:1;10761:341;;;;10582:520;;10615:137;10699:4;10695:9;10684;10680:25;10675:3;10668:38;10735:6;10730:3;10726:16;10719:23;;10615:137;;10761:341;10828:38;10860:5;10828:38;:::i;:::-;10888:1;10902:154;10916:6;10913:1;10910:13;10902:154;;;10990:7;10984:14;10980:1;10975:3;10971:11;10964:35;11040:1;11031:7;11027:15;11016:26;;10938:4;10935:1;10931:12;10926:17;;10902:154;;;11085:6;11080:3;11076:16;11069:23;;10768:334;;10582:520;;10370:738;;;;;;:::o;11114:333::-;;11295:84;11377:1;11372:3;11295:84;:::i;:::-;11288:91;;11409:3;11405:1;11400:3;11396:11;11389:24;11439:1;11434:3;11430:11;11423:18;;11278:169;;;:::o;11453:322::-;;11616:67;11680:2;11675:3;11616:67;:::i;:::-;11609:74;;11713:26;11709:1;11704:3;11700:11;11693:47;11766:2;11761:3;11757:12;11750:19;;11599:176;;;:::o;11781:314::-;;11944:67;12008:2;12003:3;11944:67;:::i;:::-;11937:74;;12041:18;12037:1;12032:3;12028:11;12021:39;12086:2;12081:3;12077:12;12070:19;;11927:168;;;:::o;12101:318::-;;12264:67;12328:2;12323:3;12264:67;:::i;:::-;12257:74;;12361:22;12357:1;12352:3;12348:11;12341:43;12410:2;12405:3;12401:12;12394:19;;12247:172;;;:::o;12425:382::-;;12588:67;12652:2;12647:3;12588:67;:::i;:::-;12581:74;;12685:34;12681:1;12676:3;12672:11;12665:55;12751:20;12746:2;12741:3;12737:12;12730:42;12798:2;12793:3;12789:12;12782:19;;12571:236;;;:::o;12813:370::-;;12976:67;13040:2;13035:3;12976:67;:::i;:::-;12969:74;;13073:34;13069:1;13064:3;13060:11;13053:55;13139:8;13134:2;13129:3;13125:12;13118:30;13174:2;13169:3;13165:12;13158:19;;12959:224;;;:::o;13189:314::-;;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13449:18;13445:1;13440:3;13436:11;13429:39;13494:2;13489:3;13485:12;13478:19;;13335:168;;;:::o;13509:326::-;;13672:67;13736:2;13731:3;13672:67;:::i;:::-;13665:74;;13769:30;13765:1;13760:3;13756:11;13749:51;13826:2;13821:3;13817:12;13810:19;;13655:180;;;:::o;13841:312::-;;14004:67;14068:2;14063:3;14004:67;:::i;:::-;13997:74;;14101:16;14097:1;14092:3;14088:11;14081:37;14144:2;14139:3;14135:12;14128:19;;13987:166;;;:::o;14159:335::-;;14340:84;14422:1;14417:3;14340:84;:::i;:::-;14333:91;;14454:5;14450:1;14445:3;14441:11;14434:26;14486:1;14481:3;14477:11;14470:18;;14323:171;;;:::o;14500:368::-;;14663:67;14727:2;14722:3;14663:67;:::i;:::-;14656:74;;14760:34;14756:1;14751:3;14747:11;14740:55;14826:6;14821:2;14816:3;14812:12;14805:28;14859:2;14854:3;14850:12;14843:19;;14646:222;;;:::o;14874:323::-;;15037:67;15101:2;15096:3;15037:67;:::i;:::-;15030:74;;15134:27;15130:1;15125:3;15121:11;15114:48;15188:2;15183:3;15179:12;15172:19;;15020:177;;;:::o;15203:319::-;;15366:67;15430:2;15425:3;15366:67;:::i;:::-;15359:74;;15463:23;15459:1;15454:3;15450:11;15443:44;15513:2;15508:3;15504:12;15497:19;;15349:173;;;:::o;15528:376::-;;15691:67;15755:2;15750:3;15691:67;:::i;:::-;15684:74;;15788:34;15784:1;15779:3;15775:11;15768:55;15854:14;15849:2;15844:3;15840:12;15833:36;15895:2;15890:3;15886:12;15879:19;;15674:230;;;:::o;15910:314::-;;16073:67;16137:2;16132:3;16073:67;:::i;:::-;16066:74;;16170:18;16166:1;16161:3;16157:11;16150:39;16215:2;16210:3;16206:12;16199:19;;16056:168;;;:::o;16230:388::-;;16393:67;16457:2;16452:3;16393:67;:::i;:::-;16386:74;;16490:34;16486:1;16481:3;16477:11;16470:55;16556:26;16551:2;16546:3;16542:12;16535:48;16609:2;16604:3;16600:12;16593:19;;16376:242;;;:::o;16624:328::-;;16787:67;16851:2;16846:3;16787:67;:::i;:::-;16780:74;;16884:32;16880:1;16875:3;16871:11;16864:53;16943:2;16938:3;16934:12;16927:19;;16770:182;;;:::o;16958:374::-;;17121:67;17185:2;17180:3;17121:67;:::i;:::-;17114:74;;17218:34;17214:1;17209:3;17205:11;17198:55;17284:12;17279:2;17274:3;17270:12;17263:34;17323:2;17318:3;17314:12;17307:19;;17104:228;;;:::o;17338:373::-;;17501:67;17565:2;17560:3;17501:67;:::i;:::-;17494:74;;17598:34;17594:1;17589:3;17585:11;17578:55;17664:11;17659:2;17654:3;17650:12;17643:33;17702:2;17697:3;17693:12;17686:19;;17484:227;;;:::o;17717:318::-;;17880:67;17944:2;17939:3;17880:67;:::i;:::-;17873:74;;17977:22;17973:1;17968:3;17964:11;17957:43;18026:2;18021:3;18017:12;18010:19;;17863:172;;;:::o;18041:312::-;;18204:67;18268:2;18263:3;18204:67;:::i;:::-;18197:74;;18301:16;18297:1;18292:3;18288:11;18281:37;18344:2;18339:3;18335:12;18328:19;;18187:166;;;:::o;18359:324::-;;18522:67;18586:2;18581:3;18522:67;:::i;:::-;18515:74;;18619:28;18615:1;18610:3;18606:11;18599:49;18674:2;18669:3;18665:12;18658:19;;18505:178;;;:::o;18689:330::-;;18852:67;18916:2;18911:3;18852:67;:::i;:::-;18845:74;;18949:34;18945:1;18940:3;18936:11;18929:55;19010:2;19005:3;19001:12;18994:19;;18835:184;;;:::o;19025:376::-;;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19285:34;19281:1;19276:3;19272:11;19265:55;19351:14;19346:2;19341:3;19337:12;19330:36;19392:2;19387:3;19383:12;19376:19;;19171:230;;;:::o;19407:313::-;;19570:67;19634:2;19629:3;19570:67;:::i;:::-;19563:74;;19667:17;19663:1;19658:3;19654:11;19647:38;19711:2;19706:3;19702:12;19695:19;;19553:167;;;:::o;19726:323::-;;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19986:27;19982:1;19977:3;19973:11;19966:48;20040:2;20035:3;20031:12;20024:19;;19872:177;;;:::o;20055:330::-;;20218:67;20282:2;20277:3;20218:67;:::i;:::-;20211:74;;20315:34;20311:1;20306:3;20302:11;20295:55;20376:2;20371:3;20367:12;20360:19;;20201:184;;;:::o;20391:373::-;;20554:67;20618:2;20613:3;20554:67;:::i;:::-;20547:74;;20651:34;20647:1;20642:3;20638:11;20631:55;20717:11;20712:2;20707:3;20703:12;20696:33;20755:2;20750:3;20746:12;20739:19;;20537:227;;;:::o;20770:379::-;;20933:67;20997:2;20992:3;20933:67;:::i;:::-;20926:74;;21030:34;21026:1;21021:3;21017:11;21010:55;21096:17;21091:2;21086:3;21082:12;21075:39;21140:2;21135:3;21131:12;21124:19;;20916:233;;;:::o;21155:324::-;;21318:67;21382:2;21377:3;21318:67;:::i;:::-;21311:74;;21415:28;21411:1;21406:3;21402:11;21395:49;21470:2;21465:3;21461:12;21454:19;;21301:178;;;:::o;21485:365::-;;21648:67;21712:2;21707:3;21648:67;:::i;:::-;21641:74;;21745:34;21741:1;21736:3;21732:11;21725:55;21811:3;21806:2;21801:3;21797:12;21790:25;21841:2;21836:3;21832:12;21825:19;;21631:219;;;:::o;21856:381::-;;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22116:34;22112:1;22107:3;22103:11;22096:55;22182:19;22177:2;22172:3;22168:12;22161:41;22228:2;22223:3;22219:12;22212:19;;22002:235;;;:::o;22243:311::-;;22406:67;22470:2;22465:3;22406:67;:::i;:::-;22399:74;;22503:15;22499:1;22494:3;22490:11;22483:36;22545:2;22540:3;22536:12;22529:19;;22389:165;;;:::o;22560:334::-;;22741:84;22823:1;22818:3;22741:84;:::i;:::-;22734:91;;22855:4;22851:1;22846:3;22842:11;22835:25;22886:1;22881:3;22877:11;22870:18;;22724:170;;;:::o;22900:330::-;;23063:67;23127:2;23122:3;23063:67;:::i;:::-;23056:74;;23160:34;23156:1;23151:3;23147:11;23140:55;23221:2;23216:3;23212:12;23205:19;;23046:184;;;:::o;23236:311::-;;23399:67;23463:2;23458:3;23399:67;:::i;:::-;23392:74;;23496:15;23492:1;23487:3;23483:11;23476:36;23538:2;23533:3;23529:12;23522:19;;23382:165;;;:::o;23553:316::-;;23716:67;23780:2;23775:3;23716:67;:::i;:::-;23709:74;;23813:20;23809:1;23804:3;23800:11;23793:41;23860:2;23855:3;23851:12;23844:19;;23699:170;;;:::o;23875:323::-;;24038:67;24102:2;24097:3;24038:67;:::i;:::-;24031:74;;24135:27;24131:1;24126:3;24122:11;24115:48;24189:2;24184:3;24180:12;24173:19;;24021:177;;;:::o;24204:314::-;;24367:67;24431:2;24426:3;24367:67;:::i;:::-;24360:74;;24464:18;24460:1;24455:3;24451:11;24444:39;24509:2;24504:3;24500:12;24493:19;;24350:168;;;:::o;24524:118::-;24611:24;24629:5;24611:24;:::i;:::-;24606:3;24599:37;24589:53;;:::o;24648:429::-;;24847:92;24935:3;24926:6;24847:92;:::i;:::-;24840:99;;24956:95;25047:3;25038:6;24956:95;:::i;:::-;24949:102;;25068:3;25061:10;;24829:248;;;;;:::o;25083:541::-;;25338:148;25482:3;25338:148;:::i;:::-;25331:155;;25503:95;25594:3;25585:6;25503:95;:::i;:::-;25496:102;;25615:3;25608:10;;25320:304;;;;:::o;25630:541::-;;25885:148;26029:3;25885:148;:::i;:::-;25878:155;;26050:95;26141:3;26132:6;26050:95;:::i;:::-;26043:102;;26162:3;26155:10;;25867:304;;;;:::o;26177:541::-;;26432:148;26576:3;26432:148;:::i;:::-;26425:155;;26597:95;26688:3;26679:6;26597:95;:::i;:::-;26590:102;;26709:3;26702:10;;26414:304;;;;:::o;26724:222::-;;26855:2;26844:9;26840:18;26832:26;;26868:71;26936:1;26925:9;26921:17;26912:6;26868:71;:::i;:::-;26822:124;;;;:::o;26952:640::-;;27185:3;27174:9;27170:19;27162:27;;27199:71;27267:1;27256:9;27252:17;27243:6;27199:71;:::i;:::-;27280:72;27348:2;27337:9;27333:18;27324:6;27280:72;:::i;:::-;27362;27430:2;27419:9;27415:18;27406:6;27362:72;:::i;:::-;27481:9;27475:4;27471:20;27466:2;27455:9;27451:18;27444:48;27509:76;27580:4;27571:6;27509:76;:::i;:::-;27501:84;;27152:440;;;;;;;:::o;27598:210::-;;27723:2;27712:9;27708:18;27700:26;;27736:65;27798:1;27787:9;27783:17;27774:6;27736:65;:::i;:::-;27690:118;;;;:::o;27814:313::-;;27965:2;27954:9;27950:18;27942:26;;28014:9;28008:4;28004:20;28000:1;27989:9;27985:17;27978:47;28042:78;28115:4;28106:6;28042:78;:::i;:::-;28034:86;;27932:195;;;;:::o;28133:419::-;;28337:2;28326:9;28322:18;28314:26;;28386:9;28380:4;28376:20;28372:1;28361:9;28357:17;28350:47;28414:131;28540:4;28414:131;:::i;:::-;28406:139;;28304:248;;;:::o;28558:419::-;;28762:2;28751:9;28747:18;28739:26;;28811:9;28805:4;28801:20;28797:1;28786:9;28782:17;28775:47;28839:131;28965:4;28839:131;:::i;:::-;28831:139;;28729:248;;;:::o;28983:419::-;;29187:2;29176:9;29172:18;29164:26;;29236:9;29230:4;29226:20;29222:1;29211:9;29207:17;29200:47;29264:131;29390:4;29264:131;:::i;:::-;29256:139;;29154:248;;;:::o;29408:419::-;;29612:2;29601:9;29597:18;29589:26;;29661:9;29655:4;29651:20;29647:1;29636:9;29632:17;29625:47;29689:131;29815:4;29689:131;:::i;:::-;29681:139;;29579:248;;;:::o;29833:419::-;;30037:2;30026:9;30022:18;30014:26;;30086:9;30080:4;30076:20;30072:1;30061:9;30057:17;30050:47;30114:131;30240:4;30114:131;:::i;:::-;30106:139;;30004:248;;;:::o;30258:419::-;;30462:2;30451:9;30447:18;30439:26;;30511:9;30505:4;30501:20;30497:1;30486:9;30482:17;30475:47;30539:131;30665:4;30539:131;:::i;:::-;30531:139;;30429:248;;;:::o;30683:419::-;;30887:2;30876:9;30872:18;30864:26;;30936:9;30930:4;30926:20;30922:1;30911:9;30907:17;30900:47;30964:131;31090:4;30964:131;:::i;:::-;30956:139;;30854:248;;;:::o;31108:419::-;;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31279:248;;;:::o;31533:419::-;;31737:2;31726:9;31722:18;31714:26;;31786:9;31780:4;31776:20;31772:1;31761:9;31757:17;31750:47;31814:131;31940:4;31814:131;:::i;:::-;31806:139;;31704:248;;;:::o;31958:419::-;;32162:2;32151:9;32147:18;32139:26;;32211:9;32205:4;32201:20;32197:1;32186:9;32182:17;32175:47;32239:131;32365:4;32239:131;:::i;:::-;32231:139;;32129:248;;;:::o;32383:419::-;;32587:2;32576:9;32572:18;32564:26;;32636:9;32630:4;32626:20;32622:1;32611:9;32607:17;32600:47;32664:131;32790:4;32664:131;:::i;:::-;32656:139;;32554:248;;;:::o;32808:419::-;;33012:2;33001:9;32997:18;32989:26;;33061:9;33055:4;33051:20;33047:1;33036:9;33032:17;33025:47;33089:131;33215:4;33089:131;:::i;:::-;33081:139;;32979:248;;;:::o;33233:419::-;;33437:2;33426:9;33422:18;33414:26;;33486:9;33480:4;33476:20;33472:1;33461:9;33457:17;33450:47;33514:131;33640:4;33514:131;:::i;:::-;33506:139;;33404:248;;;:::o;33658:419::-;;33862:2;33851:9;33847:18;33839:26;;33911:9;33905:4;33901:20;33897:1;33886:9;33882:17;33875:47;33939:131;34065:4;33939:131;:::i;:::-;33931:139;;33829:248;;;:::o;34083:419::-;;34287:2;34276:9;34272:18;34264:26;;34336:9;34330:4;34326:20;34322:1;34311:9;34307:17;34300:47;34364:131;34490:4;34364:131;:::i;:::-;34356:139;;34254:248;;;:::o;34508:419::-;;34712:2;34701:9;34697:18;34689:26;;34761:9;34755:4;34751:20;34747:1;34736:9;34732:17;34725:47;34789:131;34915:4;34789:131;:::i;:::-;34781:139;;34679:248;;;:::o;34933:419::-;;35137:2;35126:9;35122:18;35114:26;;35186:9;35180:4;35176:20;35172:1;35161:9;35157:17;35150:47;35214:131;35340:4;35214:131;:::i;:::-;35206:139;;35104:248;;;:::o;35358:419::-;;35562:2;35551:9;35547:18;35539:26;;35611:9;35605:4;35601:20;35597:1;35586:9;35582:17;35575:47;35639:131;35765:4;35639:131;:::i;:::-;35631:139;;35529:248;;;:::o;35783:419::-;;35987:2;35976:9;35972:18;35964:26;;36036:9;36030:4;36026:20;36022:1;36011:9;36007:17;36000:47;36064:131;36190:4;36064:131;:::i;:::-;36056:139;;35954:248;;;:::o;36208:419::-;;36412:2;36401:9;36397:18;36389:26;;36461:9;36455:4;36451:20;36447:1;36436:9;36432:17;36425:47;36489:131;36615:4;36489:131;:::i;:::-;36481:139;;36379:248;;;:::o;36633:419::-;;36837:2;36826:9;36822:18;36814:26;;36886:9;36880:4;36876:20;36872:1;36861:9;36857:17;36850:47;36914:131;37040:4;36914:131;:::i;:::-;36906:139;;36804:248;;;:::o;37058:419::-;;37262:2;37251:9;37247:18;37239:26;;37311:9;37305:4;37301:20;37297:1;37286:9;37282:17;37275:47;37339:131;37465:4;37339:131;:::i;:::-;37331:139;;37229:248;;;:::o;37483:419::-;;37687:2;37676:9;37672:18;37664:26;;37736:9;37730:4;37726:20;37722:1;37711:9;37707:17;37700:47;37764:131;37890:4;37764:131;:::i;:::-;37756:139;;37654:248;;;:::o;37908:419::-;;38112:2;38101:9;38097:18;38089:26;;38161:9;38155:4;38151:20;38147:1;38136:9;38132:17;38125:47;38189:131;38315:4;38189:131;:::i;:::-;38181:139;;38079:248;;;:::o;38333:419::-;;38537:2;38526:9;38522:18;38514:26;;38586:9;38580:4;38576:20;38572:1;38561:9;38557:17;38550:47;38614:131;38740:4;38614:131;:::i;:::-;38606:139;;38504:248;;;:::o;38758:419::-;;38962:2;38951:9;38947:18;38939:26;;39011:9;39005:4;39001:20;38997:1;38986:9;38982:17;38975:47;39039:131;39165:4;39039:131;:::i;:::-;39031:139;;38929:248;;;:::o;39183:419::-;;39387:2;39376:9;39372:18;39364:26;;39436:9;39430:4;39426:20;39422:1;39411:9;39407:17;39400:47;39464:131;39590:4;39464:131;:::i;:::-;39456:139;;39354:248;;;:::o;39608:419::-;;39812:2;39801:9;39797:18;39789:26;;39861:9;39855:4;39851:20;39847:1;39836:9;39832:17;39825:47;39889:131;40015:4;39889:131;:::i;:::-;39881:139;;39779:248;;;:::o;40033:419::-;;40237:2;40226:9;40222:18;40214:26;;40286:9;40280:4;40276:20;40272:1;40261:9;40257:17;40250:47;40314:131;40440:4;40314:131;:::i;:::-;40306:139;;40204:248;;;:::o;40458:419::-;;40662:2;40651:9;40647:18;40639:26;;40711:9;40705:4;40701:20;40697:1;40686:9;40682:17;40675:47;40739:131;40865:4;40739:131;:::i;:::-;40731:139;;40629:248;;;:::o;40883:419::-;;41087:2;41076:9;41072:18;41064:26;;41136:9;41130:4;41126:20;41122:1;41111:9;41107:17;41100:47;41164:131;41290:4;41164:131;:::i;:::-;41156:139;;41054:248;;;:::o;41308:419::-;;41512:2;41501:9;41497:18;41489:26;;41561:9;41555:4;41551:20;41547:1;41536:9;41532:17;41525:47;41589:131;41715:4;41589:131;:::i;:::-;41581:139;;41479:248;;;:::o;41733:419::-;;41937:2;41926:9;41922:18;41914:26;;41986:9;41980:4;41976:20;41972:1;41961:9;41957:17;41950:47;42014:131;42140:4;42014:131;:::i;:::-;42006:139;;41904:248;;;:::o;42158:419::-;;42362:2;42351:9;42347:18;42339:26;;42411:9;42405:4;42401:20;42397:1;42386:9;42382:17;42375:47;42439:131;42565:4;42439:131;:::i;:::-;42431:139;;42329:248;;;:::o;42583:419::-;;42787:2;42776:9;42772:18;42764:26;;42836:9;42830:4;42826:20;42822:1;42811:9;42807:17;42800:47;42864:131;42990:4;42864:131;:::i;:::-;42856:139;;42754:248;;;:::o;43008:419::-;;43212:2;43201:9;43197:18;43189:26;;43261:9;43255:4;43251:20;43247:1;43236:9;43232:17;43225:47;43289:131;43415:4;43289:131;:::i;:::-;43281:139;;43179:248;;;:::o;43433:222::-;;43564:2;43553:9;43549:18;43541:26;;43577:71;43645:1;43634:9;43630:17;43621:6;43577:71;:::i;:::-;43531:124;;;;:::o;43661:283::-;;43727:2;43721:9;43711:19;;43769:4;43761:6;43757:17;43876:6;43864:10;43861:22;43840:18;43828:10;43825:34;43822:62;43819:2;;;43887:18;;:::i;:::-;43819:2;43927:10;43923:2;43916:22;43701:243;;;;:::o;43950:311::-;;44117:18;44109:6;44106:30;44103:2;;;44139:18;;:::i;:::-;44103:2;44189:4;44181:6;44177:17;44169:25;;44249:4;44243;44239:15;44231:23;;44032:229;;;:::o;44267:331::-;;44418:18;44410:6;44407:30;44404:2;;;44440:18;;:::i;:::-;44404:2;44525:4;44521:9;44514:4;44506:6;44502:17;44498:33;44490:41;;44586:4;44580;44576:15;44568:23;;44333:265;;;:::o;44604:141::-;;44676:3;44668:11;;44699:3;44696:1;44689:14;44733:4;44730:1;44720:18;44712:26;;44658:87;;;:::o;44751:98::-;;44836:5;44830:12;44820:22;;44809:40;;;:::o;44855:99::-;;44941:5;44935:12;44925:22;;44914:40;;;:::o;44960:168::-;;45077:6;45072:3;45065:19;45117:4;45112:3;45108:14;45093:29;;45055:73;;;;:::o;45134:169::-;;45252:6;45247:3;45240:19;45292:4;45287:3;45283:14;45268:29;;45230:73;;;;:::o;45309:148::-;;45448:3;45433:18;;45423:34;;;;:::o;45463:305::-;;45522:20;45540:1;45522:20;:::i;:::-;45517:25;;45556:20;45574:1;45556:20;:::i;:::-;45551:25;;45710:1;45642:66;45638:74;45635:1;45632:81;45629:2;;;45716:18;;:::i;:::-;45629:2;45760:1;45757;45753:9;45746:16;;45507:261;;;;:::o;45774:185::-;;45831:20;45849:1;45831:20;:::i;:::-;45826:25;;45865:20;45883:1;45865:20;:::i;:::-;45860:25;;45904:1;45894:2;;45909:18;;:::i;:::-;45894:2;45951:1;45948;45944:9;45939:14;;45816:143;;;;:::o;45965:348::-;;46028:20;46046:1;46028:20;:::i;:::-;46023:25;;46062:20;46080:1;46062:20;:::i;:::-;46057:25;;46250:1;46182:66;46178:74;46175:1;46172:81;46167:1;46160:9;46153:17;46149:105;46146:2;;;46257:18;;:::i;:::-;46146:2;46305:1;46302;46298:9;46287:20;;46013:300;;;;:::o;46319:191::-;;46379:20;46397:1;46379:20;:::i;:::-;46374:25;;46413:20;46431:1;46413:20;:::i;:::-;46408:25;;46452:1;46449;46446:8;46443:2;;;46457:18;;:::i;:::-;46443:2;46502:1;46499;46495:9;46487:17;;46364:146;;;;:::o;46516:96::-;;46582:24;46600:5;46582:24;:::i;:::-;46571:35;;46561:51;;;:::o;46618:104::-;;46692:24;46710:5;46692:24;:::i;:::-;46681:35;;46671:51;;;:::o;46728:90::-;;46805:5;46798:13;46791:21;46780:32;;46770:48;;;:::o;46824:149::-;;46900:66;46893:5;46889:78;46878:89;;46868:105;;;:::o;46979:126::-;;47056:42;47049:5;47045:54;47034:65;;47024:81;;;:::o;47111:77::-;;47177:5;47166:16;;47156:32;;;:::o;47194:86::-;;47269:4;47262:5;47258:16;47247:27;;47237:43;;;:::o;47286:154::-;47370:6;47365:3;47360;47347:30;47432:1;47423:6;47418:3;47414:16;47407:27;47337:103;;;:::o;47446:307::-;47514:1;47524:113;47538:6;47535:1;47532:13;47524:113;;;47623:1;47618:3;47614:11;47608:18;47604:1;47599:3;47595:11;47588:39;47560:2;47557:1;47553:10;47548:15;;47524:113;;;47655:6;47652:1;47649:13;47646:2;;;47735:1;47726:6;47721:3;47717:16;47710:27;47646:2;47495:258;;;;:::o;47759:171::-;;47821:24;47839:5;47821:24;:::i;:::-;47812:33;;47867:4;47860:5;47857:15;47854:2;;;47875:18;;:::i;:::-;47854:2;47922:1;47915:5;47911:13;47904:20;;47802:128;;;:::o;47936:320::-;;48017:1;48011:4;48007:12;47997:22;;48064:1;48058:4;48054:12;48085:18;48075:2;;48141:4;48133:6;48129:17;48119:27;;48075:2;48203;48195:6;48192:14;48172:18;48169:38;48166:2;;;48222:18;;:::i;:::-;48166:2;47987:269;;;;:::o;48262:233::-;;48324:24;48342:5;48324:24;:::i;:::-;48315:33;;48370:66;48363:5;48360:77;48357:2;;;48440:18;;:::i;:::-;48357:2;48487:1;48480:5;48476:13;48469:20;;48305:190;;;:::o;48501:167::-;;48561:22;48577:5;48561:22;:::i;:::-;48552:31;;48605:4;48598:5;48595:15;48592:2;;;48613:18;;:::i;:::-;48592:2;48660:1;48653:5;48649:13;48642:20;;48542:126;;;:::o;48674:176::-;;48723:20;48741:1;48723:20;:::i;:::-;48718:25;;48757:20;48775:1;48757:20;:::i;:::-;48752:25;;48796:1;48786:2;;48801:18;;:::i;:::-;48786:2;48842:1;48839;48835:9;48830:14;;48708:142;;;;:::o;48856:180::-;48904:77;48901:1;48894:88;49001:4;48998:1;48991:15;49025:4;49022:1;49015:15;49042:180;49090:77;49087:1;49080:88;49187:4;49184:1;49177:15;49211:4;49208:1;49201:15;49228:180;49276:77;49273:1;49266:88;49373:4;49370:1;49363:15;49397:4;49394:1;49387:15;49414:180;49462:77;49459:1;49452:88;49559:4;49556:1;49549:15;49583:4;49580:1;49573:15;49600:102;;49692:2;49688:7;49683:2;49676:5;49672:14;49668:28;49658:38;;49648:54;;;:::o;49708:122::-;49781:24;49799:5;49781:24;:::i;:::-;49774:5;49771:35;49761:2;;49820:1;49817;49810:12;49761:2;49751:79;:::o;49836:138::-;49917:32;49943:5;49917:32;:::i;:::-;49910:5;49907:43;49897:2;;49964:1;49961;49954:12;49897:2;49887:87;:::o;49980:116::-;50050:21;50065:5;50050:21;:::i;:::-;50043:5;50040:32;50030:2;;50086:1;50083;50076:12;50030:2;50020:76;:::o;50102:120::-;50174:23;50191:5;50174:23;:::i;:::-;50167:5;50164:34;50154:2;;50212:1;50209;50202:12;50154:2;50144:78;:::o;50228:122::-;50301:24;50319:5;50301:24;:::i;:::-;50294:5;50291:35;50281:2;;50340:1;50337;50330:12;50281:2;50271:79;:::o
Swarm Source
ipfs://269e0c9286bd310987f0acb996ca83ea68c50f4f154d834fa647d02ae5e61c8e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.